Index: twisted/test/test_compat.py
===================================================================
--- twisted/test/test_compat.py	(revision 33434)
+++ twisted/test/test_compat.py	(working copy)
@@ -82,9 +82,7 @@
     def testIsinstance(self):
         self.assert_(isinstance(u'hi', types.StringTypes))
         self.assert_(isinstance(self, unittest.TestCase))
-        # I'm pretty sure it's impossible to implement this
-        # without replacing isinstance on 2.2 as well :(
-        # self.assert_(isinstance({}, dict))
+        self.assert_(isinstance({}, dict))
 
     def testStrip(self):
         self.assertEqual(' x '.lstrip(' '), 'x ')
Index: twisted/test/test_reflect.py
===================================================================
--- twisted/test/test_reflect.py	(revision 33434)
+++ twisted/test/test_reflect.py	(working copy)
@@ -17,126 +17,6 @@
 from twisted.python import reflect, util
 from twisted.python.versions import Version
 
-
-
-class SettableTest(unittest.TestCase):
-    def setUp(self):
-        self.setter = reflect.Settable()
-
-    def tearDown(self):
-        del self.setter
-
-    def testSet(self):
-        self.setter(a=1, b=2)
-        self.assertEqual(self.setter.a, 1)
-        self.assertEqual(self.setter.b, 2)
-
-
-
-class AccessorTester(reflect.Accessor):
-
-    def set_x(self, x):
-        self.y = x
-        self.reallySet('x', x)
-
-
-    def get_z(self):
-        self.q = 1
-        return 1
-
-
-    def del_z(self):
-        self.reallyDel("q")
-
-
-
-class PropertyAccessorTester(reflect.PropertyAccessor):
-    """
-    Test class to check L{reflect.PropertyAccessor} functionalities.
-    """
-    r = 0
-
-    def set_r(self, r):
-        self.s = r
-
-
-    def set_x(self, x):
-        self.y = x
-        self.reallySet('x', x)
-
-
-    def get_z(self):
-        self.q = 1
-        return 1
-
-
-    def del_z(self):
-        self.reallyDel("q")
-
-
-
-class AccessorTest(unittest.TestCase):
-    def setUp(self):
-        self.tester = AccessorTester()
-
-    def testSet(self):
-        self.tester.x = 1
-        self.assertEqual(self.tester.x, 1)
-        self.assertEqual(self.tester.y, 1)
-
-    def testGet(self):
-        self.assertEqual(self.tester.z, 1)
-        self.assertEqual(self.tester.q, 1)
-
-    def testDel(self):
-        self.tester.z
-        self.assertEqual(self.tester.q, 1)
-        del self.tester.z
-        self.assertEqual(hasattr(self.tester, "q"), 0)
-        self.tester.x = 1
-        del self.tester.x
-        self.assertEqual(hasattr(self.tester, "x"), 0)
-
-
-
-class PropertyAccessorTest(AccessorTest):
-    """
-    Tests for L{reflect.PropertyAccessor}, using L{PropertyAccessorTester}.
-    """
-
-    def setUp(self):
-        self.tester = PropertyAccessorTester()
-
-
-    def test_setWithDefaultValue(self):
-        """
-        If an attribute is present in the class, it can be retrieved by
-        default.
-        """
-        self.assertEqual(self.tester.r, 0)
-        self.tester.r = 1
-        self.assertEqual(self.tester.r, 0)
-        self.assertEqual(self.tester.s, 1)
-
-
-    def test_getValueInDict(self):
-        """
-        The attribute value can be overriden by directly modifying the value in
-        C{__dict__}.
-        """
-        self.tester.__dict__["r"] = 10
-        self.assertEqual(self.tester.r, 10)
-
-
-    def test_notYetInDict(self):
-        """
-        If a getter is defined on an attribute but without any default value,
-        it raises C{AttributeError} when trying to access it.
-        """
-        self.assertRaises(AttributeError, getattr, self.tester, "x")
-
-
-
 class LookupsTestCase(unittest.TestCase):
     """
     Tests for L{namedClass}, L{namedModule}, and L{namedAny}.
@@ -147,8 +27,8 @@
         L{namedClass} should return the class object for the name it is passed.
         """
         self.assertIdentical(
-            reflect.namedClass("twisted.python.reflect.Summer"),
-            reflect.Summer)
+            reflect.namedClass("twisted.python.reflect.QueueMethod"),
+            reflect.QueueMethod)
 
 
     def test_namedModuleLookup(self):
