* Mass change: get rid of all init() methods, in favor of __init__()
  constructors.  There is no backward compatibility.  Not everything has
  been tested.
* aiff.{py,doc}: deleted in favor of aifc.py (which contains its docs as
  comments)
diff --git a/Lib/Queue.py b/Lib/Queue.py
index eb089b8..0d69777 100644
--- a/Lib/Queue.py
+++ b/Lib/Queue.py
@@ -6,14 +6,12 @@
 
 	# Initialize a queue object with a given maximum size
 	# (If maxsize is <= 0, the maximum size is infinite)
-	def init(self, maxsize):
-		import thread
+	def __init__(self, maxsize):
 		self._init(maxsize)
 		self.mutex = thread.allocate_lock()
 		self.esema = thread.allocate_lock()
 		self.esema.acquire_lock()
 		self.fsema = thread.allocate_lock()
-		return self
 
 	# Get an approximation of the queue size (not reliable!)
 	def qsize(self):
diff --git a/Lib/aifc.py b/Lib/aifc.py
index f833e92..a603314 100644
--- a/Lib/aifc.py
+++ b/Lib/aifc.py
@@ -287,7 +287,7 @@
 	_write_long(f, lomant)
 
 class Chunk:
-	def init(self, file):
+	def __init__(self, file):
 		self.file = file
 		self.chunkname = self.file.read(4)
 		if len(self.chunkname) < 4:
@@ -295,7 +295,6 @@
 		self.chunksize = _read_long(self.file)
 		self.size_read = 0
 		self.offset = self.file.tell()
-		return self
 
 	def rewind(self):
 		self.file.seek(self.offset, 0)
@@ -333,7 +332,7 @@
 	# These variables are available to the user though appropriate
 	# methods of this class:
 	# _file -- the open file with methods read(), close(), and seek()
-	#		set through the init() ir initfp() method
+	#		set through the __init__() method
 	# _nchannels -- the number of audio channels
 	#		available through the getnchannels() method
 	# _nframes -- the number of audio frames
@@ -389,7 +388,7 @@
 			#DEBUG: SGI's soundfiler has a bug.  There should
 			# be no need to check for EOF here.
 			try:
-				chunk = Chunk().init(self._file)
+				chunk = Chunk(self._file)
 			except EOFError:
 				if formlength == 8:
 					print 'Warning: FORM chunk size too large'
@@ -433,10 +432,12 @@
 			else:
 				params[3] = 24
 			self._decomp.SetParams(params)
-		return self
 
-	def init(self, filename):
-		return self.initfp(builtin.open(filename, 'r'))
+	def __init__(self, f):
+		if type(f) == type(''):
+			f = builtin.open(f, 'r')
+		# else, assume it is an open file object already
+		self.initfp(f)
 
 	def __del__(self):
 		if self._file:
@@ -610,7 +611,7 @@
 	# These variables are user settable through appropriate methods
 	# of this class:
 	# _file -- the open file with methods write(), close(), tell(), seek()
-	#		set through the init() or initfp() method
+	#		set through the __init__() method
 	# _comptype -- the AIFF-C compression type ('NONE' in AIFF)
 	#		set through the setcomptype() or setparams() method
 	# _compname -- the human-readable AIFF-C compression type
@@ -634,13 +635,15 @@
 	# _datalength -- the size of the audio samples written to the header
 	# _datawritten -- the size of the audio samples actually written
 
-	def init(self, filename):
-		self = self.initfp(builtin.open(filename, 'w'))
+	def __init__(self, f):
+		if type(f) == type(''):
+			f = builtin.open(f, 'w')
+		# else, assume it is an open file object already
+		self.initfp(f)
 		if filename[-5:] == '.aiff':
 			self._aifc = 0
 		else:
 			self._aifc = 1
-		return self
 
 	def initfp(self, file):
 		self._file = file
@@ -659,7 +662,6 @@
 		self._markers = []
 		self._marklength = 0
 		self._aifc = 1		# AIFF-C is default
-		return self
 
 	def __del__(self):
 		if self._file:
@@ -976,18 +978,12 @@
 			_write_long(self._file, pos)
 			_write_string(self._file, name)
 
-def open(filename, mode):
+def open(f, mode):
 	if mode == 'r':
-		return Aifc_read().init(filename)
+		return Aifc_read(f)
 	elif mode == 'w':
-		return Aifc_write().init(filename)
+		return Aifc_write(f)
 	else:
 		raise Error, 'mode must be \'r\' or \'w\''
 
-def openfp(filep, mode):
-	if mode == 'r':
-		return Aifc_read().initfp(filep)
-	elif mode == 'w':
-		return Aifc_write().initfp(filep)
-	else:
-		raise Error, 'mode must be \'r\' or \'w\''
+openfp = open # B/W compatibility
diff --git a/Lib/bdb.py b/Lib/bdb.py
index bc0b282..6b3eab9 100644
--- a/Lib/bdb.py
+++ b/Lib/bdb.py
@@ -15,9 +15,6 @@
 	
 	def __init__(self):
 		self.breaks = {}
-
-	def init(self):			# BW compat only
-		return self
 	
 	def reset(self):
 		self.botframe = None
diff --git a/Lib/cmd.py b/Lib/cmd.py
index c4a347d..87ddcfa 100644
--- a/Lib/cmd.py
+++ b/Lib/cmd.py
@@ -13,9 +13,6 @@
 		self.prompt = PROMPT
 		self.identchars = IDENTCHARS
 		self.lastcmd = ''
-	
-	def init(self):			# BW compat only
-		return self
 
 	def cmdloop(self):
 		stop = None
diff --git a/Lib/ftplib.py b/Lib/ftplib.py
index bfb0b5b..c441f1f 100644
--- a/Lib/ftplib.py
+++ b/Lib/ftplib.py
@@ -87,11 +87,6 @@
 			if args[1:]:
 				apply(self.login, args[1:])
 
