diff --git a/Doc/library/operator.rst b/Doc/library/operator.rst
index dc7ad37..00945aa 100644
--- a/Doc/library/operator.rst
+++ b/Doc/library/operator.rst
@@ -269,6 +269,9 @@
 .. function:: repeat(a, b)
               __repeat__(a, b)
 
+   .. deprecated:: 2.7
+      Use :func:`__mul__` instead.
+
    Return ``a * b`` where *a* is a sequence and *b* is an integer.
 
 
@@ -387,6 +390,9 @@
 .. function:: irepeat(a, b)
               __irepeat__(a, b)
 
+   .. deprecated:: 2.7
+      Use :func:`__imul__` instead.
+
    ``a = irepeat(a, b)`` is equivalent to ``a *= b`` where *a* is a sequence and
    *b* is an integer.
 
@@ -427,33 +433,14 @@
 
 
 The :mod:`operator` module also defines a few predicates to test the type of
-objects.
-
-.. note::
-
-   Be careful not to misinterpret the results of these functions; only
-   :func:`isCallable` has any measure of reliability with instance objects.
-   For example:
-
-      >>> class C:
-      ...     pass
-      ...
-      >>> import operator
-      >>> obj = C()
-      >>> operator.isMappingType(obj)
-      True
-
-.. note::
-
-   Python 3 is expected to introduce abstract base classes for
-   collection types, so it should be possible to write, for example,
-   ``isinstance(obj, collections.Mapping)`` and ``isinstance(obj,
-   collections.Sequence)``.
+objects; however, these are not all reliable.  It is preferable to test
+abstract base classes instead (see :mod:`collections` and
+:mod:`numbers` for details).
 
 .. function:: isCallable(obj)
 
    .. deprecated:: 2.0
-      Use the :func:`callable` built-in function instead.
+      Use ``isinstance(x, collections.Callable)`` instead.
 
    Returns true if the object *obj* can be called like a function, otherwise it
    returns false.  True is returned for functions, bound and unbound methods, class
@@ -462,6 +449,9 @@
 
 .. function:: isMappingType(obj)
 
+   .. deprecated:: 2.7
+      Use ``isinstance(x, collections.Mapping)`` instead.
+
    Returns true if the object *obj* supports the mapping interface. This is true for
    dictionaries and all instance objects defining :meth:`__getitem__`.
 
@@ -474,6 +464,9 @@
 
 .. function:: isNumberType(obj)
 
+   .. deprecated:: 2.7
+      Use ``isinstance(x, numbers.Number)`` instead.
+
    Returns true if the object *obj* represents a number.  This is true for all
    numeric types implemented in C.
 
@@ -486,6 +479,9 @@
 
 .. function:: isSequenceType(obj)
 
+   .. deprecated:: 2.7
+      Use ``isinstance(x, collections.Sequence)`` instead.
+
    Returns true if the object *obj* supports the sequence protocol. This returns true
    for all objects which define sequence methods in C, and for all instance objects
    defining :meth:`__getitem__`.
