diff --git a/ietf/message/resources.py b/ietf/message/resources.py
index 181a3fa56..68f021a08 100644
--- a/ietf/message/resources.py
+++ b/ietf/message/resources.py
@@ -8,7 +8,6 @@ from tastypie.cache import SimpleCache
 from ietf import api
 
 from ietf.message.models import Message, SendQueue, MessageAttachment
-
 from ietf.person.resources import PersonResource
 from ietf.group.resources import GroupResource
 from ietf.doc.resources import DocumentResource
diff --git a/ietf/name/fixtures/names.json b/ietf/name/fixtures/names.json
index a9459b728..439d73f2e 100644
--- a/ietf/name/fixtures/names.json
+++ b/ietf/name/fixtures/names.json
@@ -884,7 +884,7 @@
   "desc": ""
  },
  "model": "name.draftsubmissionstatename",
- "pk": "manual-awaiting-draft"
+ "pk": "waiting-for-draft"
 },
 {
  "fields": {
diff --git a/ietf/submit/admin.py b/ietf/submit/admin.py
index 4f87ffeb0..9d03928c8 100644
--- a/ietf/submit/admin.py
+++ b/ietf/submit/admin.py
@@ -11,7 +11,7 @@ class SubmissionAdmin(admin.ModelAdmin):
     raw_id_fields = ['group', 'draft']
 
     def status_link(self, instance):
-        url = urlreverse('submit_submission_status_by_hash',
+        url = urlreverse('ietf.submit.views.submission_status',
                          kwargs=dict(submission_id=instance.pk,
                                      access_token=instance.access_token()))
         return '<a href="%s">%s</a>' % (url, instance.state)
diff --git a/ietf/submit/forms.py b/ietf/submit/forms.py
index 1e30b9736..46699e2b2 100644
--- a/ietf/submit/forms.py
+++ b/ietf/submit/forms.py
@@ -226,9 +226,9 @@ class SubmissionUploadForm(forms.Form):
             self.group = self.deduce_group()
 
             # check existing
-            existing = Submission.objects.filter(name=self.filename, rev=self.revision).exclude(state__in=("posted", "cancel", "manual-awaiting-draft"))
+            existing = Submission.objects.filter(name=self.filename, rev=self.revision).exclude(state__in=("posted", "cancel", "waiting-for-draft"))
             if existing:
-                raise forms.ValidationError(mark_safe('A submission with same name and revision is currently being processed. <a href="%s">Check the status here.</a>' % urlreverse("submit_submission_status", kwargs={ 'submission_id': existing[0].pk })))
+                raise forms.ValidationError(mark_safe('A submission with same name and revision is currently being processed. <a href="%s">Check the status here.</a>' % urlreverse("ietf.submit.views.submission_status", kwargs={ 'submission_id': existing[0].pk })))
 
             # cut-off
             if self.revision == '00' and self.in_first_cut_off:
diff --git a/ietf/submit/mail.py b/ietf/submit/mail.py
index 86d1e3e65..c2d96732c 100644
--- a/ietf/submit/mail.py
+++ b/ietf/submit/mail.py
@@ -3,7 +3,6 @@ import email
 import datetime
 import base64
 import os
-
 import pyzmail
 
 from django.conf import settings
@@ -16,11 +15,10 @@ from ietf.utils.log import log
 from ietf.utils.mail import send_mail, send_mail_message
 from ietf.doc.models import Document
 from ietf.ipr.mail import utc_from_string
-from ietf.mailtrigger.utils import gather_address_lists, \
-    get_base_submission_message_address
 from ietf.person.models import Person
 from ietf.message.models import Message, MessageAttachment
 from ietf.utils.accesstoken import generate_access_token
+from ietf.mailtrigger.utils import gather_address_lists, get_base_submission_message_address
 from ietf.submit.models import SubmissionEmail, Submission
 
 def send_submission_confirmation(request, submission, chair_notice=False):
@@ -28,8 +26,8 @@ def send_submission_confirmation(request, submission, chair_notice=False):
     from_email = settings.IDSUBMIT_FROM_EMAIL
     (to_email, cc) = gather_address_lists('sub_confirmation_requested',submission=submission)
 
-    confirm_url = settings.IDTRACKER_BASE_URL + urlreverse('submit_confirm_submission', kwargs=dict(submission_id=submission.pk, auth_token=generate_access_token(submission.auth_key)))
-    status_url = settings.IDTRACKER_BASE_URL + urlreverse('submit_submission_status_by_hash', kwargs=dict(submission_id=submission.pk, access_token=submission.access_token()))
+    confirm_url = settings.IDTRACKER_BASE_URL + urlreverse('ietf.submit.views.confirm_submission', kwargs=dict(submission_id=submission.pk, auth_token=generate_access_token(submission.auth_key)))
+    status_url = settings.IDTRACKER_BASE_URL + urlreverse('ietf.submit.views.submission_status', kwargs=dict(submission_id=submission.pk, access_token=submission.access_token()))
         
     send_mail(request, to_email, from_email, subject, 'submit/confirm_submission.txt', 
               {
@@ -48,7 +46,7 @@ def send_full_url(request, submission):
     subject = 'Full URL for managing submission of draft %s' % submission.name
     from_email = settings.IDSUBMIT_FROM_EMAIL
     (to_email, cc) = gather_address_lists('sub_management_url_requested',submission=submission)
-    url = settings.IDTRACKER_BASE_URL + urlreverse('submit_submission_status_by_hash', kwargs=dict(submission_id=submission.pk, access_token=submission.access_token()))
+    url = settings.IDTRACKER_BASE_URL + urlreverse('ietf.submit.views.submission_status', kwargs=dict(submission_id=submission.pk, access_token=submission.access_token()))
 
     send_mail(request, to_email, from_email, subject, 'submit/full_url.txt', 
               {
@@ -84,7 +82,7 @@ def send_manual_post_request(request, submission, errors):
     (to_email,cc) = gather_address_lists('sub_manual_post_requested',submission=submission)
     send_mail(request, to_email, from_email, subject, 'submit/manual_post_request.txt', {
         'submission': submission,
-        'url': settings.IDTRACKER_BASE_URL + urlreverse('submit_submission_status', kwargs=dict(submission_id=submission.pk)),
+        'url': settings.IDTRACKER_BASE_URL + urlreverse('ietf.submit.views.submission_status', kwargs=dict(submission_id=submission.pk)),
         'errors': errors,
     }, cc=cc)
 
@@ -233,7 +231,7 @@ def add_submission_email(request, remote_ip, name, rev, submission_pk, message,
         # create Submission using the name
         try:
             submission = Submission.objects.create(
-                    state_id="manual-awaiting-draft",
+                    state_id="waiting-for-draft",
                     remote_ip=remote_ip,
                     name=name,
                     rev=rev,
diff --git a/ietf/submit/migrations/0012_auto_20160414_1902.py b/ietf/submit/migrations/0012_auto_20160414_1902.py
index d875779c1..2f5315158 100644
--- a/ietf/submit/migrations/0012_auto_20160414_1902.py
+++ b/ietf/submit/migrations/0012_auto_20160414_1902.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
 from django.db import migrations
@@ -9,8 +9,8 @@ class Migration(migrations.Migration):
         # We can't import the model directly as it may be a newer
         # version than this migration expects. We use the historical version.
         DraftSubmissionStateName = apps.get_model("name", "DraftSubmissionStateName")
-        DraftSubmissionStateName.objects.create(slug="manual-awaiting-draft",
-                                                name="Manual Post Awaiting Draft",
+        DraftSubmissionStateName.objects.create(slug="waiting-for-draft",
+                                                name="Manual Post Awaiting Draft Upload",
                                                 desc="",
                                                 used=True,
                                                 order=8)
diff --git a/ietf/submit/migrations/0014_auto_20160627_1945.py b/ietf/submit/migrations/0014_auto_20160627_1945.py
index b6152ad8e..45e63bf93 100644
--- a/ietf/submit/migrations/0014_auto_20160627_1945.py
+++ b/ietf/submit/migrations/0014_auto_20160627_1945.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
 from django.db import migrations
@@ -10,7 +10,7 @@ class Migration(migrations.Migration):
 
         cancelled = DraftSubmissionStateName.objects.get(slug="cancel")
         posted = DraftSubmissionStateName.objects.get(slug="posted")
-        mad = DraftSubmissionStateName.objects.get(slug="manual-awaiting-draft")
+        mad = DraftSubmissionStateName.objects.get(slug="waiting-for-draft")
         
         mad.next_states.add(cancelled)
         mad.next_states.add(posted)
diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py
index 966f2810b..b55217b57 100644
--- a/ietf/submit/tests.py
+++ b/ietf/submit/tests.py
@@ -98,7 +98,7 @@ class SubmitTests(TestCase):
         self.assertTrue(os.path.exists(settings.IDSUBMIT_IDNITS_BINARY))
 
         # get
-        url = urlreverse('submit_upload_submission')
+        url = urlreverse('ietf.submit.views.upload_submission')
         r = self.client.get(url)
         self.assertEqual(r.status_code, 200)
         q = PyQuery(r.content)
@@ -645,12 +645,12 @@ class SubmitTests(TestCase):
         self.do_submission(name, rev)
 
         # search status page
-        r = self.client.get(urlreverse("submit_search_submission"))
+        r = self.client.get(urlreverse("ietf.submit.views.search_submission"))
         self.assertEqual(r.status_code, 200)
         self.assertTrue("submission status" in unicontent(r))
 
         # search
-        r = self.client.post(urlreverse("submit_search_submission"), dict(name=name))
+        r = self.client.post(urlreverse("ietf.submit.views.search_submission"), dict(name=name))
         self.assertEqual(r.status_code, 302)
         unprivileged_status_url = r['Location']
 
@@ -690,7 +690,7 @@ class SubmitTests(TestCase):
         self.do_submission(name, rev)
 
         submission = Submission.objects.get(name=name)
-        url = urlreverse('submit_submission_status', kwargs=dict(submission_id=submission.pk))
+        url = urlreverse('ietf.submit.views.submission_status', kwargs=dict(submission_id=submission.pk))
 
         # check we got request full URL button
         r = self.client.get(url)
@@ -762,17 +762,17 @@ class SubmitTests(TestCase):
         self.assertEqual(s.state_id, "cancel")
 
     def test_help_pages(self):
-        r = self.client.get(urlreverse("submit_note_well"))
+        r = self.client.get(urlreverse("ietf.submit.views.note_well"))
         self.assertEquals(r.status_code, 200)
 
-        r = self.client.get(urlreverse("submit_tool_instructions"))
+        r = self.client.get(urlreverse("ietf.submit.views.tool_instructions"))
         self.assertEquals(r.status_code, 200)
         
     def test_blackout_access(self):
         make_test_data()
         
         # get
-        url = urlreverse('submit_upload_submission')
+        url = urlreverse('ietf.submit.views.upload_submission')
         # set meeting to today so we're in blackout period
         meeting = Meeting.get_current_meeting()
         meeting.date = datetime.datetime.utcnow()
@@ -802,7 +802,7 @@ class SubmitTests(TestCase):
         self.assertTrue(os.path.exists(settings.IDSUBMIT_IDNITS_BINARY))
 
         # get
-        url = urlreverse('submit_upload_submission')
+        url = urlreverse('ietf.submit.views.upload_submission')
         r = self.client.get(url)
         self.assertEqual(r.status_code, 200)
         q = PyQuery(r.content)
@@ -850,7 +850,7 @@ class ApprovalsTestCase(TestCase):
     def test_approvals(self):
         make_test_data()
 
-        url = urlreverse('submit_approvals')
+        url = urlreverse('ietf.submit.views.approvals')
         self.client.login(username="marschairman", password="marschairman+password")
 
         Preapproval.objects.create(name="draft-ietf-mars-foo", by=Person.objects.get(user__username="marschairman"))
@@ -881,7 +881,7 @@ class ApprovalsTestCase(TestCase):
     def test_add_preapproval(self):
         make_test_data()
 
-        url = urlreverse('submit_add_preapproval')
+        url = urlreverse('ietf.submit.views.add_preapproval')
         login_testing_unauthorized(self, "marschairman", url)
 
         # get
@@ -908,7 +908,7 @@ class ApprovalsTestCase(TestCase):
 
         preapproval = Preapproval.objects.create(name="draft-ietf-mars-foo", by=Person.objects.get(user__username="marschairman"))
 
-        url = urlreverse('submit_cancel_preapproval', kwargs=dict(preapproval_id=preapproval.pk))
+        url = urlreverse('ietf.submit.views.cancel_preapproval', kwargs=dict(preapproval_id=preapproval.pk))
         login_testing_unauthorized(self, "marschairman", url)
 
         # get
@@ -927,7 +927,7 @@ class ManualPostsTestCase(TestCase):
     def test_manual_posts(self):
         make_test_data()
 
-        url = urlreverse('submit_manualpost')
+        url = urlreverse('ietf.submit.views.manualpost')
         # Secretariat has access
         self.client.login(username="secretary", password="secretary+password")
 
@@ -949,7 +949,7 @@ class ManualPostsTestCase(TestCase):
         self.assertEqual(len(q('.submissions a:contains("draft-ietf-mars-foo")')), 1)
         self.assertEqual(len(q('.submissions a:contains("draft-ietf-mars-bar")')), 0)
 
-    def test_awaiting_draft(self):
+    def test_waiting_for_draft(self):
         message_string = """To: somebody@ietf.org
 From: joe@test.com
 Date: {}
@@ -970,7 +970,7 @@ Thank you
                                  by = Person.objects.get(name="(System)"),
                                  msgtype = "msgin")
 
-        url = urlreverse('submit_manualpost')
+        url = urlreverse('ietf.submit.views.manualpost')
         # Secretariat has access
         self.client.login(username="secretary", password="secretary+password")
 
@@ -979,7 +979,7 @@ Thank you
         self.assertEqual(r.status_code, 200)
         q = PyQuery(r.content)
 
-        self.assertEqual(len(q('.awaiting-draft a:contains("draft-my-new-draft")')), 1)
+        self.assertEqual(len(q('.waiting-for-draft a:contains("draft-my-new-draft")')), 1)
 
         # Same name should raise an error
         with self.assertRaises(Exception):
@@ -993,7 +993,7 @@ Thank you
                                  msgtype = "msgin")
 
         # Cancel this one
-        r = self.client.post(urlreverse("submit_cancel_awaiting_draft_by_hash"), {
+        r = self.client.post(urlreverse("ietf.submit.views.cancel_waiting_for_draft"), {
             "submission_id": submission.pk,
             "access_token": submission.access_token(),
         })
@@ -1002,7 +1002,7 @@ Thank you
         r = self.client.get(url)
         self.assertEqual(r.status_code, 200)
         q = PyQuery(r.content)
-        self.assertEqual(len(q('.awaiting-draft a:contains("draft-my-new-draft")')), 0)
+        self.assertEqual(len(q('.waiting-for-draft a:contains("draft-my-new-draft")')), 0)
 
         # Should now be able to add it again
         submission, submission_email_event = \
@@ -1016,7 +1016,7 @@ Thank you
                                  msgtype = "msgin")
 
 
-    def test_awaiting_draft_with_attachment(self):
+    def test_waiting_for_draft_with_attachment(self):
         frm = "joe@test.com"
         
         message_string = """To: somebody@ietf.org
@@ -1052,7 +1052,7 @@ ZSBvZiBsaW5lcyAtIGJ1dCBpdCBjb3VsZCBiZSBhIGRyYWZ0Cg==
                                  by = Person.objects.get(name="(System)"),
                                  msgtype = "msgin")
 
-        manualpost_page_url = urlreverse('submit_manualpost')
+        manualpost_page_url = urlreverse('ietf.submit.views.manualpost')
         # Secretariat has access
         self.client.login(username="secretary", password="secretary+password")
 
@@ -1135,7 +1135,7 @@ ZSBvZiBsaW5lcyAtIGJ1dCBpdCBjb3VsZCBiZSBhIGRyYWZ0Cg==
                               is_secretariat):
         # get the page listing manual posts
         r, q = self.request_and_parse(the_url)
-        selector = "#awaiting-draft a#add-submission-email{}:contains('Add email')". \
+        selector = "#waiting-for-draft a#add-submission-email{}:contains('Add email')". \
             format(submission.pk, submission_name_fragment)
 
         if is_secretariat:
@@ -1146,7 +1146,7 @@ ZSBvZiBsaW5lcyAtIGJ1dCBpdCBjb3VsZCBiZSBhIGRyYWZ0Cg==
             self.assertEqual(len(q(selector)), 0)
 
         # Find the link for our submission in those awaiting drafts
-        submission_url = self.get_href(q, "#awaiting-draft a#aw{}:contains({})".
+        submission_url = self.get_href(q, "#waiting-for-draft a#aw{}:contains({})".
                                        format(submission.pk, submission_name_fragment))
 
         # Follow the link to the status page for this submission
@@ -1317,7 +1317,7 @@ Subject: test
         # We're not testing the submission process - just the submission status 
 
         # get
-        url = urlreverse('submit_upload_submission')
+        url = urlreverse('ietf.submit.views.upload_submission')
         r = self.client.get(url)
         self.assertEqual(r.status_code, 200)
         q = PyQuery(r.content)
diff --git a/ietf/submit/urls.py b/ietf/submit/urls.py
index bf7f521e0..b1c8a79ff 100644
--- a/ietf/submit/urls.py
+++ b/ietf/submit/urls.py
@@ -1,28 +1,29 @@
-from django.conf.urls import patterns, url
+from django.conf.urls import patterns
 
+from ietf.submit import views
 
 urlpatterns = patterns('ietf.submit.views',
-    url(r'^$', 'upload_submission', name='submit_upload_submission'),
-    url(r'^status/$', 'search_submission', name='submit_search_submission'),
-    url(r'^status/(?P<submission_id>\d+)/$', 'submission_status', name='submit_submission_status'),
-    url(r'^status/(?P<submission_id>\d+)/edit/$', 'edit_submission', name='submit_edit_submission'),
-    url(r'^status/(?P<submission_id>\d+)/confirm/(?P<auth_token>[a-f\d]+)/$', 'confirm_submission', name='submit_confirm_submission'),
-    url(r'^status/(?P<submission_id>\d+)/(?P<access_token>[a-f\d]*)/$', 'submission_status', name='submit_submission_status_by_hash'),
-    url(r'^status/(?P<submission_id>\d+)/(?P<access_token>[a-f\d]+)/edit/$', 'edit_submission', name='submit_edit_submission_by_hash'),
-    url(r'^note-well/$', 'note_well', name='submit_note_well'),
-    url(r'^tool-instructions/$', 'tool_instructions', name='submit_tool_instructions'),
+    (r'^$', views.upload_submission),
+    (r'^status/$', views.search_submission),
+    (r'^status/(?P<submission_id>\d+)/$', views.submission_status),
+    (r'^status/(?P<submission_id>\d+)/(?P<access_token>[a-f\d]*)/$', views.submission_status),
+    (r'^status/(?P<submission_id>\d+)/confirm/(?P<auth_token>[a-f\d]+)/$', views.confirm_submission),
+    (r'^status/(?P<submission_id>\d+)/edit/$', views.edit_submission),
+    (r'^status/(?P<submission_id>\d+)/(?P<access_token>[a-f\d]+)/edit/$', views.edit_submission),
+    (r'^note-well/$', views.note_well),
+    (r'^tool-instructions/$', views.tool_instructions),
 
-    url(r'^approvals/$', 'approvals', name='submit_approvals'),
-    url(r'^approvals/addpreapproval/$', 'add_preapproval', name='submit_add_preapproval'),
-    url(r'^approvals/cancelpreapproval/(?P<preapproval_id>[a-f\d]+)/$', 'cancel_preapproval', name='submit_cancel_preapproval'),
+    (r'^approvals/$', views.approvals),
+    (r'^approvals/addpreapproval/$', views.add_preapproval),
+    (r'^approvals/cancelpreapproval/(?P<preapproval_id>[a-f\d]+)/$', views.cancel_preapproval),
 
-    url(r'^manualpost/addemail$', 'add_manualpost_email', name='submit_manualpost_email'),
-    url(r'^manualpost/addemail/(?P<submission_id>\d+)/(?P<access_token>[a-f\d]*)/$', 'add_manualpost_email', name='submit_manualpost_email_by_hash'),
-    url(r'^awaitingdraft/cancel$', 'cancel_awaiting_draft', name='submit_cancel_awaiting_draft_by_hash'),
-    url(r'^manualpost/$', 'manualpost', name='submit_manualpost'),
-    url(r'^manualpost/email/(?P<submission_id>\d+)/(?P<message_id>\d+)/$', 'submission_email', name='submit_submission_email'),
-    url(r'^manualpost/email/(?P<submission_id>\d+)/(?P<message_id>\d+)/(?P<access_token>[a-f\d]*)/$', 'submission_email', name='submit_submission_email_by_hash'),
-    url(r'^manualpost/sendemail/(?P<submission_id>\d+)/$', 'send_email', name='submission_send_email'),
-    url(r'^manualpost/replyemail/(?P<submission_id>\d+)/(?P<message_id>\d+)/$', 'send_email', name='submission_reply_email'),
-    url(r'^manualpost/attachment/(?P<submission_id>\d+)/(?P<message_id>\d+)/(?P<filename>.*)$', 'submission_email_attachment', name='submit_submission_email_attachment'),
+    (r'^manualpost/$', views.manualpost),
+    (r'^manualpost/addemail$', views.add_manualpost_email),
+    (r'^manualpost/addemail/(?P<submission_id>\d+)/(?P<access_token>[a-f\d]*)/$', views.add_manualpost_email),
+    (r'^manualpost/attachment/(?P<submission_id>\d+)/(?P<message_id>\d+)/(?P<filename>.*)$', views.show_submission_email_attachment),
+    (r'^manualpost/cancel$', views.cancel_waiting_for_draft),
+    (r'^manualpost/email/(?P<submission_id>\d+)/(?P<message_id>\d+)/$', views.show_submission_email_message),
+    (r'^manualpost/email/(?P<submission_id>\d+)/(?P<message_id>\d+)/(?P<access_token>[a-f\d]*)/$', views.show_submission_email_message),
+    (r'^manualpost/replyemail/(?P<submission_id>\d+)/(?P<message_id>\d+)/$', views.send_submission_email),
+    (r'^manualpost/sendemail/(?P<submission_id>\d+)/$', views.send_submission_email),
 )
diff --git a/ietf/submit/views.py b/ietf/submit/views.py
index 78a8ac0c0..cb7fb8a7e 100644
--- a/ietf/submit/views.py
+++ b/ietf/submit/views.py
@@ -103,13 +103,13 @@ def upload_submission(request):
                 else:
                     abstract = form.parsed_draft.get_abstract()
 
-                # See if there is a Submission in state manual-awaiting-upload
+                # See if there is a Submission in state waiting-for-draft
                 # for this revision.
                 # If so - we're going to update it otherwise we create a new object 
 
                 submission = Submission.objects.filter(name=form.filename, 
                                                        rev=form.revision,
-                                                       state_id = "manual-awaiting-draft").distinct()
+                                                       state_id = "waiting-for-draft").distinct()
                 if (len(submission) == 0):
                     submission = None
                 elif (len(submission) == 1):
@@ -131,7 +131,7 @@ def upload_submission(request):
                     
                     submission.save()
                 else:
-                    raise Exception("Multiple submissions awaiting upload")
+                    raise Exception("Multiple submissions found waiting for upload")
 
                 if (submission == None):
                     try:
@@ -177,7 +177,7 @@ def upload_submission(request):
                 create_submission_event(request, submission, desc="Uploaded submission")
                 docevent_from_submission(request, submission, desc="Uploaded new revision")
 
-                return redirect("submit_submission_status_by_hash", submission_id=submission.pk, access_token=submission.access_token())
+                return redirect("ietf.submit.views.submission_status", submission_id=submission.pk, access_token=submission.access_token())
         except IOError as e:
             if "read error" in str(e): # The server got an IOError when trying to read POST data
                 form = SubmissionUploadForm(request=request)
@@ -238,7 +238,7 @@ def submission_status(request, submission_id, access_token=None):
     can_edit = can_edit_submission(request.user, submission, access_token) and submission.state_id == "uploaded"
     can_cancel = (key_matched or is_secretariat) and submission.state.next_states.filter(slug="cancel")
     can_group_approve = (is_secretariat or is_chair) and submission.state_id == "grp-appr"
-    can_force_post = is_secretariat and submission.state.next_states.filter(slug="posted") and submission.state_id != "manual-awaiting-draft"
+    can_force_post = is_secretariat and submission.state.next_states.filter(slug="posted") and submission.state_id != "waiting-for-draft"
     show_send_full_url = not key_matched and not is_secretariat and submission.state_id not in ("cancel", "posted")
 
     addrs = gather_address_lists('sub_confirmation_requested',submission=submission)
@@ -330,15 +330,15 @@ def submission_status(request, submission_id, access_token=None):
                     docevent_from_submission(request, submission, docDesc)
     
                 if access_token:
-                    return redirect("submit_submission_status_by_hash", submission_id=submission.pk, access_token=access_token)
+                    return redirect("ietf.submit.views.submission_status", submission_id=submission.pk, access_token=access_token)
                 else:
-                    return redirect("submit_submission_status", submission_id=submission.pk)
+                    return redirect("ietf.submit.views.submission_status", submission_id=submission.pk)
 
         elif action == "edit" and submission.state_id == "uploaded":
             if access_token:
-                return redirect("submit_edit_submission_by_hash", submission_id=submission.pk, access_token=access_token)
+                return redirect("ietf.submit.views.edit_submission", submission_id=submission.pk, access_token=access_token)
             else:
-                return redirect("submit_edit_submission", submission_id=submission.pk)
+                return redirect("ietf.submit.views.edit_submission", submission_id=submission.pk)
 
         elif action == "sendfullurl" and submission.state_id not in ("cancel", "posted"):
             sent_to = send_full_url(request, submission)
@@ -355,7 +355,7 @@ def submission_status(request, submission_id, access_token=None):
 
             create_submission_event(request, submission, "Cancelled submission")
 
-            return redirect("submit_submission_status", submission_id=submission_id)
+            return redirect("ietf.submit.views.submission_status", submission_id=submission_id)
 
 
         elif action == "approve" and submission.state_id == "grp-appr":
@@ -465,7 +465,7 @@ def edit_submission(request, submission_id, access_token=None):
 
             create_submission_event(request, submission, desc)
 
-            return redirect("submit_submission_status", submission_id=submission.pk)
+            return redirect("ietf.submit.views.submission_status", submission_id=submission.pk)
         else:
             form_errors = True
     else:
@@ -547,7 +547,7 @@ def add_preapproval(request):
             p.by = request.user.person
             p.save()
 
-            return HttpResponseRedirect(urlreverse("submit_approvals") + "#preapprovals")
+            return HttpResponseRedirect(urlreverse("ietf.submit.views.approvals") + "#preapprovals")
     else:
         form = PreapprovalForm()
 
@@ -566,7 +566,7 @@ def cancel_preapproval(request, preapproval_id):
     if request.method == "POST" and request.POST.get("action", "") == "cancel":
         preapproval.delete()
 
-        return HttpResponseRedirect(urlreverse("submit_approvals") + "#preapprovals")
+        return HttpResponseRedirect(urlreverse("ietf.submit.views.approvals") + "#preapprovals")
 
     return render(request, 'submit/cancel_preapproval.html',
                               {'selected': 'approvals',
@@ -584,15 +584,15 @@ def manualpost(request):
         s.passes_checks = all([ c.passed!=False for c in s.checks.all() ])
         s.errors = validate_submission(s)
 
-    awaiting_draft = Submission.objects.filter(state_id = "manual-awaiting-draft").distinct()
+    waiting_for_draft = Submission.objects.filter(state_id = "waiting-for-draft").distinct()
 
     return render(request, 'submit/manual_post.html',
                   {'manual': manual,
                    'selected': 'manual_posts',
-                   'awaiting_draft': awaiting_draft})
+                   'waiting_for_draft': waiting_for_draft})
 
 
-def cancel_awaiting_draft(request):
+def cancel_waiting_for_draft(request):
     if request.method == 'POST':
         can_cancel = has_role(request.user, "Secretariat")
         
@@ -612,7 +612,7 @@ def cancel_awaiting_draft(request):
                                      submission,
                                      "Cancelled submission for rev {}".format(submission.rev))
     
-    return redirect("submit_manualpost")
+    return redirect("ietf.submit.views.manualpost")
 
 
 @role_required('Secretariat',)
@@ -665,7 +665,7 @@ def add_manualpost_email(request, submission_id=None, access_token=None):
                     e.time = submission_email_event.time
                     e.save()
     
-                return redirect("submit_manualpost")
+                return redirect("ietf.submit.views.manualpost")
         except ValidationError as e:
             form = SubmissionEmailForm(request.POST)
             form._errors = {}
@@ -688,14 +688,14 @@ def add_manualpost_email(request, submission_id=None, access_token=None):
 
 
 @role_required('Secretariat',)
-def send_email(request, submission_id, message_id=None):
+def send_submission_email(request, submission_id, message_id=None):
     """Send an email related to a submission"""
     submission = get_submission_or_404(submission_id, access_token = None)
 
     if request.method == 'POST':
         button_text = request.POST.get('submit', '')
         if button_text == 'Cancel':
-            return redirect('submit_submission_status_by_hash',
+            return redirect('ietf.submit.views.submission_status',
                             submission_id=submission.id,
                             access_token=submission.access_token())
 
@@ -739,7 +739,7 @@ def send_email(request, submission_id, message_id=None):
             send_mail_message(None,msg)
 
             messages.success(request, 'Email sent.')
-            return redirect('submit_submission_status_by_hash', 
+            return redirect('ietf.submit.views.submission_status', 
                             submission_id=submission.id,
                             access_token=submission.access_token())
 
@@ -789,7 +789,7 @@ def send_email(request, submission_id, message_id=None):
         'form':form})
     
 
-def submission_email(request, submission_id, message_id, access_token=None):
+def show_submission_email_message(request, submission_id, message_id, access_token=None):
     submission = get_submission_or_404(submission_id, access_token)
 
     submitEmail = get_object_or_404(SubmissionEmail, pk=message_id)    
@@ -800,7 +800,7 @@ def submission_email(request, submission_id, message_id, access_token=None):
                    'message': submitEmail,
                    'attachments': attachments})
 
-def submission_email_attachment(request, submission_id, message_id, filename, access_token=None):
+def show_submission_email_attachment(request, submission_id, message_id, filename, access_token=None):
     get_submission_or_404(submission_id, access_token)
 
     message = get_object_or_404(SubmissionEmail, pk=message_id)
diff --git a/ietf/templates/base/menu.html b/ietf/templates/base/menu.html
index 823773165..0354c5111 100644
--- a/ietf/templates/base/menu.html
+++ b/ietf/templates/base/menu.html
@@ -43,12 +43,12 @@
     </a>
     <ul class="dropdown-menu" role="menu">
   {% endif %}
-  <li><a href="{% url "submit_upload_submission" %}">Draft submissions</a></li>
+  <li><a href="{% url "ietf.submit.views.upload_submission" %}">Draft submissions</a></li>
 
   {% if user|has_role:"WG Chair" %}
     {% if flavor == "top" %}<li class="divider hidden-xs"></li>{% endif %}
     <li {%if flavor == "top" %}class="dropdown-header hidden-xs"{% else %}class="nav-header"{% endif %}>WG chair</li>
-    <li><a href="{% url "submit_approvals" %}">Approve a draft</a></li>
+    <li><a href="{% url "ietf.submit.views.approvals" %}">Approve a draft</a></li>
   {% endif %}
 
   {% if user and user.is_authenticated %}
diff --git a/ietf/templates/submit/add_preapproval.html b/ietf/templates/submit/add_preapproval.html
index a81fdf293..408bf4e5f 100644
--- a/ietf/templates/submit/add_preapproval.html
+++ b/ietf/templates/submit/add_preapproval.html
@@ -46,7 +46,7 @@
 
     {% buttons %}
       <button type="submit" class="btn btn-primary">Save</button>
-      <a class="btn btn-default pull-right" href="{% url "submit_approvals" %}#preapprovals">Back</a>
+      <a class="btn btn-default pull-right" href="{% url "ietf.submit.views.approvals" %}#preapprovals">Back</a>
     {% endbuttons %}
   </form>
 
diff --git a/ietf/templates/submit/add_submit_email.html b/ietf/templates/submit/add_submit_email.html
index 234c97d28..c8da0b053 100644
--- a/ietf/templates/submit/add_submit_email.html
+++ b/ietf/templates/submit/add_submit_email.html
@@ -30,7 +30,7 @@
     
         {% buttons %}
             <button type="submit" class="btn btn-primary">Add Email</button>
-            <a class="btn btn-default pull-right" href="{% url "submit_manualpost" %}">Back</a>
+            <a class="btn btn-default pull-right" href="{% url "ietf.submit.views.manualpost" %}">Back</a>
         {% endbuttons %}
     </form>
 
diff --git a/ietf/templates/submit/approval_request.txt b/ietf/templates/submit/approval_request.txt
index 191376ad0..83677d166 100644
--- a/ietf/templates/submit/approval_request.txt
+++ b/ietf/templates/submit/approval_request.txt
@@ -4,7 +4,7 @@ Hi,
 Chair approval is needed for posting of {{ submission.name }}-{{ submission.rev }}.
 
 To approve the draft, go to this URL (note: you need to login to be able to approve):
-  https://{{ domain }}{% url "submit_submission_status_by_hash" submission_id=submission.pk access_token=submission.access_token %}
+  https://{{ domain }}{% url "ietf.submit.views.submission_status" submission_id=submission.pk access_token=submission.access_token %}
 
   File name       : {{ submission.name }}
   Revision        : {{ submission.rev }}
diff --git a/ietf/templates/submit/approvals.html b/ietf/templates/submit/approvals.html
index 3934f78e4..356b50590 100644
--- a/ietf/templates/submit/approvals.html
+++ b/ietf/templates/submit/approvals.html
@@ -28,7 +28,7 @@
         <tbody>
           {% for s in approvals %}
             <tr>
-              <td><a href="{% url "submit_submission_status_by_hash" submission_id=s.pk access_token=s.access_token %}">{{ s.name }}-{{ s.rev }}</a></td>
+              <td><a href="{% url "ietf.submit.views.submission_status" submission_id=s.pk access_token=s.access_token %}">{{ s.name }}-{{ s.rev }}</a></td>
               <td>{{ s.submission_date }}</td>
             </tr>
           {% endfor %}
@@ -39,7 +39,7 @@
     <h2 class="anchor-target" id="preapprovals">Pre-approved drafts not yet submitted</h2>
 
     {% if user|has_role:"Secretariat,WG Chair,RG Chair" %}
-      <p><a class="btn btn-default" href="{% url "submit_add_preapproval" %}">Add pre-approval</a></p>
+      <p><a class="btn btn-default" href="{% url "ietf.submit.views.add_preapproval" %}">Add pre-approval</a></p>
     {% endif %}
 
     {% if not preapprovals %}
@@ -60,7 +60,7 @@
               <td>{{ p.name }}</td>
               <td>{{ p.time|date:"Y-m-d" }}</td>
               <td>{{ p.by }}</td>
-              <td><a class="btn btn-danger btn-xs" href="{% url "submit_cancel_preapproval" preapproval_id=p.id %}">Cancel</a></td>
+              <td><a class="btn btn-danger btn-xs" href="{% url "ietf.submit.views.cancel_preapproval" preapproval_id=p.id %}">Cancel</a></td>
             </tr>
           {% endfor %}
         </tbody>
@@ -104,4 +104,4 @@
 
 {% block js %}
 <script src="{% static "jquery.tablesorter/js/jquery.tablesorter.combined.min.js" %}"></script>
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/ietf/templates/submit/cancel_preapproval.html b/ietf/templates/submit/cancel_preapproval.html
index b0723f0e1..66a581ca2 100644
--- a/ietf/templates/submit/cancel_preapproval.html
+++ b/ietf/templates/submit/cancel_preapproval.html
@@ -21,7 +21,7 @@
 
     {% buttons %}
       <button type="submit" class="btn btn-danger">Cancel pre-approval</button>
-      <a class="btn btn-default pull-right" href="{% url "submit_approvals" %}#preapprovals">Back</a>
+      <a class="btn btn-default pull-right" href="{% url "ietf.submit.views.approvals" %}#preapprovals">Back</a>
     {% endbuttons %}
   </form>
 
diff --git a/ietf/templates/submit/confirm_submission.html b/ietf/templates/submit/confirm_submission.html
index 72689acfa..20255d859 100644
--- a/ietf/templates/submit/confirm_submission.html
+++ b/ietf/templates/submit/confirm_submission.html
@@ -14,7 +14,7 @@
     {% else %}
       <p>The submission is not in a state where it can be confirmed.</p>
 
-      <p>Go to the <a href="{% url "submit_submission_status" submission_id=submission.pk %}">status page</a>
+      <p>Go to the <a href="{% url "ietf.submit.views.submission_status" submission_id=submission.pk %}">status page</a>
         to see what has happened to it.</p>
     {% endif %}
   {% else %}
@@ -23,7 +23,7 @@
       <p class="error">Incorrect authorization key.</p>
 
       <p>Double-check the link you followed. If everything fails, you can go to
-        the <a href="{% url "submit_submission_status" submission_id=submission.pk %}">status page</a>,
+        the <a href="{% url "ietf.submit.views.submission_status" submission_id=submission.pk %}">status page</a>,
         cancel the submission and try again.</p>
     {% else %}
       <p>Authorization key accepted.</p>
diff --git a/ietf/templates/submit/manual_post.html b/ietf/templates/submit/manual_post.html
index 4ce2d073b..22803a7ca 100644
--- a/ietf/templates/submit/manual_post.html
+++ b/ietf/templates/submit/manual_post.html
@@ -31,9 +31,9 @@
           {% for s in manual %}
             <tr>
               {% if user.is_authenticated %}
-                <td><a href="{% url "submit_submission_status_by_hash" submission_id=s.pk access_token=s.access_token %}">{{ s.name }}-{{ s.rev }}</a></td>
+                <td><a href="{% url "ietf.submit.views.submission_status" submission_id=s.pk access_token=s.access_token %}">{{ s.name }}-{{ s.rev }}</a></td>
               {% else %}
-                <td><a href="{% url "submit_submission_status" submission_id=s.pk %}">{{ s.name }}-{{ s.rev }}</a></td>
+                <td><a href="{% url "ietf.submit.views.submission_status" submission_id=s.pk %}">{{ s.name }}-{{ s.rev }}</a></td>
               {% endif %}
               <td>{{ s.submission_date }}</td>
               <td>{% if s.passes_checks %}Ok{% else %}Fails{% endif %}</td>
@@ -46,10 +46,10 @@
 
     <h2 class="anchor-target" id="approvals">Submissions awaiting draft upload</h2>
 
-    {% if not awaiting_draft %}
-      <p id="no-awaiting-draft">There are no submissions awaiting draft upload.</p>
+    {% if not waiting_for_draft %}
+      <p id="no-waiting-for-draft">There are no submissions awaiting draft upload.</p>
     {% else %}
-      <table id="awaiting-draft" class="awaiting-draft table table-condensed table-striped tablesorter">
+      <table id="waiting-for-draft" class="waiting-for-draft table table-condensed table-striped tablesorter">
         <thead>
         <tr>
           <th>Name</th>
@@ -58,12 +58,12 @@
         </tr>
         </thead>
         <tbody>
-        {% for s in awaiting_draft %}
+        {% for s in waiting_for_draft %}
           <tr>
             {% if user.is_authenticated %}
-              <td><a id="aw{{ s.pk }}" href="{% url "submit_submission_status_by_hash" submission_id=s.pk access_token=s.access_token %}">{{ s.name }}</a></td>
+              <td><a id="aw{{ s.pk }}" href="{% url "ietf.submit.views.submission_status" submission_id=s.pk access_token=s.access_token %}">{{ s.name }}</a></td>
             {% else %}
-              <td><a id="aw{{ s.pk }}" href="{% url "submit_submission_status" submission_id=s.pk %}">{{ s.name }}</a></td>
+              <td><a id="aw{{ s.pk }}" href="{% url "ietf.submit.views.submission_status" submission_id=s.pk %}">{{ s.name }}</a></td>
             {% endif %}
             <td>{{ s.rev }}</td>
             <td>{{ s.submission_date }}</td>
@@ -79,7 +79,7 @@
               </td>
             {% endif %}
             {% if user|has_role:"Secretariat" %}
-              <td><a id="add-submission-email{{ s.pk }}" class="btn btn-default btn-xs" href="{% url "submit_manualpost_email_by_hash" submission_id=s.pk access_token=s.access_token %}">Add email</a></td>
+              <td><a id="add-submission-email{{ s.pk }}" class="btn btn-default btn-xs" href="{% url "ietf.submit.views.add_manualpost_email" submission_id=s.pk access_token=s.access_token %}">Add email</a></td>
             {% endif %}
           </tr>
         {% endfor %}
@@ -88,11 +88,11 @@
     {% endif %}
 
     {% if user|has_role:"Secretariat" %}
-      <a id="new-submission-email" class="btn btn-default btn-sm" href="{% url "submit_manualpost_email" %}">New submission from email</a>
+      <a id="new-submission-email" class="btn btn-default btn-sm" href="{% url "ietf.submit.views.add_manualpost_email" %}">New submission from email</a>
     {% endif %}
 
 {% endblock %}
 
 {% block js %}
 <script src="{% static "jquery.tablesorter/js/jquery.tablesorter.combined.min.js" %}"></script>
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/ietf/templates/submit/submission_email.html b/ietf/templates/submit/submission_email.html
index df4e3e762..0a812057d 100644
--- a/ietf/templates/submit/submission_email.html
+++ b/ietf/templates/submit/submission_email.html
@@ -43,13 +43,13 @@
       {% for a in attachments %}
         <tr>
           <th>Attachment</th>
-          <td><a id="attach{{ submission.pk }}" href="{% url "submit_submission_email_attachment" submission_id=submission.pk message_id=message.pk filename=a.filename %}">{{ a.filename }}</a></td>
+          <td><a id="attach{{ submission.pk }}" href="{% url "ietf.submit.views.show_submission_email_attachment" submission_id=submission.pk message_id=message.pk filename=a.filename %}">{{ a.filename }}</a></td>
         </tr>
       {% endfor %}
 
       {% if user|has_role:"Secretariat" %}
         <tr>
-          <td><a id="reply{{ submission.pk }}" class="btn btn-default" href="{% url "submission_reply_email" submission_id=submission.pk message_id=message.pk %}" title="Reply"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span> Reply</a></td>
+          <td><a id="reply{{ submission.pk }}" class="btn btn-default" href="{% url "ietf.submit.views.send_submission_email" submission_id=submission.pk message_id=message.pk %}" title="Reply"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span> Reply</a></td>
         </tr>
       {% endif %}
     </table>
@@ -57,4 +57,4 @@
 
 {% block js %}
 <script src="{% static "jquery.tablesorter/js/jquery.tablesorter.combined.min.js" %}"></script>
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/ietf/templates/submit/submission_status.html b/ietf/templates/submit/submission_status.html
index eb174ed28..7c08dd8bf 100644
--- a/ietf/templates/submit/submission_status.html
+++ b/ietf/templates/submit/submission_status.html
@@ -101,7 +101,7 @@
     </div>
   </div>
 
-  {% if submission.state_id == "manual-awaiting-draft" %}
+  {% if submission.state_id == "waiting-for-draft" %}
     <p class="alert alert-warning">
       This submission is awaiting the first draft upload.
     </p>
@@ -312,7 +312,7 @@
 
   {% if user|has_role:"Secretariat" %}
     <p></p>
-    <a id="send{{ submission.pk }}" class="btn btn-default" href="{% url "submission_send_email" submission_id=submission.pk %}" title="Email submitter"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span>Send Email</a>
+    <a id="send{{ submission.pk }}" class="btn btn-default" href="{% url "ietf.submit.views.send_submission_email" submission_id=submission.pk %}" title="Email submitter"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span>Send Email</a>
   {% endif %}
 
   {% if show_send_full_url %}
@@ -353,11 +353,11 @@
               {% if user.is_authenticated %}
                 <td> 
                   {% if  e.desc|startswith:"Received message" and user|has_role:"Secretariat" %}
-                    <a id="reply{{ submission.pk }}" class="btn btn-default btn-xs" href="{% url "submission_reply_email" submission_id=submission.pk message_id=e.submissionemail.pk %}" title="Reply"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span> Reply</a>
+                    <a id="reply{{ submission.pk }}" class="btn btn-default btn-xs" href="{% url "ietf.submit.views.send_submission_email" submission_id=submission.pk message_id=e.submissionemail.pk %}" title="Reply"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span> Reply</a>
                   {% endif %}
-                  Email: <a id="aw{{ submission.pk }}-{{ m.pk }}" href="{% url "submit_submission_email_by_hash" submission_id=submission.pk message_id=e.submissionemail.pk access_token=submission.access_token %}">{{ e.desc }}</a></td>
+                  Email: <a id="aw{{ submission.pk }}-{{ m.pk }}" href="{% url "ietf.submit.views.show_submission_email_message" submission_id=submission.pk message_id=e.submissionemail.pk access_token=submission.access_token %}">{{ e.desc }}</a></td>
               {% else %}
-                <td>Email: <a id="aw{{ submission.pk }}-{{ m.pk }}" href="{% url "submit_submission_email" submission_id=submission.pk message_id=e.submissionemail.pk %}">{{ e.desc }}</a></td>
+                <td>Email: <a id="aw{{ submission.pk }}-{{ m.pk }}" href="{% url "ietf.submit.views.show_submission_email_message" submission_id=submission.pk message_id=e.submissionemail.pk %}">{{ e.desc }}</a></td>
               {% endif %}
             {% endwith %}
           {%  else %}
diff --git a/ietf/templates/submit/submit_base.html b/ietf/templates/submit/submit_base.html
index d67f863bf..5d77ab8dc 100644
--- a/ietf/templates/submit/submit_base.html
+++ b/ietf/templates/submit/submit_base.html
@@ -12,22 +12,22 @@
 
   <ul class="nav nav-tabs" role="tablist">
     <li {% if selected == "index" %}class="active"{% endif %}>
-      <a href="{% url "submit_upload_submission" %}">Upload</a>
+      <a href="{% url "ietf.submit.views.upload_submission" %}">Upload</a>
     </li>
     <li {% if selected == "status" %}class="active"{% endif %}>
-      <a href="{% url "submit_search_submission" %}">Status</a>
+      <a href="{% url "ietf.submit.views.search_submission" %}">Status</a>
     </li>
     <li {% if selected == "instructions" %}class="active"{% endif %}>
-      <a href="{% url "submit_tool_instructions" %}">Instructions</a>
+      <a href="{% url "ietf.submit.views.tool_instructions" %}">Instructions</a>
     </li>
     <li {% if selected == "notewell" %}class="active"{% endif %}>
-      <a href="{% url "submit_note_well" %}">Note Well</a>
+      <a href="{% url "ietf.submit.views.note_well" %}">Note Well</a>
     </li>
     <li {% if selected == "approvals" %}class="active"{% endif %}>
-      <a href="{% url "submit_approvals" %}">Approvals</a>
+      <a href="{% url "ietf.submit.views.approvals" %}">Approvals</a>
     </li>
     <li {% if selected == "manual_posts" %}class="active"{% endif %}>
-      <a href="{% url "submit_manualpost" %}">Manual Post Requests</a>
+      <a href="{% url "ietf.submit.views.manualpost" %}">Manual Post Requests</a>
     </li>
   </ul>
 
diff --git a/ietf/templates/submit/tool_instructions.html b/ietf/templates/submit/tool_instructions.html
index 750647af4..df4c1a977 100644
--- a/ietf/templates/submit/tool_instructions.html
+++ b/ietf/templates/submit/tool_instructions.html
@@ -8,7 +8,7 @@
   {% origin %}
   <h2>I-D submission tool instructions</h2>
 
-  <p><b>Tool URL:</b> <a href="{% url "submit_upload_submission" %}">https://datatracker.ietf.org{% url "submit_upload_submission" %}</a></p>
+  <p><b>Tool URL:</b> <a href="{% url "ietf.submit.views.upload_submission" %}">https://datatracker.ietf.org{% url "ietf.submit.views.upload_submission" %}</a></p>
 
   <p>
     This page will explain the purpose and content of each screen in the I-D Submission Tool, and the actions that result by clicking the form buttons on each screen.