diff --git a/Demo/classes/Complex.py b/Demo/classes/Complex.py
index 4585f62..a9f5c2e 100755
--- a/Demo/classes/Complex.py
+++ b/Demo/classes/Complex.py
@@ -117,15 +117,15 @@
 
     def __repr__(self):
         if not self.im:
-            return 'Complex(%s)' % `self.re`
+            return 'Complex(%r)' % (self.re,)
         else:
-            return 'Complex(%s, %s)' % (`self.re`, `self.im`)
+            return 'Complex(%r, %r)' % (self.re, self.im)
 
     def __str__(self):
         if not self.im:
-            return `self.re`
+            return repr(self.re)
         else:
-            return 'Complex(%s, %s)' % (`self.re`, `self.im`)
+            return 'Complex(%r, %r)' % (self.re, self.im)
 
     def __neg__(self):
         return Complex(-self.re, -self.im)
diff --git a/Demo/classes/Dates.py b/Demo/classes/Dates.py
index 06ffa36..f8f0634 100755
--- a/Demo/classes/Dates.py
+++ b/Demo/classes/Dates.py
@@ -86,7 +86,7 @@
 
 def _num2date( n ):             # return date with ordinal n
     if type(n) not in _INT_TYPES:
-        raise TypeError, 'argument must be integer: ' + `type(n)`
+        raise TypeError, 'argument must be integer: %r' % type(n)
 
     ans = Date(1,1,1)   # arguments irrelevant; just getting a Date obj
     del ans.ord, ans.month, ans.day, ans.year # un-initialize it
@@ -120,10 +120,10 @@
 class Date:
     def __init__( self, month, day, year ):
         if not 1 <= month <= 12:
-            raise ValueError, 'month must be in 1..12: ' + `month`
+            raise ValueError, 'month must be in 1..12: %r' % (month,)
         dim = _days_in_month( month, year )
         if not 1 <= day <= dim:
-            raise ValueError, 'day must be in 1..' + `dim` + ': ' + `day`
+            raise ValueError, 'day must be in 1..%r: %r' % (dim, day)
         self.month, self.day, self.year = month, day, year
         self.ord = _date2num( self )
 
@@ -142,15 +142,16 @@
 
     # print as, e.g., Mon 16 Aug 1993
     def __repr__( self ):
-        return '%.3s %2d %.3s ' % (
+        return '%.3s %2d %.3s %r' % (
               self.weekday(),
               self.day,
-              _MONTH_NAMES[self.month-1] ) + `self.year`
+              _MONTH_NAMES[self.month-1],
+              self.year)
 
     # Python 1.1 coerces neither int+date nor date+int
     def __add__( self, n ):
         if type(n) not in _INT_TYPES:
-            raise TypeError, 'can\'t add ' + `type(n)` + ' to date'
+            raise TypeError, 'can\'t add %r to date' % type(n)
         return _num2date( self.ord + n )
     __radd__ = __add__ # handle int+date
 
@@ -177,7 +178,7 @@
 def test( firstyear, lastyear ):
     a = Date(9,30,1913)
     b = Date(9,30,1914)
-    if `a` != 'Tue 30 Sep 1913':
+    if repr(a) != 'Tue 30 Sep 1913':
         raise DateTestError, '__repr__ failure'
     if (not a < b) or a == b or a > b or b != b:
         raise DateTestError, '__cmp__ failure'
diff --git a/Demo/classes/Dbm.py b/Demo/classes/Dbm.py
index 5566f99..482806a 100755
--- a/Demo/classes/Dbm.py
+++ b/Demo/classes/Dbm.py
@@ -13,7 +13,7 @@
     def __repr__(self):
         s = ''
         for key in self.keys():
-            t = `key` + ': ' + `self[key]`
+            t = repr(key) + ': ' + repr(self[key])
             if s: t = ', ' + t
             s = s + t
         return '{' + s + '}'
@@ -22,13 +22,13 @@
         return len(self.db)
 
     def __getitem__(self, key):
-        return eval(self.db[`key`])
+        return eval(self.db[repr(key)])
 
     def __setitem__(self, key, value):
-        self.db[`key`] = `value`
+        self.db[repr(key)] = repr(value)
 
     def __delitem__(self, key):
-        del self.db[`key`]
+        del self.db[repr(key)]
 
     def keys(self):
         res = []
@@ -37,7 +37,7 @@
         return res
 
     def has_key(self, key):
-        return self.db.has_key(`key`)
+        return self.db.has_key(repr(key))
 
 
 def test():
diff --git a/Demo/classes/Range.py b/Demo/classes/Range.py
index ebd1817..68f3c61 100755
--- a/Demo/classes/Range.py
+++ b/Demo/classes/Range.py
@@ -34,9 +34,9 @@
         self.step = step
         self.len = max(0, int((self.stop - self.start) / self.step))
 
-    # implement `x` and is also used by print x
+    # implement repr(x) and is also used by print x
     def __repr__(self):
-        return 'range' + `self.start, self.stop, self.step`
+        return 'range(%r, %r, %r)' % (self.start, self.stop, self.step)
 
     # implement len(x)
     def __len__(self):
diff --git a/Demo/classes/bitvec.py b/Demo/classes/bitvec.py
index ed89d67..2894a56 100755
--- a/Demo/classes/bitvec.py
+++ b/Demo/classes/bitvec.py
@@ -20,7 +20,7 @@
     mant, l = math.frexp(float(param))
     bitmask = 1L << l
     if bitmask <= param:
-        raise 'FATAL', '(param, l) = ' + `param, l`
+        raise 'FATAL', '(param, l) = %r' % ((param, l),)
     while l:
         bitmask = bitmask >> 1
         if param & bitmask:
@@ -167,10 +167,10 @@
 
     def __repr__(self):
         ##rprt('<bitvec class instance object>.' + '__repr__()\n')
-        return 'bitvec' + `self._data, self._len`
+        return 'bitvec(%r, %r)' % (self._data, self._len)
 
     def __cmp__(self, other, *rest):
-        #rprt(`self`+'.__cmp__'+`(other, ) + rest`+'\n')
+        #rprt('%r.__cmp__%r\n' % (self, (other,) + rest))
         if type(other) != type(self):
             other = apply(bitvec, (other, ) + rest)
         #expensive solution... recursive binary, with slicing
@@ -193,16 +193,16 @@
 
 
     def __len__(self):
-        #rprt(`self`+'.__len__()\n')
+        #rprt('%r.__len__()\n' % (self,))
         return self._len
 
     def __getitem__(self, key):
