diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index b634b56..e31d4fa 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -198,13 +198,14 @@ class RegexURLPattern(LocaleRegexProvider):
             # If there are any named groups, use those as kwargs, ignoring
             # non-named groups. Otherwise, pass all non-named arguments as
             # positional arguments.
-            kwargs = match.groupdict()
-            if kwargs:
+            match_kwargs = match.groupdict()
+            if match_kwargs:
                 args = ()
             else:
                 args = match.groups()
             # In both cases, pass any extra_kwargs as **kwargs.
-            kwargs.update(self.default_args)
+            kwargs = self.default_args.copy()
+            kwargs.update(match_kwargs)
 
             return ResolverMatch(self.callback, args, kwargs, self.name)
 
@@ -374,6 +375,8 @@ class RegexURLResolver(LocaleRegexProvider):
                         continue
                     matches = True
                     for k, v in defaults.items():
+                        if k in params:
+                            continue
                         if kwargs.get(k, v) != v:
                             matches = False
                             break
diff --git a/docs/topics/http/urls.txt b/docs/topics/http/urls.txt
index f3e27ae..02d9ac9 100644
--- a/docs/topics/http/urls.txt
+++ b/docs/topics/http/urls.txt
@@ -587,8 +587,8 @@ options to views.
 
     It's possible to have a URL pattern which captures named keyword arguments,
     and also passes arguments with the same names in its dictionary of extra
-    arguments. When this happens, the arguments in the dictionary will be used
-    instead of the arguments captured in the URL.
+    arguments. When this happens, the arguments captured in the url will be
+    used instead of the arguments in the dictionary.
 
 Passing extra options to ``include()``
 --------------------------------------
diff --git a/tests/regressiontests/i18n/patterns/tests.py b/tests/regressiontests/i18n/patterns/tests.py
index 1cc4520..5a8e868 100644
--- a/tests/regressiontests/i18n/patterns/tests.py
+++ b/tests/regressiontests/i18n/patterns/tests.py
@@ -4,7 +4,7 @@ import os
 import warnings
 
 from django.core.exceptions import ImproperlyConfigured
-from django.core.urlresolvers import reverse, clear_url_caches
+from django.core.urlresolvers import reverse, resolve, clear_url_caches
 from django.test import TestCase
 from django.test.utils import override_settings
 from django.template import Template, Context
@@ -306,3 +306,21 @@ class URLTagTests(URLTestCaseBase):
             {% language 'pt-br' %}{% url 'no-prefix-translated-slug' slug='apo' %}{% endlanguage %}""")
         self.assertEqual(tpl.render(Context({})).strip().split(),
                          [u'/vertaald/apo/', u'/traduzidos/apo/'])
+
+
+class URLExampleTests(URLTestCaseBase):
+    def test_demo(self):
+        # User accesses an english url.
+        with translation.override('en'):
+            match = resolve('/translated/apo/')
+        # Now we want provide links to the same page in other languages
+        links = []
+        langs = ['nl', 'pt-br']
+        for lang in langs:
+            with translation.override(lang):
+                links.append(reverse(match.url_name, args=match.args, kwargs=match.match_kwargs))
+        self.assertEqual(links, [u'/vertaald/apo/', u'/traduzidos/apo/'])
+        # Now we can offer the user links to the other pages
+        # print "View the page in: ",
+        # for lang, link in zip(langs, links):
+        #   print "<a href='%s'>%s</a> % (link, lang),
diff --git a/tests/regressiontests/i18n/patterns/urls/default.py b/tests/regressiontests/i18n/patterns/urls/default.py
index f117502..aac68ff 100644
--- a/tests/regressiontests/i18n/patterns/urls/default.py
+++ b/tests/regressiontests/i18n/patterns/urls/default.py
@@ -9,11 +9,13 @@ view = TemplateView.as_view(template_name='dummy.html')
 urlpatterns = patterns('',
     url(r'^not-prefixed/$', view, name='not-prefixed'),
     url(_(r'^translated/$'), view, name='no-prefix-translated'),
-    url(_(r'^translated/(?P<slug>[\w-]+)/$'), view, name='no-prefix-translated-slug'),
+    url(_(r'^translated/(?P<slug>[\w-]+)/$'), view, {'extra': True},
+        name='no-prefix-translated-slug'),
 )
 
 urlpatterns += i18n_patterns('',
     url(r'^prefixed/$', view, name='prefixed'),
     url(_(r'^users/$'), view, name='users'),
-    url(_(r'^account/'), include('regressiontests.i18n.patterns.urls.namespace', namespace='account')),
+    url(_(r'^account/'), include('regressiontests.i18n.patterns.urls.namespace',
+        namespace='account')),
 )
diff --git a/tests/regressiontests/urlpatterns_reverse/tests.py b/tests/regressiontests/urlpatterns_reverse/tests.py
index a1c9244..f3c40b9 100644
--- a/tests/regressiontests/urlpatterns_reverse/tests.py
+++ b/tests/regressiontests/urlpatterns_reverse/tests.py
@@ -511,3 +511,12 @@ class ErroneousViewTests(TestCase):
         self.assertRaises(ViewDoesNotExist, self.client.get, '/missing_outer/')
         self.assertRaises(ViewDoesNotExist, self.client.get, '/uncallable/')
 
+
+class TestRereverse(TestCase):
+    urls = 'regressiontests.urlpatterns_reverse.urls'
+
+    def test_rereverse(self):
+        match = resolve('/rereverse/12/')
+        self.assertEqual(reverse(match.url_name, args=match.args, kwargs=match.kwargs), '/rereverse/12/')
+        match = resolve('/rereverse-overridden/12/url/')
+        self.assertEqual(reverse(match.url_name, args=match.args, kwargs=match.kwargs), '/rereverse-overridden/12/url/')
diff --git a/tests/regressiontests/urlpatterns_reverse/urls.py b/tests/regressiontests/urlpatterns_reverse/urls.py
index 1d4ae73..fee6546 100644
--- a/tests/regressiontests/urlpatterns_reverse/urls.py
+++ b/tests/regressiontests/urlpatterns_reverse/urls.py
@@ -41,6 +41,11 @@ urlpatterns = patterns('',
     url(r'^windows_path/(?P<drive_name>[A-Z]):\\(?P<path>.+)/$', empty_view,
             name="windows"),
     url(r'^special_chars/(.+)/$', empty_view, name="special"),
+    url(r'^rereverse/(?P<arg>\d+)/$', empty_view, {'extra': True},
+        name='rereverse'),
+    url(r'^rereverse-overridden/(?P<arg>\d+)/(?P<overridden>\w+)/$',
+        empty_view, {'extra': True, 'overridden': 'default'},
+        name='rereverse-overridden'),
     url(r'^(?P<name>.+)/\d+/$', empty_view, name="mixed"),
     url(r'^repeats/a{1,2}/$', empty_view, name="repeats"),
     url(r'^repeats/a{2,4}/$', empty_view, name="repeats2"),
