diff --git a/.vscode/settings.json b/.vscode/settings.json
index 7fc494343fd5b7017f45de776dc998b1187a91bb..108edeb9abfdaa4cef218b45d5605b83400d947b 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -16,6 +16,13 @@
         "slist": "cpp",
         "ostream": "cpp",
         "fstream": "cpp",
-        "istream": "cpp"
+        "istream": "cpp",
+        "array": "cpp",
+        "chrono": "cpp",
+        "functional": "cpp",
+        "ratio": "cpp",
+        "tuple": "cpp",
+        "type_traits": "cpp",
+        "utility": "cpp"
     }
 }
\ No newline at end of file
diff --git a/src/HashTable.cc b/src/HashTable.cc
index 366c45d44458c8849b69cff01ceb5cfa7edfe7e5..10afbcc501fa064db1e55a47a6f328301b0ba784 100644
--- a/src/HashTable.cc
+++ b/src/HashTable.cc
@@ -148,6 +148,8 @@ HashTable::Entry::pack(uint64_t hash, bool chain, uint64_t ptr)
     uint64_t c = chain ? 1 : 0;
     assert((hash >> 16) == 0);
     this->value = ((hash << 48) | (c << 47) | ptr);
+
+    flush(&(this->value),sizeof(uint64_t)); // need flush for persistency
 }
 
 /**
diff --git a/src/ObjectManager.cc b/src/ObjectManager.cc
index e782684ecd3e563d5b2835922f7ef0762c188997..6089ae0ab52585d30c41c460cfe7bd504077eaf3 100644
--- a/src/ObjectManager.cc
+++ b/src/ObjectManager.cc
@@ -470,21 +470,26 @@ ObjectManager::removeObject(Key& key, RejectRules* rejectRules,
         appends[1].type = LOG_ENTRY_TYPE_RPCRESULT;
     }
 
+    // flush added to append
     if (!log.append(appends, (rpcResult ? 2 : 1))) {
         // The log is out of space. Tell the client to retry and hope
         // that the cleaner makes space soon.
         return STATUS_RETRY;
     }
 
-    if (rpcResult && rpcResultPtr)
+    if (rpcResult && rpcResultPtr){
         *rpcResultPtr = appends[1].reference.toInteger();
+        flush(rpcResultPtr,sizeof(rpcResultPtr));
+    }
+    mfence();
+
 
     TableStats::increment(masterTableMetadata,
                           tablet.tableId,
                           appends[0].buffer.size() + appends[1].buffer.size(),
                           rpcResult ? 2 : 1);
     segmentManager.raiseSafeVersion(object.getVersion() + 1);
-    log.free(reference);
+    log.free(reference); //TODO: does this need a flush? if so, where
     remove(lock, key);
     return STATUS_OK;
 }
@@ -2173,6 +2178,7 @@ ObjectManager::flushEntriesToLog(Buffer *logBuffer, uint32_t& numEntries)
                 // persistency added
                 objectMap.insert(key.getHash(), references[i].toInteger());
             }
+            mfence();
 
             tabletManager->incrementWriteCount(key);
             TableStats::increment(masterTableMetadata,
diff --git a/src/Segment.cc b/src/Segment.cc
index 0aa322974e12f238680eb6cf94a44fbb5282535a..dcc2746c384a90c9239c60dd45e6b8be55e3b68d 100644
--- a/src/Segment.cc
+++ b/src/Segment.cc
@@ -1002,11 +1002,11 @@ Segment::Reference::getEntry(SegletAllocator* allocator,
             }
             if (lengthWithMetadata != NULL){
                 *lengthWithMetadata = fullLength;
+                // TODO: check whether needed
                 flush(
                     reinterpret_cast<void*>(reference),
                         fullLength
                 );
-                mfence();
             }
             return header->getType();
         }
diff --git a/src/btreeRamCloud/Btree.h b/src/btreeRamCloud/Btree.h
index 0baa94ae214f57a676832352341caa8cc3429fc4..1ee05b639694b52294d3b865bda1ac90425be403 100644
--- a/src/btreeRamCloud/Btree.h
+++ b/src/btreeRamCloud/Btree.h
@@ -35,6 +35,8 @@
 #include "ObjectManager.h"
 #include "PerfStats.h"
 
+#include "Common.h"
+
 namespace RAMCloud {
 
 // Nodes in the B+ tree are stored as RAMCloud objects with the key being a