-        #rprt(`self`+'.__getitem__('+`key`+')\n')
+        #rprt('%r.__getitem__(%r)\n' % (self, key))
         key = _check_key(self._len, key)
         return self._data & (1L << key) != 0
 
     def __setitem__(self, key, value):
-        #rprt(`self`+'.__setitem__'+`key, value`+'\n')
+        #rprt('%r.__setitem__(%r, %r)\n' % (self, key, value))
         key = _check_key(self._len, key)
         #_check_value(value)
         if value:
@@ -211,14 +211,14 @@
             self._data = self._data & ~(1L << key)
 
     def __delitem__(self, key):
-        #rprt(`self`+'.__delitem__('+`key`+')\n')
+        #rprt('%r.__delitem__(%r)\n' % (self, key))
         key = _check_key(self._len, key)
         #el cheapo solution...
         self._data = self[:key]._data | self[key+1:]._data >> key
         self._len = self._len - 1
 
     def __getslice__(self, i, j):
-        #rprt(`self`+'.__getslice__'+`i, j`+'\n')
+        #rprt('%r.__getslice__(%r, %r)\n' % (self, i, j))
         i, j = _check_slice(self._len, i, j)
         if i >= j:
             return BitVec(0L, 0)
@@ -234,7 +234,7 @@
         return BitVec(ndata, nlength)
 
     def __setslice__(self, i, j, sequence, *rest):
-        #rprt(`self`+'.__setslice__'+`(i, j, sequence) + rest`+'\n')
+        #rprt('%s.__setslice__%r\n' % (self, (i, j, sequence) + rest))
         i, j = _check_slice(self._len, i, j)
         if type(sequence) != type(self):
             sequence = apply(bitvec, (sequence, ) + rest)
@@ -247,7 +247,7 @@
         self._len = self._len - j + i + sequence._len
 
     def __delslice__(self, i, j):
-        #rprt(`self`+'.__delslice__'+`i, j`+'\n')
+        #rprt('%r.__delslice__(%r, %r)\n' % (self, i, j))
         i, j = _check_slice(self._len, i, j)
         if i == 0 and j == self._len:
             self._data, self._len = 0L, 0
@@ -256,13 +256,13 @@
             self._len = self._len - j + i
 
     def __add__(self, other):
-        #rprt(`self`+'.__add__('+`other`+')\n')
+        #rprt('%r.__add__(%r)\n' % (self, other))
         retval = self.copy()
         retval[self._len:self._len] = other
         return retval
 
     def __mul__(self, multiplier):
-        #rprt(`self`+'.__mul__('+`multiplier`+')\n')
+        #rprt('%r.__mul__(%r)\n' % (self, multiplier))
         if type(multiplier) != type(0):
             raise TypeError, 'sequence subscript not int'
         if multiplier <= 0:
@@ -281,7 +281,7 @@
         return retval
 
     def __and__(self, otherseq, *rest):
-        #rprt(`self`+'.__and__'+`(otherseq, ) + rest`+'\n')
+        #rprt('%r.__and__%r\n' % (self, (otherseq,) + rest))
         if type(otherseq) != type(self):
             otherseq = apply(bitvec, (otherseq, ) + rest)
         #sequence is now of our own type
@@ -290,7 +290,7 @@
 
 
     def __xor__(self, otherseq, *rest):
-        #rprt(`self`+'.__xor__'+`(otherseq, ) + rest`+'\n')
+        #rprt('%r.__xor__%r\n' % (self, (otherseq,) + rest))
         if type(otherseq) != type(self):
             otherseq = apply(bitvec, (otherseq, ) + rest)
         #sequence is now of our own type
@@ -299,7 +299,7 @@
 
 
     def __or__(self, otherseq, *rest):
-        #rprt(`self`+'.__or__'+`(otherseq, ) + rest`+'\n')
+        #rprt('%r.__or__%r\n' % (self, (otherseq,) + rest))
         if type(otherseq) != type(self):
             otherseq = apply(bitvec, (otherseq, ) + rest)
         #sequence is now of our own type
@@ -308,13 +308,13 @@
 
 
     def __invert__(self):
-        #rprt(`self`+'.__invert__()\n')
+        #rprt('%r.__invert__()\n' % (self,))
         return BitVec(~self._data & ((1L << self._len) - 1), \
                   self._len)
 
     def __coerce__(self, otherseq, *rest):
         #needed for *some* of the arithmetic operations
-        #rprt(`self`+'.__coerce__'+`(otherseq, ) + rest`+'\n')
+        #rprt('%r.__coerce__%r\n' % (self, (otherseq,) + rest))
         if type(otherseq) != type(self):
             otherseq = apply(bitvec, (otherseq, ) + rest)
         return self, otherseq
diff --git a/Demo/metaclasses/Enum.py b/Demo/metaclasses/Enum.py
index 13a3ed7..df1d814 100644
--- a/Demo/metaclasses/Enum.py
+++ b/Demo/metaclasses/Enum.py
@@ -107,9 +107,9 @@
         return self.__value
 
     def __repr__(self):
-        return "EnumInstance(%s, %s, %s)" % (`self.__classname`,
-                                             `self.__enumname`,
-                                             `self.__value`)
+        return "EnumInstance(%r, %r, %r)" % (self.__classname,
+                                             self.__enumname,
+                                             self.__value)
 
     def __str__(self):
         return "%s.%s" % (self.__classname, self.__enumname)
diff --git a/Demo/metaclasses/Meta.py b/Demo/metaclasses/Meta.py
index 39cbef6..5534074 100644
--- a/Demo/metaclasses/Meta.py
+++ b/Demo/metaclasses/Meta.py
@@ -98,7 +98,7 @@
         def __init__(self, *args):
             print "__init__, args =", args
         def m1(self, x):
-            print "m1(x=%s)" %`x`
+            print "m1(x=%r)" % (x,)
     print C
     x = C()
     print x
diff --git a/Demo/metaclasses/Trace.py b/Demo/metaclasses/Trace.py
index 86e199d..ea12cd9 100644
--- a/Demo/metaclasses/Trace.py
+++ b/Demo/metaclasses/Trace.py
@@ -117,7 +117,7 @@
         def m2(self, y): return self.x + y
         __trace_output__ = sys.stdout
     class D(C):
-        def m2(self, y): print "D.m2(%s)" % `y`; return C.m2(self, y)
+        def m2(self, y): print "D.m2(%r)" % (y,); return C.m2(self, y)
         __trace_output__ = None
     x = C(4321)
     print x
