--- rlextra/graphics/guiedit/guiedit.py
@@ -1762,9 +1762,9 @@
 				sample = project.sample
 				dataSource = sample.dataSource
 				class output:
-					@staticmethod
 					def write(msg):
 						SELF.log.write(msg,kind='info',norm=lambda x:x)
+					write=staticmethod(write)
 				sys.stdout = output()
 				icwd = sample._override_CWD = goValues['icwd'] = d._cwd.getvalue()
 				os.chdir(icwd)
--- rlextra/examples/travelplan/travel.py
@@ -517,7 +517,7 @@
     rn = '<numOfRooms>'+str(numOfRooms)+'</numOfRooms>'
     hid = 'h'+rid[1:3]
     hotelXML = hotels[hid].toXML(room_id=rid)
-    xml = '\n\t'.join(i.replace('\n','\n\t') for i in ['<hotels>',iDateXML,oDateXML,total,rn,hotelXML])+'\n</hotels>'
+    xml = '\n\t'.join([i.replace('\n','\n\t') for i in ['<hotels>',iDateXML,oDateXML,total,rn,hotelXML]])+'\n</hotels>'
     return xml
 
 def getPresaleXML(orig, dest,oDate,rDate,flightClass,isRoundTrip):
--- rlextra/radxml/xmlutils.py
@@ -500,18 +500,18 @@
             t = type(t) is TupleType and (n,self._attrs,c,o) or [n,self._attrs,c,o]
             p[0][p[1]] = t
 
-    @staticmethod
     def xmlEscape(a):
         if _XMLESCAPE: a = xmlEscape(a)
         return a
+    xmlEscape = staticmethod(xmlEscape)
 
     def toTupleTree(self):
         return (self.tagName, self._attrs, self._children or None, self._spare)
 
 class NonEscapingTagWrapper(TagWrapper):
-    @staticmethod
     def xmlEscape(a):
         return a