@@ -181,7 +61,7 @@
         L{namedAny} should return the class object for the name it is passed.
         """
         self.assertIdentical(
-            reflect.namedAny("twisted.python.reflect.Summer"), reflect.Summer)
+            reflect.namedAny("twisted.python.reflect.QueueMethod"), reflect.QueueMethod)
 
 
     def test_namedAnyAttributeLookup(self):
@@ -193,8 +73,8 @@
         # object every time.  This is a foolishness of Python's object
         # implementation, not a bug in Twisted.
         self.assertEqual(
-            reflect.namedAny("twisted.python.reflect.Summer.reallySet"),
-            reflect.Summer.reallySet)
+            reflect.namedAny("twisted.python.reflect.QueueMethod.reallySet"),
+            reflect.QueueMethod.reallySet)
 
 
     def test_namedAnySecondAttributeLookup(self):
@@ -205,8 +85,8 @@
         """
         self.assertIdentical(
             reflect.namedAny(
-                "twisted.python.reflect.Summer.reallySet.__doc__"),
-            reflect.Summer.reallySet.__doc__)
+                "twisted.python.reflect.QueueMethod.reallySet.__doc__"),
+            reflect.QueueMethod.reallySet.__doc__)
 
 
     def test_importExceptions(self):
@@ -248,7 +128,7 @@
             reflect.namedAny, "twisted.nosuch.modulein.theworld")
         self.assertRaises(
             AttributeError,
-            reflect.namedAny, "twisted.python.reflect.Summer.nosuchattributeintheworld")
+            reflect.namedAny, "twisted.python.reflect.QueueMethod.nosuchattributeintheworld")
 
 
     def test_invalidNames(self):
@@ -718,8 +598,8 @@
         L{reflect.fullyQualifiedName} returns the name of a class and its
         module.
         """
-        self._checkFullyQualifiedName(reflect.Settable,
-                                      'twisted.python.reflect.Settable')
+        self._checkFullyQualifiedName(reflect.QueueMethod,
+                                      'twisted.python.reflect.QueueMethod')
 
 
     def test_function(self):
@@ -737,8 +617,8 @@
         its class and its module.
         """
         self._checkFullyQualifiedName(
-            reflect.PropertyAccessor().reallyDel,
-            "twisted.python.reflect.PropertyAccessor.reallyDel")
+            reflect.QueueMethod().reallySet,
+            "twisted.python.reflect.QueueMethod.reallySet")
 
 
     def test_unboundMethod(self):