diff --git a/Demo/newmetaclasses/Enum.py b/Demo/newmetaclasses/Enum.py
index 8a00b59..5d490a9 100644
--- a/Demo/newmetaclasses/Enum.py
+++ b/Demo/newmetaclasses/Enum.py
@@ -97,7 +97,7 @@
 
     print Color.red
 
-    print `Color.red`
+    print repr(Color.red)
     print Color.red == Color.red
     print Color.red == Color.blue
     print Color.red == 1
@@ -139,7 +139,7 @@
 
     print Color.red
 
-    print `Color.red`
+    print repr(Color.red)
     print Color.red == Color.red
     print Color.red == Color.blue
     print Color.red == 1
diff --git a/Demo/pdist/RCSProxy.py b/Demo/pdist/RCSProxy.py
index 7212ca6..87c65cc 100755
--- a/Demo/pdist/RCSProxy.py
+++ b/Demo/pdist/RCSProxy.py
@@ -188,7 +188,7 @@
         if callable(attr):
             print apply(attr, tuple(sys.argv[2:]))
         else:
-            print `attr`
+            print repr(attr)
     else:
         print "%s: no such attribute" % what
         sys.exit(2)
diff --git a/Demo/pdist/client.py b/Demo/pdist/client.py
index 3e93f1c..a00f005 100755
--- a/Demo/pdist/client.py
+++ b/Demo/pdist/client.py
@@ -139,7 +139,7 @@
 		line = self._rf.readline()
 		challenge = string.atoi(string.strip(line))
 		response = self._encode_challenge(challenge)
-		line = `long(response)`
+		line = repr(long(response))
 		if line[-1] in 'Ll': line = line[:-1]
 		self._wf.write(line + '\n')
 		self._wf.flush()
diff --git a/Demo/pdist/cmdfw.py b/Demo/pdist/cmdfw.py
index a0c6f5d..25584b7 100755
--- a/Demo/pdist/cmdfw.py
+++ b/Demo/pdist/cmdfw.py
@@ -55,7 +55,7 @@
 			try:
 				method = getattr(self, mname)
 			except AttributeError:
-				return self.usage("command %s unknown" % `cmd`)
+				return self.usage("command %r unknown" % (cmd,))
 			try:
 				flags = getattr(self, fname)
 			except AttributeError:
@@ -75,7 +75,7 @@
 			print "-"*40
 			print "Options:"
 			for o, a in opts:
-				print 'option', o, 'value', `a`
+				print 'option', o, 'value', repr(a)
 			print "-"*40
 
 	def ready(self):
@@ -137,7 +137,7 @@
 	for t in tests:
 		print '-'*10, t, '-'*10
 		sts = x.run(t)
-		print "Exit status:", `sts`
+		print "Exit status:", repr(sts)
 
 
 if __name__ == '__main__':
diff --git a/Demo/pdist/cmptree.py b/Demo/pdist/cmptree.py
index 7eaa6c3..8a34f3f 100755
--- a/Demo/pdist/cmptree.py
+++ b/Demo/pdist/cmptree.py
@@ -49,7 +49,7 @@
 
 def compare(local, remote, mode):
 	print
-	print "PWD =", `os.getcwd()`
+	print "PWD =", repr(os.getcwd())
 	sums_id = remote._send('sumlist')
 	subdirs_id = remote._send('listsubdirs')
 	remote._flush()
@@ -64,13 +64,13 @@
 	for name, rsum in sums:
 		rsumdict[name] = rsum
 		if not lsumdict.has_key(name):
-			print `name`, "only remote"
+			print repr(name), "only remote"
 			if 'r' in mode and 'c' in mode:
 				recvfile(local, remote, name)
 		else:
 			lsum = lsumdict[name]
 			if lsum != rsum:
-				print `name`,
+				print repr(name),
 				rmtime = remote.mtime(name)
 				lmtime = local.mtime(name)
 				if rmtime > lmtime:
@@ -86,7 +86,7 @@
 				print
 	for name in lsumdict.keys():
 		if not rsumdict.keys():
-			print `name`, "only locally",
+			print repr(name), "only locally",
 			fl()
 			if 'w' in mode and 'c' in mode:
 				sendfile(local, remote, name)
@@ -160,7 +160,7 @@
 		return rv
 	finally:
 		if not ok:
-			print "*** recvfile of %s failed, deleting" % `name`
+			print "*** recvfile of %r failed, deleting" % (name,)
 			local.delete(name)
 
 def recvfile_real(local, remote, name):
diff --git a/Demo/pdist/cvslock.py b/Demo/pdist/cvslock.py
index a421e1a..75f866e 100755
--- a/Demo/pdist/cvslock.py
+++ b/Demo/pdist/cvslock.py
@@ -114,7 +114,7 @@
 		self.delay = delay
 		self.lockdir = None
 		self.lockfile = None
-		pid = `os.getpid()`
+		pid = repr(os.getpid())
 		self.cvslck = self.join(CVSLCK)
 		self.cvsrfl = self.join(CVSRFL + pid)
 		self.cvswfl = self.join(CVSWFL + pid)
diff --git a/Demo/pdist/rcslib.py b/Demo/pdist/rcslib.py
index 4e72766..78de111 100755
--- a/Demo/pdist/rcslib.py
+++ b/Demo/pdist/rcslib.py
@@ -232,7 +232,7 @@
         """
         name, rev = self._unmangle(name_rev)
         if not self.isvalid(name):
-            raise os.error, 'not an rcs file %s' % `name`
+            raise os.error, 'not an rcs file %r' % (name,)
         return name, rev
 
     # --- Internal methods ---
@@ -252,7 +252,7 @@
         namev = self.rcsname(name)
         if rev:
             cmd = cmd + ' ' + rflag + rev
-        return os.popen("%s %s" % (cmd, `namev`))
+        return os.popen("%s %r" % (cmd, namev))
 
     def _unmangle(self, name_rev):
         """INTERNAL: Normalize NAME_REV argument to (NAME, REV) tuple.
diff --git a/Demo/pdist/server.py b/Demo/pdist/server.py
index 423d583..4e4ab0d 100755
--- a/Demo/pdist/server.py
+++ b/Demo/pdist/server.py
@@ -134,11 +134,11 @@
 			response = string.atol(string.strip(response))
 		except string.atol_error:
 			if self._verbose > 0:
-				print "Invalid response syntax", `response`
+				print "Invalid response syntax", repr(response)
 			return 0
 		if not self._compare_challenge_response(challenge, response):
 			if self._verbose > 0:
-				print "Invalid response value", `response`
+				print "Invalid response value", repr(response)
 			return 0
 		if self._verbose > 1:
 			print "Response matches challenge.  Go ahead!"
diff --git a/Demo/rpc/T.py b/Demo/rpc/T.py
index abf3a06..2adf486 100644
--- a/Demo/rpc/T.py
+++ b/Demo/rpc/T.py
@@ -18,5 +18,5 @@
 	[u, s, r] = tt
 	msg = ''
 	for x in label: msg = msg + (x + ' ')
-	msg = msg + `u` + ' user, ' + `s` + ' sys, ' + `r` + ' real\n'
+	msg = msg + '%r user, %r sys, %r real\n' % (u, s, r)
 	sys.stderr.write(msg)
diff --git a/Demo/rpc/rnusersclient.py b/Demo/rpc/rnusersclient.py
index e9cad62..90cbd6d 100644
--- a/Demo/rpc/rnusersclient.py
+++ b/Demo/rpc/rnusersclient.py
@@ -77,7 +77,7 @@
 		line = strip0(line)
 		name = strip0(name)
 		host = strip0(host)
-		print `name`, `host`, `line`, time, idle
+		print "%r %r %r %s %s" % (name, host, line, time, idle)
 
 def testbcast():
 	c = BroadcastRnusersClient('<broadcast>')
diff --git a/Demo/rpc/rpc.py b/Demo/rpc/rpc.py
index f44b3e4..6b15db4 100644
--- a/Demo/rpc/rpc.py
+++ b/Demo/rpc/rpc.py
@@ -93,10 +93,10 @@
 		xid = self.unpack_uint(xid)
 		temp = self.unpack_enum()
 		if temp <> CALL:
-			raise BadRPCFormat, 'no CALL but ' + `temp`
+			raise BadRPCFormat, 'no CALL but %r' % (temp,)
 		temp = self.unpack_uint()
 		if temp <> RPCVERSION:
-			raise BadRPCVerspion, 'bad RPC version ' + `temp`
+			raise BadRPCVerspion, 'bad RPC version %r' % (temp,)
 		prog = self.unpack_uint()
 		vers = self.unpack_uint()
 		proc = self.unpack_uint()
@@ -109,7 +109,7 @@
 		xid = self.unpack_uint()
 		mtype = self.unpack_enum()
 		if mtype <> REPLY:
-			raise RuntimeError, 'no REPLY but ' + `mtype`
+			raise RuntimeError, 'no REPLY but %r' % (mtype,)
 		stat = self.unpack_enum()
 		if stat == MSG_DENIED:
 			stat = self.unpack_enum()
@@ -117,15 +117,15 @@
 				low = self.unpack_uint()
 				high = self.unpack_uint()
 				raise RuntimeError, \
-				  'MSG_DENIED: RPC_MISMATCH: ' + `low, high`
+				  'MSG_DENIED: RPC_MISMATCH: %r' % ((low, high),)
 			if stat == AUTH_ERROR:
 				stat = self.unpack_uint()
 				raise RuntimeError, \
-					'MSG_DENIED: AUTH_ERROR: ' + `stat`
-			raise RuntimeError, 'MSG_DENIED: ' + `stat`
+					'MSG_DENIED: AUTH_ERROR: %r' % (stat,)
+			raise RuntimeError, 'MSG_DENIED: %r' % (stat,)
 		if stat <> MSG_ACCEPTED:
 			raise RuntimeError, \
-			  'Neither MSG_DENIED nor MSG_ACCEPTED: ' + `stat`
+			  'Neither MSG_DENIED nor MSG_ACCEPTED: %r' % (stat,)
 		verf = self.unpack_auth()
 		stat = self.unpack_enum()
 		if stat == PROG_UNAVAIL:
@@ -134,13 +134,13 @@
 			low = self.unpack_uint()
 			high = self.unpack_uint()
 			raise RuntimeError, \
-				'call failed: PROG_MISMATCH: ' + `low, high`
+				'call failed: PROG_MISMATCH: %r' % ((low, high),)
 		if stat == PROC_UNAVAIL:
 			raise RuntimeError, 'call failed: PROC_UNAVAIL'
 		if stat == GARBAGE_ARGS:
 			raise RuntimeError, 'call failed: GARBAGE_ARGS'
 		if stat <> SUCCESS:
-			raise RuntimeError, 'call failed: ' + `stat`
+			raise RuntimeError, 'call failed: %r' % (stat,)
 		return xid, verf
 		# Caller must get procedure-specific part of reply
 
@@ -350,8 +350,8 @@
 		xid, verf = u.unpack_replyheader()
 		if xid <> self.lastxid:
 			# Can't really happen since this is TCP...
-			raise RuntimeError, 'wrong xid in reply ' + `xid` + \
-				' instead of ' + `self.lastxid`
+			raise RuntimeError, 'wrong xid in reply %r instead of %r' % (
+			                     xid, self.lastxid)
 
 
 # Client using UDP to a specific port
@@ -701,7 +701,7 @@
 			self.packer.pack_uint(self.vers)
 			return self.packer.get_buf()
 		proc = self.unpacker.unpack_uint()
-		methname = 'handle_' + `proc`
+		methname = 'handle_' + repr(proc)
 		try:
 			meth = getattr(self, methname)
 		except AttributeError:
@@ -840,7 +840,7 @@
 		bcastaddr = '<broadcast>'
 	def rh(reply, fromaddr):
 		host, port = fromaddr
-		print host + '\t' + `reply`
+		print host + '\t' + repr(reply)
 	pmap = BroadcastUDPPortMapperClient(bcastaddr)
 	pmap.set_reply_handler(rh)
 	pmap.set_timeout(5)
@@ -858,7 +858,7 @@
 		def handle_1(self):
 			arg = self.unpacker.unpack_string()
 			self.turn_around()
-			print 'RPC function 1 called, arg', `arg`
+			print 'RPC function 1 called, arg', repr(arg)
 			self.packer.pack_string(arg + arg)
 	#
 	s = S('', 0x20000000, 1, 0)
@@ -888,4 +888,4 @@
 	c = C(host, 0x20000000, 1)
 	print 'making call...'
 	reply = c.call_1('hello, world, ')
-	print 'call returned', `reply`
+	print 'call returned', repr(reply)
diff --git a/Demo/rpc/xdr.py b/Demo/rpc/xdr.py
index 41c970a..5338aef 100644
--- a/Demo/rpc/xdr.py
+++ b/Demo/rpc/xdr.py
@@ -184,8 +184,7 @@
 			x = self.unpack_uint()
 			if x == 0: break
 			if x <> 1:
