diff --git a/features/banspammer.py b/features/banspammer.py
index a6be311..fd28045 100644
--- a/features/banspammer.py
+++ b/features/banspammer.py
@@ -8,7 +8,6 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import logging
 import json
 import time
 
@@ -17,10 +16,10 @@
 from framework import framework_helpers
 from framework import permissions
 from framework import jsonfeed
-from framework import servlet
 from framework import urls
 
-class BanSpammer(servlet.Servlet):
+
+class BanSpammer(flaskservlet.FlaskServlet):
   """Ban a user and mark their content as spam"""
 
   def AssertBasePermission(self, mr):
@@ -57,12 +56,11 @@
         mr, mr.viewed_user_auth.user_view.profile_url, include_project=False,
         saved=1, ts=int(time.time()))
 
-  # def PostBanSpammerPage(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostBanSpammerPage(self, **kwargs):
+    return self.handler(**kwargs)
 
 
-# when convert to flask switch jsonfeed.FlaskInternalTask
-class BanSpammerTask(jsonfeed.InternalTask):
+class BanSpammerTask(jsonfeed.FlaskInternalTask):
   """This task will update all of the comments and issues created by the
      target user with is_spam=True, and also add a manual verdict attached
      to the user who originated the ban request. This is a potentially long
@@ -96,18 +94,10 @@
             self.services.issue, self.services.user, comment.id,
             reporter_id, is_spammer)
 
-    # remove the self.response.body when convert to flask
-    self.response.body = json.dumps({
-      'comments': len(comments),
-      'issues': len(issues),
+    return json.dumps({
+        'comments': len(comments),
+        'issues': len(issues),
     })
-  # return json.dumps({
-  #     'comments': len(comments),
-  #     'issues': len(issues),
-  #   })
 
-  # def GetBanSpammer(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostBanSpammer(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostBanSpammer(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/features/dateaction.py b/features/dateaction.py
index 169f582..0cb3987 100644
--- a/features/dateaction.py
+++ b/features/dateaction.py
@@ -40,8 +40,7 @@
 TEMPLATE_PATH = framework_constants.TEMPLATE_PATH
 
 
-# TODO: change to FlaskInternalTask when convert to Flask
-class DateActionCron(jsonfeed.InternalTask):
+class DateActionCron(jsonfeed.FlaskInternalTask):
   """Find and process issues with date-type values that arrived today."""
 
   def HandleRequest(self, mr):
@@ -86,11 +85,8 @@
         urls.ISSUE_DATE_ACTION_TASK + '.do', params)
     cloud_tasks_helpers.create_task(task)
 
-  # def GetDateActionCron(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostDateActionCron(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetDateActionCron(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 def _GetTimestampRange(now):
@@ -234,8 +230,5 @@
     date_str = timestr.TimestampToDateWidgetStr(timestamp)
     return 'The %s date has arrived: %s' % (field.field_name, date_str)
 
-  # def GetIssueDateActionTask(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostIssueDateActionTask(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostIssueDateActionTask(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/features/filterrules.py b/features/filterrules.py
index 724d7e2..119c1b3 100644
--- a/features/filterrules.py
+++ b/features/filterrules.py
@@ -15,8 +15,7 @@
 from tracker import tracker_constants
 
 
-# TODO: change to FlaskInternalTask when convert to flask
-class RecomputeDerivedFieldsTask(jsonfeed.InternalTask):
+class RecomputeDerivedFieldsTask(jsonfeed.FlaskInternalTask):
   """JSON servlet that recomputes derived fields on a batch of issues."""
 
   def HandleRequest(self, mr):
@@ -36,15 +35,11 @@
         'success': True,
         }
 
-  # def GetRecomputeDerivedFieldsTask(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostRecomputeDerivedFieldsTask(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostRecomputeDerivedFieldsTask(self, **kwargs):
+    return self.handler(**kwargs)
 
 
-# TODO: change to FlaskInternalTask when convert to Flask
-class ReindexQueueCron(jsonfeed.InternalTask):
+class ReindexQueueCron(jsonfeed.FlaskInternalTask):
   """JSON servlet that reindexes some issues each minute, as needed."""
 
   def HandleRequest(self, mr):
@@ -57,8 +52,5 @@
         'num_reindexed': num_reindexed,
         }
 
-  # def GetReindexQueueCron(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostReindexQueueCron(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetReindexQueueCron(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/features/hotlistcreate.py b/features/hotlistcreate.py
index fa8946f..6913c19 100644
--- a/features/hotlistcreate.py
+++ b/features/hotlistcreate.py
@@ -30,7 +30,7 @@
 _MSG_INVALID_MEMBERS_INPUT = 'One or more editor emails is not valid.'
 
 
-class HotlistCreate(servlet.Servlet):
+class HotlistCreate(flaskservlet.FlaskServlet):
   """HotlistCreate shows a simple page with a form to create a hotlist."""
 
   _PAGE_TEMPLATE = 'features/hotlist-create-page.ezt'
@@ -114,8 +114,8 @@
               mr.cnxn, hotlist, self.services.user),
           include_project=False)
 
-  # def GetCreateHotlist(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetCreateHotlist(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostCreateHotlist(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostCreateHotlist(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/features/inboundemail.py b/features/inboundemail.py
index d9c36d3..d9b2c37 100644
--- a/features/inboundemail.py
+++ b/features/inboundemail.py
@@ -13,13 +13,18 @@
 import os
 import re
 import time
+import six
 from six.moves import urllib
 
+import flask
 import ezt
 
-from google.appengine.ext.webapp.mail_handlers import BounceNotificationHandler
+from google.appengine.api import mail
+if six.PY2:
+  from google.appengine.ext.webapp.mail_handlers import BounceNotification
+else:
+  from google.appengine.api.mail import BounceNotification
 
-import webapp2
 
 import settings
 from features import alert2issue
@@ -50,36 +55,37 @@
     }
 
 
-class InboundEmail(webapp2.RequestHandler):
+class InboundEmail(object):
   """Servlet to handle inbound email messages."""
 
-  def __init__(self, request, response, services=None, *args, **kwargs):
-    super(InboundEmail, self).__init__(request, response, *args, **kwargs)
-    self.services = services or self.app.config.get('services')
+  def __init__(self, services=None):
+    self.services = services or flask.current_app.config['services']
     self._templates = {}
+    self.request = flask.request
     for name, template_path in MSG_TEMPLATES.items():
       self._templates[name] = template_helpers.MonorailTemplate(
           TEMPLATE_PATH_BASE + template_path,
           compress_whitespace=False, base_format=ezt.FORMAT_RAW)
 
-  # def HandleInboundEmail(self, project_addr=None):
-  #   if self.request.method == 'POST':
-  #     self.post(project_addr)
-  #   elif self.request.method == 'GET':
-  #     self.get(project_addr)
+  def HandleInboundEmail(self, project_addr=None):
+    if self.request.method == 'POST':
+      self.post(project_addr)
+    elif self.request.method == 'GET':
+      self.get(project_addr)
+    return ''
 
   def get(self, project_addr=None):
     logging.info('\n\n\nGET for InboundEmail and project_addr is %r',
                  project_addr)
     self.Handler(
-        mail.InboundEmailMessage(self.request.body),
+        mail.InboundEmailMessage(self.request.get_data()),
         urllib.parse.unquote(project_addr))
 
   def post(self, project_addr=None):
     logging.info('\n\n\nPOST for InboundEmail and project_addr is %r',
                  project_addr)
     self.Handler(
-        mail.InboundEmailMessage(self.request.body),
+        mail.InboundEmailMessage(self.request.get_data()),
         urllib.parse.unquote(project_addr))
 
   def Handler(self, inbound_email_message, project_addr):
@@ -293,29 +299,36 @@
 BAD_EQ_RE = re.compile('=3D')
 
 
-class BouncedEmail(BounceNotificationHandler):
+class BouncedEmail(object):
   """Handler to notice when email to given user is bouncing."""
 
-  # For docs on AppEngine's bounce email handling, see:
-  # https://cloud.google.com/appengine/docs/python/mail/bounce
-  # Source code is in file:
-  # google_appengine/google/appengine/ext/webapp/mail_handlers.py
+  # For docs on AppEngine's bounce email see:
+  # https://cloud.google.com/appengine/docs/standard/python3/reference
+  # /services/bundled/google/appengine/api/mail/BounceNotification
 
-  def post(self):
+  def __init__(self, services=None):
+    self.services = services or flask.current_app.config['services']
+
+  def postBouncedEmail(self):
     try:
-      super(BouncedEmail, self).post()
+      # Context: https://crbug.com/monorail/11083
+      bounce_message = BounceNotification(flask.request.form)
+      self.receive(bounce_message)
     except AttributeError:
-      # Work-around for
-      # https://code.google.com/p/googleappengine/issues/detail?id=13512
-      raw_message = self.request.POST.get('raw-message')
+      # Context: https://crbug.com/monorail/2105
+      raw_message = flask.request.form.get('raw-message')
       logging.info('raw_message %r', raw_message)
       raw_message = BAD_WRAP_RE.sub('', raw_message)
       raw_message = BAD_EQ_RE.sub('=', raw_message)
       logging.info('fixed raw_message %r', raw_message)
       mime_message = email.message_from_string(raw_message)
       logging.info('get_payload gives %r', mime_message.get_payload())
-      self.request.POST['raw-message'] = mime_message
-      super(BouncedEmail, self).post()  # Retry with mime_message
+      new_form_dict = flask.request.form.copy()
+      new_form_dict['raw-message'] = mime_message
+      # Retry with mime_message
+      bounce_message = BounceNotification(new_form_dict)
+      self.receive(bounce_message)
+    return ''
 
 
   def receive(self, bounce_message):
@@ -335,8 +348,7 @@
         logging.info(
             'bounce message original headers: %r', original_message.items())
 
-    app_config = webapp2.WSGIApplication.app.config
-    services = app_config['services']
+    services = self.services
     cnxn = sql.MonorailConnection()
 
     try:
@@ -346,6 +358,6 @@
       services.user.UpdateUser(cnxn, user_id, user)
     except exceptions.NoSuchUserException:
       logging.info('User %r not found, ignoring', email_addr)
-      logging.info('Received bounce post ... [%s]', self.request)
+      logging.info('Received bounce post ... [%s]', flask.request)
       logging.info('Bounce original: %s', bounce_message.original)
       logging.info('Bounce notification: %s', bounce_message.notification)
diff --git a/features/notify.py b/features/notify.py
index 425041e..230cbf5 100644
--- a/features/notify.py
+++ b/features/notify.py
@@ -219,11 +219,8 @@
 
     return email_tasks
 
-  # def GetNotifyIssueChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostNotifyIssueChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostNotifyIssueChangeTask(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 class NotifyBlockingChangeTask(notify_helpers.NotifyTaskBase):
@@ -356,11 +353,8 @@
 
     return one_issue_email_tasks
 
-  # def GetNotifyBlockingChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostNotifyBlockingChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostNotifyBlockingChangeTask(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 class NotifyBulkChangeTask(notify_helpers.NotifyTaskBase):
@@ -724,11 +718,8 @@
 
     return subject, body
 
-  # def GetNotifyBulkChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostNotifyBulkChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostNotifyBulkChangeTask(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 # For now, this class will not be used to send approval comment notifications
@@ -919,11 +910,8 @@
 
     return list(set(recipient_ids))
 
-  # def GetNotifyApprovalChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostNotifyApprovalChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostNotifyApprovalChangeTask(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 class NotifyRulesDeletedTask(notify_helpers.NotifyTaskBase):
@@ -991,15 +979,11 @@
 
     return email_tasks
 
-  # def GetNotifyRulesDeletedTask(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostNotifyRulesDeletedTask(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostNotifyRulesDeletedTask(self, **kwargs):
+    return self.handler(**kwargs)
 
 
-# TODO: change to FlaskInternalTask when convert to flask
-class OutboundEmailTask(jsonfeed.InternalTask):
+class OutboundEmailTask(jsonfeed.FlaskInternalTask):
   """JSON servlet that sends one email.
 
   Handles tasks enqueued from notify_helpers._EnqueueOutboundEmail.
