diff --git a/Lib/idlelib/MultiStatusBar.py b/Lib/idlelib/MultiStatusBar.py
index c11db3e..dd6d041 100644
--- a/Lib/idlelib/MultiStatusBar.py
+++ b/Lib/idlelib/MultiStatusBar.py
@@ -1,32 +1,32 @@
 from Tkinter import *
 
 class MultiStatusBar(Frame):
-	
-	def __init__(self, master=None, **kw):
-		if master is None:
-			master = Tk()
-		apply(Frame.__init__, (self, master), kw)
-		self.labels = {}
 
-	def set_label(self, name, text='', side=LEFT):
-		if not self.labels.has_key(name):
-			label = Label(self, bd=1, relief=SUNKEN, anchor=W)
-			label.pack(side=side)
-			self.labels[name] = label
-		else:
-			label = self.labels[name]
-		label.config(text=text)
+    def __init__(self, master=None, **kw):
+        if master is None:
+            master = Tk()
+        apply(Frame.__init__, (self, master), kw)
+        self.labels = {}
+
+    def set_label(self, name, text='', side=LEFT):
+        if not self.labels.has_key(name):
+            label = Label(self, bd=1, relief=SUNKEN, anchor=W)
+            label.pack(side=side)
+            self.labels[name] = label
+        else:
+            label = self.labels[name]
+        label.config(text=text)
 
 def _test():
-	b = Frame()
-	c = Text(b)
-	c.pack(side=TOP)
-	a = MultiStatusBar(b)
-	a.set_label("one", "hello")
-	a.set_label("two", "world")
-	a.pack(side=BOTTOM, fill=X)
-	b.pack()
-	b.mainloop()
+    b = Frame()
+    c = Text(b)
+    c.pack(side=TOP)
+    a = MultiStatusBar(b)
+    a.set_label("one", "hello")
+    a.set_label("two", "world")
+    a.pack(side=BOTTOM, fill=X)
+    b.pack()
+    b.mainloop()
 
 if __name__ == '__main__':
-	_test()
+    _test()
