diff --git a/tracker/templatecreate.py b/tracker/templatecreate.py
index 139c4f5..2f8568b 100644
--- a/tracker/templatecreate.py
+++ b/tracker/templatecreate.py
@@ -1,41 +1,32 @@
-# Copyright 2018 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file or at
-# https://developers.google.com/open-source/licenses/bsd
+# Copyright 2018 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
 
 """A servlet for project owners to create a new template"""
 from __future__ import print_function
 from __future__ import division
 from __future__ import absolute_import
 
-import collections
-import logging
 import time
 
 import ezt
 
-from framework import authdata
-from framework import flaskservlet
-from framework import framework_bizobj
 from framework import framework_helpers
+from framework import permissions
 from framework import servlet
 from framework import urls
-from framework import permissions
 from tracker import field_helpers
 from tracker import template_helpers
-from tracker import tracker_bizobj
-from tracker import tracker_helpers
 from tracker import tracker_views
-from services import user_svc
-from proto import tracker_pb2
+from mrproto import tracker_pb2
 
 
 class TemplateCreate(servlet.Servlet):
   """Servlet allowing project owners to create an issue template."""
 
-  _MAIN_TAB_MODE = flaskservlet.FlaskServlet.MAIN_TAB_PROCESS
+  _MAIN_TAB_MODE = servlet.Servlet.MAIN_TAB_PROCESS
   _PAGE_TEMPLATE = 'tracker/template-detail-page.ezt'
-  _PROCESS_SUBTAB = flaskservlet.FlaskServlet.PROCESS_TAB_TEMPLATES
+  _PROCESS_SUBTAB = servlet.Servlet.PROCESS_TAB_TEMPLATES
 
   def AssertBasePermission(self, mr):
     """Check whether the user has any permission to visit this page.
@@ -44,7 +35,7 @@
       mr: commonly used info parsed from the request
     """
     super(TemplateCreate, self).AssertBasePermission(mr)
-    if not self.CheckPerm(mr, permissions.EDIT_PROJECT):
+    if not permissions.CanEditProjectConfig(mr, self.services):
       raise permissions.PermissionException(
           'User is not allowed to administer this project')
 
@@ -99,7 +90,7 @@
         'fields':
             [
                 view for view in field_views
-                if view.field_def.type_name is not "APPROVAL_TYPE"
+                if view.field_def.type_name != "APPROVAL_TYPE"
             ],
         'initial_add_approvals':
             ezt.boolean(False),
@@ -108,7 +99,7 @@
         'approvals':
             [
                 view for view in field_views
-                if view.field_def.type_name is "APPROVAL_TYPE"
+                if view.field_def.type_name == "APPROVAL_TYPE"
             ],
         'prechecked_approvals': [],
         'required_approval_ids': [],
@@ -172,12 +163,12 @@
           initial_admins=parsed.admin_str,
           labels=parsed.labels,
           fields=[view for view in field_views
-                  if view.field_def.type_name is not 'APPROVAL_TYPE'],
+                  if view.field_def.type_name != 'APPROVAL_TYPE'],
           initial_add_approvals=ezt.boolean(parsed.add_approvals),
           initial_phases=[tracker_pb2.Phase(name=name) for name in
                           parsed.phase_names],
           approvals=[view for view in field_views
-                     if view.field_def.type_name is 'APPROVAL_TYPE'],
+                     if view.field_def.type_name == 'APPROVAL_TYPE'],
           prechecked_approvals=prechecked_approvals,
           required_approval_ids=parsed.required_approval_ids
       )
@@ -193,8 +184,8 @@
     return framework_helpers.FormatAbsoluteURL(
         mr, urls.ADMIN_TEMPLATES, saved=1, ts=int(time.time()))
 
-  # def GetTemplateCreate(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def GetTemplateCreate(self, **kwargs):
+    return self.handler(**kwargs)
 
-  # def PostTemplateCreate(self, **kwargs):
-  #   return self.handler(**kwargs)
+  def PostTemplateCreate(self, **kwargs):
+    return self.handler(**kwargs)