@@ -1018,9 +1002,9 @@
     # To avoid urlencoding the email body, the most salient parameters to this
     # method are passed as a json-encoded POST body.
     try:
-      email_params = json.loads(self.request.body)
+      email_params = json.loads(self.request.get_data(as_text=True))
     except ValueError:
-      logging.error(self.request.body)
+      logging.error(self.request.get_data(as_text=True))
       raise
     # If running on a GAFYD domain, you must define an app alias on the
     # Application Settings admin web page.
@@ -1085,8 +1069,5 @@
         sender=sender, to=to, subject=subject, body=body, html_body=html_body,
         reply_to=reply_to, references=references)
 
-  # def GetOutboundEmailTask(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostOutboundEmailTask(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostOutboundEmailTask(self, **kwargs):
+    return self.handler(**kwargs)
diff --git a/features/notify_helpers.py b/features/notify_helpers.py
index 5f77307..f22ed0e 100644
--- a/features/notify_helpers.py
+++ b/features/notify_helpers.py
@@ -123,8 +123,7 @@
   return notified
 
 
-# TODO: change to FlaskInternalTask when convert to flask
-class NotifyTaskBase(jsonfeed.InternalTask):
+class NotifyTaskBase(jsonfeed.FlaskInternalTask):
   """Abstract base class for notification task handler."""
 
   _EMAIL_TEMPLATE = None  # Subclasses must override this.
