diff --git a/src/mio.py b/src/mio.py
index d284830d23b7346f7a3de2919596c57cd7c37081..c87332eb4f042115c40640050a2d9f4e0e48b8b1 100755
--- a/src/mio.py
+++ b/src/mio.py
@@ -298,14 +298,15 @@ if __name__ == '__main__':
 
         if not options.noyum:
             log(NORMAL, "Installing rpms")
-            rpm_result = installer.install_rpms(options.path,
-                                                options.exclude_rpm)
+            (rpm_result, failed) = installer.install_rpms(options.path,
+                                                          options.exclude_rpm)
 
         log(NORMAL, "Installing files")
         installer.install_groups(options.prefix,
                                  (options.backup, options.backup_suffix))
 
     if rpm_result:
-        for r in rpm_result:
+        print "Yum failed with %d" % rpm_result
+        for r in failed:
             print "Failed to install %s" % r
         exit(1)
diff --git a/src/mio/daemon_cage.py b/src/mio/daemon_cage.py
index a94b42d60309fad984c46aaa4fcd896e8ff5539d..491d51004871ed35b224ebeaea40ec072387b71c 100755
--- a/src/mio/daemon_cage.py
+++ b/src/mio/daemon_cage.py
@@ -32,14 +32,16 @@ def system(command):
             needCage = True
             break
 
-    if needCage:
+    if not needCage:
+        return p.wait()
+    else:
         # Create another deamon that puts the deamon still lingering
         # from above in a cage that puts all output in syslog
         print "Caging '%s'" % command
         pid = os.fork()
         if (pid != 0):
             # At this point, let the parent process continue
-            return
+            return p.wait()
         # When we get here we are first child
         os.setsid()
         pid = os.fork()        # Fork a second child.
diff --git a/src/mio/installer.py b/src/mio/installer.py
index 8400771533e82ed3e446a86e842ea8c9ac7db94d..b6be6c8264eaa01867046bb89c1e6a78781ad9e0 100755
--- a/src/mio/installer.py
+++ b/src/mio/installer.py
@@ -192,18 +192,18 @@ class Installer:
         rpm = filter(not_excluded, rpm)
         #rpm.sort()
         print rpm
-        mio.yum.run(path + self.rpmdir, rpm, exclude)
+        result = mio.yum.run(path + self.rpmdir, rpm, exclude)
         version_db = mio.rpmDB.VersionDB()
         for r in self.rpm:
             r.new_version = version_db[r.name]
             pass
-        result = []
+        failed = []
         for r in rpm:
             if version_db[r] == None:
-                result.append(r)
+                failed.append(r)
                 pass
             pass
-        return result
+        return (result, failed)
             
     def install_groups(self, prefix, backup):
         for g in self.group:
diff --git a/src/mio/yum.py b/src/mio/yum.py
index 6ce341ef048b8171473e8e15fc4aca056b4fafba..cc92efbd5891a1ae52799f16edfea20c900bc9e5 100755
--- a/src/mio/yum.py
+++ b/src/mio/yum.py
@@ -92,7 +92,7 @@ def run(path, rpm, exclude):
     update = "yum -c %s -e %s -d %s -y update %s" % (f.name, verb, verb,
                                                      " ".join(exclude_arg))
     mio.log.log(NORMAL, update)
-    mio.daemon_cage.system(update)
+    result = mio.daemon_cage.system(update)
 
     # Install new packages
     install = "yum -c %s -e %s -d %s -y install" % (f.name, verb, verb)
@@ -100,14 +100,6 @@ def run(path, rpm, exclude):
     for p in rpm:
         i += 1
         mio.log.log(NORMAL, "[%d/%d] %s %s" % (i, len(rpm), install, p))
-        mio.daemon_cage.system("%s %s" % (install, p))
-
-#    if len(rpm) > 0:
-#        install = "yum -c %s -e %s -d %s -y install" % (f.name, verb, verb)
-#        if len(rpm) > 8 and mio.log.verbosity <= VERBOSE:
-#            mio.log.log(NORMAL, "%s %s ... [ %d more ] ... %s" %
-#                        (install, rpm[0], len(rpm) - 2, rpm[-1]))
-#       else:
-#            mio.log.log(NORMAL, "%s %s" % (install, ' '.join(rpm)))
-#        
-#        os.system("%s %s" % (install, ' '.join(rpm)))
+        tmp = mio.daemon_cage.system("%s %s" % (install, p))
+        result = max(filter(None, [result, tmp]) or [0])
+    return result