diff -Naur pisi~/index.py pisi/index.py
--- pisi~/index.py	2014-03-07 23:03:46.000000000 +0100
+++ pisi/index.py	2014-09-04 21:47:38.282627704 +0200
@@ -13,6 +13,7 @@
 """PiSi source/package index"""
 
 import os
+import re
 import shutil
 import multiprocessing
 
@@ -91,6 +92,7 @@
         specs = []
         deltas = {}
 
+        pkgs_sorted = False
         for fn in os.walk(repo_uri).next()[2]:
             if fn.endswith(ctx.const.delta_package_suffix) or fn.endswith(ctx.const.package_suffix):
                 pkgpath = os.path.join(repo_uri,
@@ -100,6 +102,9 @@
                     fn), noln = False if ctx.config.get_option("verbose") else True)
                 shutil.copy2(os.path.join(repo_uri, fn), pkgpath)
                 os.remove(os.path.join(repo_uri, fn))
+                pkgs_sorted = True
+        if pkgs_sorted:
+            ctx.ui.info("%-80.80s\r" % '')
 
         for root, dirs, files in os.walk(repo_uri):
             # Filter hidden directories
@@ -166,14 +171,26 @@
 
         # Before calling pool.map check if list is empty or not: python#12157
         if latest_packages:
-            try:
-                # Add binary packages to index using a process pool
-                self.packages = pool.map(add_package, latest_packages)
-            except:
-                pool.terminate()
-                pool.join()
-                ctx.ui.info("")
-                raise
+            sorted_pkgs = {}
+            for pkg in latest_packages:
+                key = re.search("\/((lib)?[\d\w])\/", pkg[0])
+                key = key.group(1) if key else os.path.dirname(pkg[0]) 
+                try:
+                    sorted_pkgs[key].append(pkg)
+                except KeyError:
+                    sorted_pkgs[key] = [pkg]
+            self.packages = []
+            for key, pkgs in sorted(sorted_pkgs.items()):
+                ctx.ui.info("%-80.80s\r" % (_("Adding packages from directory %s... " % key)), noln=True)
+                try:
+                    # Add binary packages to index using a process pool
+                    self.packages.extend(pool.map(add_package, pkgs))
+                except:
+                    pool.terminate()
+                    pool.join()
+                    ctx.ui.info("")
+                    raise
+                ctx.ui.info("%-80.80s\r" % (_("Adding packages from directory %s... done." % key)))
 
         ctx.ui.info("")
         pool.close()