-	# Old init method (explicitly called by caller)
-	def init(self, *args):
-		if args:
-			apply(self.connect, args)
-
 	# Connect to host.  Arguments:
 	# - host: hostname to connect to (default previous host)
 	# - port: port to connect to (default previous port)
@@ -105,7 +100,7 @@
 		self.welcome = self.getresp()
 
 	# Get the welcome message from the server
-	# (this is read and squirreled away by init())
+	# (this is read and squirreled away by connect())
 	def getwelcome(self):
 		if self.debugging: print '*welcome*', `self.welcome`
 		return self.welcome
diff --git a/Lib/irix5/flp.py b/Lib/irix5/flp.py
index ced5598..c3f6f3b 100755
--- a/Lib/irix5/flp.py
+++ b/Lib/irix5/flp.py
@@ -92,11 +92,11 @@
 	forms = {}
 	for name in altforms.keys():
 	    altobj, altlist = altforms[name]
-	    obj = _newobj().init()
+	    obj = _newobj()
 	    obj.make(altobj)
 	    list = []
 	    for altobj in altlist:
-		nobj = _newobj().init()
+		nobj = _newobj()
 		nobj.make(altobj)
 		list.append(nobj)
 	    forms[name] = obj, list
@@ -235,8 +235,6 @@
 # Internal class: a convient place to store object info fields
 #
 class _newobj:
-    def init(self):
-	return self
     def add(self, name, value):
 	self.__dict__[name] = value
     def make(self, dict):
@@ -320,7 +318,7 @@
 	file.seek(pos)
 
 def _parse_object(file):
-    obj = _newobj().init()
+    obj = _newobj()
     while 1:
 	pos = file.tell()
 	datum = _parse_1_line(file)
diff --git a/Lib/irix5/readcd.py b/Lib/irix5/readcd.py
index 7af6882..fffb6fe 100755
--- a/Lib/irix5/readcd.py
+++ b/Lib/irix5/readcd.py
@@ -30,7 +30,7 @@
 		elif len(arg) == 2:
 			self.player = cd.open(arg[0], arg[1])
 		else:
-			raise Error, 'bad init call'
+			raise Error, 'bad __init__ call'
 		self.list = []
 		self.callbacks = [(None, None)] * 8
 		self.parser = cd.createparser()
