diff --git a/ietf/api/__init__.py b/ietf/api/__init__.py
index fa33e02ab..8ddad4e9f 100644
--- a/ietf/api/__init__.py
+++ b/ietf/api/__init__.py
@@ -6,7 +6,7 @@ from urllib import urlencode
 from django.conf import settings
 from django.http import HttpResponse
 from django.core.exceptions import ObjectDoesNotExist
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.utils.encoding import force_text
 
 import debug                            # pyflakes:ignore
diff --git a/ietf/community/models.py b/ietf/community/models.py
index b2df5c663..928e1b2e4 100644
--- a/ietf/community/models.py
+++ b/ietf/community/models.py
@@ -1,7 +1,7 @@
 from django.contrib.auth.models import User
 from django.db import models
 from django.db.models import signals
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.doc.models import Document, DocEvent, State
 from ietf.group.models import Group
diff --git a/ietf/community/tests.py b/ietf/community/tests.py
index af53055a0..fe8541c46 100644
--- a/ietf/community/tests.py
+++ b/ietf/community/tests.py
@@ -2,7 +2,7 @@ import json
 
 from pyquery import PyQuery
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.contrib.auth.models import User
 
 from ietf.community.models import CommunityList, SearchRule, EmailSubscription
diff --git a/ietf/community/utils.py b/ietf/community/utils.py
index 7cdc7f09b..ddd62d9c4 100644
--- a/ietf/community/utils.py
+++ b/ietf/community/utils.py
@@ -36,7 +36,7 @@ def lookup_community_list(username=None, acronym=None):
     return clist
 
 def can_manage_community_list(user, clist):
-    if not user or not user.is_authenticated():
+    if not user or not user.is_authenticated:
         return False
 
     if clist.user:
@@ -60,7 +60,7 @@ def augment_docs_with_tracking_info(docs, user):
 
     tracked = set()
 
-    if user and user.is_authenticated():
+    if user and user.is_authenticated:
         clist = CommunityList.objects.filter(user=user).first()
         if clist:
             tracked.update(docs_tracked_by_community_list(clist).filter(pk__in=docs).values_list("pk", flat=True))
diff --git a/ietf/community/views.py b/ietf/community/views.py
index c841d29bc..472665e4e 100644
--- a/ietf/community/views.py
+++ b/ietf/community/views.py
@@ -22,7 +22,7 @@ def view_list(request, username=None):
     docs = docs_tracked_by_community_list(clist)
     docs, meta = prepare_document_table(request, docs, request.GET)
 
