diff --git a/src/dispatcher.cc b/src/dispatcher.cc
index 556144f..1775ca2 100644
--- a/src/dispatcher.cc
+++ b/src/dispatcher.cc
@@ -254,9 +254,11 @@
       if (m_objectDbMap.find (hash) == m_objectDbMap.end ())
         {
           _LOG_DEBUG ("create ObjectDb for " << hash);
-          m_objectDbMap [hash] = make_shared<ObjectDb> (m_rootDir, lexical_cast<string> (hash));
+          m_objectDbMap [hash] = make_shared<ObjectDb> (m_rootDir / ".chronoshare", lexical_cast<string> (hash));
         }
 
+      _LOG_DEBUG ("dafaq: " << (m_objectDbMap.find (hash) == m_objectDbMap.end ()));
+
       m_fileFetcher->Enqueue (deviceName, fileNameBase,
                               bind (&Dispatcher::Did_FetchManager_FileSegmentFetch, this, _1, _2, _3, _4),
                               bind (&Dispatcher::Did_FetchManager_FileFetchComplete, this, _1, _2),
@@ -325,6 +327,16 @@
   const Bytes &hashBytes = fileBaseName.getCompFromBack (0);
   Hash hash (head (hashBytes), hashBytes.size ());
 
+  if (m_objectDbMap.find (hash) != m_objectDbMap.end())
+  {
+    // remove the db handle
+    m_objectDbMap.erase (hash); // to commit write
+  }
+  else
+  {
+    _LOG_ERROR ("no db available for this file: " << hash);
+  }
+
   FileItemsPtr filesToAssemble = m_actionLog->LookupFilesForHash (hash);
 
   for (FileItems::iterator file = filesToAssemble->begin ();
@@ -337,14 +349,4 @@
       last_write_time (filePath, file->mtime ());
       permissions (filePath, static_cast<filesystem::perms> (file->mode ()));
     }
-
-  if (m_objectDbMap.find (hash) != m_objectDbMap.end())
-  {
-    // remove the db handle
-    m_objectDbMap.erase (hash);
-  }
-  else
-  {
-    _LOG_ERROR ("no db available for this file: " << hash);
-  }
 }
diff --git a/src/hash-helper.h b/src/hash-helper.h
index 4224860..ab93697 100644
--- a/src/hash-helper.h
+++ b/src/hash-helper.h
@@ -113,11 +113,16 @@
 
     for (int i = 0; i < m_length; i++)
       {
+        if (m_buf [i] < otherHash.m_buf [i])
+          return true;
+
         if (m_buf [i] > otherHash.m_buf [i])
           return false;
+
+        // if equal, continue
       }
 
-    return true;
+    return false;
   }
 
   const void *
diff --git a/src/object-db.cc b/src/object-db.cc
index fe00225..84c6ae8 100644
--- a/src/object-db.cc
+++ b/src/object-db.cc
@@ -50,6 +50,8 @@
   fs::path actualFolder = folder / "objects" / hash.substr (0, 2);
   fs::create_directories (actualFolder);
 
+  _LOG_DEBUG ("Open " << (actualFolder / hash.substr (2, hash.size () - 2)));
+
   int res = sqlite3_open((actualFolder / hash.substr (2, hash.size () - 2)).c_str (), &m_db);
   if (res != SQLITE_OK)
     {
@@ -65,10 +67,12 @@
   res = sqlite3_exec (m_db, INIT_DATABASE.c_str (), NULL, NULL, &errmsg);
   if (res != SQLITE_OK && errmsg != 0)
     {
-      // std::cerr << "DEBUG: " << errmsg << std::endl;
+      _LOG_DEBUG (errmsg);
       sqlite3_free (errmsg);
     }
 
+  // _LOG_DEBUG ("open db");
+
   willStartSave ();
 }
 
@@ -114,6 +118,7 @@
 {
   didStopSave ();
 
+  // _LOG_DEBUG ("close db");
   int res = sqlite3_close (m_db);
   if (res != SQLITE_OK)
     {
@@ -137,6 +142,7 @@
   sqlite3_bind_blob (stmt, 3, &data[0], data.size (), SQLITE_STATIC);
 
   sqlite3_step (stmt);
+  _LOG_DEBUG ("After saving object: " << sqlite3_errmsg (m_db));
   sqlite3_finalize (stmt);
 }
 
@@ -188,10 +194,12 @@
 ObjectDb::willStartSave ()
 {
   sqlite3_exec (m_db, "BEGIN TRANSACTION;", 0,0,0);
+  // _LOG_DEBUG ("Open transaction: " << sqlite3_errmsg (m_db));
 }
 
 void
 ObjectDb::didStopSave ()
 {
   sqlite3_exec (m_db, "END TRANSACTION;", 0,0,0);
+  // _LOG_DEBUG ("Close transaction: " << sqlite3_errmsg (m_db));
 }
