Index: django/core/urlresolvers.py
===================================================================
--- django/core/urlresolvers.py	(revision 5722)
+++ django/core/urlresolvers.py	(working copy)
@@ -145,7 +145,7 @@
         self.name = name
 
     def __repr__(self):
-        return '<%s %s %s>' % (self.__class__.__name__, self.name, self.regex.pattern)
+        return '<%s %s %s>' % (self.__class__.__name__, repr(self.name), repr(self.regex.pattern))
 
     def add_prefix(self, prefix):
         """
@@ -209,17 +209,21 @@
         self._reverse_dict = {}
 
     def __repr__(self):
-        return '<%s %s %s>' % (self.__class__.__name__, self.urlconf_name, self.regex.pattern)
+        return '<%s %s %s>' % (self.__class__.__name__, self.urlconf_name, repr(self.regex.pattern))
 
     def _get_reverse_dict(self):
+        def _add(key, val):
+            self._reverse_dict.setdefault(key, []).append(val)
         if not self._reverse_dict and hasattr(self.urlconf_module, 'urlpatterns'):
             for pattern in reversed(self.urlconf_module.urlpatterns):
                 if isinstance(pattern, RegexURLResolver):
-                    for key, value in pattern.reverse_dict.iteritems():
-                        self._reverse_dict[key] = (pattern,) + value
+                    for key, values in pattern.reverse_dict.iteritems():
+                        for value in values:
+                            _add(key, (pattern,) + value)
                 else:
-                    self._reverse_dict[pattern.callback] = (pattern,)
-                    self._reverse_dict[pattern.name] = (pattern,)
+                    _add(pattern.callback, (pattern,))
+                    if pattern.name:
+                        _add(pattern.name, (pattern,))
         return self._reverse_dict
     reverse_dict = property(_get_reverse_dict)
 
@@ -274,12 +278,23 @@
         return self._resolve_special('500')
 
     def reverse(self, lookup_view, *args, **kwargs):
+        # To compare results, we have to coerce all the values into Unicode
+        # (to match the behavior of MatchChecker)
+        args = tuple(map(force_unicode, args))
+        kwargs = dict([(key, force_unicode(val)) for key, val in kwargs.items()])
         try:
             lookup_view = get_callable(lookup_view, True)
         except (ImportError, AttributeError):
             raise NoReverseMatch
-        if lookup_view in self.reverse_dict:
-            return u''.join([reverse_helper(part.regex, *args, **kwargs) for part in self.reverse_dict[lookup_view]])
+        # reversed() to match earlier behavior
+        for candidate in reversed(self.reverse_dict.get(lookup_view, [])):
+            result = u''.join([reverse_helper(part.regex, *args, **kwargs) for part in candidate])
+            try:
+                [resview, resargs, reskwargs] = self.resolve(u'/' + result)
+                if args == resargs and kwargs == reskwargs:
+                    return result
+            except Resolver404:
+                pass
         raise NoReverseMatch
 
     def reverse_helper(self, lookup_view, *args, **kwargs):
Index: tests/regressiontests/templates/tests.py
===================================================================
--- tests/regressiontests/templates/tests.py	(revision 5722)
+++ tests/regressiontests/templates/tests.py	(working copy)
@@ -732,7 +732,7 @@
             ### URL TAG ########################################################
             # Successes
             'url01' : ('{% url regressiontests.templates.views.client client.id %}', {'client': {'id': 1}}, '/url_tag/client/1/'),
-            'url02' : ('{% url regressiontests.templates.views.client_action client.id, action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
+            'url02' : ('{% url regressiontests.templates.views.client client.id action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
             'url03' : ('{% url regressiontests.templates.views.index %}', {}, '/url_tag/'),
             'url04' : ('{% url named.client client.id %}', {'client': {'id': 1}}, '/url_tag/named-client/1/'),
             'url05' : (u'{% url метка_оператора v %}', {'v': u'Ω'},
Index: tests/regressiontests/templates/urls.py
===================================================================
--- tests/regressiontests/templates/urls.py	(revision 5722)
+++ tests/regressiontests/templates/urls.py	(working copy)
@@ -7,7 +7,7 @@
     # Test urls for testing reverse lookups
     (r'^$', views.index),
     (r'^client/(\d+)/$', views.client),
-    (r'^client/(\d+)/(?P<action>[^/]+)/$', views.client_action),
+    (r'^client/(\d+)/(?P<action>[^/]+)/$', views.client),
     url(r'^named-client/(\d+)/$', views.client, name="named.client"),
 
     # Unicode strings are permitted everywhere.