diff --git a/Lib/irix5/torgb.py b/Lib/irix5/torgb.py
index 61297d0..f283063 100755
--- a/Lib/irix5/torgb.py
+++ b/Lib/irix5/torgb.py
@@ -13,40 +13,40 @@
 
 table = {}
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('fromppm $IN $OUT', 'ff')
 table['ppm'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
 t.append('fromppm $IN $OUT', 'ff')
 table['pnm'] = t
 table['pgm'] = t
 table['pbm'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('fromgif $IN $OUT', 'ff')
 table['gif'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('tifftopnm', '--')
 t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
 t.append('fromppm $IN $OUT', 'ff')
 table['tiff'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('rasttopnm', '--')
 t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
 t.append('fromppm $IN $OUT', 'ff')
 table['rast'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('djpeg', '--')
 t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
 t.append('fromppm $IN $OUT', 'ff')
 table['jpeg'] = t
 
-uncompress = pipes.Template().init()
+uncompress = pipes.Template()
 uncompress.append('uncompress', '--')
 
 
diff --git a/Lib/lib-stdwin/WindowSched.py b/Lib/lib-stdwin/WindowSched.py
index 67c3afb..56ca6f8 100644
--- a/Lib/lib-stdwin/WindowSched.py
+++ b/Lib/lib-stdwin/WindowSched.py
@@ -35,7 +35,7 @@
 	if event[0] <> WE_TIMER:
 		mainloop.dispatch(event)
 
-q = sched.scheduler().init(time.millitimer, delayfunc)
+q = sched.scheduler(time.millitimer, delayfunc)
 
 # Export functions enter, enterabs and cancel just like a scheduler
 #
diff --git a/Lib/lib-stdwin/basewin.py b/Lib/lib-stdwin/basewin.py
index f896fe2..7a43536 100644
--- a/Lib/lib-stdwin/basewin.py
+++ b/Lib/lib-stdwin/basewin.py
@@ -6,11 +6,10 @@
 
 class BaseWindow:
 	
-	def init(self, title):
+	def __init__(self, title):
 		self.win = stdwin.open(title)
 		self.win.dispatch = self.dispatch
 		mainloop.register(self.win)
-		return self
 	
 #	def reopen(self):
 #		title = self.win.gettitle()
diff --git a/Lib/lib-stdwin/formatter.py b/Lib/lib-stdwin/formatter.py
index ac34ce9..7ddfc1d 100644
--- a/Lib/lib-stdwin/formatter.py
+++ b/Lib/lib-stdwin/formatter.py
@@ -13,7 +13,7 @@
 	# Pass the window's drawing object, and left, top, right
 	# coordinates of the drawing space as arguments.
 	#
-	def init(self, d, left, top, right):
+	def __init__(self, d, left, top, right):
 		self.d = d		# Drawing object
 		self.left = left	# Left margin
 		self.right = right	# Right margin
@@ -22,7 +22,6 @@
 		self.justify = 1
 		self.setfont('')	# Default font
 		self._reset()		# Prepare for new line
-		return self
 	#
 	# Reset for start of fresh line.
 	#
@@ -190,7 +189,7 @@
 			w.change((0, 0), (1000, 1000))
 		elif type == WE_DRAW:
 			width, height = winsize
-			f = formatter().init(w.begindrawing(), 0, 0, width)
+			f = formatter(w.begindrawing(), 0, 0, width)
 			f.center = center
 			f.justify = justify
 			if not center:
diff --git a/Lib/lib-stdwin/mainloop.py b/Lib/lib-stdwin/mainloop.py
index ca3e9ac..aa40c34 100644
--- a/Lib/lib-stdwin/mainloop.py
+++ b/Lib/lib-stdwin/mainloop.py
@@ -224,11 +224,10 @@
 #
 class Dialog:
 	#
-	def init(self, title):
+	def __init__(self, title):
 		self.window = stdwin.open(title)
 		self.window.dispatch = self.dispatch
 		register(self.window)
-		return self
 	#
 	def close(self):
 		unregister(self.window)
diff --git a/Lib/lib-stdwin/srcwin.py b/Lib/lib-stdwin/srcwin.py
index a71c568..29b7801 100644
--- a/Lib/lib-stdwin/srcwin.py
+++ b/Lib/lib-stdwin/srcwin.py
@@ -10,7 +10,7 @@
 
 class TextWindow(basewin.BaseWindow):
 	
-	def init(self, title, contents):
+	def __init__(self, title, contents):
 		self.contents = contents
 		self.linecount = countlines(self.contents)
 		#
@@ -23,11 +23,10 @@
 		width = WIDTH*stdwin.textwidth('0')
 		height = lh*min(MAXHEIGHT, self.linecount)
 		stdwin.setdefwinsize(width, height)
-		self = basewin.BaseWindow.init(self, title)
+		basewin.BaseWindow.__init__(self, title)
 		#
 		self.win.setdocsize(0, self.bottom)
 		self.initeditor()
-		return self
 	
 	def initeditor(self):
 		r = (self.leftmargin, self.top), (self.rightmargin, self.bottom)
@@ -113,12 +112,12 @@
 
 class SourceWindow(TextWindow):
 
-	def init(self, filename):
+	def __init__(self, filename):
 		self.filename = filename
 		f = open(self.filename, 'r')
 		contents = f.read()
 		f.close()
-		return TextWindow.init(self, self.filename, contents)
+		TextWindow.__init__(self, self.filename, contents)
 
 # ------------------------------ testing ------------------------------
 
@@ -126,5 +125,5 @@
 
 def test():
 	import mainloop
-	sw = SourceWindow().init(TESTFILE)
+	sw = SourceWindow(TESTFILE)
 	mainloop.mainloop()
diff --git a/Lib/lib-stdwin/wdb.py b/Lib/lib-stdwin/wdb.py
index c499296..d5c28bb 100644
--- a/Lib/lib-stdwin/wdb.py
+++ b/Lib/lib-stdwin/wdb.py
@@ -19,16 +19,15 @@
 
 class Wdb(bdb.Bdb, basewin.BaseWindow): # Window debugger
 	
-	def init(self):
+	def __init__(self):
 		self.sourcewindows = {}
 		self.framewindows = {}
-		self = bdb.Bdb.init(self)
+		bdb.Bdb.__init__(self)
 		width = WIDTH*stdwin.textwidth('0')
 		height = HEIGHT*stdwin.lineheight()
 		stdwin.setdefwinsize(width, height)
-		self = basewin.BaseWindow.init(self, '--Stack--')
+		basewin.BaseWindow.__init__(self, '--Stack--')
 		self.closed = 0
-		return self
 	
 	def reset(self):
 		if self.closed: raise RuntimeError, 'already closed'
@@ -151,9 +150,8 @@
 		if not self.sourcewindows.has_key(fn):
 			import wdbsrcwin
 			try:
-				self.sourcewindows[fn] = \
-					wdbsrcwin.DebuggerSourceWindow(). \
-					init(self, fn)
+				self.sourcewindows[fn] = wdbsrcwin. \
+					  DebuggerSourceWindow(self, fn)
 			except IOError:
 				stdwin.fleep()
 				return
@@ -170,7 +168,7 @@
 		else:
 			import wdbframewin
 			self.framewindows[name] = \
-				wdbframewin.FrameWindow().init(self, \
+				wdbframewin.FrameWindow(self, \
 					self.curframe, \
 					self.curframe.f_locals, name)
 	do_f = do_frame
@@ -182,7 +180,7 @@
 		else:
 			import wdbframewin
 			self.framewindows[name] = \
-				wdbframewin.FrameWindow().init(self, \
+				wdbframewin.FrameWindow(self, \
 					self.curframe, \
 					self.curframe.f_globals, name)
 	do_g = do_globalframe
@@ -274,27 +272,27 @@
 # Simplified interface
 
 def run(statement):
-	x = Wdb().init()
+	x = Wdb()
 	try: x.run(statement)
 	finally: x.close()
 
 def runctx(statement, globals, locals):
-	x = Wdb().init()
+	x = Wdb()
 	try: x.runctx(statement, globals, locals)
 	finally: x.close()
 
 def runcall(*args):
-	x = Wdb().init()
-	try: apply(Pdb().init().runcall, args)
+	x = Wdb()
+	try: apply(x.runcall, args)
 	finally: x.close()
 
 
 # Post-Mortem interface
 
 def post_mortem(traceback):
-	p = Pdb().init()
-	p.reset()
-	p.interaction(None, traceback)
+	x = Wdb()
+	x.reset()
+	x.interaction(None, traceback)
 
 def pm():
 	import sys
diff --git a/Lib/lib-stdwin/wdbframewin.py b/Lib/lib-stdwin/wdbframewin.py
index f8b84e3..13bd173 100644
--- a/Lib/lib-stdwin/wdbframewin.py
+++ b/Lib/lib-stdwin/wdbframewin.py
@@ -17,7 +17,7 @@
 
 class FrameWindow(basewin.BaseWindow):
 
-	def init(self, debugger, frame, dict, name):
+	def __init__(self, debugger, frame, dict, name):
 		self.debugger = debugger
 		self.frame = frame # Not used except for identity tests
 		self.dict = dict
@@ -27,12 +27,12 @@
 		width = WIDTH*stdwin.textwidth('0')
 		height = nl*stdwin.lineheight()
 		stdwin.setdefwinsize(width, height)
-		self = basewin.BaseWindow.init(self, '--Frame ' + name + '--')
+		basewin.BaseWindow.__init__(
+			  self, '--Frame ' + name + '--')
 		# XXX Should use current function name
 		self.initeditor()
 		self.displaylist = ['>>>', '', '-'*WIDTH]
 		self.refreshframe()
-		return self
 	
 	def initeditor(self):
 		r = (stdwin.textwidth('>>> '), 0), (30000, stdwin.lineheight())
@@ -81,7 +81,7 @@
 				self.debugger.framewindows[name].popup()
 			else:
 				self.debugger.framewindows[name] = \
-					  FrameWindow().init(self.debugger,
+					  FrameWindow(self.debugger,
 						  self.frame, value.__dict__,
 						  name)
 			return
diff --git a/Lib/lib-stdwin/wdbsrcwin.py b/Lib/lib-stdwin/wdbsrcwin.py
index 6c5cde8..f79fab9 100644
--- a/Lib/lib-stdwin/wdbsrcwin.py
+++ b/Lib/lib-stdwin/wdbsrcwin.py
@@ -7,11 +7,11 @@
 
 class DebuggerSourceWindow(srcwin.SourceWindow):
 	
-	def init(self, debugger, filename):
+	def __init__(self, debugger, filename):
 		self.debugger = debugger
 		self.curlineno = 0
 		self.focus = 0
-		return srcwin.SourceWindow.init(self, filename)
+		srcwin.SourceWindow.__init__(self, filename)
 	
 	def close(self):
 		del self.debugger.sourcewindows[self.filename]
diff --git a/Lib/mimetools.py b/Lib/mimetools.py
index 84eff9d..2a076f0 100644
--- a/Lib/mimetools.py
+++ b/Lib/mimetools.py
@@ -10,15 +10,14 @@
 
 class Message(rfc822.Message):
 
-	def init(self, fp):
-		self = rfc822.Message.init(self, fp)
+	def __init__(self, fp):
+		rfc822.Message.__init__(self, fp)
 		self.encodingheader = \
 			self.getheader('content-transfer-encoding')
 		self.typeheader = \
 			self.getheader('content-type')
 		self.parsetype()
 		self.parseplist()
-		return self
 
 	def parsetype(self):
 		str = self.typeheader
diff --git a/Lib/multifile.py b/Lib/multifile.py
index 4dd1b52..7a52ab6 100644
--- a/Lib/multifile.py
+++ b/Lib/multifile.py
@@ -6,7 +6,7 @@
 # Suggested use:
 #
 # real_fp = open(...)
-# fp = MultiFile().init(real_fp)
+# fp = MultiFile(real_fp)
 #
 # "read some lines from fp"
 # fp.push(separator)
@@ -31,14 +31,13 @@
 
 class MultiFile:
 	#
-	def init(self, fp):
+	def __init__(self, fp):
 		self.fp = fp
 		self.stack = [] # Grows down
 		self.level = 0
 		self.last = 0
 		self.start = self.fp.tell()
 		self.posstack = [] # Grows down
-		return self
 	#
 	def tell(self):
 		if self.level > 0:
diff --git a/Lib/mutex.py b/Lib/mutex.py
index 374f457..b897863 100644
--- a/Lib/mutex.py
+++ b/Lib/mutex.py
@@ -15,10 +15,9 @@
 	#
 	# Create a new mutex -- initially unlocked
 	#
-	def init(self):
+	def __init__(self):
 		self.locked = 0
 		self.queue = []
-		return self
 	#
 	# Test the locked bit of the mutex
 	#
diff --git a/Lib/nntplib.py b/Lib/nntplib.py
index c448d48..e7f0627 100644
--- a/Lib/nntplib.py
+++ b/Lib/nntplib.py
@@ -5,7 +5,7 @@
 # Example:
 #
 # >>> from nntplib import NNTP
-# >>> s = NNTP().init('charon')
+# >>> s = NNTP('charon')
 # >>> resp, count, first, last, name = s.group('nlnet.misc')
 # >>> print 'Group', name, 'has', count, 'articles, range', first, 'to', last
 # Group nlnet.misc has 525 articles, range 6960 to 7485
@@ -60,7 +60,7 @@
 	# - host: hostname to connect to
 	# - port: port to connect to (default the standard NNTP port)
 
-	def init(self, host, *args):
+	def __init__(self, host, *args):
 		if len(args) > 1: raise TypeError, 'too many args'
 		if args: port = args[0]
 		else: port = NNTP_PORT
@@ -71,10 +71,9 @@
 		self.file = self.sock.makefile('r')
 		self.debugging = 0
 		self.welcome = self.getresp()
-		return self
 
 	# Get the welcome message from the server
-	# (this is read and squirreled away by init()).
+	# (this is read and squirreled away by __init__()).
 	# If the response code is 200, posting is allowed;
 	# if it 201, posting is not allowed
 
diff --git a/Lib/pdb.py b/Lib/pdb.py
index fd8835b..64451d5 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -16,9 +16,6 @@
 		bdb.Bdb.__init__(self)
 		cmd.Cmd.__init__(self)
 		self.prompt = '(Pdb) '
-
-	def init(self):			# BW compat only
-		return self
 	
 	def reset(self):
 		bdb.Bdb.reset(self)
diff --git a/Lib/pipes.py b/Lib/pipes.py
index 426c377..0ae0b8c 100644
--- a/Lib/pipes.py
+++ b/Lib/pipes.py
@@ -29,7 +29,7 @@
 # -----------
 #
 # To create a template:
-#   t = Template().init()
+#   t = Template()
 #
 # To add a conversion step to a template:
 #   t.append(command, kind)
@@ -85,11 +85,10 @@
 
 class Template:
 
-	# Template().init() returns a fresh pipeline template
-	def init(self):
+	# Template() returns a fresh pipeline template
+	def __init__(self):
 		self.debugging = 0
 		self.reset()
-		return self
 
 	# t.__repr__() implements `t`
 	def __repr__(self):
@@ -102,7 +101,7 @@
 	# t.clone() returns a new pipeline template with identical
 	# initial state as the current one
 	def clone(self):
-		t = Template().init()
+		t = Template()
 		t.steps = self.steps[:]
 		t.debugging = self.debugging
 		return t
@@ -291,7 +290,7 @@
 def test():
 	import os
 	print 'Testing...'
-	t = Template().init()
+	t = Template()
 	t.append('togif $IN $OUT', 'ff')
 	t.append('giftoppm', '--')
 	t.append('ppmtogif >$OUT', '-f')
diff --git a/Lib/plat-irix5/flp.py b/Lib/plat-irix5/flp.py
index ced5598..c3f6f3b 100755
--- a/Lib/plat-irix5/flp.py
+++ b/Lib/plat-irix5/flp.py
@@ -92,11 +92,11 @@
 	forms = {}
 	for name in altforms.keys():
 	    altobj, altlist = altforms[name]
-	    obj = _newobj().init()
+	    obj = _newobj()
 	    obj.make(altobj)
 	    list = []
 	    for altobj in altlist:
-		nobj = _newobj().init()
+		nobj = _newobj()
 		nobj.make(altobj)
 		list.append(nobj)
 	    forms[name] = obj, list
@@ -235,8 +235,6 @@
 # Internal class: a convient place to store object info fields
 #
 class _newobj:
-    def init(self):
-	return self
     def add(self, name, value):
 	self.__dict__[name] = value
     def make(self, dict):
@@ -320,7 +318,7 @@
 	file.seek(pos)
 
 def _parse_object(file):
-    obj = _newobj().init()
+    obj = _newobj()
     while 1:
 	pos = file.tell()
 	datum = _parse_1_line(file)
diff --git a/Lib/plat-irix5/readcd.py b/Lib/plat-irix5/readcd.py
index 7af6882..fffb6fe 100755
--- a/Lib/plat-irix5/readcd.py
+++ b/Lib/plat-irix5/readcd.py
@@ -30,7 +30,7 @@
 		elif len(arg) == 2:
 			self.player = cd.open(arg[0], arg[1])
 		else:
-			raise Error, 'bad init call'
+			raise Error, 'bad __init__ call'
 		self.list = []
 		self.callbacks = [(None, None)] * 8
 		self.parser = cd.createparser()
diff --git a/Lib/plat-irix5/torgb.py b/Lib/plat-irix5/torgb.py
index 61297d0..f283063 100755
--- a/Lib/plat-irix5/torgb.py
+++ b/Lib/plat-irix5/torgb.py
@@ -13,40 +13,40 @@
 
 table = {}
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('fromppm $IN $OUT', 'ff')
 table['ppm'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
 t.append('fromppm $IN $OUT', 'ff')
 table['pnm'] = t
 table['pgm'] = t
 table['pbm'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('fromgif $IN $OUT', 'ff')
 table['gif'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('tifftopnm', '--')
 t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
 t.append('fromppm $IN $OUT', 'ff')
 table['tiff'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('rasttopnm', '--')
 t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
 t.append('fromppm $IN $OUT', 'ff')
 table['rast'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('djpeg', '--')
 t.append('(PATH=$PATH:/ufs/guido/bin/sgi; exec pnmtoppm)', '--')
 t.append('fromppm $IN $OUT', 'ff')
 table['jpeg'] = t
 
-uncompress = pipes.Template().init()
+uncompress = pipes.Template()
 uncompress.append('uncompress', '--')
 
 
diff --git a/Lib/profile.py b/Lib/profile.py
index 19b0476..502a4db 100755
--- a/Lib/profile.py
+++ b/Lib/profile.py
@@ -14,13 +14,12 @@
 
 class Profile:
 
-	def init(self):
+	def __init__(self):
 		self.timings = {}
 		self.debug = None
 		self.call_level = 0
 		self.profile_func = None
 		self.profiling = 0
-		return self
 
 	def profile(self, funcname):
 		if not self.profile_func:
@@ -230,12 +229,11 @@
 	return d
 
 class Stats:
-	def init(self, file):
+	def __init__(self, file):
 		f = open(file, 'r')
 		self.stats = marshal.load(f)
 		f.close()
 		self.stats_list = None
-		return self
 
 	def print_stats(self):
 		print_title()
@@ -354,7 +352,7 @@
 
 # simplified user interface
 def run(statement, *args):
-	prof = Profile().init()
+	prof = Profile()
 	try:
 		prof.run(statement)
 	except SystemExit:
@@ -366,7 +364,7 @@
 
 # test command with debugging
 def debug():
-	prof = Profile().init()
+	prof = Profile()
 	prof.debug = 1
 	try:
 		prof.run('import x; x.main()')
diff --git a/Lib/regexp.py b/Lib/regexp.py
index 755f65a..6136814 100644
--- a/Lib/regexp.py
+++ b/Lib/regexp.py
@@ -4,13 +4,12 @@
 from regex_syntax import *
 
 class Prog:
-	def init(self, pat):
+	def __init__(self, pat):
 		save_syntax = regex.set_syntax(RE_SYNTAX_AWK)
 		try:
 			self.prog = regex.compile(pat)
 		finally:
 			xxx = regex.set_syntax(save_syntax)
-		return self
 	def match(self, *args):
 		if len(args) == 2:
 			str, offset = args
@@ -27,7 +26,7 @@
 		return regs[:i]
 
 def compile(pat):
-	return Prog().init(pat)
+	return Prog(pat)
 
 cache_pat = None
 cache_prog = None
diff --git a/Lib/repr.py b/Lib/repr.py
index 68f374c..50ee6c9 100644
--- a/Lib/repr.py
+++ b/Lib/repr.py
@@ -3,7 +3,7 @@
 import string
 
 class Repr:
-	def init(self):
+	def __init__(self):
 		self.maxlevel = 6
 		self.maxtuple = 6
 		self.maxlist = 6
@@ -11,7 +11,6 @@
 		self.maxstring = 30
 		self.maxlong = 40
 		self.maxother = 20
-		return self
 	def repr(self, x):
 		return self.repr1(x, self.maxlevel)
 	def repr1(self, x, level):
@@ -79,5 +78,5 @@
 			s = s[:i] + '...' + s[len(s)-j:]
 		return s
 
-aRepr = Repr().init()
+aRepr = Repr()
 repr = aRepr.repr
diff --git a/Lib/rfc822.py b/Lib/rfc822.py
index 63f2fb6..39ab6a6 100644
--- a/Lib/rfc822.py
+++ b/Lib/rfc822.py
@@ -10,8 +10,8 @@
 #   fp = open(file, 'r')
 # (or use any other legal way of getting an open file object, e.g. use
 # sys.stdin or call os.popen()).
-# Then pass the open file object to the init() method of Message:
-#   m = Message().init(fp)
+# Then pass the open file object to the Message() constructor:
+#   m = Message(fp)
 #
 # To get the text of a particular header there are several methods:
 #   str = m.getheader(name)
@@ -35,7 +35,7 @@
 
 	# Initialize the class instance and read the headers.
 	
-	def init(self, fp):
+	def __init__(self, fp):
 		self.fp = fp
 		#
 		try:
@@ -49,8 +49,6 @@
 			self.startofbody = self.fp.tell()
 		except IOError:
 			self.startofbody = None
-		#
-		return self
 
 
 	# Rewind the file to the start of the body (if seekable).
diff --git a/Lib/sched.py b/Lib/sched.py
index 29ccc2a..c838bad 100644
--- a/Lib/sched.py
+++ b/Lib/sched.py
@@ -34,11 +34,10 @@
 	#
 	# Initialize a new instance, passing the time and delay functions
 	#
-	def init(self, timefunc, delayfunc):
+	def __init__(self, timefunc, delayfunc):
 		self.queue = []
 		self.timefunc = timefunc
 		self.delayfunc = delayfunc
-		return self
 	#
 	# Enter a new event in the queue at an absolute time.
 	# Returns an ID for the event which can be used
diff --git a/Lib/stdwin/WindowSched.py b/Lib/stdwin/WindowSched.py
index 67c3afb..56ca6f8 100755
--- a/Lib/stdwin/WindowSched.py
+++ b/Lib/stdwin/WindowSched.py
@@ -35,7 +35,7 @@
 	if event[0] <> WE_TIMER:
 		mainloop.dispatch(event)
 
-q = sched.scheduler().init(time.millitimer, delayfunc)
+q = sched.scheduler(time.millitimer, delayfunc)
 
 # Export functions enter, enterabs and cancel just like a scheduler
 #
diff --git a/Lib/stdwin/basewin.py b/Lib/stdwin/basewin.py
index f896fe2..7a43536 100755
--- a/Lib/stdwin/basewin.py
+++ b/Lib/stdwin/basewin.py
@@ -6,11 +6,10 @@
 
 class BaseWindow:
 	
-	def init(self, title):
+	def __init__(self, title):
 		self.win = stdwin.open(title)
 		self.win.dispatch = self.dispatch
 		mainloop.register(self.win)
-		return self
 	
 #	def reopen(self):
 #		title = self.win.gettitle()
diff --git a/Lib/stdwin/formatter.py b/Lib/stdwin/formatter.py
index ac34ce9..7ddfc1d 100755
--- a/Lib/stdwin/formatter.py
+++ b/Lib/stdwin/formatter.py
@@ -13,7 +13,7 @@
 	# Pass the window's drawing object, and left, top, right
 	# coordinates of the drawing space as arguments.
 	#
-	def init(self, d, left, top, right):
+	def __init__(self, d, left, top, right):
 		self.d = d		# Drawing object
 		self.left = left	# Left margin
 		self.right = right	# Right margin
@@ -22,7 +22,6 @@
 		self.justify = 1
 		self.setfont('')	# Default font
 		self._reset()		# Prepare for new line
-		return self
 	#
 	# Reset for start of fresh line.
 	#
@@ -190,7 +189,7 @@
 			w.change((0, 0), (1000, 1000))
 		elif type == WE_DRAW:
 			width, height = winsize
-			f = formatter().init(w.begindrawing(), 0, 0, width)
+			f = formatter(w.begindrawing(), 0, 0, width)
 			f.center = center
 			f.justify = justify
 			if not center:
diff --git a/Lib/stdwin/mainloop.py b/Lib/stdwin/mainloop.py
index ca3e9ac..aa40c34 100755
--- a/Lib/stdwin/mainloop.py
+++ b/Lib/stdwin/mainloop.py
@@ -224,11 +224,10 @@
 #
 class Dialog:
 	#
-	def init(self, title):
+	def __init__(self, title):
 		self.window = stdwin.open(title)
 		self.window.dispatch = self.dispatch
 		register(self.window)
-		return self
 	#
 	def close(self):
 		unregister(self.window)
diff --git a/Lib/stdwin/srcwin.py b/Lib/stdwin/srcwin.py
index a71c568..29b7801 100755
--- a/Lib/stdwin/srcwin.py
+++ b/Lib/stdwin/srcwin.py
@@ -10,7 +10,7 @@
 
 class TextWindow(basewin.BaseWindow):
 	
-	def init(self, title, contents):
+	def __init__(self, title, contents):
 		self.contents = contents
 		self.linecount = countlines(self.contents)
 		#
@@ -23,11 +23,10 @@
 		width = WIDTH*stdwin.textwidth('0')
 		height = lh*min(MAXHEIGHT, self.linecount)
 		stdwin.setdefwinsize(width, height)
-		self = basewin.BaseWindow.init(self, title)
+		basewin.BaseWindow.__init__(self, title)
 		#
 		self.win.setdocsize(0, self.bottom)
 		self.initeditor()
-		return self
 	
 	def initeditor(self):
 		r = (self.leftmargin, self.top), (self.rightmargin, self.bottom)
@@ -113,12 +112,12 @@
 
 class SourceWindow(TextWindow):
 
-	def init(self, filename):
+	def __init__(self, filename):
 		self.filename = filename
 		f = open(self.filename, 'r')
 		contents = f.read()
 		f.close()
-		return TextWindow.init(self, self.filename, contents)
+		TextWindow.__init__(self, self.filename, contents)
 
 # ------------------------------ testing ------------------------------
 
@@ -126,5 +125,5 @@
 
 def test():
 	import mainloop
-	sw = SourceWindow().init(TESTFILE)
+	sw = SourceWindow(TESTFILE)
 	mainloop.mainloop()
diff --git a/Lib/stdwin/wdb.py b/Lib/stdwin/wdb.py
index c499296..d5c28bb 100755
--- a/Lib/stdwin/wdb.py
+++ b/Lib/stdwin/wdb.py
@@ -19,16 +19,15 @@
 
 class Wdb(bdb.Bdb, basewin.BaseWindow): # Window debugger
 	
-	def init(self):
+	def __init__(self):
 		self.sourcewindows = {}
 		self.framewindows = {}
-		self = bdb.Bdb.init(self)
+		bdb.Bdb.__init__(self)
 		width = WIDTH*stdwin.textwidth('0')
 		height = HEIGHT*stdwin.lineheight()
 		stdwin.setdefwinsize(width, height)
-		self = basewin.BaseWindow.init(self, '--Stack--')
+		basewin.BaseWindow.__init__(self, '--Stack--')
 		self.closed = 0
-		return self
 	
 	def reset(self):
 		if self.closed: raise RuntimeError, 'already closed'
@@ -151,9 +150,8 @@
 		if not self.sourcewindows.has_key(fn):
 			import wdbsrcwin
 			try:
-				self.sourcewindows[fn] = \
-					wdbsrcwin.DebuggerSourceWindow(). \
-					init(self, fn)
+				self.sourcewindows[fn] = wdbsrcwin. \
+					  DebuggerSourceWindow(self, fn)
 			except IOError:
 				stdwin.fleep()
 				return
@@ -170,7 +168,7 @@
 		else:
 			import wdbframewin
 			self.framewindows[name] = \
-				wdbframewin.FrameWindow().init(self, \
+				wdbframewin.FrameWindow(self, \
 					self.curframe, \
 					self.curframe.f_locals, name)
 	do_f = do_frame
@@ -182,7 +180,7 @@
 		else:
 			import wdbframewin
 			self.framewindows[name] = \
-				wdbframewin.FrameWindow().init(self, \
+				wdbframewin.FrameWindow(self, \
 					self.curframe, \
 					self.curframe.f_globals, name)
 	do_g = do_globalframe
@@ -274,27 +272,27 @@
 # Simplified interface
 
 def run(statement):
-	x = Wdb().init()
+	x = Wdb()
 	try: x.run(statement)
 	finally: x.close()
 
 def runctx(statement, globals, locals):
-	x = Wdb().init()
+	x = Wdb()
 	try: x.runctx(statement, globals, locals)
 	finally: x.close()
 
 def runcall(*args):
-	x = Wdb().init()
-	try: apply(Pdb().init().runcall, args)
+	x = Wdb()
+	try: apply(x.runcall, args)
 	finally: x.close()
 
 
 # Post-Mortem interface
 
 def post_mortem(traceback):
-	p = Pdb().init()
-	p.reset()
-	p.interaction(None, traceback)
+	x = Wdb()
+	x.reset()
+	x.interaction(None, traceback)
 
 def pm():
 	import sys
diff --git a/Lib/stdwin/wdbframewin.py b/Lib/stdwin/wdbframewin.py
index f8b84e3..13bd173 100755
--- a/Lib/stdwin/wdbframewin.py
+++ b/Lib/stdwin/wdbframewin.py
@@ -17,7 +17,7 @@
 
 class FrameWindow(basewin.BaseWindow):
 
-	def init(self, debugger, frame, dict, name):
+	def __init__(self, debugger, frame, dict, name):
 		self.debugger = debugger
 		self.frame = frame # Not used except for identity tests
 		self.dict = dict
@@ -27,12 +27,12 @@
 		width = WIDTH*stdwin.textwidth('0')
 		height = nl*stdwin.lineheight()
 		stdwin.setdefwinsize(width, height)
-		self = basewin.BaseWindow.init(self, '--Frame ' + name + '--')
+		basewin.BaseWindow.__init__(
+			  self, '--Frame ' + name + '--')
 		# XXX Should use current function name
 		self.initeditor()
 		self.displaylist = ['>>>', '', '-'*WIDTH]
 		self.refreshframe()
-		return self
 	
 	def initeditor(self):
 		r = (stdwin.textwidth('>>> '), 0), (30000, stdwin.lineheight())
@@ -81,7 +81,7 @@
 				self.debugger.framewindows[name].popup()
 			else:
 				self.debugger.framewindows[name] = \
-					  FrameWindow().init(self.debugger,
+					  FrameWindow(self.debugger,
 						  self.frame, value.__dict__,
 						  name)
 			return
diff --git a/Lib/stdwin/wdbsrcwin.py b/Lib/stdwin/wdbsrcwin.py
index 6c5cde8..f79fab9 100755
--- a/Lib/stdwin/wdbsrcwin.py
+++ b/Lib/stdwin/wdbsrcwin.py
@@ -7,11 +7,11 @@
 
 class DebuggerSourceWindow(srcwin.SourceWindow):
 	
-	def init(self, debugger, filename):
+	def __init__(self, debugger, filename):
 		self.debugger = debugger
 		self.curlineno = 0
 		self.focus = 0
-		return srcwin.SourceWindow.init(self, filename)
+		srcwin.SourceWindow.__init__(self, filename)
 	
 	def close(self):
 		del self.debugger.sourcewindows[self.filename]
diff --git a/Lib/sunau.py b/Lib/sunau.py
index 2cb35a7..08e4d20 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -192,11 +192,12 @@
 					break
 		else:
 			self._info = ''
-		return self
 
-	def init(self, filename):
-		import builtin
-		return self.initfp(builtin.open(filename, 'r'))
+	def __init__(self, f):
+		if type(f) == type(''):
+			import builtin
+			f = builtin.open(f, 'r')
+		self.initfp(f)
 
 	def __del__(self):
 		if self._file:
@@ -277,9 +278,11 @@
 		self._file = None
 
 class Au_write:
-	def init(self, filename):
-		import builtin
-		return self.initfp(builtin.open(filename, 'w'))
+	def __init__(self, f):
+		if type(f) == type(''):
+			import builtin
+			f = builtin.open(f, 'w')
+		self.initfp(f)
 
 	def initfp(self, file):
 		self._file = file
@@ -293,7 +296,6 @@
 		self._datalength = 0
 		self._info = ''
 		self._comptype = 'ULAW'	# default is U-law
-		return self
 
 	def __del__(self):
 		if self._file:
@@ -453,18 +455,12 @@
 		self._datalength = self._datawritten
 		self._file.seek(0, 2)
 
-def open(filename, mode):
+def open(f, mode):
 	if mode == 'r':
-		return Au_read().init(filename)
+		return Au_read(f)
 	elif mode == 'w':
-		return Au_write().init(filename)
+		return Au_write(f)
 	else:
 		raise Error, "mode must be 'r' or 'w'"
 
-def openfp(filep, mode):
-	if mode == 'r':
-		return Au_read().initfp(filep)
-	elif mode == 'w':
-		return Au_write().initfp(filep)
-	else:
-		raise Error, "mode must be 'r' or 'w'"
+openfp = open
diff --git a/Lib/test/autotest.py b/Lib/test/autotest.py
index 57e3674..79d9b11 100644
--- a/Lib/test/autotest.py
+++ b/Lib/test/autotest.py
@@ -42,9 +42,8 @@
 
 # Class substituted for sys.stdout, to compare it with the given file
 class Compare:
-	def init(self, filename):
+	def __init__(self, filename):
 		self.fp = open(filename, 'r')
-		return self
 	def write(self, data):
 		expected = self.fp.read(len(data))
 		if data <> expected:
@@ -59,7 +58,7 @@
 	filename = findfile('testall.out')
 	real_stdout = sys.stdout
 	try:
-		sys.stdout = Compare().init(filename)
+		sys.stdout = Compare(filename)
 		import testall
 	finally:
 		sys.stdout = real_stdout
diff --git a/Lib/toaiff.py b/Lib/toaiff.py
index d2f5cd7..0001be0 100644
--- a/Lib/toaiff.py
+++ b/Lib/toaiff.py
@@ -13,7 +13,7 @@
 
 table = {}
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('sox -t au - -t aiff -r 8000 -', '--')
 table['au'] = t
 
@@ -23,31 +23,31 @@
 # XXX files sampled at 5.5k or 7.333k; however this means that files
 # XXX sampled at 11k are unnecessarily expanded.
 # XXX Similar comments apply to some other file types.
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('sox -t hcom - -t aiff -r 22050 -', '--')
 table['hcom'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('sox -t voc - -t aiff -r 11025 -', '--')
 table['voc'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('sox -t wav - -t aiff -', '--')
 table['wav'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('sox -t 8svx - -t aiff -r 16000 -', '--')
 table['8svx'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('sox -t sndt - -t aiff -r 16000 -', '--')
 table['sndt'] = t
 
-t = pipes.Template().init()
+t = pipes.Template()
 t.append('sox -t sndr - -t aiff -r 16000 -', '--')
 table['sndr'] = t
 
-uncompress = pipes.Template().init()
+uncompress = pipes.Template()
 uncompress.append('uncompress', '--')
 
 
diff --git a/Lib/whrandom.py b/Lib/whrandom.py
index 0a34690..c7881b5 100644
--- a/Lib/whrandom.py
+++ b/Lib/whrandom.py
@@ -35,7 +35,7 @@
 	# Without arguments, initialize from current time.
 	# With arguments (x, y, z), initialize from them.
 	#
-	def init(self, *xyz):
+	def __init__(self, *xyz):
 		if not xyz:
 			# Initialize from current time
 			import time
@@ -47,7 +47,6 @@
 			# Initialize from arguments (x, y, z)
 			x, y, z = xyz
 		self.seed(x, y, z)
-		return self
 	#
 	# Set the seed from (x, y, z).
 	# These must be integers in the range [0, 256).
@@ -97,7 +96,7 @@
 
 # Initialize from the current time
 #
-_inst = whrandom().init()
+_inst = whrandom()
 seed = _inst.seed
 random = _inst.random
 uniform = _inst.uniform