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)