diff --git a/features/pubsub.py b/features/pubsub.py
index 86bd3ba..c7c28d9 100644
--- a/features/pubsub.py
+++ b/features/pubsub.py
@@ -26,8 +26,7 @@
 from framework import jsonfeed
 
 
-# TODO: change to FlaskInternalTask when convert to flask
-class PublishPubsubIssueChangeTask(jsonfeed.InternalTask):
+class PublishPubsubIssueChangeTask(jsonfeed.FlaskInternalTask):
   """JSON servlet that pushes issue update messages onto a pub/sub topic."""
 
   def HandleRequest(self, mr):
@@ -71,11 +70,8 @@
 
     return {}
 
-  # def GetPublishPubsubIssueChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
-
-  # def PostPublishPubsubIssueChangeTask(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostPublishPubsubIssueChangeTask(self, **kwargs):
+    return self.handler(**kwargs)
 
 
 def set_up_pubsub_api():
diff --git a/features/test/activities_test.py b/features/test/activities_test.py
index 4eae1ab..c17eb4b 100644
--- a/features/test/activities_test.py
+++ b/features/test/activities_test.py
@@ -10,7 +10,10 @@
 
 import unittest
 
-import mox
+try:
+  from mox3 import mox
+except ImportError:
+  import mox
 
 from features import activities
 from framework import framework_views