-				raise RuntimeError, \
-					'0 or 1 expected, got ' + `x`
+				raise RuntimeError, '0 or 1 expected, got %r' % (x, )
 			item = unpack_item()
 			list.append(item)
 		return list
diff --git a/Demo/scripts/eqfix.py b/Demo/scripts/eqfix.py
index 583d54e..2139d2b 100755
--- a/Demo/scripts/eqfix.py
+++ b/Demo/scripts/eqfix.py
@@ -58,12 +58,12 @@
 	return ispythonprog.match(name) >= 0
 
 def recursedown(dirname):
-	dbg('recursedown(' + `dirname` + ')\n')
+	dbg('recursedown(%r)\n' % (dirname,))
 	bad = 0
 	try:
 		names = os.listdir(dirname)
 	except os.error, msg:
-		err(dirname + ': cannot list directory: ' + `msg` + '\n')
+		err('%s: cannot list directory: %r\n' % (dirname, msg))
 		return 1
 	names.sort()
 	subdirs = []
@@ -80,11 +80,11 @@
 	return bad
 
 def fix(filename):
-##	dbg('fix(' + `filename` + ')\n')
+##	dbg('fix(%r)\n' % (dirname,))
 	try:
 		f = open(filename, 'r')
 	except IOError, msg:
-		err(filename + ': cannot open: ' + `msg` + '\n')
+		err('%s: cannot open: %r\n' % (filename, msg))
 		return 1
 	head, tail = os.path.split(filename)
 	tempname = os.path.join(head, '@' + tail)
@@ -122,14 +122,13 @@
 					g = open(tempname, 'w')
 				except IOError, msg:
 					f.close()
-					err(tempname+': cannot create: '+\
-					    `msg`+'\n')
+					err('%s: cannot create: %r\n' % (tempname, msg))
 					return 1
 				f.seek(0)
 				lineno = 0
 				rep(filename + ':\n')
 				continue # restart from the beginning
-			rep(`lineno` + '\n')
+			rep(repr(lineno) + '\n')
 			rep('< ' + line)
 			rep('> ' + newline)
 		if g is not None:
@@ -146,17 +145,17 @@
 		statbuf = os.stat(filename)
 		os.chmod(tempname, statbuf[ST_MODE] & 07777)
 	except os.error, msg:
-		err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
+		err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
 	# Then make a backup of the original file as filename~
 	try:
 		os.rename(filename, filename + '~')
 	except os.error, msg:
-		err(filename + ': warning: backup failed (' + `msg` + ')\n')
+		err('%s: warning: backup failed (%r)\n' % (filename, msg))
 	# Now move the temp file to the original file
 	try:
 		os.rename(tempname, filename)
 	except os.error, msg:
-		err(filename + ': rename failed (' + `msg` + ')\n')
+		err('%s: rename failed (%r)\n' % (filename, msg))
 		return 1
 	# Return succes
 	return 0
diff --git a/Demo/scripts/from.py b/Demo/scripts/from.py
index d61afde..3c04fcd 100755
--- a/Demo/scripts/from.py
+++ b/Demo/scripts/from.py
@@ -31,5 +31,5 @@
             if not line or line == '\n':
                 break
             if line.startswith('Subject: '):
-                print `line[9:-1]`,
+                print repr(line[9:-1]),
         print
diff --git a/Demo/scripts/ftpstats.py b/Demo/scripts/ftpstats.py
index 28b1d8b..79cbee6 100755
--- a/Demo/scripts/ftpstats.py
+++ b/Demo/scripts/ftpstats.py
@@ -60,7 +60,7 @@
 			if search and string.find(line, search) < 0:
 				continue
 			if prog.match(line) < 0:
-				print 'Bad line', lineno, ':', `line`
+				print 'Bad line', lineno, ':', repr(line)
 				continue
 			items = prog.group(1, 2, 3, 4, 5, 6)
 			(logtime, loguser, loghost, logfile, logbytes,
diff --git a/Demo/scripts/lpwatch.py b/Demo/scripts/lpwatch.py
index 9f051eb..00afba9 100755
--- a/Demo/scripts/lpwatch.py
+++ b/Demo/scripts/lpwatch.py
@@ -83,24 +83,24 @@
 				lines.append(line)
 	#
 	if totaljobs:
-		line = `(totalbytes+1023)/1024` + ' K'
+		line = '%d K' % ((totalbytes+1023)/1024)
 		if totaljobs <> len(users):
-			line = line + ' (' + `totaljobs` + ' jobs)'
+			line = line + ' (%d jobs)' % totaljobs
 		if len(users) == 1:
-			line = line + ' for ' + users.keys()[0]
+			line = line + ' for %s' % (users.keys()[0],)
 		else:
-			line = line + ' for ' + `len(users)` + ' users'
+			line = line + ' for %d users' % len(users)
 			if userseen:
 				if aheadjobs == 0:
-				  line =  line + ' (' + thisuser + ' first)'
+					line =  line + ' (%s first)' % thisuser
 				else:
-				  line = line + ' (' + `(aheadbytes+1023)/1024`
-				  line = line + ' K before ' + thisuser + ')'
+					line = line + ' (%d K before %s)' % (
+					               (aheadbytes+1023)/1024, thisuser)
 		lines.append(line)
 	#
 	sts = pipe.close()
 	if sts:
-		lines.append('lpq exit status ' + `sts`)
+		lines.append('lpq exit status %r' % (sts,))
 	return string.joinfields(lines, ': ')
 
 try:
diff --git a/Demo/scripts/markov.py b/Demo/scripts/markov.py
index e1649f1..b0583d1 100755
--- a/Demo/scripts/markov.py
+++ b/Demo/scripts/markov.py
@@ -89,8 +89,8 @@
 	if debug > 1:
 		for key in m.trans.keys():
 			if key is None or len(key) < histsize:
-				print `key`, m.trans[key]
-		if histsize == 0: print `''`, m.trans['']
+				print repr(key), m.trans[key]
+		if histsize == 0: print repr(''), m.trans['']
 		print
 	while 1:
 		data = m.get()
diff --git a/Demo/scripts/mboxconvert.py b/Demo/scripts/mboxconvert.py
index 08e0d0c..996537d 100755
--- a/Demo/scripts/mboxconvert.py
+++ b/Demo/scripts/mboxconvert.py
@@ -73,7 +73,7 @@
 			sts = message(f, line) or sts
 		else:
 			sys.stderr.write(
-				'Bad line in MMFD mailbox: %s\n' % `line`)
+				'Bad line in MMFD mailbox: %r\n' % (line,))
 	return sts
 
 counter = 0 # for generating unique Message-ID headers