@@ -747,8 +627,8 @@
         inside its class and its module.
         """
         self._checkFullyQualifiedName(
-            reflect.PropertyAccessor.reallyDel,
-            "twisted.python.reflect.PropertyAccessor.reallyDel")
+            reflect.QueueMethod.reallySet,
+            "twisted.python.reflect.QueueMethod.reallySet")
 
 
 
Index: twisted/python/filepath.py
===================================================================
--- twisted/python/filepath.py	(revision 33434)
+++ twisted/python/filepath.py	(working copy)
@@ -1110,9 +1110,6 @@
             os.unlink(self.path)
         os.rename(sib.path, self.path)
 
-
-    # new in 2.2.0
-
     def __cmp__(self, other):
         if not isinstance(other, FilePath):
             return NotImplemented
Index: twisted/python/reflect.py
===================================================================
--- twisted/python/reflect.py	(revision 33434)
+++ twisted/python/reflect.py	(working copy)
@@ -34,151 +34,14 @@
 from twisted.python.deprecate import _fullyQualifiedName as fullyQualifiedName
 from twisted.python.versions import Version
 
-
-
-class Settable:
-    """
-    A mixin class for syntactic sugar.  Lets you assign attributes by
-    calling with keyword arguments; for example, C{x(a=b,c=d,y=z)} is the
-    same as C{x.a=b;x.c=d;x.y=z}.  The most useful place for this is
-    where you don't want to name a variable, but you do want to set
-    some attributes; for example, C{X()(y=z,a=b)}.
-    """
-    def __init__(self, **kw):
-        self(**kw)
-
-    def __call__(self,**kw):
-        for key,val in kw.items():
-            setattr(self,key,val)
-        return self
-
-
-class AccessorType(type):
-    """Metaclass that generates properties automatically.
-
-    This is for Python 2.2 and up.
-
-    Using this metaclass for your class will give you explicit accessor
-    methods; a method called set_foo, will automatically create a property
-    'foo' that uses set_foo as a setter method. Same for get_foo and del_foo.
-
-    Note that this will only work on methods that are present on class
-    creation. If you add methods after the class is defined they will not
-    automatically become properties. Likewise, class attributes will only
-    be used if they are present upon class creation, and no getter function
-    was set - if a getter is present, the class attribute will be ignored.
-
-    This is a 2.2-only alternative to the Accessor mixin - just set in your
-    class definition::
-
-        __metaclass__ = AccessorType
-
-    """
-
-    def __init__(self, name, bases, d):
-        type.__init__(self, name, bases, d)
-        accessors = {}
-        prefixs = ["get_", "set_", "del_"]
-        for k in d.keys():
-            v = getattr(self, k)
-            for i in range(3):
-                if k.startswith(prefixs[i]):
-                    accessors.setdefault(k[4:], [None, None, None])[i] = v
-        for name, (getter, setter, deler) in accessors.items():
-            # create default behaviours for the property - if we leave
-            # the getter as None we won't be able to getattr, etc..
-            if getter is None:
-                if hasattr(self, name):
-                    value = getattr(self, name)
-                    def getter(this, value=value, name=name):
-                        if name in this.__dict__:
-                            return this.__dict__[name]
-                        else:
-                            return value
-                else:
-                    def getter(this, name=name):
-                        if name in this.__dict__:
-                            return this.__dict__[name]
-                        else:
-                            raise AttributeError("no such attribute %r" % name)
-            if setter is None:
-                def setter(this, value, name=name):
-                    this.__dict__[name] = value
-            if deler is None:
-                def deler(this, name=name):
-                    del this.__dict__[name]
-            setattr(self, name, property(getter, setter, deler, ""))
-
-
-class PropertyAccessor(object):
-    """A mixin class for Python 2.2 that uses AccessorType.
-
-    This provides compatability with the pre-2.2 Accessor mixin, up
-    to a point.
-
-    Extending this class will give you explicit accessor methods; a
-    method called set_foo, for example, is the same as an if statement
-    in __setattr__ looking for 'foo'.  Same for get_foo and del_foo.
-
-    There are also reallyDel and reallySet methods, so you can
-    override specifics in subclasses without clobbering __setattr__
-    and __getattr__, or using non-2.1 compatible code.
-
-    There is are incompatibilities with Accessor - accessor
-    methods added after class creation will *not* be detected. OTOH,
-    this method is probably way faster.
-
-    In addition, class attributes will only be used if no getter
-    was defined, and instance attributes will not override getter methods
-    whereas in original Accessor the class attribute or instance attribute
-    would override the getter method.
-    """
-    # addendum to above:
-    # The behaviour of Accessor is wrong IMHO, and I've found bugs
-    # caused by it.
-    #  -- itamar
-
-    __metaclass__ = AccessorType
-
-    def reallySet(self, k, v):
-        self.__dict__[k] = v
-
-    def reallyDel(self, k):
-        del self.__dict__[k]
-
-
-class Accessor:
-    """
-    Extending this class will give you explicit accessor methods; a
-    method called C{set_foo}, for example, is the same as an if statement
-    in L{__setattr__} looking for C{'foo'}.  Same for C{get_foo} and
-    C{del_foo}.  There are also L{reallyDel} and L{reallySet} methods,
-    so you can override specifics in subclasses without clobbering
-    L{__setattr__} and L{__getattr__}.
-
-    This implementation is for Python 2.1.
-    """
-
-    def __setattr__(self, k,v):
-        kstring='set_%s'%k
-        if hasattr(self.__class__,kstring):
-            return getattr(self,kstring)(v)
-        else:
-            self.reallySet(k,v)
-
-    def __getattr__(self, k):
-        kstring='get_%s'%k
-        if hasattr(self.__class__,kstring):
-            return getattr(self,kstring)()
-        raise AttributeError("%s instance has no accessor for: %s" % (qual(self.__class__),k))
-
-    def __delattr__(self, k):
-        kstring='del_%s'%k
-        if hasattr(self.__class__,kstring):
-            getattr(self,kstring)()
-            return
-        self.reallyDel(k)
-
+class QueueMethod:
+    """ I represent a method that doesn't exist yet."""
+    def __init__(self, name='', calls=''):
+        self.name = name
+        self.calls = calls
+    def __call__(self, *args):
+        self.calls.append((self.name, args))
+    
     def reallySet(self, k,v):
         """
         *actually* set self.k to v without incurring side-effects.
@@ -190,69 +53,8 @@
         else:
             self.__dict__[k]=v
 
-    def reallyDel(self, k):
-        """
-        *actually* del self.k without incurring side-effects.  This is a
-        hook to be overridden by subclasses.
-        """
-        del self.__dict__[k]
+        
 
-# just in case
-OriginalAccessor = Accessor
-
-
-class Summer(Accessor):
-    """
-    Extend from this class to get the capability to maintain 'related
-    sums'.  Have a tuple in your class like the following::
-
-        sums=(('amount','credit','credit_total'),
-              ('amount','debit','debit_total'))
-
-    and the 'credit_total' member of the 'credit' member of self will
-    always be incremented when the 'amount' member of self is
-    incremented, similiarly for the debit versions.
-    """
-
-    def reallySet(self, k,v):
-        "This method does the work."
-        for sum in self.sums:
-            attr=sum[0]
-            obj=sum[1]
-            objattr=sum[2]
-            if k == attr:
-                try:
-                    oldval=getattr(self, attr)
-                except:
-                    oldval=0
-                diff=v-oldval
-                if hasattr(self, obj):
-                    ob=getattr(self,obj)
-                    if ob is not None:
-                        try:oldobjval=getattr(ob, objattr)
-                        except:oldobjval=0.0
-                        setattr(ob,objattr,oldobjval+diff)
-
-            elif k == obj:
-                if hasattr(self, attr):
-                    x=getattr(self,attr)
-                    setattr(self,attr,0)
-                    y=getattr(self,k)
-                    Accessor.reallySet(self,k,v)
-                    setattr(self,attr,x)
-                    Accessor.reallySet(self,y,v)
-        Accessor.reallySet(self,k,v)
-
-
-class QueueMethod:
-    """ I represent a method that doesn't exist yet."""
-    def __init__(self, name, calls):
-        self.name = name
-        self.calls = calls
-    def __call__(self, *args):
-        self.calls.append((self.name, args))
-
-
 def funcinfo(function):
     """
     this is more documentation for myself than useful code.
@@ -805,10 +607,9 @@
     'InvalidName', 'ModuleNotFound', 'ObjectNotFound',
 
     'ISNT', 'WAS', 'IS',
+    
+    'QueueMethod',
 
-    'Settable', 'AccessorType', 'PropertyAccessor', 'Accessor', 'Summer',
-    'QueueMethod', 'OriginalAccessor',
-
     'funcinfo', 'fullFuncName', 'qual', 'getcurrent', 'getClass', 'isinst',
     'namedModule', 'namedObject', 'namedClass', 'namedAny', 'macro',
     'safe_repr', 'safe_str', 'allYourBase', 'accumulateBases',
Index: twisted/python/dist.py
===================================================================
--- twisted/python/dist.py	(revision 33434)
+++ twisted/python/dist.py	(working copy)
@@ -210,9 +210,8 @@
 
 def getPackages(dname, pkgname=None, results=None, ignore=None, parent=None):
     """