diff --git a/features/test/alert2issue_test.py b/features/test/alert2issue_test.py
index 3b1b6d1..2046b5b 100644
--- a/features/test/alert2issue_test.py
+++ b/features/test/alert2issue_test.py
@@ -11,7 +11,10 @@
 import email
 import unittest
 from mock import patch
-import mox
+try:
+  from mox3 import mox
+except ImportError:
+  import mox
 from parameterized import parameterized
 
 from features import alert2issue
diff --git a/features/test/banspammer_test.py b/features/test/banspammer_test.py
index edf7aba..e12c506 100644
--- a/features/test/banspammer_test.py
+++ b/features/test/banspammer_test.py
@@ -10,10 +10,8 @@
 
 import json
 import mock
-import os
 import unittest
 from six.moves import urllib
-import webapp2
 
 import settings
 from features import banspammer
@@ -35,7 +33,7 @@
         project=fake.ProjectService(),
         spam=fake.SpamService(),
         user=fake.UserService())
-    self.servlet = banspammer.BanSpammer('req', 'res', services=self.services)
+    self.servlet = banspammer.BanSpammer(services=self.services)
 
   @mock.patch('framework.cloud_tasks_helpers._get_client')
   def testProcessFormData_noPermission(self, get_client_mock):
@@ -92,17 +90,15 @@
     self.services = service_manager.Services(
         issue=fake.IssueService(),
         spam=fake.SpamService())
-    self.res = webapp2.Response()
-    self.servlet = banspammer.BanSpammerTask('req', self.res,
-        services=self.services)
+    self.servlet = banspammer.BanSpammerTask(services=self.services)
 
   def testProcessFormData_okNoIssues(self):
     mr = testing_helpers.MakeMonorailRequest(
         path=urls.BAN_SPAMMER_TASK + '.do', method='POST',
         params={'spammer_id': 111, 'reporter_id': 222})
 
-    self.servlet.HandleRequest(mr)
-    self.assertEqual(self.res.body, json.dumps({'comments': 0, 'issues': 0}))
+    res = self.servlet.HandleRequest(mr)
+    self.assertEqual(res, json.dumps({'comments': 0, 'issues': 0}))
 
   def testProcessFormData_okSomeIssues(self):
     mr = testing_helpers.MakeMonorailRequest(
@@ -114,8 +110,8 @@
           1, i, 'issue_summary', 'New', 111, project_name='project-name')
       self.servlet.services.issue.TestAddIssue(issue)
 
-    self.servlet.HandleRequest(mr)
-    self.assertEqual(self.res.body, json.dumps({'comments': 0, 'issues': 10}))
+    res = self.servlet.HandleRequest(mr)
+    self.assertEqual(res, json.dumps({'comments': 0, 'issues': 10}))
 
   def testProcessFormData_okSomeCommentsAndIssues(self):
     mr = testing_helpers.MakeMonorailRequest(
@@ -137,5 +133,5 @@
         comment.user_id = 111
         comment.issue_id = issue.issue_id
         self.servlet.services.issue.TestAddComment(comment, issue.local_id)
-    self.servlet.HandleRequest(mr)
-    self.assertEqual(self.res.body, json.dumps({'comments': 50, 'issues': 10}))
+    res = self.servlet.HandleRequest(mr)
+    self.assertEqual(res, json.dumps({'comments': 50, 'issues': 10}))
diff --git a/features/test/dateaction_test.py b/features/test/dateaction_test.py
index 09e5c5c..8ca5bc3 100644
--- a/features/test/dateaction_test.py
+++ b/features/test/dateaction_test.py
@@ -36,8 +36,7 @@
     self.services = service_manager.Services(
         user=fake.UserService(),
         issue=fake.IssueService())
-    self.servlet = dateaction.DateActionCron(
-        'req', 'res', services=self.services)
+    self.servlet = dateaction.DateActionCron(services=self.services)
     self.TIMESTAMP_MIN = (
         NOW // framework_constants.SECS_PER_DAY *
         framework_constants.SECS_PER_DAY)
@@ -128,8 +127,7 @@
         project=fake.ProjectService(),
         config=fake.ConfigService(),
         issue_star=fake.IssueStarService())