-    subscribed = request.user.is_authenticated() and EmailSubscription.objects.filter(community_list=clist, email__person__user=request.user)
+    subscribed = request.user.is_authenticated and EmailSubscription.objects.filter(community_list=clist, email__person__user=request.user)
 
     return render(request, 'community/view_list.html', {
         'clist': clist,
diff --git a/ietf/cookies/tests.py b/ietf/cookies/tests.py
index feb632744..bcd84ca83 100644
--- a/ietf/cookies/tests.py
+++ b/ietf/cookies/tests.py
@@ -1,7 +1,7 @@
 from pyquery import PyQuery
 from Cookie import SimpleCookie
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/doc/feeds.py b/ietf/doc/feeds.py
index 2998e1e4b..b0c34fae6 100644
--- a/ietf/doc/feeds.py
+++ b/ietf/doc/feeds.py
@@ -4,7 +4,7 @@ import datetime
 
 from django.contrib.syndication.views import Feed, FeedDoesNotExist
 from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.template.defaultfilters import truncatewords, truncatewords_html, date as datefilter, linebreaks
 from django.utils.html import strip_tags
 
diff --git a/ietf/doc/fields.py b/ietf/doc/fields.py
index ee69404a5..1d19a128e 100644
--- a/ietf/doc/fields.py
+++ b/ietf/doc/fields.py
@@ -2,7 +2,7 @@ import json
 
 from django.utils.html import escape
 from django import forms
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/doc/mails.py b/ietf/doc/mails.py
index d0a903447..7d83a67fd 100644
--- a/ietf/doc/mails.py
+++ b/ietf/doc/mails.py
@@ -6,7 +6,7 @@ import textwrap, datetime
 from django.template.loader import render_to_string
 from django.utils.html import strip_tags
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.utils.mail import send_mail, send_mail_text
 from ietf.ipr.utils import iprs_from_docs, related_docs
diff --git a/ietf/doc/management/commands/generate_draft_bibxml_files.py b/ietf/doc/management/commands/generate_draft_bibxml_files.py
index 2057cf67f..7db15b384 100644
--- a/ietf/doc/management/commands/generate_draft_bibxml_files.py
+++ b/ietf/doc/management/commands/generate_draft_bibxml_files.py
@@ -34,4 +34,4 @@ class Command(BaseCommand):
             ref_rev_file_name = os.path.join(bibxmldir, 'reference.I-D.%s-%s.xml' % (doc.name, doc.rev))
             write(ref_file_name, ref_text)
             write(ref_rev_file_name, ref_text)
-                
\ No newline at end of file
+                
diff --git a/ietf/doc/models.py b/ietf/doc/models.py
index f3b65091a..ddc70aca7 100644
--- a/ietf/doc/models.py
+++ b/ietf/doc/models.py
@@ -7,7 +7,7 @@ import os
 from django.db import models
 from django.core import checks
 from django.core.exceptions import ValidationError
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.core.validators import URLValidator
 from django.contrib.contenttypes.models import ContentType
 from django.conf import settings
diff --git a/ietf/doc/templatetags/ballot_icon.py b/ietf/doc/templatetags/ballot_icon.py
index cf24cd0e1..e413590b7 100644
--- a/ietf/doc/templatetags/ballot_icon.py
+++ b/ietf/doc/templatetags/ballot_icon.py
@@ -35,7 +35,7 @@ import datetime
 import debug      # pyflakes:ignore
 
 from django import template
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.db.models import Q
 from django.utils.safestring import mark_safe
 
diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py
index c5ee9b15e..a04c2ca55 100644
--- a/ietf/doc/templatetags/ietf_filters.py
+++ b/ietf/doc/templatetags/ietf_filters.py
@@ -397,7 +397,7 @@ def has_role(user, role_names):
 
 @register.filter
 def ad_area(user):
-    if user and user.is_authenticated():
+    if user and user.is_authenticated:
         from ietf.group.models import Group
         g = Group.objects.filter(role__name__in=("pre-ad", "ad"), role__person__user=user)
         if g:
@@ -428,7 +428,7 @@ def format_snippet(text, trunc_words=25):
 @register.simple_tag
 def doc_edit_button(url_name, *args, **kwargs):
     """Given URL name/args/kwargs, looks up the URL just like "url" tag and returns a properly formatted button for the document material tables."""
-    from django.core.urlresolvers import reverse as urlreverse
+    from django.urls import reverse as urlreverse
     return mark_safe(u'<a class="btn btn-default btn-xs" href="%s">Edit</a>' % (urlreverse(url_name, args=args, kwargs=kwargs)))
 
 @register.filter
@@ -447,7 +447,7 @@ def state(doc, slug):
 @register.filter
 def statehelp(state):
     "Output help icon with tooltip for state."
-    from django.core.urlresolvers import reverse as urlreverse
+    from django.urls import reverse as urlreverse
     tooltip = escape(strip_tags(state.desc))
     url = urlreverse('ietf.doc.views_help.state_help', kwargs=dict(type=state.type_id)) + "#" + state.slug
     return mark_safe('<a class="state-help-icon" href="%s" title="%s">?</a>' % (url, tooltip))
diff --git a/ietf/doc/templatetags/managed_groups.py b/ietf/doc/templatetags/managed_groups.py
index 100a1e031..a7b893149 100644
--- a/ietf/doc/templatetags/managed_groups.py
+++ b/ietf/doc/templatetags/managed_groups.py
@@ -6,7 +6,7 @@ register = template.Library()
 
 @register.filter
 def managed_groups(user):
-    if not (user and hasattr(user, "is_authenticated") and user.is_authenticated()):
+    if not (user and hasattr(user, "is_authenticated") and user.is_authenticated):
         return []
 
     groups = []
@@ -26,7 +26,7 @@ def managed_groups(user):
 
 @register.filter
 def managed_review_groups(user):
-    if not (user and hasattr(user, "is_authenticated") and user.is_authenticated()):
+    if not (user and hasattr(user, "is_authenticated") and user.is_authenticated):
         return []
 
     groups = []
diff --git a/ietf/doc/templatetags/streams_menu.py b/ietf/doc/templatetags/streams_menu.py
index 7aba27b05..1dd80ca1f 100644
--- a/ietf/doc/templatetags/streams_menu.py
+++ b/ietf/doc/templatetags/streams_menu.py
@@ -13,7 +13,7 @@ def streams_menu(context):
 
     user = context["request"].user if "request" in context else AnonymousUser()
 
-    if user.is_authenticated():
+    if user.is_authenticated:
         streams = StreamName.objects.exclude(slug="legacy")
 
         if has_role(user, "Secretariat"):
diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py
index a4b629620..09bdaa26a 100644
--- a/ietf/doc/tests.py
+++ b/ietf/doc/tests.py
@@ -13,7 +13,7 @@ from pyquery import PyQuery
 from tempfile import NamedTemporaryFile
 from Cookie import SimpleCookie
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.conf import settings
 
 from tastypie.test import ResourceTestCaseMixin
diff --git a/ietf/doc/tests_ballot.py b/ietf/doc/tests_ballot.py
index 108ebe378..cd0618f7a 100644
--- a/ietf/doc/tests_ballot.py
+++ b/ietf/doc/tests_ballot.py
@@ -4,7 +4,7 @@ from pyquery import PyQuery
 
 import debug                            # pyflakes:ignore
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.doc.models import ( Document, State, DocEvent, BallotDocEvent,
     BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent, TelechatDocEvent )
diff --git a/ietf/doc/tests_charter.py b/ietf/doc/tests_charter.py
index 5af95e2ce..e78b5fd15 100644
--- a/ietf/doc/tests_charter.py
+++ b/ietf/doc/tests_charter.py
@@ -6,7 +6,7 @@ from StringIO import StringIO
 from pyquery import PyQuery
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/doc/tests_conflict_review.py b/ietf/doc/tests_conflict_review.py
index f102d1e0e..b3c1dea79 100644
--- a/ietf/doc/tests_conflict_review.py
+++ b/ietf/doc/tests_conflict_review.py
@@ -7,7 +7,7 @@ from StringIO import StringIO
 from textwrap import wrap
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent, BallotPositionDocEvent, TelechatDocEvent, State
 from ietf.doc.utils import create_ballot_if_not_open
diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py
index 229679eeb..a21b4d881 100644
--- a/ietf/doc/tests_draft.py
+++ b/ietf/doc/tests_draft.py
@@ -5,7 +5,7 @@ import datetime
 import StringIO
 from pyquery import PyQuery
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.conf import settings
 
 import debug                            # pyflakes:ignore
diff --git a/ietf/doc/tests_material.py b/ietf/doc/tests_material.py
index 06069fc45..d22f70838 100644
--- a/ietf/doc/tests_material.py
+++ b/ietf/doc/tests_material.py
@@ -9,7 +9,7 @@ from pyquery import PyQuery
 import debug              # pyflakes:ignore
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.doc.models import Document, State, DocAlias, NewRevisionDocEvent
 from ietf.group.models import Group
diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py
index 4d3270cf4..4c0562fc9 100644
--- a/ietf/doc/tests_review.py
+++ b/ietf/doc/tests_review.py
@@ -5,7 +5,7 @@ import tarfile, tempfile, mailbox
 import email.mime.multipart, email.mime.text, email.utils
 from StringIO import StringIO
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.conf import settings
 
 from pyquery import PyQuery
diff --git a/ietf/doc/tests_status_change.py b/ietf/doc/tests_status_change.py
index fac869e68..a84a6ae73 100644
--- a/ietf/doc/tests_status_change.py
+++ b/ietf/doc/tests_status_change.py
@@ -7,7 +7,7 @@ from StringIO import StringIO
 from textwrap import wrap
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.doc.models import ( Document, DocAlias, State, DocEvent,
     BallotPositionDocEvent, NewRevisionDocEvent, TelechatDocEvent, WriteupDocEvent )
diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py
index d3d069592..a91372c8a 100644
--- a/ietf/doc/utils.py
+++ b/ietf/doc/utils.py
@@ -10,7 +10,7 @@ from collections import defaultdict
 from django.conf import settings
 from django.forms import ValidationError
 from django.utils.html import escape
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
@@ -95,7 +95,7 @@ def get_tags_for_stream_id(stream_id):
         return []
 
 def can_adopt_draft(user, doc):
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return False
 
     if has_role(user, "Secretariat"):
diff --git a/ietf/doc/utils_charter.py b/ietf/doc/utils_charter.py
index fca6adcf3..f4d4fc975 100644
--- a/ietf/doc/utils_charter.py
+++ b/ietf/doc/utils_charter.py
@@ -1,7 +1,7 @@
 import re, datetime, os, shutil
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.template.loader import render_to_string
 from django.utils.encoding import smart_text
 
diff --git a/ietf/doc/views_ballot.py b/ietf/doc/views_ballot.py
index bc8878f51..9d46df1ee 100644
--- a/ietf/doc/views_ballot.py
+++ b/ietf/doc/views_ballot.py
@@ -5,7 +5,7 @@ import datetime, json
 
 from django.http import HttpResponseForbidden, HttpResponseRedirect, Http404
 from django.shortcuts import render, get_object_or_404, redirect
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.template.loader import render_to_string
 from django import forms
 from django.conf import settings
diff --git a/ietf/doc/views_charter.py b/ietf/doc/views_charter.py
index f74a126fe..37d70c845 100644
--- a/ietf/doc/views_charter.py
+++ b/ietf/doc/views_charter.py
@@ -2,7 +2,7 @@ import os, datetime, textwrap, json
 
 from django.http import HttpResponseRedirect, HttpResponseNotFound, HttpResponseForbidden, Http404
 from django.shortcuts import get_object_or_404, redirect, render
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django import forms
 from django.utils.safestring import mark_safe
 from django.conf import settings
diff --git a/ietf/doc/views_conflict_review.py b/ietf/doc/views_conflict_review.py
index 37f75eb52..e56891cca 100644
--- a/ietf/doc/views_conflict_review.py
+++ b/ietf/doc/views_conflict_review.py
@@ -3,7 +3,7 @@ import datetime, os
 from django import forms
 from django.shortcuts import render, get_object_or_404, redirect
 from django.http import HttpResponseRedirect, Http404
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.template.loader import render_to_string
 from django.conf import settings
 
diff --git a/ietf/doc/views_doc.py b/ietf/doc/views_doc.py
index 3da42be0e..6cf0c7903 100644
--- a/ietf/doc/views_doc.py
+++ b/ietf/doc/views_doc.py
@@ -37,7 +37,7 @@ import os, datetime, urllib, json, glob, re
 from django.http import HttpResponse, Http404 , HttpResponseForbidden
 from django.shortcuts import render, get_object_or_404, redirect
 from django.template.loader import render_to_string
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.conf import settings
 from django import forms
 
@@ -162,7 +162,7 @@ def document_main(request, name, rev=None):
         can_edit = has_role(request.user, ("Area Director", "Secretariat"))
         stream_slugs = StreamName.objects.values_list("slug", flat=True)
         can_change_stream = bool(can_edit or (
-                request.user.is_authenticated() and
+                request.user.is_authenticated and
                 Role.objects.filter(name__in=("chair", "secr", "auth", "delegate"),
                                     group__acronym__in=stream_slugs,
                                     person__user=request.user)))
@@ -735,7 +735,7 @@ def document_history(request, name):
     # figure out if the current user can add a comment to the history
     if doc.type_id == "draft" and doc.group != None:
         can_add_comment = bool(has_role(request.user, ("Area Director", "Secretariat", "IRTF Chair", "IANA", "RFC Editor")) or (
-            request.user.is_authenticated() and
+            request.user.is_authenticated and
             Role.objects.filter(name__in=("chair", "secr"),
                 group__acronym=doc.group.acronym,
                 person__user=request.user)))
@@ -1023,7 +1023,7 @@ def add_comment(request, name):
 
     if doc.type_id == "draft" and doc.group != None:
         can_add_comment = bool(has_role(request.user, ("Area Director", "Secretariat", "IRTF Chair", "IANA", "RFC Editor")) or (
-            request.user.is_authenticated() and
+            request.user.is_authenticated and
             Role.objects.filter(name__in=("chair", "secr"),
                 group__acronym=doc.group.acronym,
                 person__user=request.user)))
@@ -1150,7 +1150,7 @@ def email_aliases(request,name=''):
     if not name:
         # require login for the overview page, but not for the
         # document-specific pages 
-        if not request.user.is_authenticated():
+        if not request.user.is_authenticated:
                 return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
     aliases = get_doc_email_aliases(name)
 
diff --git a/ietf/doc/views_draft.py b/ietf/doc/views_draft.py
index 78a1129d4..39a745f2a 100644
--- a/ietf/doc/views_draft.py
+++ b/ietf/doc/views_draft.py
@@ -222,7 +222,7 @@ def change_stream(request, name):
         raise Http404
 
     if not (has_role(request.user, ("Area Director", "Secretariat")) or
-            (request.user.is_authenticated() and
+            (request.user.is_authenticated and
              Role.objects.filter(name="chair",
                                  group__acronym__in=StreamName.objects.values_list("slug", flat=True),
                                  person__user=request.user))):
diff --git a/ietf/doc/views_material.py b/ietf/doc/views_material.py
index b6ec953db..bfbdf0bc8 100644
--- a/ietf/doc/views_material.py
+++ b/ietf/doc/views_material.py
@@ -7,7 +7,7 @@ from django.shortcuts import render, get_object_or_404, redirect
 from django.http import HttpResponseForbidden, Http404
 from django.utils.html import mark_safe
 from django.contrib.auth.decorators import login_required
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/doc/views_review.py b/ietf/doc/views_review.py
index 3a39aeb5f..a392bdf8a 100644
--- a/ietf/doc/views_review.py
+++ b/ietf/doc/views_review.py
@@ -9,7 +9,7 @@ from django.contrib.auth.decorators import login_required
 from django.utils.html import mark_safe
 from django.core.exceptions import ValidationError
 from django.template.loader import render_to_string, TemplateDoesNotExist
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.doc.models import (Document, NewRevisionDocEvent, State, DocAlias,
                              LastCallDocEvent, ReviewRequestDocEvent, DocumentAuthor)
diff --git a/ietf/doc/views_search.py b/ietf/doc/views_search.py
index f6c8f8277..b46b7a373 100644
--- a/ietf/doc/views_search.py
+++ b/ietf/doc/views_search.py
@@ -36,7 +36,7 @@ import datetime
 from django import forms
 from django.conf import settings
 from django.core.cache import cache
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.db.models import Q
 from django.http import Http404, HttpResponseBadRequest, HttpResponse, HttpResponseRedirect, QueryDict
 from django.shortcuts import render
diff --git a/ietf/doc/views_stats.py b/ietf/doc/views_stats.py
index 5b7b33492..639a9bb93 100644
--- a/ietf/doc/views_stats.py
+++ b/ietf/doc/views_stats.py
@@ -5,7 +5,7 @@ import datetime
 
 from django.conf import settings
 from django.core.cache import cache
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.db.models.aggregates import Count
 from django.http import JsonResponse, HttpResponseBadRequest
 from django.shortcuts import render
diff --git a/ietf/doc/views_status_change.py b/ietf/doc/views_status_change.py
index a2a80311b..371a255d0 100644
--- a/ietf/doc/views_status_change.py
+++ b/ietf/doc/views_status_change.py
@@ -3,7 +3,7 @@ import datetime, os, re
 from django import forms
 from django.shortcuts import render, get_object_or_404, redirect
 from django.http import Http404, HttpResponseRedirect
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.template.loader import render_to_string
 from django.conf import settings
 
diff --git a/ietf/group/feeds.py b/ietf/group/feeds.py
index a3332cc1e..3b36b0608 100644
--- a/ietf/group/feeds.py
+++ b/ietf/group/feeds.py
@@ -2,7 +2,7 @@
 
 from django.contrib.syndication.views import Feed, FeedDoesNotExist
 from django.utils.feedgenerator import Atom1Feed
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.utils.html import strip_tags
 from django.template.defaultfilters import truncatewords
 
diff --git a/ietf/group/mails.py b/ietf/group/mails.py
index 3924a383b..1a619deb3 100644
--- a/ietf/group/mails.py
+++ b/ietf/group/mails.py
@@ -6,7 +6,7 @@ import re
 from django.utils.html import strip_tags
 from django.utils.text import wrap
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.utils.mail import send_mail, send_mail_text
 from ietf.mailtrigger.utils import gather_address_lists
diff --git a/ietf/group/models.py b/ietf/group/models.py
index b3fdd46ba..c49abc37a 100644
--- a/ietf/group/models.py
+++ b/ietf/group/models.py
@@ -52,7 +52,7 @@ class GroupInfo(models.Model):
 
     def about_url(self):
         # bridge gap between group-type prefixed URLs and /group/ ones
-        from django.core.urlresolvers import reverse as urlreverse
+        from django.urls import reverse as urlreverse
         kwargs = { 'acronym': self.acronym }
         if self.type_id in ("wg", "rg"):
             kwargs["group_type"] = self.type_id
@@ -89,7 +89,7 @@ class Group(GroupInfo):
     def has_role(self, user, role_names):
         if isinstance(role_names, str) or isinstance(role_names, unicode):
             role_names = [role_names]
-        return user.is_authenticated() and self.role_set.filter(name__in=role_names, person__user=user).exists()
+        return user.is_authenticated and self.role_set.filter(name__in=role_names, person__user=user).exists()
 
     def is_decendant_of(self, sought_parent):
         p = self.parent
diff --git a/ietf/group/tests.py b/ietf/group/tests.py
index 14c9b7ee0..334ee1c24 100644
--- a/ietf/group/tests.py
+++ b/ietf/group/tests.py
@@ -4,7 +4,7 @@ from unittest import skipIf
 from pyquery import PyQuery
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.db.models import Q
 from django.test import Client
 
diff --git a/ietf/group/tests_info.py b/ietf/group/tests_info.py
index d4e05c3a9..86c798fb3 100644
--- a/ietf/group/tests_info.py
+++ b/ietf/group/tests_info.py
@@ -11,8 +11,8 @@ from tempfile import NamedTemporaryFile
 import debug                            # pyflakes:ignore
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
-from django.core.urlresolvers import NoReverseMatch
+from django.urls import reverse as urlreverse
+from django.urls import NoReverseMatch
 from django.contrib.auth.models import User
 
 from django.utils.html import escape
diff --git a/ietf/group/tests_review.py b/ietf/group/tests_review.py
index d65957eda..9c7814f18 100644
--- a/ietf/group/tests_review.py
+++ b/ietf/group/tests_review.py
@@ -2,7 +2,7 @@ import datetime
 
 from pyquery import PyQuery
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.utils.test_data import make_test_data, make_review_data
 from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent, reload_db_objects
diff --git a/ietf/group/utils.py b/ietf/group/utils.py
index 0380798bc..3a4f195ad 100644
--- a/ietf/group/utils.py
+++ b/ietf/group/utils.py
@@ -2,7 +2,7 @@ import os
 
 from django.shortcuts import get_object_or_404
 from django.utils.safestring import mark_safe
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/group/views.py b/ietf/group/views.py
index bf46e7136..064b40e4f 100644
--- a/ietf/group/views.py
+++ b/ietf/group/views.py
@@ -46,7 +46,7 @@ from django.shortcuts import render, redirect, get_object_or_404
 from django.template.loader import render_to_string
 from django.http import HttpResponse, Http404, HttpResponseRedirect
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.views.decorators.cache import cache_page
 from django.db.models import Q
 
@@ -376,7 +376,7 @@ def group_documents(request, acronym, group_type=None):
 
     docs, meta, docs_related, meta_related = prepare_group_documents(request, group, clist)
 
-    subscribed = request.user.is_authenticated() and EmailSubscription.objects.filter(community_list=clist, email__person__user=request.user)
+    subscribed = request.user.is_authenticated and EmailSubscription.objects.filter(community_list=clist, email__person__user=request.user)
 
     context = construct_group_menu_context(request, group, "documents", group_type, {
                 'docs': docs,
@@ -772,7 +772,7 @@ def email_aliases(request, acronym=None, group_type=None):
     if not acronym:
         # require login for the overview page, but not for the group-specific
         # pages 
-        if not request.user.is_authenticated():
+        if not request.user.is_authenticated:
                 return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
 
     aliases = get_group_email_aliases(acronym, group_type)
diff --git a/ietf/group/views_ajax.py b/ietf/group/views_ajax.py
index fd16eb92e..fd30f5cb5 100644
--- a/ietf/group/views_ajax.py
+++ b/ietf/group/views_ajax.py
@@ -3,7 +3,7 @@ from collections import defaultdict
 
 from django.http import HttpResponse, JsonResponse
 from django.shortcuts import get_object_or_404
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.utils.html import escape
 from django.views.decorators.cache import cache_page, cache_control
 
diff --git a/ietf/group/views_review.py b/ietf/group/views_review.py
index 6b52a4c14..c5dff6d4a 100644
--- a/ietf/group/views_review.py
+++ b/ietf/group/views_review.py
@@ -6,7 +6,7 @@ import debug    # pyflakes:ignore
 from django.shortcuts import render, redirect, get_object_or_404
 from django.http import Http404, HttpResponseForbidden, HttpResponseRedirect
 from django.contrib.auth.decorators import login_required
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.db.models import Max
 from django import forms
 from django.template.loader import render_to_string
diff --git a/ietf/help/models.py b/ietf/help/models.py
index b1cfe267e..b7db25411 100644
--- a/ietf/help/models.py
+++ b/ietf/help/models.py
@@ -1 +1 @@
-# Empty
\ No newline at end of file
+# Empty
diff --git a/ietf/help/tests_views.py b/ietf/help/tests_views.py
index 6f03e433e..2d6207ea2 100644
--- a/ietf/help/tests_views.py
+++ b/ietf/help/tests_views.py
@@ -1,6 +1,6 @@
 from pyquery import PyQuery
 
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py
index 920201280..aa7d976f9 100644
--- a/ietf/iesg/tests.py
+++ b/ietf/iesg/tests.py
@@ -5,7 +5,7 @@ import json
 import datetime
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from pyquery import PyQuery
 
diff --git a/ietf/ietfauth/forms.py b/ietf/ietfauth/forms.py
index 8bf9cd63f..d6ef9ff97 100644
--- a/ietf/ietfauth/forms.py
+++ b/ietf/ietfauth/forms.py
@@ -7,7 +7,7 @@ from django.core.exceptions import ValidationError
 from django.db import models
 from django.contrib.auth.models import User
 from django.utils.html import mark_safe
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from django_password_strength.widgets import PasswordStrengthInput, PasswordConfirmationInput
 
diff --git a/ietf/ietfauth/tests.py b/ietf/ietfauth/tests.py
index 363d140a2..642603163 100644
--- a/ietf/ietfauth/tests.py
+++ b/ietf/ietfauth/tests.py
@@ -7,7 +7,7 @@ from pyquery import PyQuery
 from unittest import skipIf
 
 import django.contrib.auth.views
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.contrib.auth.models import User
 from django.conf import settings
 
diff --git a/ietf/ietfauth/utils.py b/ietf/ietfauth/utils.py
index 560cf376e..3be74cd08 100644
--- a/ietf/ietfauth/utils.py
+++ b/ietf/ietfauth/utils.py
@@ -14,7 +14,7 @@ from ietf.person.models import Person
 
 def user_is_person(user, person):
     """Test whether user is associated with person."""
-    if not user.is_authenticated() or not person:
+    if not user.is_authenticated or not person:
         return False
 
     if person.user_id == None:
@@ -29,7 +29,7 @@ def has_role(user, role_names, *args, **kwargs):
     if isinstance(role_names, str) or isinstance(role_names, unicode):
         role_names = [ role_names ]
     
-    if not user or not user.is_authenticated():
+    if not user or not user.is_authenticated:
         return False
 
     # use cache to avoid checking the same permissions again and again
@@ -93,7 +93,7 @@ def passes_test_decorator(test_func, message):
     def decorate(view_func):
         @wraps(view_func, assigned=available_attrs(view_func))
         def inner(request, *args, **kwargs):
-            if not request.user.is_authenticated():
+            if not request.user.is_authenticated:
                 return HttpResponseRedirect('%s?%s=%s' % (settings.LOGIN_URL, REDIRECT_FIELD_NAME, urlquote(request.get_full_path())))
             elif test_func(request.user, *args, **kwargs):
                 return view_func(request, *args, **kwargs)
@@ -117,7 +117,7 @@ def is_authorized_in_doc_stream(user, doc):
     if has_role(user, ["Secretariat"]):
         return True
 
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return False
 
     # must be authorized in the stream or group
diff --git a/ietf/ietfauth/views.py b/ietf/ietfauth/views.py
index 35b184fb0..0835e9179 100644
--- a/ietf/ietfauth/views.py
+++ b/ietf/ietfauth/views.py
@@ -48,7 +48,7 @@ from django.contrib.auth.hashers import identify_hasher
 from django.contrib.auth.models import User
 from django.contrib.auth.views import login as django_login
 from django.contrib.sites.models import Site
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.http import Http404, HttpResponseRedirect  #, HttpResponse, 
 from django.shortcuts import render, redirect, get_object_or_404
 
@@ -81,7 +81,7 @@ def index(request):
 
 # @login_required
 # def ietf_login(request):
-#     if not request.user.is_authenticated():
+#     if not request.user.is_authenticated:
 #         return HttpResponse("Not authenticated?", status=500)
 # 
 #     redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, '')
diff --git a/ietf/ipr/feeds.py b/ietf/ipr/feeds.py
index 2e9a6f01f..0da26c542 100644
--- a/ietf/ipr/feeds.py
+++ b/ietf/ipr/feeds.py
@@ -2,7 +2,7 @@
 
 from django.contrib.syndication.views import Feed
 from django.utils.feedgenerator import Atom1Feed
-from django.core.urlresolvers import reverse_lazy
+from django.urls import reverse_lazy
 from django.utils.safestring import mark_safe
 
 from ietf.ipr.models import IprDisclosureBase
diff --git a/ietf/ipr/fields.py b/ietf/ipr/fields.py
index a93965ea0..271b1a5eb 100644
--- a/ietf/ipr/fields.py
+++ b/ietf/ipr/fields.py
@@ -2,7 +2,7 @@ import json
 
 from django.utils.html import escape
 from django import forms
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.ipr.models import IprDisclosureBase
 
diff --git a/ietf/ipr/models.py b/ietf/ipr/models.py
index 9822cb2a0..7bde39974 100644
--- a/ietf/ipr/models.py
+++ b/ietf/ipr/models.py
@@ -3,7 +3,7 @@
 import datetime
 
 from django.conf import settings
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.db import models
 
 from ietf.doc.models import DocAlias
diff --git a/ietf/ipr/tests.py b/ietf/ipr/tests.py
index 3acbee4af..03596953a 100644
--- a/ietf/ipr/tests.py
+++ b/ietf/ipr/tests.py
@@ -3,7 +3,7 @@ import urllib
 
 from pyquery import PyQuery
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/ipr/urls.py b/ietf/ipr/urls.py
index fd981a731..476a9f6a7 100644
--- a/ietf/ipr/urls.py
+++ b/ietf/ipr/urls.py
@@ -1,7 +1,7 @@
 # Copyright The IETF Trust 2007, All Rights Reserved
 
 from django.views.generic import RedirectView
-from django.core.urlresolvers import reverse_lazy
+from django.urls import reverse_lazy
 
 from ietf.ipr import views
 from ietf.utils.urls import url
diff --git a/ietf/ipr/utils.py b/ietf/ipr/utils.py
index 016445733..419fa6ba9 100644
--- a/ietf/ipr/utils.py
+++ b/ietf/ipr/utils.py
@@ -42,4 +42,4 @@ def related_docs(alias):
             x.related = rel
             x.relation = rel.relationship.revname
         results += rel_aliases
-    return list(set(results))
\ No newline at end of file
+    return list(set(results))
diff --git a/ietf/ipr/views.py b/ietf/ipr/views.py
index 9cead7506..f1709c4c3 100644
--- a/ietf/ipr/views.py
+++ b/ietf/ipr/views.py
@@ -5,7 +5,7 @@ import itertools
 
 from django.conf import settings
 from django.contrib import messages
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.db.models import Q
 from django.forms.models import inlineformset_factory
 from django.forms.formsets import formset_factory
diff --git a/ietf/liaisons/admin.py b/ietf/liaisons/admin.py
index acb09ebaf..bcbd64fee 100644
--- a/ietf/liaisons/admin.py
+++ b/ietf/liaisons/admin.py
@@ -1,5 +1,5 @@
 from django.contrib import admin
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 from ietf.liaisons.models import  ( LiaisonStatement, LiaisonStatementEvent,
     LiaisonStatementGroupContacts, RelatedLiaisonStatement, LiaisonStatementAttachment )
diff --git a/ietf/liaisons/feeds.py b/ietf/liaisons/feeds.py
index a5e85ced4..adbde6c40 100644
--- a/ietf/liaisons/feeds.py
+++ b/ietf/liaisons/feeds.py
@@ -6,7 +6,7 @@ from django.contrib.syndication.views import Feed, FeedDoesNotExist
 from django.utils.feedgenerator import Atom1Feed
 from django.template.loader import render_to_string
 from django.db.models import Q
-from django.core.urlresolvers import reverse as urlreverse, reverse_lazy
+from django.urls import reverse as urlreverse, reverse_lazy
 
 from ietf.group.models import Group
 from ietf.liaisons.models import LiaisonStatement
diff --git a/ietf/liaisons/fields.py b/ietf/liaisons/fields.py
index e83b1063b..8a5c74828 100644
--- a/ietf/liaisons/fields.py
+++ b/ietf/liaisons/fields.py
@@ -2,7 +2,7 @@ import json
 
 from django.utils.html import escape
 from django import forms
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.liaisons.models import LiaisonStatement
 
diff --git a/ietf/liaisons/management/commands/check_liaison_deadlines.py b/ietf/liaisons/management/commands/check_liaison_deadlines.py
index aebadb46f..3f7ae0dcb 100644
--- a/ietf/liaisons/management/commands/check_liaison_deadlines.py
+++ b/ietf/liaisons/management/commands/check_liaison_deadlines.py
@@ -19,4 +19,4 @@ class Command(BaseCommand):
             if r:
                 msgs.append('Liaison %05s#: Deadline reminder sent!' % l.pk)
 
-        return '\n'.join(msgs)
\ No newline at end of file
+        return '\n'.join(msgs)
diff --git a/ietf/liaisons/management/commands/remind_update_sdo_list.py b/ietf/liaisons/management/commands/remind_update_sdo_list.py
index a33b069b4..44e660d3d 100644
--- a/ietf/liaisons/management/commands/remind_update_sdo_list.py
+++ b/ietf/liaisons/management/commands/remind_update_sdo_list.py
@@ -37,4 +37,4 @@ def send_reminders_to_sdos(sdo_pk=None):
             msg = u'%05s#: %s mail sent!' % (sdo.pk, sdo.name)
         msgs.append(msg)
 
-    return msgs
\ No newline at end of file
+    return msgs
diff --git a/ietf/liaisons/migrations/0005_migrate_groups.py b/ietf/liaisons/migrations/0005_migrate_groups.py
index f595ad164..c96d29706 100644
--- a/ietf/liaisons/migrations/0005_migrate_groups.py
+++ b/ietf/liaisons/migrations/0005_migrate_groups.py
@@ -789,4 +789,4 @@ DEFAULT_POC = {
     'maawg':'Mike Adkins <madkins@fb.com>,technical-chair@mailman.m3aawg.org',
     'ecma-tc39':'John Neuman <johnneumann.openstrat@gmail.com>,Istvan Sebestyen <istvan@ecma-interational.org>',
 }
-    
\ No newline at end of file
+    
diff --git a/ietf/liaisons/models.py b/ietf/liaisons/models.py
index e501a9fea..4633bc419 100644
--- a/ietf/liaisons/models.py
+++ b/ietf/liaisons/models.py
@@ -1,7 +1,7 @@
 # Copyright The IETF Trust 2007, All Rights Reserved
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.db import models
 from django.utils.text import slugify
 
diff --git a/ietf/liaisons/tests.py b/ietf/liaisons/tests.py
index 75f491e2d..93272fc51 100644
--- a/ietf/liaisons/tests.py
+++ b/ietf/liaisons/tests.py
@@ -3,7 +3,7 @@ import json
 
 from django.conf import settings
 from django.contrib.auth.models import User
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.db.models import Q
 from StringIO import StringIO
 from pyquery import PyQuery
diff --git a/ietf/liaisons/utils.py b/ietf/liaisons/utils.py
index f797c22b8..df4883191 100644
--- a/ietf/liaisons/utils.py
+++ b/ietf/liaisons/utils.py
@@ -34,7 +34,7 @@ def can_edit_liaison(user, liaison):
     - liaison is outgoing and user has approval authority
     - user is liaison manager of all SDOs involved
     '''
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return False
     if has_role(user, "Secretariat"):
         return True
diff --git a/ietf/liaisons/views.py b/ietf/liaisons/views.py
index 9d84cbdf5..6817627e8 100644
--- a/ietf/liaisons/views.py
+++ b/ietf/liaisons/views.py
@@ -3,7 +3,7 @@ import json
 from email.utils import parseaddr
 
 from django.contrib import messages
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.core.validators import validate_email, ValidationError
 from django.db.models import Q, Prefetch
 from django.http import HttpResponse, HttpResponseForbidden
@@ -36,7 +36,7 @@ EMAIL_ALIASES = {
 # -------------------------------------------------
 def _can_reply(liaison, user):
     '''Returns true if the user can send a reply to this liaison'''
-    if user.is_authenticated():
+    if user.is_authenticated:
         person = get_person_for_user(user)
         if has_role(user, "Secretariat"):
             return True
@@ -51,7 +51,7 @@ def _can_take_care(liaison, user):
     if not liaison.deadline or liaison.action_taken:
         return False
 
-    if user.is_authenticated():
+    if user.is_authenticated:
         if has_role(user, "Secretariat"):
             return True
         else:
diff --git a/ietf/liaisons/widgets.py b/ietf/liaisons/widgets.py
index 05772aff1..ea281cc40 100644
--- a/ietf/liaisons/widgets.py
+++ b/ietf/liaisons/widgets.py
@@ -1,4 +1,4 @@
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.db.models.query import QuerySet
 from django.forms.widgets import Widget
 from django.utils.safestring import mark_safe
diff --git a/ietf/mailinglists/tests.py b/ietf/mailinglists/tests.py
index 8e32972a5..0796c106f 100644
--- a/ietf/mailinglists/tests.py
+++ b/ietf/mailinglists/tests.py
@@ -1,6 +1,6 @@
 # Copyright The IETF Trust 2016, All Rights Reserved
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from pyquery import PyQuery
 
diff --git a/ietf/mailtrigger/tests.py b/ietf/mailtrigger/tests.py
index 6a319021f..0a68ff807 100644
--- a/ietf/mailtrigger/tests.py
+++ b/ietf/mailtrigger/tests.py
@@ -1,4 +1,4 @@
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.utils.test_utils import TestCase, unicontent
 from ietf.utils.test_data import make_test_data
diff --git a/ietf/mailtrigger/urls.py b/ietf/mailtrigger/urls.py
index 918c90f34..bb5509c98 100644
--- a/ietf/mailtrigger/urls.py
+++ b/ietf/mailtrigger/urls.py
@@ -1,5 +1,5 @@
 from django.views.generic import RedirectView
-from django.core.urlresolvers import reverse_lazy
+from django.urls import reverse_lazy
 
 from ietf.mailtrigger import views
 from ietf.utils.urls import url
diff --git a/ietf/meeting/ajax.py b/ietf/meeting/ajax.py
index d4fa59115..32e97dbd1 100644
--- a/ietf/meeting/ajax.py
+++ b/ietf/meeting/ajax.py
@@ -281,7 +281,7 @@ def agenda_update(request, meeting, schedule):
 
     user = request.user
 
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return HttpResponse({'error':'no permission'}, status=403)
 
     cansee,canedit,secretariat = agenda_permissions(meeting, schedule, request.user)
diff --git a/ietf/meeting/helpers.py b/ietf/meeting/helpers.py
index 143a65351..89d9eaadd 100644
--- a/ietf/meeting/helpers.py
+++ b/ietf/meeting/helpers.py
@@ -9,7 +9,7 @@ from django.http import HttpRequest, Http404
 from django.db.models import Max, Q, Prefetch, F
 from django.conf import settings
 from django.core.cache import cache
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.utils.cache import get_cache_key
 from django.shortcuts import get_object_or_404
 from django.template.loader import render_to_string
diff --git a/ietf/meeting/tests_api.py b/ietf/meeting/tests_api.py
index c59ef8a01..39e55e439 100644
--- a/ietf/meeting/tests_api.py
+++ b/ietf/meeting/tests_api.py
@@ -2,7 +2,7 @@ import datetime
 import json
 from urlparse import urlsplit
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/meeting/tests_js.py b/ietf/meeting/tests_js.py
index c0f411061..230c960f9 100644
--- a/ietf/meeting/tests_js.py
+++ b/ietf/meeting/tests_js.py
@@ -6,7 +6,7 @@ from pyquery import PyQuery
 from unittest import skipIf
 
 from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 #from django.test.utils import override_settings
 
 import debug                            # pyflakes:ignore
diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py
index 6511eb238..f1d3825c0 100644
--- a/ietf/meeting/tests_views.py
+++ b/ietf/meeting/tests_views.py
@@ -7,7 +7,7 @@ import random
 
 import debug           # pyflakes:ignore
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.conf import settings
 from django.contrib.auth.models import User
 
diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py
index 46b23d63e..ba3c52457 100644
--- a/ietf/meeting/views.py
+++ b/ietf/meeting/views.py
@@ -21,7 +21,7 @@ from django.shortcuts import render, redirect, get_object_or_404
 from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, Http404
 from django.contrib import messages
 from django.contrib.auth.decorators import login_required
-from django.core.urlresolvers import reverse,reverse_lazy
+from django.urls import reverse,reverse_lazy
 from django.db.models import Min, Max, Q
 from django.conf import settings
 from django.forms.models import modelform_factory, inlineformset_factory
diff --git a/ietf/message/tests.py b/ietf/message/tests.py
index 28616b2f2..7bf3c9d8c 100644
--- a/ietf/message/tests.py
+++ b/ietf/message/tests.py
@@ -1,6 +1,6 @@
 import datetime
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.utils.test_utils import TestCase, unicontent
 from ietf.utils.test_data import make_test_data
diff --git a/ietf/middleware.py b/ietf/middleware.py
index 8816fbb69..5773b0b1f 100644
--- a/ietf/middleware.py
+++ b/ietf/middleware.py
@@ -53,4 +53,4 @@ def unicode_nfkc_normalization_middleware(get_response):
         response = get_response(request)
         return response
     return unicode_nfkc_normalization
-        
\ No newline at end of file
+        
diff --git a/ietf/nomcom/decorators.py b/ietf/nomcom/decorators.py
index 09484815d..231661799 100644
--- a/ietf/nomcom/decorators.py
+++ b/ietf/nomcom/decorators.py
@@ -1,6 +1,6 @@
 import functools
 
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.http import HttpResponseRedirect
 from django.utils.http import urlquote
 
diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py
index b86b7bdd6..3bdf768ca 100644
--- a/ietf/nomcom/forms.py
+++ b/ietf/nomcom/forms.py
@@ -4,7 +4,7 @@ from formtools.preview import FormPreview, AUTO_ID
 from django.shortcuts import get_object_or_404, redirect
 from django.utils.decorators import method_decorator
 from django.shortcuts import render
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.utils.html import mark_safe
 
 from ietf.dbtemplate.forms import DBTemplateForm
diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py
index ac6e9f301..6922e8da9 100644
--- a/ietf/nomcom/tests.py
+++ b/ietf/nomcom/tests.py
@@ -10,7 +10,7 @@ import StringIO
 from django.db import IntegrityError
 from django.db.models import Max
 from django.conf import settings
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.core.files import File
 from django.contrib.auth.models import User
 
diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py
index 7955f3dfc..28172df7f 100644
--- a/ietf/nomcom/utils.py
+++ b/ietf/nomcom/utils.py
@@ -11,7 +11,7 @@ from email import message_from_string
 from django.conf import settings
 from django.contrib.sites.models import Site
 from django.core.exceptions import ObjectDoesNotExist
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.template.loader import render_to_string
 from django.shortcuts import get_object_or_404
 from django.utils.encoding import smart_str
diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py
index 7d404de2f..e7a156ce5 100644
--- a/ietf/nomcom/views.py
+++ b/ietf/nomcom/views.py
@@ -6,7 +6,7 @@ from django.conf import settings
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.models import AnonymousUser
 from django.contrib import messages
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.http import Http404, HttpResponseRedirect, HttpResponseForbidden
 from django.shortcuts import render, get_object_or_404, redirect
 from django.template.loader import render_to_string
diff --git a/ietf/person/fields.py b/ietf/person/fields.py
index c813973d3..3400e6cdb 100644
--- a/ietf/person/fields.py
+++ b/ietf/person/fields.py
@@ -6,7 +6,7 @@ from urllib import urlencode
 
 from django.utils.html import escape
 from django import forms
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/person/tests.py b/ietf/person/tests.py
index 2091a2600..ab292f5e3 100644
--- a/ietf/person/tests.py
+++ b/ietf/person/tests.py
@@ -4,7 +4,7 @@ from __future__ import unicode_literals
 import json
 from pyquery import PyQuery
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/release/tests.py b/ietf/release/tests.py
index 3b9b41087..e4981ecee 100644
--- a/ietf/release/tests.py
+++ b/ietf/release/tests.py
@@ -1,6 +1,6 @@
 from pyquery import PyQuery
 
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/review/utils.py b/ietf/review/utils.py
index 8f05bf142..cb1a36d0e 100644
--- a/ietf/review/utils.py
+++ b/ietf/review/utils.py
@@ -2,7 +2,7 @@ import datetime, re, itertools
 from collections import defaultdict, namedtuple
 
 from django.db.models import Q, Max, F
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.contrib.sites.models import Site
 
 import debug                            # pyflakes:ignore
@@ -27,7 +27,7 @@ def close_review_request_states():
     return ReviewRequestStateName.objects.filter(used=True).exclude(slug__in=["requested", "accepted", "rejected", "part-completed", "completed"])
 
 def can_request_review_of_doc(user, doc):
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return False
 
     if doc.type_id == 'draft' and doc.get_state_slug() != 'active':
@@ -37,14 +37,14 @@ def can_request_review_of_doc(user, doc):
             or Role.objects.filter(person__user=user, name="secr", group__in=active_review_teams()).exists())
 
 def can_manage_review_requests_for_team(user, team, allow_personnel_outside_team=True):
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return False
 
     return (Role.objects.filter(name="secr", person__user=user, group=team).exists()
             or (allow_personnel_outside_team and has_role(user, "Secretariat")))
 
 def can_access_review_stats_for_team(user, team):
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return False
 
     return (Role.objects.filter(name__in=("secr", "reviewer"), person__user=user, group=team).exists()
diff --git a/ietf/secr/announcement/tests.py b/ietf/secr/announcement/tests.py
index f3a8cb73b..d9a5948f2 100644
--- a/ietf/secr/announcement/tests.py
+++ b/ietf/secr/announcement/tests.py
@@ -1,5 +1,5 @@
 from django.db import connection
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 from pyquery import PyQuery
 
diff --git a/ietf/secr/areas/tests.py b/ietf/secr/areas/tests.py
index 5854fbc14..dcc909132 100644
--- a/ietf/secr/areas/tests.py
+++ b/ietf/secr/areas/tests.py
@@ -1,4 +1,4 @@
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 from ietf.group.models import Group, GroupEvent
 from ietf.person.models import Person
diff --git a/ietf/secr/drafts/reports.py b/ietf/secr/drafts/reports.py
index 12097a3d4..3e2edfeda 100644
--- a/ietf/secr/drafts/reports.py
+++ b/ietf/secr/drafts/reports.py
@@ -100,4 +100,4 @@ def report_progress_report(start_date,end_date):
     
     report = render_to_string('drafts/report_progress_report.txt', context)
     
-    return report
\ No newline at end of file
+    return report
diff --git a/ietf/secr/drafts/tests_views.py b/ietf/secr/drafts/tests_views.py
index 103832884..54a965462 100644
--- a/ietf/secr/drafts/tests_views.py
+++ b/ietf/secr/drafts/tests_views.py
@@ -3,7 +3,7 @@ import shutil
 
 from StringIO import StringIO
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/secr/groups/tests.py b/ietf/secr/groups/tests.py
index d611f1e86..fbc2ea2e3 100644
--- a/ietf/secr/groups/tests.py
+++ b/ietf/secr/groups/tests.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from ietf.utils.test_utils import TestCase
 from ietf.group.models import Group
 from ietf.person.models import Person
diff --git a/ietf/secr/meetings/models.py b/ietf/secr/meetings/models.py
index 40489d329..f469be449 100644
--- a/ietf/secr/meetings/models.py
+++ b/ietf/secr/meetings/models.py
@@ -50,4 +50,4 @@ class NonSession(models.Model):
         db_table = 'non_session'
         verbose_name = "Meeting non-session slot"
 
-"""
\ No newline at end of file
+"""
diff --git a/ietf/secr/meetings/tests.py b/ietf/secr/meetings/tests.py
index b0b190719..fbcc499d7 100644
--- a/ietf/secr/meetings/tests.py
+++ b/ietf/secr/meetings/tests.py
@@ -7,7 +7,7 @@ from StringIO import StringIO
 import debug         # pyflakes:ignore
 
 from django.conf import settings
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 from ietf.group.models import Group, GroupEvent
 from ietf.meeting.models import Meeting, Room, TimeSlot, SchedTimeSessAssignment
diff --git a/ietf/secr/meetings/views.py b/ietf/secr/meetings/views.py
index 9eeb0bb7b..c75ad3700 100644
--- a/ietf/secr/meetings/views.py
+++ b/ietf/secr/meetings/views.py
@@ -5,7 +5,7 @@ import time
 
 from django.conf import settings
 from django.contrib import messages
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.db.models import Max
 from django.forms.formsets import formset_factory
 from django.forms.models import inlineformset_factory
diff --git a/ietf/secr/proceedings/tests.py b/ietf/secr/proceedings/tests.py
index 3b64ddc87..b41d6bea7 100644
--- a/ietf/secr/proceedings/tests.py
+++ b/ietf/secr/proceedings/tests.py
@@ -3,7 +3,7 @@ import os
 import shutil
 
 from django.conf import settings
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 from ietf.doc.models import Document
 from ietf.group.models import Group
diff --git a/ietf/secr/proceedings/views.py b/ietf/secr/proceedings/views.py
index 2c72bf467..999051eb9 100644
--- a/ietf/secr/proceedings/views.py
+++ b/ietf/secr/proceedings/views.py
@@ -7,7 +7,7 @@ import debug                            # pyflakes:ignore
 
 from django.conf import settings
 from django.contrib import messages
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.db.models import Max
 from django.http import HttpResponseRedirect
 from django.shortcuts import render, get_object_or_404, redirect
diff --git a/ietf/secr/roles/tests.py b/ietf/secr/roles/tests.py
index 7131680ce..7bd041966 100644
--- a/ietf/secr/roles/tests.py
+++ b/ietf/secr/roles/tests.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from ietf.utils.test_utils import TestCase
 
 from ietf.group.models import Group
diff --git a/ietf/secr/roles/views.py b/ietf/secr/roles/views.py
index 2ddffd0df..5c4842f2b 100644
--- a/ietf/secr/roles/views.py
+++ b/ietf/secr/roles/views.py
@@ -1,5 +1,5 @@
 from django.contrib import messages
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 from django.http import HttpResponseRedirect
 from django.shortcuts import render, get_object_or_404
 
diff --git a/ietf/secr/rolodex/tests.py b/ietf/secr/rolodex/tests.py
index 975f3aac2..fbcb3a3f9 100644
--- a/ietf/secr/rolodex/tests.py
+++ b/ietf/secr/rolodex/tests.py
@@ -1,4 +1,4 @@
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 from ietf.utils.test_utils import TestCase
 from ietf.person.models import Person
diff --git a/ietf/secr/sreq/tests.py b/ietf/secr/sreq/tests.py
index 3eef527c1..982ac9c2f 100644
--- a/ietf/secr/sreq/tests.py
+++ b/ietf/secr/sreq/tests.py
@@ -1,4 +1,4 @@
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/secr/telechat/tests.py b/ietf/secr/telechat/tests.py
index 11a4aee74..97126d7e9 100644
--- a/ietf/secr/telechat/tests.py
+++ b/ietf/secr/telechat/tests.py
@@ -1,6 +1,6 @@
 import datetime
 
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 from ietf.utils.test_utils import TestCase
 from ietf.iesg.models import TelechatDate
diff --git a/ietf/secr/utils/decorators.py b/ietf/secr/utils/decorators.py
index 722cd630b..4833630d2 100644
--- a/ietf/secr/utils/decorators.py
+++ b/ietf/secr/utils/decorators.py
@@ -47,7 +47,7 @@ def check_permissions(func):
     meeting_id, slide_id
     """
     def wrapper(request, *args, **kwargs):
-        if not request.user.is_authenticated():
+        if not request.user.is_authenticated:
             return HttpResponseRedirect('%s?%s=%s' % (settings.LOGIN_URL, REDIRECT_FIELD_NAME, urlquote(request.get_full_path())))
         
         session = None
diff --git a/ietf/secr/utils/test.py b/ietf/secr/utils/test.py
index 191b3a986..eed4909f8 100644
--- a/ietf/secr/utils/test.py
+++ b/ietf/secr/utils/test.py
@@ -17,4 +17,4 @@ def copy_roles(person):
     me.role_set.all().delete()
     for role in person.role_set.all():
         Role.objects.create(person=me,email_id='rcross@amsl.com',name=role.name,group=role.group)
-    print me.role_set.all()
\ No newline at end of file
+    print me.role_set.all()
diff --git a/ietf/stats/tests.py b/ietf/stats/tests.py
index 5852f3577..57d0faa28 100644
--- a/ietf/stats/tests.py
+++ b/ietf/stats/tests.py
@@ -1,6 +1,6 @@
 from pyquery import PyQuery
 
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.utils.test_data import make_test_data, make_review_data
 from ietf.utils.test_utils import login_testing_unauthorized, TestCase
diff --git a/ietf/stats/views.py b/ietf/stats/views.py
index 57c9cf5bf..e161a408c 100644
--- a/ietf/stats/views.py
+++ b/ietf/stats/views.py
@@ -2,7 +2,7 @@ import datetime, itertools, json, calendar
 
 from django.shortcuts import render
 from django.contrib.auth.decorators import login_required
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.http import HttpResponseRedirect, HttpResponseForbidden
 
 import dateutil.relativedelta
diff --git a/ietf/submit/admin.py b/ietf/submit/admin.py
index cd6e51e57..194c0d1e0 100644
--- a/ietf/submit/admin.py
+++ b/ietf/submit/admin.py
@@ -1,4 +1,4 @@
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.contrib import admin
 
 
diff --git a/ietf/submit/forms.py b/ietf/submit/forms.py
index ce1dbf3df..0491f0442 100644
--- a/ietf/submit/forms.py
+++ b/ietf/submit/forms.py
@@ -10,7 +10,7 @@ from unidecode import unidecode
 from django import forms
 from django.conf import settings
 from django.utils.html import mark_safe
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/submit/mail.py b/ietf/submit/mail.py
index 76bece2df..505459566 100644
--- a/ietf/submit/mail.py
+++ b/ietf/submit/mail.py
@@ -6,7 +6,7 @@ import os
 import pyzmail
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.core.validators import ValidationError
 from django.contrib.sites.models import Site
 from django.template.loader import render_to_string
@@ -97,7 +97,7 @@ def send_manual_post_request(request, submission, errors):
 def announce_to_lists(request, submission):
     m = Message()
     m.by = Person.objects.get(name="(System)")
-    if request.user.is_authenticated():
+    if request.user.is_authenticated:
         try:
             m.by = request.user.person
         except Person.DoesNotExist:
diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py
index e714d5774..78a781656 100644
--- a/ietf/submit/tests.py
+++ b/ietf/submit/tests.py
@@ -8,7 +8,7 @@ from StringIO import StringIO
 from pyquery import PyQuery
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 import debug                            # pyflakes:ignore
 
diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py
index 84878359d..62758c20a 100644
--- a/ietf/submit/utils.py
+++ b/ietf/submit/utils.py
@@ -108,7 +108,7 @@ def validate_submission_document_date(submission_date, document_date):
 
 def create_submission_event(request, submission, desc):
     by = None
-    if request and request.user.is_authenticated():
+    if request and request.user.is_authenticated:
         try:
             by = request.user.person
         except Person.DoesNotExist:
@@ -324,7 +324,7 @@ def update_replaces_from_submission(request, submission, draft):
 
     is_secretariat = has_role(request.user, "Secretariat")
     is_chair_of = []
-    if request.user.is_authenticated():
+    if request.user.is_authenticated:
         is_chair_of = list(Group.objects.filter(role__person__user=request.user, role__name="chair"))
 
     replaces = DocAlias.objects.filter(name__in=submission.replaces.split(",")).select_related("document", "document__group")
@@ -355,7 +355,7 @@ def update_replaces_from_submission(request, submission, draft):
 
 
     try:
-        by = request.user.person if request.user.is_authenticated() else Person.objects.get(name="(System)")
+        by = request.user.person if request.user.is_authenticated else Person.objects.get(name="(System)")
     except Person.DoesNotExist:
         by = Person.objects.get(name="(System)")
     set_replaces_for_document(request, draft, existing_replaces + approved, by,
@@ -487,7 +487,7 @@ def remove_submission_files(submission):
             os.unlink(source)
 
 def approvable_submissions_for_user(user):
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return []
 
     res = Submission.objects.filter(state="grp-appr").order_by('-submission_date')
@@ -498,7 +498,7 @@ def approvable_submissions_for_user(user):
     return res.filter(group__role__name="chair", group__role__person__user=user)
 
 def preapprovals_for_user(user):
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return []
 
     posted = Submission.objects.distinct().filter(state="posted").values_list('name', flat=True)
@@ -513,7 +513,7 @@ def preapprovals_for_user(user):
     return res
 
 def recently_approved_by_user(user, since):
-    if not user.is_authenticated():
+    if not user.is_authenticated:
         return []
 
     res = Submission.objects.distinct().filter(state="posted", submission_date__gte=since, rev="00").order_by('-submission_date')
diff --git a/ietf/submit/views.py b/ietf/submit/views.py
index 5969ddb6a..99f043260 100644
--- a/ietf/submit/views.py
+++ b/ietf/submit/views.py
@@ -6,7 +6,7 @@ import xml2rfc
 
 from django.conf import settings
 from django.contrib import messages
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.core.validators import validate_email, ValidationError
 from django.http import HttpResponseRedirect, Http404, HttpResponseForbidden, HttpResponse
 from django.shortcuts import get_object_or_404, redirect, render
diff --git a/ietf/sync/mails.py b/ietf/sync/mails.py
index 480fd1b40..a58894e3d 100644
--- a/ietf/sync/mails.py
+++ b/ietf/sync/mails.py
@@ -1,4 +1,4 @@
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 from django.conf import settings
 
 from ietf.utils.mail import send_mail
diff --git a/ietf/sync/tests.py b/ietf/sync/tests.py
index 7a220b3d1..534afb25a 100644
--- a/ietf/sync/tests.py
+++ b/ietf/sync/tests.py
@@ -6,7 +6,7 @@ import StringIO
 import shutil
 
 from django.conf import settings
-from django.core.urlresolvers import reverse as urlreverse
+from django.urls import reverse as urlreverse
 
 from ietf.doc.models import Document, DocAlias, DocEvent, DeletedEvent, DocTagName, RelatedDocument, State, StateDocEvent
 from ietf.doc.utils import add_state_change_event
diff --git a/ietf/sync/views.py b/ietf/sync/views.py
index 733f76c4d..0439f2a7a 100644
--- a/ietf/sync/views.py
+++ b/ietf/sync/views.py
@@ -49,7 +49,7 @@ def notify(request, org, notification):
         if settings.SERVER_MODE == "production" and not request.is_secure():
             return HttpResponseForbidden("You must use HTTPS when sending username/password")
 
-        if not user.is_authenticated():
+        if not user.is_authenticated:
             try:
                 user = User.objects.get(username=username)
             except User.DoesNotExist:
diff --git a/ietf/utils/html.py b/ietf/utils/html.py
index 0aa8bd10f..1afc77626 100644
--- a/ietf/utils/html.py
+++ b/ietf/utils/html.py
@@ -5,7 +5,7 @@ import html5lib
 import bleach
 from html5lib import sanitizer, serializer, tokenizer, treebuilders, treewalkers
 
-from django.utils.functional import allow_lazy
+from django.utils.functional import keep_lazy
 from django.utils import six
 
 acceptable_elements = ('a', 'abbr', 'acronym', 'address', 'b', 'big',
@@ -67,7 +67,7 @@ def remove_tags(html, tags):
     """Returns the given HTML sanitized, and with the given tags removed."""
     allowed = set(acceptable_elements) - set([ t.lower() for t in tags ])
     return bleach.clean(html, tags=allowed)
-remove_tags = allow_lazy(remove_tags, six.text_type)
+remove_tags = keep_lazy(remove_tags, six.text_type)
 
 def clean_html(html):
     return bleach.clean(html)
diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py
index ed7e70e94..96d366e5f 100644
--- a/ietf/utils/test_runner.py
+++ b/ietf/utils/test_runner.py
@@ -56,7 +56,7 @@ from django.template import TemplateDoesNotExist
 from django.template.loaders.base import Loader as BaseLoader
 from django.test.runner import DiscoverRunner
 from django.core.management import call_command
-from django.core.urlresolvers import RegexURLResolver
+from django.urls import RegexURLResolver
 
 import debug                            # pyflakes:ignore
 debug.debug = True
diff --git a/ietf/utils/tests_restapi.py b/ietf/utils/tests_restapi.py
index bc27ac68a..c3b683e91 100644
--- a/ietf/utils/tests_restapi.py
+++ b/ietf/utils/tests_restapi.py
@@ -3,7 +3,7 @@ from __future__ import print_function
 import debug
 debug.debug = True
 
-from django.core.urlresolvers import reverse
+from django.urls import reverse
 
 from tastypie.test import ResourceTestCaseMixin
 
diff --git a/ietf/utils/text.py b/ietf/utils/text.py
index f9211d21e..f83868ba5 100644
--- a/ietf/utils/text.py
+++ b/ietf/utils/text.py
@@ -4,7 +4,7 @@ import re
 import unicodedata
 import textwrap
 
-from django.utils.functional import allow_lazy
+from django.utils.functional import keep_lazy
 from django.utils import six
 from django.utils.safestring import mark_safe
 
@@ -18,7 +18,7 @@ def xslugify(value):
     value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
     value = re.sub('[^\w\s/-]', '', value).strip().lower()
     return mark_safe(re.sub('[-\s/]+', '-', value))
-xslugify = allow_lazy(xslugify, six.text_type)
+xslugify = keep_lazy(xslugify, six.text_type)
 
 def strip_prefix(text, prefix):
     if text.startswith(prefix):