diff --git a/runtime/doc/if_pyth.txt b/runtime/doc/if_pyth.txt
index fffc4c7..b8073cf 100644
--- a/runtime/doc/if_pyth.txt
+++ b/runtime/doc/if_pyth.txt
@@ -174,7 +174,7 @@
 vim.bindeval(str)					*python-bindeval*
 	Like |python-eval|, but returns special objects described in 
 	|python-bindeval-objects|. These python objects let you modify (|List| 
-	or |Dictionary|) or call (|Funcref|) vim objecs.
+	or |Dictionary|) or call (|Funcref|) vim objects.
 
 Error object of the "vim" module
 
@@ -208,7 +208,7 @@
 	    :py w in vim.windows	# Membership test
 	    :py n = len(vim.windows)	# Number of elements
 	    :py for w in vim.windows:	# Sequential access
-<	Note: vim.windows object always accesses current tab page,. 
+<	Note: vim.windows object always accesses current tab page. 
 	|python-tabpage|.windows objects are bound to parent |python-tabpage| 
 	object and always use windows from that tab page (or throw vim.error 
 	in case tab page was deleted). You can keep a reference to both 
@@ -494,10 +494,9 @@
                     Remove specified key from dictionary and return 
                     corresponding value. If key is not found and default is 
                     given returns the default, otherwise raises KeyError.
-        popitem(key)
-                    Remove specified key from dictionary and return a pair 
-                    with it and the corresponding value. Returned key is a new 
-                    object.
+        popitem()
+                    Remove random key from dictionary and return (key, value) 
+                    pair.
         has_key(key)
                     Check whether dictionary contains specified key, similar 
                     to `key in dict`.
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 4c80d2e..eedbf1c 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -1061,17 +1061,6 @@
 	dictitem_free(di);
     }
 
-    if (flags & DICT_FLAG_RETURN_PAIR)
-    {
-	PyObject	*tmp = r;
-
-	if (!(r = Py_BuildValue("(" Py_bytes_fmt "O)", hi->hi_key, tmp)))
-	{
-	    Py_DECREF(tmp);
-	    return NULL;
-	}
-    }
-
     return r;
 }
 
@@ -1457,15 +1446,38 @@
 }
 
     static PyObject *
-DictionaryPopItem(DictionaryObject *self, PyObject *args)
+DictionaryPopItem(DictionaryObject *self)
 {
-    PyObject	*keyObject;
+    hashitem_T	*hi;
+    PyObject	*r;
+    PyObject	*valObject;
+    dictitem_T	*di;
 
-    if (!PyArg_ParseTuple(args, "O", &keyObject))
+    if (self->dict->dv_hashtab.ht_used == 0)
+    {
+	PyErr_SetNone(PyExc_KeyError);
+	return NULL;
+    }
+
+    hi = self->dict->dv_hashtab.ht_array;
+    while (HASHITEM_EMPTY(hi))
+	++hi;
+
+    di = dict_lookup(hi);
+
+    if (!(valObject = ConvertToPyObject(&di->di_tv)))
 	return NULL;
 
-    return _DictionaryItem(self, keyObject,
-			    DICT_FLAG_POP|DICT_FLAG_RETURN_PAIR);
+    if (!(r = Py_BuildValue("(" Py_bytes_fmt "O)", hi->hi_key, valObject)))
+    {
+	Py_DECREF(valObject);
+	return NULL;
+    }
+
+    hash_remove(&self->dict->dv_hashtab, hi);
+    dictitem_free(di);
+
+    return r;
 }
 
     static PyObject *
@@ -1505,7 +1517,7 @@
     {"update",	(PyCFunction)DictionaryUpdate,		METH_VARARGS|METH_KEYWORDS, ""},
     {"get",	(PyCFunction)DictionaryGet,		METH_VARARGS,	""},
     {"pop",	(PyCFunction)DictionaryPop,		METH_VARARGS,	""},
-    {"popitem",	(PyCFunction)DictionaryPopItem,		METH_VARARGS,	""},
+    {"popitem",	(PyCFunction)DictionaryPopItem,		METH_NOARGS,	""},
     {"has_key",	(PyCFunction)DictionaryHasKey,		METH_VARARGS,	""},
     {"__dir__",	(PyCFunction)DictionaryDir,		METH_NOARGS,	""},
     { NULL,	NULL,					0,		NULL}
diff --git a/src/testdir/test86.in b/src/testdir/test86.in
index 8569e42..dc21af4 100644
--- a/src/testdir/test86.in
+++ b/src/testdir/test86.in
@@ -83,7 +83,7 @@
 :$put =pyeval('repr(''1'' in d)')
 :$put =pyeval('repr(list(iter(d)))')
 :$put =string(d)
-:$put =pyeval('repr(d.popitem(''0''))')
+:$put =pyeval('repr(d.popitem())')
 :$put =pyeval('repr(d.get(''0''))')
 :$put =pyeval('repr(list(iter(d)))')
 :"
@@ -226,7 +226,7 @@
 em('d[u"a\\0b"]=1')
 
 em('d.pop("abc")')
-em('d.popitem("abc")')
+em('d.popitem()')
 EOF
 :$put =messages
 :unlet messages
diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok
index a98b445..7d24390 100644
--- a/src/testdir/test86.ok
+++ b/src/testdir/test86.ok
@@ -26,7 +26,7 @@
 False
 ['0']
 {'0': -1}
-('', -1L)
+('0', -1L)
 None
 []
 [0, 1, 2, 3]
@@ -666,7 +666,7 @@
 d.update((("a", FailingMappingKey()),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
 <<< Finished
 >> DictionaryPopItem
-d.popitem(1, 2):(<type 'exceptions.TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
+d.popitem(1, 2):(<type 'exceptions.TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
 >> DictionaryHasKey
 d.has_key():(<type 'exceptions.TypeError'>, TypeError('function takes exactly 1 argument (0 given)',))
 > List
diff --git a/src/testdir/test87.in b/src/testdir/test87.in
index 395fb19..45a4b8e 100644
--- a/src/testdir/test87.in
+++ b/src/testdir/test87.in
@@ -77,7 +77,7 @@
 :$put =py3eval('repr(''1'' in d)')
 :$put =py3eval('repr(list(iter(d)))')
 :$put =string(d)
-:$put =py3eval('repr(d.popitem(''0''))')
+:$put =py3eval('repr(d.popitem())')
 :$put =py3eval('repr(d.get(''0''))')
 :$put =py3eval('repr(list(iter(d)))')
 :"
@@ -220,7 +220,7 @@
 em('d[b"a\\0b"]=1')
 
 em('d.pop("abc")')
-em('d.popitem("abc")')
+em('d.popitem()')
 EOF
 :$put =messages
 :unlet messages
diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok
index 569d13f..94a914e 100644
--- a/src/testdir/test87.ok
+++ b/src/testdir/test87.ok
@@ -26,7 +26,7 @@
 False
 [b'0']
 {'0': -1}
-(b'', -1)
+(b'0', -1)
 None
 []
 [0, 1, 2, 3]
@@ -663,7 +663,7 @@
 d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError())
 <<< Finished
 >> DictionaryPopItem
-d.popitem(1, 2):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
+d.popitem(1, 2):(<class 'TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
 >> DictionaryHasKey
 d.has_key():(<class 'TypeError'>, TypeError('function takes exactly 1 argument (0 given)',))
 > List
diff --git a/src/version.c b/src/version.c
index 444b41c..a9f794d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1096,
+/**/
     1095,
 /**/
     1094,