@@ -89,7 +89,7 @@
 		t = time.mktime(tt)
 	else:
 		sys.stderr.write(
-			'Unparseable date: %s\n' % `m.getheader('Date')`)
+			'Unparseable date: %r\n' % (m.getheader('Date'),))
 		t = os.fstat(f.fileno())[stat.ST_MTIME]
 	print 'From', email, time.ctime(t)
 	# Copy RFC822 header
diff --git a/Demo/scripts/mkrcs.py b/Demo/scripts/mkrcs.py
index 36a35ea..917b4fe 100755
--- a/Demo/scripts/mkrcs.py
+++ b/Demo/scripts/mkrcs.py
@@ -12,13 +12,13 @@
 	rcstree = 'RCStree'
 	rcs = 'RCS'
 	if os.path.islink(rcs):
-		print `rcs`, 'is a symlink to', `os.readlink(rcs)`
+		print '%r is a symlink to %r' % (rcs, os.readlink(rcs))
 		return
 	if os.path.isdir(rcs):
-		print `rcs`, 'is an ordinary directory'
+		print '%r is an ordinary directory' % (rcs,)
 		return
 	if os.path.exists(rcs):
-		print `rcs`, 'is a file?!?!'
+		print '%r is a file?!?!' % (rcs,)
 		return
 	#
 	p = os.getcwd()
@@ -29,26 +29,26 @@
 	# (2) up is the same directory as p
 	# Ergo:
 	# (3) join(up, down) is the current directory
-	#print 'p =', `p`
+	#print 'p =', repr(p)
 	while not os.path.isdir(os.path.join(p, rcstree)):
 		head, tail = os.path.split(p)
-		#print 'head =', `head`, '; tail =', `tail`
+		#print 'head = %r; tail = %r' % (head, tail)
 		if not tail:
-			print 'Sorry, no ancestor dir contains', `rcstree`
+			print 'Sorry, no ancestor dir contains %r' % (rcstree,)
 			return
 		p = head
 		up = os.path.join(os.pardir, up)
 		down = os.path.join(tail, down)
-		#print 'p =', `p`, '; up =', `up`, '; down =', `down`
+		#print 'p = %r; up = %r; down = %r' % (p, up, down)
 	there = os.path.join(up, rcstree)
 	there = os.path.join(there, down)
 	there = os.path.join(there, rcs)
 	if os.path.isdir(there):
-		print `there`, 'already exists'
+		print '%r already exists' % (there, )
 	else:
-		print 'making', `there`
+		print 'making %r' % (there,)
 		makedirs(there)
-	print 'making symlink', `rcs`, '->', `there`
+	print 'making symlink %r -> %r' % (rcs, there)
 	os.symlink(there, rcs)
 
 def makedirs(p):
diff --git a/Demo/scripts/mpzpi.py b/Demo/scripts/mpzpi.py
index 93c74aa..ccf591d 100755
--- a/Demo/scripts/mpzpi.py
+++ b/Demo/scripts/mpzpi.py
@@ -27,7 +27,7 @@
 def output(d):
 	# Use write() to avoid spaces between the digits
 	# Use int(d) to avoid a trailing L after each digit
-	sys.stdout.write(`int(d)`)
+	sys.stdout.write(repr(int(d)))
 	# Flush so the output is seen immediately
 	sys.stdout.flush()
 
diff --git a/Demo/scripts/newslist.py b/Demo/scripts/newslist.py
index f78ca30..b06b452 100755
--- a/Demo/scripts/newslist.py
+++ b/Demo/scripts/newslist.py
@@ -304,7 +304,7 @@
 def getnewgroups(server, treedate):
    print 'Getting list of new groups since start of '+treedate+'...',
    info = server.newgroups(treedate,'000001')[1]
-   print 'got '+`len(info)`+'.'
+   print 'got %d.' % len(info)
    print 'Processing...',
    groups = []
    for i in info:
diff --git a/Demo/scripts/pp.py b/Demo/scripts/pp.py
index 64e57ee..92a1104 100755
--- a/Demo/scripts/pp.py
+++ b/Demo/scripts/pp.py
@@ -125,6 +125,6 @@
 fp.flush()
 if DFLAG:
 	import pdb
-	pdb.run('execfile(' + `tfn` + ')')
+	pdb.run('execfile(%r)' % (tfn,))
 else:
 	execfile(tfn)
diff --git a/Demo/sockets/broadcast.py b/Demo/sockets/broadcast.py
index a02b081..010162c 100755
--- a/Demo/sockets/broadcast.py
+++ b/Demo/sockets/broadcast.py
@@ -10,7 +10,7 @@
 s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
 
 while 1:
-	data = `time.time()` + '\n'
+	data = repr(time.time()) + '\n'
 	s.sendto(data, ('<broadcast>', MYPORT))
 	time.sleep(2)
 
diff --git a/Demo/sockets/ftp.py b/Demo/sockets/ftp.py
index 8260c52..9e1d5a1 100755
--- a/Demo/sockets/ftp.py
+++ b/Demo/sockets/ftp.py
@@ -91,7 +91,7 @@
 	hostname = gethostname()
 	hostaddr = gethostbyname(hostname)
 	hbytes = string.splitfields(hostaddr, '.')
-	pbytes = [`port/256`, `port%256`]
+	pbytes = [repr(port/256), repr(port%256)]
 	bytes = hbytes + pbytes
 	cmd = 'PORT ' + string.joinfields(bytes, ',')
 	s.send(cmd + '\r\n')
diff --git a/Demo/sockets/gopher.py b/Demo/sockets/gopher.py
index a2ab3a2..4e1cb30 100755
--- a/Demo/sockets/gopher.py
+++ b/Demo/sockets/gopher.py
@@ -75,10 +75,10 @@
 		typechar = line[0]
 		parts = string.splitfields(line[1:], TAB)
 		if len(parts) < 4:
-			print '(Bad line from server:', `line`, ')'
+			print '(Bad line from server: %r)' % (line,)
 			continue
 		if len(parts) > 4:
-			print '(Extra info from server:', parts[4:], ')'
+			print '(Extra info from server: %r)' % (parts[4:],)
 		parts.insert(0, typechar)
 		list.append(parts)
 	f.close()
@@ -154,17 +154,17 @@
 	list = get_menu(selector, host, port)
 	while 1:
 		print '----- MENU -----'
