diff --git a/Tools/scripts/suff.py b/Tools/scripts/suff.py
index 826e236..e085cd0 100755
--- a/Tools/scripts/suff.py
+++ b/Tools/scripts/suff.py
@@ -7,23 +7,23 @@
 import sys
 
 def main():
-	files = sys.argv[1:]
-	suffixes = {}
-	for file in files:
-		suff = getsuffix(file)
-		if not suffixes.has_key(suff):
-			suffixes[suff] = []
-		suffixes[suff].append(file)
-	keys = suffixes.keys()
-	keys.sort()
-	for suff in keys:
-		print `suff`, len(suffixes[suff])
+    files = sys.argv[1:]
+    suffixes = {}
+    for file in files:
+        suff = getsuffix(file)
+        if not suffixes.has_key(suff):
+            suffixes[suff] = []
+        suffixes[suff].append(file)
+    keys = suffixes.keys()
+    keys.sort()
+    for suff in keys:
+        print `suff`, len(suffixes[suff])
 
 def getsuffix(file):
-	suff = ''
-	for i in range(len(file)):
-		if file[i] == '.':
-			suff = file[i:]
-	return suff
+    suff = ''
+    for i in range(len(file)):
+        if file[i] == '.':
+            suff = file[i:]
+    return suff
 
 main()