+    xmlEscape = staticmethod(xmlEscape)
 
 class SilentTagWrapper(TagWrapper):
     """Does not complain when nonexistent leaf attributes accessed.
--- rlextra/preppy/test/check_algorithms.py
@@ -215,13 +215,13 @@
                 "{{def(a,**kwds)}}Hello World{{a}}{{if kwds}}{{[k for k in sorted(kwds.items())]}}{{endif}}",1,b=2,c=3),
             "Hello World1[('b', 2), ('c', 3)]")
 
-    @staticmethod
     def bracket(x):
         return "[%s]" % x
+    bracket = staticmethod(bracket)
 
-    @staticmethod
     def brace(x):
         return "{%s}" % x
+    brace = staticmethod(brace)
 
     def checkLQuoting(self):
         '''__lquoteFunc__ applies to the literals'''
--- rlextra/ers/webapp.py
@@ -658,7 +658,6 @@
             write(resp.getOutput())
         logger.store()
 
-    @classmethod
     def handleFCGI(cls,**kwd):
         from rlextra.thirdparty import fcgi
         from reportlab.rl_config import _reset
@@ -676,6 +675,7 @@
             if lim is not None and count>lim: break
             _reset()
             os.chdir(cwd)
+    handleFCGI=classmethod(handleFCGI)
 
     def _handleDict(self, D, url='dict'):
         "handle a request constructed from dictionary D"
@@ -1287,7 +1287,6 @@
             )
         response.setHeader('Location', url)
 
-    @staticmethod
     def _makeHiddenFields(params,unwanted=[
                                     'action', 'CGI_SCRIPT','SCRIPT_NAME',
                                     'formName', 'submit', 'reset', 'blur',
@@ -1302,6 +1301,7 @@
             else:
                     L('''<input type="hidden" name="%s" value="%s"/>''' % (key,htmlEscape(value)))
         return htmltext(sep.join(L.__self__))
+    _makeHiddenFields=staticmethod(_makeHiddenFields)
 
 class DeferredJobsMixin:
     _deferredArgPfx = '--deferredcgiparams='
--- rlextra/utils/url2fscache.py
@@ -86,7 +86,6 @@
     def __getitem__(self,url):
         return self._cache[url]

-    @staticmethod
     def writeText(text,path,msgFunc=None):
         dir = os.path.dirname(path)
         try:
@@ -97,6 +96,7 @@
         f.write(text)
         f.close()
         if msgFunc: msgFunc(' '.join(('wrote',path,'length',str(len(text)))))
+    writeText=staticmethod(writeText)

     def setPath(self,url,path):
         v = self._cache[url]

--- rlextra/ers/docgendb.py
@@ -81,7 +81,6 @@
         ForeignKey('hitLogEntryId', 'HitLogEntry', 'id'),
         ]

-    @classmethod
     def dropHitLogs(cls, conn, maxDaysToKeep=100):
         # drop all HitLogEntry rows that have no corresponding DocumentLogEntry
         # row, observing maxDaysToKeep
@@ -105,6 +104,7 @@
         nrDeleted = nrTotal-nrRemaining

         return nrDeleted, nrRemaining
+    dropHitLogs=classmethod(dropHitLogs)


 class Calendar(Table):
@@ -121,7 +121,6 @@
         IntColumn('dayOfWeek'),
         ]

-    @classmethod
     def ensureExistsAndPopulated(cls, conn, minYear=1990, maxYear=2020):
         cls.createTable(conn, dropIfExists=True)
         day = DateTime.DateTimeDelta(1)
@@ -144,6 +143,7 @@
             cal.store()
             date += day
         conn.commit()
+    ensureExistsAndPopulated=classmethod(ensureExistsAndPopulated)


 def yes(msg, limit=10, addPrompt=' (yes/[no]): '):


--- rlextra/utils/zipapp.py
@@ -749,7 +749,6 @@
             os.symlink(src,tgt)
             self._log('symlink(%r,%r)' % (src,tgt))

-    @staticmethod
     def platformValue(**kwds):
         p = sys.platform
         try:
@@ -757,6 +756,7 @@
             return kwds.get(p,default)
         except KeyError:
             return kwds[p]
+    platformValue=staticmethod(platformValue)

     def yesnoquery(self,prompt):
         yn = getattr(self,'_yesno',0)
--- rlextra/graphics/guiedit/mutils.py
@@ -480,7 +480,7 @@
 		self.deletions = []
 		self.assigns = []
 		a = self.assigns.append
-		for i in (i for i,x in enumerate(T) if x[1].endswith('=') and (i<2 or T[i-2][1] not in (',','('))):
+		for i in [i for i,x in enumerate(T) if x[1].endswith('=') and (i<2 or T[i-2][1] not in (',','('))]:
 			lhs = []
 			for j in xrange(s,i):
 				t = T[j][1]
@@ -509,14 +509,14 @@
 	def LHS(self):
 		L = getattr(self,'_LHS',None)
 		if L==None:
-			L = self._LHS = list(a[0] for a in self.assigns)
+			L = self._LHS = list([a[0] for a in self.assigns])
 		return L
 	LHS = property(LHS)
 
-	@staticmethod
 	def tokens(s):
 		import tokenize, StringIO
 		return list(tokenize.generate_tokens(StringIO.StringIO(s).readline))
+	tokens=staticmethod(tokens)
 
 class AssignChecker:
 	def __init__(self,lines):
--- rlextra/utils/namedtuple.py
@@ -28,7 +28,7 @@
     def __new__(cls, *args, **kwds):
         if kwds:
             try:
-                args += tuple(kwds[name] for name in field_names[len(args):])
+                args += tuple([kwds[name] for name in field_names[len(args):]])
             except KeyError, name:
                 raise TypeError('%s missing required argument: %s' % (typename, name))
         if len(args) != nargs:
@@ -38,7 +38,7 @@
     def __from_iterable__(cls,arg):
         return cls.__new__(cls,*arg)
 
-    repr_template = '%s(%s)' % (typename, ', '.join('%s=%%r' % name for name in field_names))
+    repr_template = '%s(%s)' % (typename, ', '.join(['%s=%%r' % name for name in field_names]))
 
     m = dict(vars(tuple))       # pre-lookup superclass methods (for faster lookup)
     m.update(__doc__= '%s(%s)' % (typename, ', '.join(field_names)),
@@ -49,7 +49,7 @@
              __field_names__ = tuple(field_names),
              __from_iterable__=classmethod(__from_iterable__),
              )
-    m.update((name, property(itemgetter(index))) for index, name in enumerate(field_names))
+    m.update([(name, property(itemgetter(index))) for index, name in enumerate(field_names)])
 
     return type(typename, (tuple,), m)
 
--- rlextra/forms/qbase.py
@@ -174,9 +174,9 @@
                 if isinstance(child, QBase):
                     child.makeSample()
 
-    @property
     def textValue(self):
         return self.getTextValue()
+    textValue=property(textValue)
 
     def populateDict(self, dict, asText):
         "Do not modify dict in base class"
@@ -931,13 +931,13 @@
         #called AFTER options have been set
         self._initialized = 1
 
-    @property
     def values(self):
         return [obj.value for obj in self.options]
+    values=property(values)
 
-    @property
     def labels(self):
         return [obj.label for obj in self.options]
+    labels=property(labels)
 
     def removeOption(self, value):
         """To be called at fixup() time."""