-    self.servlet = dateaction.IssueDateActionTask(
-        'req', 'res', services=self.services)
+    self.servlet = dateaction.IssueDateActionTask(services=self.services)
 
     self.config = self.services.config.GetProjectConfig('cnxn', 789)
     self.config.field_defs = [
diff --git a/features/test/hotlistcreate_test.py b/features/test/hotlistcreate_test.py
index 8cf0012..e6cda4b 100644
--- a/features/test/hotlistcreate_test.py
+++ b/features/test/hotlistcreate_test.py
@@ -8,7 +8,10 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import mox
+try:
+  from mox3 import mox
+except ImportError:
+  import mox
 import unittest
 
 import settings
@@ -30,8 +33,7 @@
                                         user=fake.UserService(),
                                              issue=fake.IssueService(),
                                              features=fake.FeaturesService())
-    self.servlet = hotlistcreate.HotlistCreate('req', 'res',
-                                               services=self.services)
+    self.servlet = hotlistcreate.HotlistCreate(services=self.services)
     self.mox = mox.Mox()
 
   def tearDown(self):
diff --git a/features/test/hotlistdetails_test.py b/features/test/hotlistdetails_test.py
index 9a9e53f..561199c 100644
--- a/features/test/hotlistdetails_test.py
+++ b/features/test/hotlistdetails_test.py
@@ -9,7 +9,10 @@
 from __future__ import absolute_import
 
 import logging
-import mox
+try:
+  from mox3 import mox
+except ImportError:
+  import mox
 import unittest
 import mock
 
diff --git a/features/test/hotlistissues_test.py b/features/test/hotlistissues_test.py
index 49c3270..265c9d1 100644
--- a/features/test/hotlistissues_test.py
+++ b/features/test/hotlistissues_test.py
@@ -8,7 +8,10 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import mox
+try:
+  from mox3 import mox
+except ImportError:
+  import mox
 import mock
 import unittest
 import time
diff --git a/features/test/hotlistpeople_test.py b/features/test/hotlistpeople_test.py
index 74beec3..3ee7925 100644
--- a/features/test/hotlistpeople_test.py
+++ b/features/test/hotlistpeople_test.py
@@ -8,7 +8,10 @@
 from __future__ import division
 from __future__ import absolute_import
 
-import mox
+try:
+  from mox3 import mox
+except ImportError:
+  import mox
 import unittest
 import logging
 
diff --git a/features/test/inboundemail_test.py b/features/test/inboundemail_test.py
index 0eaa281..de05749 100644
--- a/features/test/inboundemail_test.py
+++ b/features/test/inboundemail_test.py
@@ -9,14 +9,14 @@
 from __future__ import absolute_import
 
 import unittest
-import webapp2
-from mock import patch
 
-import mox
+try:
+  from mox3 import mox
+except ImportError:
+  import mox
 import time
 
 from google.appengine.api import mail
-from google.appengine.ext.webapp.mail_handlers import BounceNotificationHandler
 
 import settings
 from businesslogic import work_env
@@ -58,8 +58,7 @@
     self.msg = testing_helpers.MakeMessage(
         testing_helpers.HEADER_LINES, 'awesome!')
 
-    request, _ = testing_helpers.GetRequestObjects()
-    self.inbound = inboundemail.InboundEmail(request, None, self.services)
+    self.inbound = inboundemail.InboundEmail(self.services)
     self.mox = mox.Mox()
 
   def tearDown(self):
@@ -348,10 +347,7 @@
         user=fake.UserService())
     self.user = self.services.user.TestAddUser('user@example.com', 111)
 
-    app = webapp2.WSGIApplication(config={'services': self.services})
-    app.set_globals(app=app)
-
-    self.servlet = inboundemail.BouncedEmail()
+    self.servlet = inboundemail.BouncedEmail(self.services)
     self.mox = mox.Mox()
 
   def tearDown(self):
@@ -369,8 +365,6 @@
 
   def testReceive_NoSuchUser(self):
     """When not found, log it and ignore without creating a user record."""
