diff --git a/Lib/StringIO.py b/Lib/StringIO.py
index 4bfd55f..98f190f 100644
--- a/Lib/StringIO.py
+++ b/Lib/StringIO.py
@@ -30,167 +30,179 @@
 """
 
 try:
-	from errno import EINVAL
+    from errno import EINVAL
 except ImportError:
-	EINVAL = 22
+    EINVAL = 22
 
 EMPTYSTRING = ''
 
 class StringIO:
-	def __init__(self, buf = ''):
-		self.buf = buf
-		self.len = len(buf)
+    def __init__(self, buf = ''):
+	self.buf = buf
+	self.len = len(buf)
+	self.buflist = []
+	self.pos = 0
+	self.closed = 0
+	self.softspace = 0
+
+    def close(self):
+	if not self.closed:
+	    self.closed = 1
+	    del self.buf, self.pos
+
+    def isatty(self):
+	if self.closed:
+	    raise ValueError, "I/O operation on closed file"
+	return 0
+
+    def seek(self, pos, mode = 0):
+	if self.closed:
+	    raise ValueError, "I/O operation on closed file"
+	if self.buflist:
+	    self.buf += EMPTYSTRING.join(self.buflist)
+	    self.buflist = []
+	if mode == 1:
+	    pos += self.pos
+	elif mode == 2:
+	    pos += self.len
+	self.pos = max(0, pos)
+
+    def tell(self):
+	if self.closed:
+	    raise ValueError, "I/O operation on closed file"
+	return self.pos
+
+    def read(self, n = -1):
+	if self.closed:
+	    raise ValueError, "I/O operation on closed file"
+	if self.buflist:
+	    self.buf += EMPTYSTRING.join(self.buflist)
+	    self.buflist = []
+	if n < 0:
+	    newpos = self.len
+	else:
+	    newpos = min(self.pos+n, self.len)
+	r = self.buf[self.pos:newpos]
+	self.pos = newpos
+	return r
+
+    def readline(self, length=None):
+	if self.closed:
+	    raise ValueError, "I/O operation on closed file"
+	if self.buflist:
+	    self.buf += EMPTYSTRING.join(self.buflist)
+	    self.buflist = []
+	i = self.buf.find('\n', self.pos)
+	if i < 0:
+	    newpos = self.len
+	else:
+	    newpos = i+1
+	if length is not None:
+	    if self.pos + length < newpos:
+		newpos = self.pos + length
+	r = self.buf[self.pos:newpos]
+	self.pos = newpos
+	return r
+
+    def readlines(self, sizehint = 0):
+	total = 0
+	lines = []
+	line = self.readline()
+	while line:
+	    lines.append(line)
+	    total += len(line)
+	    if 0 < sizehint <= total:
+		break
+	    line = self.readline()
+	return lines
+
+    def truncate(self, size=None):
+	if self.closed:
+	    raise ValueError, "I/O operation on closed file"
+	if size is None:
+	    size = self.pos
+	elif size < 0:
+	    raise IOError(EINVAL, "Negative size not allowed")
+	elif size < self.pos:
+	    self.pos = size
+	self.buf = self.getvalue()[:size]
+
+    def write(self, s):
+	if self.closed:
+	    raise ValueError, "I/O operation on closed file"
+	if not s: return
+	if self.pos > self.len:
+	    self.buflist.append('\0'*(self.pos - self.len))
+	    self.len = self.pos
+	newpos = self.pos + len(s)
+	if self.pos < self.len:
+	    if self.buflist:
+		self.buf += EMPTYSTRING.join(self.buflist)
 		self.buflist = []
-		self.pos = 0
-		self.closed = 0
-		self.softspace = 0
-	def close(self):
-		if not self.closed:
-			self.closed = 1
-			del self.buf, self.pos
-	def isatty(self):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		return 0
-	def seek(self, pos, mode = 0):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if self.buflist:
-			self.buf += EMPTYSTRING.join(self.buflist)
-			self.buflist = []
-		if mode == 1:
-			pos += self.pos
-		elif mode == 2:
-			pos += self.len
-		self.pos = max(0, pos)
-	def tell(self):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		return self.pos
-	def read(self, n = -1):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if self.buflist:
-			self.buf += EMPTYSTRING.join(self.buflist)
-			self.buflist = []
-		if n < 0:
-			newpos = self.len
-		else:
-			newpos = min(self.pos+n, self.len)
-		r = self.buf[self.pos:newpos]
-		self.pos = newpos
-		return r
-	def readline(self, length=None):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if self.buflist:
-			self.buf += EMPTYSTRING.join(self.buflist)
-			self.buflist = []
-		i = self.buf.find('\n', self.pos)
-		if i < 0:
-			newpos = self.len
-		else:
-			newpos = i+1
-		if length is not None:
-			if self.pos + length < newpos:
-				newpos = self.pos + length
-		r = self.buf[self.pos:newpos]
-		self.pos = newpos
-		return r
-	def readlines(self, sizehint = 0):
-		total = 0
-		lines = []
-		line = self.readline()
-		while line:
-			lines.append(line)
-			total += len(line)
-			if 0 < sizehint <= total:
-				break
-			line = self.readline()
-		return lines
-	def truncate(self, size=None):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if size is None:
-			size = self.pos
-		elif size < 0:
-			raise IOError(EINVAL, "Negative size not allowed")
-		elif size < self.pos:
-			self.pos = size
-		self.buf = self.getvalue()[:size]
-	def write(self, s):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if not s: return
-		if self.pos > self.len:
-			self.buflist.append('\0'*(self.pos - self.len))
-			self.len = self.pos
-		newpos = self.pos + len(s)
-		if self.pos < self.len:
-			if self.buflist:
-				self.buf += EMPTYSTRING.join(self.buflist)
-				self.buflist = []
-			self.buflist = [self.buf[:self.pos], s, self.buf[newpos:]]
-			self.buf = ''
-			if newpos > self.len:
-				self.len = newpos
-		else:
-			self.buflist.append(s)
-			self.len = newpos
-		self.pos = newpos
-	def writelines(self, list):
-		self.write(EMPTYSTRING.join(list))
-	def flush(self):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-	def getvalue(self):
-		if self.buflist:
-			self.buf += EMPTYSTRING.join(self.buflist)
-			self.buflist = []
-		return self.buf
+	    self.buflist = [self.buf[:self.pos], s, self.buf[newpos:]]
+	    self.buf = ''
+	    if newpos > self.len:
+		self.len = newpos
+	else:
+	    self.buflist.append(s)
+	    self.len = newpos
+	self.pos = newpos
+
+    def writelines(self, list):
+	self.write(EMPTYSTRING.join(list))
+
+    def flush(self):
+	if self.closed:
+	    raise ValueError, "I/O operation on closed file"
+
+    def getvalue(self):
+	if self.buflist:
+	    self.buf += EMPTYSTRING.join(self.buflist)
+	    self.buflist = []
+	return self.buf
 
 
 # A little test suite
 
 def test():
-	import sys
-	if sys.argv[1:]:
-		file = sys.argv[1]
-	else:
-		file = '/etc/passwd'
-	lines = open(file, 'r').readlines()
-	text = open(file, 'r').read()
-	f = StringIO()
-	for line in lines[:-2]:
-		f.write(line)
-	f.writelines(lines[-2:])
-	if f.getvalue() != text:
-		raise RuntimeError, 'write failed'
-	length = f.tell()
-	print 'File length =', length
-	f.seek(len(lines[0]))
-	f.write(lines[1])
-	f.seek(0)
-	print 'First line =', `f.readline()`
-	here = f.tell()
-	line = f.readline()
-	print 'Second line =', `line`
-	f.seek(-len(line), 1)
-	line2 = f.read(len(line))
-	if line != line2:
-		raise RuntimeError, 'bad result after seek back'
-	f.seek(len(line2), 1)
-	list = f.readlines()
-	line = list[-1]
-	f.seek(f.tell() - len(line))
-	line2 = f.read()
-	if line != line2:
-		raise RuntimeError, 'bad result after seek back from EOF'
-	print 'Read', len(list), 'more lines'
-	print 'File length =', f.tell()
-	if f.tell() != length:
-		raise RuntimeError, 'bad length'
-	f.close()
+    import sys
+    if sys.argv[1:]:
+	file = sys.argv[1]
+    else:
+	file = '/etc/passwd'
+    lines = open(file, 'r').readlines()
+    text = open(file, 'r').read()
+    f = StringIO()
+    for line in lines[:-2]:
+	f.write(line)
+    f.writelines(lines[-2:])
+    if f.getvalue() != text:
+	raise RuntimeError, 'write failed'
+    length = f.tell()
+    print 'File length =', length
+    f.seek(len(lines[0]))
+    f.write(lines[1])
+    f.seek(0)
+    print 'First line =', `f.readline()`
+    here = f.tell()
+    line = f.readline()
+    print 'Second line =', `line`
+    f.seek(-len(line), 1)
+    line2 = f.read(len(line))
+    if line != line2:
+	raise RuntimeError, 'bad result after seek back'
+    f.seek(len(line2), 1)
+    list = f.readlines()
+    line = list[-1]
+    f.seek(f.tell() - len(line))
+    line2 = f.read()
+    if line != line2:
+	raise RuntimeError, 'bad result after seek back from EOF'
+    print 'Read', len(list), 'more lines'
+    print 'File length =', f.tell()
+    if f.tell() != length:
+	raise RuntimeError, 'bad length'
+    f.close()
 
 if __name__ == '__main__':
-	test()
+    test()
