diff --git a/docs/_ext/djangodocs.py b/docs/_ext/djangodocs.py
index 5640016..7e7998d 100644
--- a/docs/_ext/djangodocs.py
+++ b/docs/_ext/djangodocs.py
@@ -10,6 +10,8 @@ import sphinx.builder
 import sphinx.directives
 import sphinx.environment
 import sphinx.htmlwriter
+import sphinx.roles
+from docutils import nodes
 
 def setup(app):
     app.add_crossref_type(
@@ -44,11 +46,40 @@ def setup(app):
         indextemplate = "pair: %s; django-admin command-line option",
         parse_node    = lambda env, sig, signode: sphinx.directives.parse_option_desc(signode, sig),
     )
+    app.add_config_value('django_next_version', '0.0', True)
+    app.add_directive('versionadded', parse_version_directive, 1, (1, 1, 1))
+    app.add_directive('versionchanged', parse_version_directive, 1, (1, 1, 1))
     app.add_transform(SuppressBlockquotes)
     
     # Monkeypatch PickleHTMLBuilder so that it doesn't die in Sphinx 0.4.2
     if sphinx.__version__ == '0.4.2':
         monkeypatch_pickle_builder()
+
+def parse_version_directive(name, arguments, options, content, lineno,
+                      content_offset, block_text, state, state_machine):
+    env = state.document.settings.env
+    is_nextversion = env.config.django_next_version == arguments[0]
+    ret = []
+    node = sphinx.addnodes.versionmodified()
+    ret.append(node)
+    if not is_nextversion:
+        if len(arguments) == 1:
+            linktext = 'Please, see the release notes <releases-%s>' % (arguments[0])
+            xrefs = sphinx.roles.xfileref_role('ref', linktext, linktext, lineno, state)
+            node.extend(xrefs[0])
+        node['version'] = arguments[0]
+    else:
+        node['version'] = "Development version"
+    node['type'] = name
+    if len(arguments) == 2:
+        inodes, messages = state.inline_text(arguments[1], lineno+1)
+        node.extend(inodes)
+        if content:
+            state.nested_parse(content, content_offset, node)
+        ret = ret + messages
+    env.note_versionchange(node['type'], node['version'], node, lineno)
+    return ret
+
                 
 class SuppressBlockquotes(docutils.transforms.Transform):
     """
diff --git a/docs/conf.py b/docs/conf.py
index 0d41b05..f7ff452 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -44,6 +44,8 @@ copyright = 'Django Software Foundation and contributors'
 version = '1.0'
 # The full version, including alpha/beta/rc tags.
 release = version
+# The next version to be released
+django_next_version = '1.1'
 
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
diff --git a/docs/topics/testing.txt b/docs/topics/testing.txt
index ec9ee8a..f6fdd28 100644
--- a/docs/topics/testing.txt
+++ b/docs/topics/testing.txt
@@ -546,7 +546,7 @@ arguments at time of construction:
 
     .. method:: Client.head(path, data={})
 
-        .. versionadded:: development
+        .. versionadded:: 1.1
 
         Makes a HEAD request on the provided ``path`` and returns a ``Response``
         object. Useful for testing RESTful interfaces. Acts just like
@@ -554,14 +554,14 @@ arguments at time of construction:
 
     .. method:: Client.options(path, data={})
 
-        .. versionadded:: development
+        .. versionadded:: 1.1
 
         Makes an OPTIONS request on the provided ``path`` and returns a
         ``Response`` object. Useful for testing RESTful interfaces.
 
     .. method:: Client.put(path, data={}, content_type=MULTIPART_CONTENT)
 
-        .. versionadded:: development
+        .. versionadded:: 1.1
 
         Makes an PUT request on the provided ``path`` and returns a
         ``Response`` object. Useful for testing RESTful interfaces. Acts just
@@ -569,7 +569,7 @@ arguments at time of construction:
 
     .. method:: Client.delete(path)
 
-        .. versionadded:: development
+        .. versionadded:: 1.1
 
         Makes an DELETE request on the provided ``path`` and returns a
         ``Response`` object. Useful for testing RESTful interfaces.