-    self.servlet.request = webapp2.Request.blank(
-        '/', POST={'raw-message': 'this is an email message'})
     bounce_message = testing_helpers.Blank(
         original={'to': 'nope@example.com'},
         notification='notification')
diff --git a/features/test/notify_test.py b/features/test/notify_test.py
index 9ddcce7..e73488d 100644
--- a/features/test/notify_test.py
+++ b/features/test/notify_test.py
@@ -11,7 +11,7 @@
 import json
 import mock
 import unittest
-import webapp2
+import flask
 
 from google.appengine.ext import testbed
 
@@ -63,7 +63,13 @@
     self.orig_sign_attachment_id = attachment_helpers.SignAttachmentID
     attachment_helpers.SignAttachmentID = (
         lambda aid: 'signed_%d' % aid)
-
+    self.servlet = notify.OutboundEmailTask(services=self.services)
+    self.app = flask.Flask('test_app')
+    self.app.config['TESTING'] = True
+    self.app.add_url_rule(
+        '/_task/outboundEmail.do',
+        view_func=self.servlet.PostOutboundEmailTask,
+        methods=['POST'])
     self.testbed = testbed.Testbed()
     self.testbed.activate()
     self.testbed.init_memcache_stub()
@@ -89,8 +95,7 @@
                        result['params']['issue_ids'])
 
   def testNotifyIssueChangeTask_Normal(self):
-    task = notify.NotifyIssueChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyIssueChangeTask(services=self.services)
     params = {'send_email': 1, 'issue_id': 12345001, 'seq': 0,
               'commenter_id': 2}
     mr = testing_helpers.MakeMonorailRequest(
@@ -107,8 +112,7 @@
         project_id=12345, local_id=1, owner_id=1, reporter_id=1,
         is_spam=True)
     self.services.issue.TestAddIssue(issue)
