diff --git a/django/template/utils.py b/django/template/utils.py
index 514df91a0c..ea72a8c5b1 100644
--- a/django/template/utils.py
+++ b/django/template/utils.py
@@ -50,6 +50,7 @@ class EngineHandler(object):
             ]
 
         templates = OrderedDict()
+        backend_names = []
         for tpl in self._templates:
             tpl = tpl.copy()
             try:
@@ -68,8 +69,9 @@ class EngineHandler(object):
             tpl.setdefault('OPTIONS', {})
 
             templates[tpl['NAME']] = tpl
+            backend_names.append(tpl['NAME'])
 
-        counts = Counter(list(templates))
+        counts = Counter(backend_names)
         duplicates = [alias for alias, count in counts.most_common() if count > 1]
         if duplicates:
             raise ImproperlyConfigured(
diff --git a/tests/template_backends/test_utils.py b/tests/template_backends/test_utils.py
index 3d2de99015..c3eb6577a0 100644
--- a/tests/template_backends/test_utils.py
+++ b/tests/template_backends/test_utils.py
@@ -35,3 +35,12 @@ class TemplateStringsTests(SimpleTestCase):
             engines.all()
         with self.assertRaises(ImproperlyConfigured):
             engines.all()
+
+    @override_settings(TEMPLATES=[{
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+    }, {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+    }])
+    def test_backend_names_must_be_unique(self):
+        with self.assertRaises(ImproperlyConfigured):
+            engines.all()