+                    std::clog << OutputInDepth(Depth) << "Package " << Pkg << " loops in SmartConfigure";
+                 if (List->IsFlag(DepPkg,pkgOrderList::UnPacked))
+                    Bad = false;
+                 else if (Debug)
+                    std::clog << ", but it isn't unpacked yet";
+                 if (Debug)
+                    std::clog << std::endl;
+              }
+           }
+
+            if (Cur == End || Bad == false)
+              break;
+         }
+
+         // this dependency is in a good state, so we can stop
+         if (Bad == false)
+         {
+            if (Debug)
+               std::clog << OutputInDepth(Depth) << "Found ok dep " << Start.TargetPkg() << std::endl;
+            continue;
+         }
+
+        // Check for dependencies that have not been unpacked, 
+         // probably due to loops.
+        for (DepIterator Cur = Start; true; ++Cur)
+        {
+           std::unique_ptr<Version *[]> VList(Cur.AllTargets());
+
+           for (Version **I = VList.get(); *I != 0; ++I)
+           {
+              VerIterator Ver(Cache,*I);
+              PkgIterator DepPkg = Ver.ParentPkg();
+
+              // Check if the current version of the package is available and will satisfy this dependency
+              if (DepPkg.CurrentVer() == Ver && List->IsNow(DepPkg) == true &&
+                  List->IsFlag(DepPkg,pkgOrderList::Removed) == false &&
+                  DepPkg.State() == PkgIterator::NeedsNothing &&
+                  (Cache[DepPkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall)
+                  continue;
+
+              // Check if the version that is going to be installed will satisfy the dependency
+              if (Cache[DepPkg].InstallVer != *I || List->IsNow(DepPkg) == false)
+                 continue;
+
+              if (PkgLoop == true)
+              {
+                 if (Debug)
+                    std::clog << OutputInDepth(Depth) << "Package " << Pkg << " loops in SmartConfigure";
+                 if (List->IsFlag(DepPkg,pkgOrderList::UnPacked))
+                    Bad = false;
+                 else if (Debug)
+                    std::clog << ", but it isn't unpacked yet";
+                 if (Debug)
+                    std::clog << std::endl;