-    task = notify.NotifyIssueChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyIssueChangeTask(services=self.services)
     params = {'send_email': 0, 'issue_id': issue.issue_id, 'seq': 0,
               'commenter_id': 2}
     mr = testing_helpers.MakeMonorailRequest(
@@ -124,8 +128,7 @@
     issue2 = MakeTestIssue(
         project_id=12345, local_id=2, owner_id=2, reporter_id=1)
     self.services.issue.TestAddIssue(issue2)
-    task = notify.NotifyBlockingChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBlockingChangeTask(services=self.services)
     params = {
         'send_email': 1, 'issue_id': issue2.issue_id, 'seq': 0,
         'delta_blocker_iids': self.issue1.issue_id, 'commenter_id': 1,
@@ -143,8 +146,7 @@
         project_id=12345, local_id=2, owner_id=2, reporter_id=1,
         is_spam=True)
     self.services.issue.TestAddIssue(issue2)
-    task = notify.NotifyBlockingChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBlockingChangeTask(services=self.services)
     params = {
         'send_email': 1, 'issue_id': issue2.issue_id, 'seq': 0,
         'delta_blocker_iids': self.issue1.issue_id, 'commenter_id': 1}
@@ -163,8 +165,7 @@
         project_id=12345, local_id=2, owner_id=2, reporter_id=1)
     issue2.cc_ids = [3]
     self.services.issue.TestAddIssue(issue2)
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     params = {
         'send_email': 1, 'seq': 0,
         'issue_ids': '%d,%d' % (self.issue1.issue_id, issue2.issue_id),
@@ -195,8 +196,7 @@
     """We generate email tasks for also-notify addresses."""
     self.issue1.derived_notify_addrs = [
         'mailing-list@example.com', 'member@example.com']
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     params = {
         'send_email': 1, 'seq': 0,
         'issue_ids': '%d' % (self.issue1.issue_id),
@@ -230,8 +230,7 @@
   def testNotifyBulkChangeTask_ProjectNotify(self, create_task_mock):
     """We generate email tasks for project.issue_notify_address."""
     self.project.issue_notify_address = 'mailing-list@example.com'
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     params = {
         'send_email': 1, 'seq': 0,
         'issue_ids': '%d' % (self.issue1.issue_id),
@@ -265,8 +264,7 @@
   @mock.patch('framework.cloud_tasks_helpers.create_task')
   def testNotifyBulkChangeTask_SubscriberGetsEmail(self, create_task_mock):
     """If a user subscription matches the issue, notify that user."""
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     params = {
         'send_email': 1,
         'issue_ids': '%d' % (self.issue1.issue_id),
@@ -293,8 +291,7 @@
   def testNotifyBulkChangeTask_CCAndSubscriberListsIssueOnce(
       self, create_task_mock):
     """If a user both CCs and subscribes, include issue only once."""
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     params = {
         'send_email': 1,
         'issue_ids': '%d' % (self.issue1.issue_id),
@@ -335,8 +332,7 @@
         project_id=12345, local_id=2, owner_id=2, reporter_id=1,
         is_spam=True)
     self.services.issue.TestAddIssue(issue2)
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     params = {
         'send_email': 1,
         'issue_ids': '%d,%d' % (self.issue1.issue_id, issue2.issue_id),
@@ -353,8 +349,7 @@
   def testFormatBulkIssues_Normal_Single(self):
     """A user may see full notification details for all changed issues."""
     self.issue1.summary = 'one summary'
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     users_by_id = {}
     commenter_view = None
     config = self.services.config.GetProjectConfig('cnxn', 12345)
@@ -374,8 +369,7 @@
     """A user may see full notification details for all changed issues."""
     self.issue1.summary = 'one summary'
     self.issue2.summary = 'two summary'
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     users_by_id = {}
     commenter_view = None
     config = self.services.config.GetProjectConfig('cnxn', 12345)
@@ -396,8 +390,7 @@
     """A user may not see full notification details for some changed issue."""
     self.issue1.summary = 'one summary'
     self.issue1.labels = ['Restrict-View-Google']
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     users_by_id = {}
     commenter_view = None
     config = self.services.config.GetProjectConfig('cnxn', 12345)
@@ -419,8 +412,7 @@
     self.issue1.summary = 'one summary'
     self.issue1.labels = ['Restrict-View-Google']
     self.issue2.summary = 'two summary'
-    task = notify.NotifyBulkChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyBulkChangeTask(services=self.services)
     users_by_id = {}
     commenter_view = None
     config = self.services.config.GetProjectConfig('cnxn', 12345)
@@ -522,8 +514,7 @@
     self.services.issue.TestAddAttachment(
         attach, comment.id, approval_issue.issue_id)
 
-    task = notify.NotifyApprovalChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyApprovalChangeTask(services=self.services)
     params = {
         'send_email': 1,
         'issue_id': approval_issue.issue_id,
@@ -556,8 +547,7 @@
         project_id=12345, user_id=999, issue_id=approval_issue.issue_id,
         amendments=[amend2], timestamp=1234567891, content='')
     self.services.issue.TestAddComment(comment2, approval_issue.local_id)
-    task = notify.NotifyApprovalChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyApprovalChangeTask(services=self.services)
     params = {
         'send_email': 1,
         'issue_id': approval_issue.issue_id,
@@ -579,8 +569,7 @@
         result['notified'])
 
   def testNotifyApprovalChangeTask_GetApprovalEmailRecipients(self):
-    task = notify.NotifyApprovalChangeTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyApprovalChangeTask(services=self.services)
     issue = fake.MakeTestIssue(789, 1, 'summary', 'New', 111)
     approval_value = tracker_pb2.ApprovalValue(
         approver_ids=[222, 333],
@@ -625,8 +614,7 @@
         'proj', owner_ids=[777, 888], project_id=789)
     self.services.user.TestAddUser('owner1@test.com', 777)
     self.services.user.TestAddUser('cow@test.com', 888)
-    task = notify.NotifyRulesDeletedTask(
-        request=None, response=None, services=self.services)
+    task = notify.NotifyRulesDeletedTask(services=self.services)
     params = {'project_id': 789,
               'filter_rules': 'if green make yellow,if orange make blue'}
     mr = testing_helpers.MakeMonorailRequest(
@@ -649,18 +637,12 @@
         'reply_to': 'user@example.com',
         'to': 'user@example.com',
         'subject': 'Test subject'}
-    body = json.dumps(params)
-    request = webapp2.Request.blank('/', body=body)
-    task = notify.OutboundEmailTask(
-        request=request, response=None, services=self.services)
-    mr = testing_helpers.MakeMonorailRequest(
-        user_info={'user_id': 1},
-        payload=body,
-        method='POST',
-        services=self.services)
-    result = task.HandleRequest(mr)
-    self.assertEqual(params['from_addr'], result['sender'])
-    self.assertEqual(params['subject'], result['subject'])
+    data = json.dumps(params)
+    res = self.app.test_client().post('/_task/outboundEmail.do', data=data)
+    res_string = res.get_data()[5:]
+    res_json = json.loads(res_string)
+    self.assertEqual(params['from_addr'], res_json['sender'])
+    self.assertEqual(params['subject'], res_json['subject'])
 
   def testOutboundEmailTask_MissingTo(self):
     """We skip emails that don't specify the To-line."""
@@ -668,36 +650,26 @@
         'from_addr': 'requester@example.com',
         'reply_to': 'user@example.com',
         'subject': 'Test subject'}
-    body = json.dumps(params)
-    request = webapp2.Request.blank('/', body=body)
-    task = notify.OutboundEmailTask(
-        request=request, response=None, services=self.services)
-    mr = testing_helpers.MakeMonorailRequest(
-        user_info={'user_id': 1},
-        payload=body,
-        method='POST',
-        services=self.services)
-    result = task.HandleRequest(mr)
-    self.assertEqual('Skipping because no "to" address found.', result['note'])
-    self.assertNotIn('from_addr', result)
+    data = json.dumps(params)
+    res = self.app.test_client().post('/_task/outboundEmail.do', data=data)
+    res_string = res.get_data()[5:]
+    res_json = json.loads(res_string)
+    self.assertEqual(
+        'Skipping because no "to" address found.', res_json['note'])
+    self.assertNotIn('from_addr', res_string)
 
   def testOutboundEmailTask_BannedUser(self):
     """We don't send emails to banned users.."""
+    self.servlet.services.user.TestAddUser(
+        'banned@example.com', 404, banned=True)
     params = {
         'from_addr': 'requester@example.com',
         'reply_to': 'user@example.com',
         'to': 'banned@example.com',
         'subject': 'Test subject'}
-    body = json.dumps(params)
-    request = webapp2.Request.blank('/', body=body)
-    task = notify.OutboundEmailTask(
-        request=request, response=None, services=self.services)
-    mr = testing_helpers.MakeMonorailRequest(
-        user_info={'user_id': 1},
-        payload=body,
-        method='POST',
-        services=self.services)
-    self.services.user.TestAddUser('banned@example.com', 404, banned=True)
-    result = task.HandleRequest(mr)
-    self.assertEqual('Skipping because user is banned.', result['note'])
-    self.assertNotIn('from_addr', result)
+    data = json.dumps(params)
+    res = self.app.test_client().post('/_task/outboundEmail.do', data=data)
+    res_string = res.get_data()[5:]
+    res_json = json.loads(res_string)
+    self.assertEqual('Skipping because user is banned.', res_json['note'])
+    self.assertNotIn('from_addr', res_string)
diff --git a/features/test/pubsub_test.py b/features/test/pubsub_test.py
index 2044cf7..e86230c 100644
--- a/features/test/pubsub_test.py
+++ b/features/test/pubsub_test.py
@@ -38,8 +38,7 @@
 
   def testPublishPubsubIssueChangeTask_NoIssueIdParam(self):
     """Test case when issue_id param is not passed."""
-    task = pubsub.PublishPubsubIssueChangeTask(
-        request=None, response=None, services=self.services)
+    task = pubsub.PublishPubsubIssueChangeTask(services=self.services)
     mr = testing_helpers.MakeMonorailRequest(
         user_info={'user_id': 1},
         params={},
@@ -54,8 +53,7 @@
   def testPublishPubsubIssueChangeTask_PubSubAPIInitFailure(self):
     """Test case when pub/sub API fails to init."""
     pubsub.set_up_pubsub_api = Mock(return_value=None)
-    task = pubsub.PublishPubsubIssueChangeTask(
-        request=None, response=None, services=self.services)
+    task = pubsub.PublishPubsubIssueChangeTask(services=self.services)
     mr = testing_helpers.MakeMonorailRequest(
         user_info={'user_id': 1},
         params={},
@@ -69,8 +67,7 @@
 
   def testPublishPubsubIssueChangeTask_IssueNotFound(self):
     """Test case when issue is not found."""
-    task = pubsub.PublishPubsubIssueChangeTask(
-        request=None, response=None, services=self.services)
+    task = pubsub.PublishPubsubIssueChangeTask(services=self.services)
     mr = testing_helpers.MakeMonorailRequest(
         user_info={'user_id': 1},
         params={'issue_id': 314159},
@@ -87,8 +84,7 @@
     issue = fake.MakeTestIssue(789, 543, 'sum', 'New', 111, issue_id=78901,
         project_name='rutabaga')
     self.services.issue.TestAddIssue(issue)
-    task = pubsub.PublishPubsubIssueChangeTask(
-        request=None, response=None, services=self.services)
+    task = pubsub.PublishPubsubIssueChangeTask(services=self.services)
     mr = testing_helpers.MakeMonorailRequest(
         user_info={'user_id': 1},
         params={'issue_id': 78901},
diff --git a/features/test/savedqueries_helpers_test.py b/features/test/savedqueries_helpers_test.py
index d635fe1..7f5ad47 100644
--- a/features/test/savedqueries_helpers_test.py
+++ b/features/test/savedqueries_helpers_test.py
@@ -10,7 +10,10 @@
 
 import unittest
 
-import mox
+try:
+  from mox3 import mox
+except ImportError:
+  import mox
 
 from features import savedqueries_helpers
 from testing import fake