-		print 'Selector:', `selector`
+		print 'Selector:', repr(selector)
 		print 'Host:', host, ' Port:', port
 		print
 		for i in range(len(list)):
 			item = list[i]
 			typechar, description = item[0], item[1]
-			print string.rjust(`i+1`, 3) + ':', description,
+			print string.rjust(repr(i+1), 3) + ':', description,
 			if typename.has_key(typechar):
 				print typename[typechar]
 			else:
-				print '<TYPE=' + `typechar` + '>'
+				print '<TYPE=' + repr(typechar) + '>'
 		print
 		while 1:
 			try:
@@ -221,7 +221,7 @@
 def browse_search(selector, host, port):
 	while 1:
 		print '----- SEARCH -----'
-		print 'Selector:', `selector`
+		print 'Selector:', repr(selector)
 		print 'Host:', host, ' Port:', port
 		print
 		try:
@@ -240,9 +240,9 @@
 # "Browse" telnet-based information, i.e. open a telnet session
 def browse_telnet(selector, host, port):
 	if selector:
-		print 'Log in as', `selector`
+		print 'Log in as', repr(selector)
 	if type(port) <> type(''):
-		port = `port`
+		port = repr(port)
 	sts = os.system('set -x; exec telnet ' + host + ' ' + port)
 	if sts:
 		print 'Exit status:', sts
@@ -307,18 +307,18 @@
 		try:
 			p = os.popen(cmd, 'w')
 		except IOError, msg:
-			print `cmd`, ':', msg
+			print repr(cmd), ':', msg
 			return None
-		print 'Piping through', `cmd`, '...'
+		print 'Piping through', repr(cmd), '...'
 		return p
 	if savefile[0] == '~':
 		savefile = os.path.expanduser(savefile)
 	try:
 		f = open(savefile, 'w')
 	except IOError, msg:
-		print `savefile`, ':', msg
+		print repr(savefile), ':', msg
 		return None
-	print 'Saving to', `savefile`, '...'
+	print 'Saving to', repr(savefile), '...'
 	return f
 
 # Test program
diff --git a/Demo/sockets/mcast.py b/Demo/sockets/mcast.py
index cc7a7e0..71bcc75 100755
--- a/Demo/sockets/mcast.py
+++ b/Demo/sockets/mcast.py
@@ -38,7 +38,7 @@
 		ttl = struct.pack('b', 1)		# Time-to-live
 		s.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, ttl)
 	while 1:
-		data = `time.time()`
+		data = repr(time.time())
 ##		data = data + (1400 - len(data)) * '\0'
 		s.sendto(data, (mygroup, MYPORT))
 		time.sleep(1)
@@ -53,7 +53,7 @@
 	while 1:
 		data, sender = s.recvfrom(1500)
 		while data[-1:] == '\0': data = data[:-1] # Strip trailing \0's
-		print sender, ':', `data`
+		print sender, ':', repr(data)
 
 
 # Open a UDP socket, bind it to a port and select a multicast group
diff --git a/Demo/sockets/radio.py b/Demo/sockets/radio.py
index 6131d40..b68a4ec 100755
--- a/Demo/sockets/radio.py
+++ b/Demo/sockets/radio.py
@@ -10,5 +10,5 @@
 
 while 1:
 	data, wherefrom = s.recvfrom(1500, 0)
-	sys.stderr.write(`wherefrom` + '\n')
+	sys.stderr.write(repr(wherefrom) + '\n')
 	sys.stdout.write(data)
diff --git a/Demo/sockets/telnet.py b/Demo/sockets/telnet.py
index ee7c43b..d86cbeb 100755
--- a/Demo/sockets/telnet.py
+++ b/Demo/sockets/telnet.py
@@ -53,7 +53,7 @@
 	try:
 		s.connect((host, port))
 	except error, msg:
-		sys.stderr.write('connect failed: ' + `msg` + '\n')
+		sys.stderr.write('connect failed: ' + repr(msg) + '\n')
 		sys.exit(1)
 	#
 	pid = posix.fork()
diff --git a/Demo/sockets/udpecho.py b/Demo/sockets/udpecho.py
index 4410165..720cfe1 100755
--- a/Demo/sockets/udpecho.py
+++ b/Demo/sockets/udpecho.py
@@ -37,7 +37,7 @@
 	print 'udp echo server ready'
 	while 1:
 		data, addr = s.recvfrom(BUFSIZE)
-		print 'server received', `data`, 'from', `addr`
+		print 'server received %r from %r' % (data, addr)
 		s.sendto(data, addr)
 
 def client():
@@ -58,6 +58,6 @@
 			break
 		s.sendto(line, addr)
 		data, fromaddr = s.recvfrom(BUFSIZE)
-		print 'client received', `data`, 'from', `fromaddr`
+		print 'client received %r from %r' % (data, fromaddr)
 
 main()
diff --git a/Demo/sockets/unicast.py b/Demo/sockets/unicast.py
index 1e9caeb..0a30f35 100644
--- a/Demo/sockets/unicast.py
+++ b/Demo/sockets/unicast.py
@@ -9,7 +9,7 @@
 s.bind(('', 0))
 
 while 1:
-	data = `time.time()` + '\n'
+	data = repr(time.time()) + '\n'
 	s.sendto(data, ('', MYPORT))
 	time.sleep(2)
 
diff --git a/Demo/sockets/unixclient.py b/Demo/sockets/unixclient.py
index a0d80f6..cccd617 100644
--- a/Demo/sockets/unixclient.py
+++ b/Demo/sockets/unixclient.py
@@ -7,4 +7,4 @@
 s.send('Hello, world')
 data = s.recv(1024)
 s.close()
-print 'Received', `data`
+print 'Received', repr(data)
diff --git a/Demo/threads/Coroutine.py b/Demo/threads/Coroutine.py
index 0cf9255..4cc65f7 100644
--- a/Demo/threads/Coroutine.py
+++ b/Demo/threads/Coroutine.py
@@ -138,10 +138,9 @@
 
     def tran(self, target, data=None):
         if not self.invokedby.has_key(target):
-            raise TypeError, '.tran target ' + `target` + \
-                             ' is not an active coroutine'
+            raise TypeError, '.tran target %r is not an active coroutine' % (target,)
         if self.killed:
-            raise TypeError, '.tran target ' + `target` + ' is killed'
+            raise TypeError, '.tran target %r is killed' % (target,)
         self.value = data
         me = self.active
         self.invokedby[target] = me
@@ -153,7 +152,7 @@
             if self.main is not me:
                 raise Killed
             if self.terminated_by is not None:
-                raise EarlyExit, `self.terminated_by` + ' terminated early'
+                raise EarlyExit, '%r terminated early' % (self.terminated_by,)
 
         return self.value
 
diff --git a/Demo/threads/find.py b/Demo/threads/find.py
index ab581e3..7d5edc1 100644
--- a/Demo/threads/find.py
+++ b/Demo/threads/find.py
@@ -116,7 +116,7 @@
     wq.run(nworkers)
     t2 = time.time()
 
-    sys.stderr.write('Total time ' + `t2-t1` + ' sec.\n')
+    sys.stderr.write('Total time %r sec.\n' % (t2-t1))
 
 
 # The predicate -- defines what files we look for.
@@ -133,7 +133,7 @@
     try:
         names = os.listdir(dir)
     except os.error, msg:
-        print `dir`, ':', msg
+        print repr(dir), ':', msg
         return
     for name in names:
         if name not in (os.curdir, os.pardir):
@@ -141,7 +141,7 @@
             try:
                 stat = os.lstat(fullname)
             except os.error, msg:
-                print `fullname`, ':', msg
+                print repr(fullname), ':', msg
                 continue
             if pred(dir, name, fullname, stat):
                 print fullname
diff --git a/Demo/threads/sync.py b/Demo/threads/sync.py
index a8556c4..1688403 100644
--- a/Demo/threads/sync.py
+++ b/Demo/threads/sync.py
@@ -336,7 +336,7 @@
 
     def broadcast(self, num = -1):
         if num < -1:
-            raise ValueError, '.broadcast called with num ' + `num`
+            raise ValueError, '.broadcast called with num %r' % (num,)
         if num == 0:
             return
         self.idlock.acquire()
@@ -418,7 +418,7 @@
         self.nonzero.acquire()
         if self.count == self.maxcount:
             raise ValueError, '.v() tried to raise semaphore count above ' \
-                  'initial value ' + `maxcount`
+                  'initial value %r' % (maxcount,))
         self.count = self.count + 1
         self.nonzero.signal()
         self.nonzero.release()
diff --git a/Demo/threads/telnet.py b/Demo/threads/telnet.py
index 3c70cb0..707a353 100644
--- a/Demo/threads/telnet.py
+++ b/Demo/threads/telnet.py
@@ -57,7 +57,7 @@
     try:
         s.connect((host, port))
     except error, msg:
-        sys.stderr.write('connect failed: ' + `msg` + '\n')
+        sys.stderr.write('connect failed: %r\n' % (msg,))
         sys.exit(1)
     #
     thread.start_new(child, (s,))
@@ -77,7 +77,7 @@
         for c in data:
             if opt:
                 print ord(c)
-##                              print '(replying: ' + `opt+c` + ')'
+##                              print '(replying: %r)' % (opt+c,)
                 s.send(opt + c)
                 opt = ''
             elif iac:
@@ -101,13 +101,13 @@
                 cleandata = cleandata + c
         sys.stdout.write(cleandata)
         sys.stdout.flush()
-##              print 'Out:', `cleandata`
+##              print 'Out:', repr(cleandata)
 
 def child(s):
     # read stdin, write socket
     while 1:
         line = sys.stdin.readline()
-##              print 'Got:', `line`
+##              print 'Got:', repr(line)
         if not line: break
         s.send(line)
 
diff --git a/Demo/tix/samples/DirList.py b/Demo/tix/samples/DirList.py
index b2aad33..8d7536c 100755
--- a/Demo/tix/samples/DirList.py
+++ b/Demo/tix/samples/DirList.py
@@ -75,7 +75,7 @@
         top.btn['command'] = lambda dir=top.dir, ent=top.ent, self=self: \
                              self.copy_name(dir,ent)
 
-        # top.ent.entry.insert(0,'tix'+`self`)
+        # top.ent.entry.insert(0,'tix'+repr(self))
         top.ent.entry.bind('<Return>', lambda self=self: self.okcmd () )
 
         top.pack( expand='yes', fill='both', side=TOP)
diff --git a/Demo/tkinter/guido/mbox.py b/Demo/tkinter/guido/mbox.py
index 9aea7ee..6d7a410 100755
--- a/Demo/tkinter/guido/mbox.py
+++ b/Demo/tkinter/guido/mbox.py
@@ -253,7 +253,7 @@
 def fixfocus(near, itop):
 	n = scanbox.size()
 	for i in range(n):
-		line = scanbox.get(`i`)
+		line = scanbox.get(repr(i))
 		if scanparser.match(line) >= 0:
 			num = string.atoi(scanparser.group(1))
 			if num >= near:
diff --git a/Demo/tkinter/guido/solitaire.py b/Demo/tkinter/guido/solitaire.py
index bd7328d..a205afd 100755
--- a/Demo/tkinter/guido/solitaire.py
+++ b/Demo/tkinter/guido/solitaire.py
@@ -183,7 +183,7 @@
 
     def __repr__(self):
 	"""Return a string for debug print statements."""
-	return "Card(%s, %s)" % (`self.suit`, `self.value`)
+	return "Card(%r, %r)" % (self.suit, self.value)
 
     def moveto(self, x, y):
 	"""Move the card to absolute position (x, y)."""
diff --git a/Demo/tkinter/matt/animation-w-velocity-ctrl.py b/Demo/tkinter/matt/animation-w-velocity-ctrl.py
index a45f3f0..f3332f2 100644
--- a/Demo/tkinter/matt/animation-w-velocity-ctrl.py
+++ b/Demo/tkinter/matt/animation-w-velocity-ctrl.py
@@ -28,7 +28,7 @@
     def moveThing(self, *args):
 	velocity = self.speed.get()
 	str = float(velocity) / 1000.0
-	str = `str` + "i"
+	str = "%ri" % (str,)
 	self.draw.move("thing",  str, str)
 	self.after(10, self.moveThing)
 
diff --git a/Demo/tkinter/matt/pong-demo-1.py b/Demo/tkinter/matt/pong-demo-1.py
index dacaa38..a27f334 100644
--- a/Demo/tkinter/matt/pong-demo-1.py
+++ b/Demo/tkinter/matt/pong-demo-1.py
@@ -39,7 +39,7 @@
 	self.x = self.x + deltax
 	self.y = self.y + deltay
 
-	self.draw.move(self.ball,  `deltax` + "i", `deltay` + "i")
+	self.draw.move(self.ball,  "%ri" % deltax, "%ri" % deltay)
 	self.after(10, self.moveBall)
 
     def __init__(self, master=None):