-    Get all packages which are under dname. This is necessary for
-    Python 2.2's distutils. Pretty similar arguments to getDataFiles,
-    including 'parent'.
+    Get all packages which are under dname.
+    Pretty similar arguments to getDataFiles,including 'parent'.
     """
     parent = parent or ""
     prefix = []
Index: twisted/internet/error.py
===================================================================
--- twisted/internet/error.py	(revision 33434)
+++ twisted/internet/error.py	(working copy)
@@ -193,11 +193,7 @@
     except ValueError:
         return ConnectError(string=e)
 
-    if hasattr(socket, 'gaierror') and isinstance(e, socket.gaierror):
-        # only works in 2.2
-        klass = UnknownHostError
-    else:
-        klass = errnoMapping.get(number, ConnectError)
+    klass = errnoMapping.get(number,ConnectError)
     return klass(number, string)
 
 
Index: doc/core/howto/pb-copyable.xhtml
===================================================================
--- doc/core/howto/pb-copyable.xhtml	(revision 33434)
+++ doc/core/howto/pb-copyable.xhtml	(working copy)
@@ -405,9 +405,8 @@
 attribute is changed<span class="footnote">Of course you could be clever and
 add a hook to <code>__setattr__</code>, along with magical change-announcing
 subclasses of the usual builtin types, to detect changes that result from
-normal <q>=</q> set operations. The semi-magical <q>property attributes</q>
-that were introduced in Python 2.2 could be useful too. The result might be
-hard to maintain or extend, though.</span>.</p>
+normal <q>=</q> set operations.
+</span></p>
 
 <p>You derive your sender-side class from <code>pb.Cacheable</code>, and you
 add two methods: <code class="API"
Index: doc/web/howto/xmlrpc.xhtml
===================================================================
--- doc/web/howto/xmlrpc.xhtml	(revision 33434)
+++ doc/web/howto/xmlrpc.xhtml	(working copy)
@@ -15,8 +15,8 @@
 <p><a href="http://www.xmlrpc.com">XML-RPC</a> is a simple request/reply protocol
 that runs over HTTP. It is simple, easy to implement and supported by most programming
 languages. Twisted's XML-RPC support is implemented using the
-<a href='http://docs.python.org/library/xmlrpclib.html'>xmlrpclib</a> library that is
-included with Python 2.2 and later.</p>
+<a href='http://docs.python.org/library/xmlrpclib.html'>xmlrpclib</a>.
+</p>
 
 <h2>Creating a XML-RPC server</h2>
 
Index: doc/web/examples/xmlrpc.py
===================================================================
--- doc/web/examples/xmlrpc.py	(revision 33434)
+++ doc/web/examples/xmlrpc.py	(working copy)
@@ -22,8 +22,6 @@
 from twisted.web import xmlrpc
 from twisted.internet import defer
 
-# This module is standard in Python 2.2, otherwise get it from
-#   http://www.pythonware.com/products/xmlrpc/
 import xmlrpclib
 
 
