diff --git a/Unstructured_mesh/main.cpp b/Unstructured_mesh/main.cpp
index 348ebca6b890c7998d531a643851c741f6abfebc..483bccf93a60083da6ee3729cbcd3383b50ff90b 100644
--- a/Unstructured_mesh/main.cpp
+++ b/Unstructured_mesh/main.cpp
@@ -1,4 +1,5 @@
 #include <iostream>
+#include <string>
 //#define UNDEBUG
 #define CONSOLE_COLOURED_OUTPUT
 #include "../src/Debug/Debug.h"
@@ -272,7 +273,6 @@ void testMesh2D() {
     using sit = UnstructuredMesh<2, size_t, double>;
     sit mesh;
 
-
     mesh.getVertices().resize(4);
 
     mesh.getVertices().at(0).setIndex(0);
@@ -982,6 +982,10 @@ void testFPMA_poly(){
 
 int main()
 {
+    vector<size_t> v(10,1);
+    DBGVAR(v.data(), ((char *)&*(v.end())) - ((char*)&*(v.begin())));
+
+    void* p = 0;
 
     testMesh2D();
     //testMesh2DLoadAndWrite();
diff --git a/src/UnstructuredMesh/MeshElements/MeshElements.h b/src/UnstructuredMesh/MeshElements/MeshElements.h
index 4ed54bfbe4edc3dabf553cc25ce8e7a2b42198d8..50eb72c4f2bb29c44614836aca9c7f7c043ddd63 100644
--- a/src/UnstructuredMesh/MeshElements/MeshElements.h
+++ b/src/UnstructuredMesh/MeshElements/MeshElements.h
@@ -219,7 +219,7 @@ public:
 private:
 
     template<unsigned int Dim = Dimension, typename Dummy = void>
-    struct hashOfMeshElements{
+    struct HashOfMeshElements{
         static size_t hash(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){
             std::hash<IndexType> indexHasher;
 
@@ -230,7 +230,7 @@ private:
                     elemHash ^= indexHasher(subElement.index);
                 }
             }
-            return elemHash ^ hashOfMeshElements<Dim - 1>::hash(mesh);
+            return elemHash ^ HashOfMeshElements<Dim - 1>::hash(mesh);
         }
     };
 
@@ -239,49 +239,35 @@ private:
      * @brief The hashOfMeshElements<Dimension, Dummy> struct hashes the cell information.
      */
     template<typename Dummy>
-    struct hashOfMeshElements<Dimension, Dummy>{
+    struct HashOfMeshElements<Dimension, Dummy>{
         static size_t hash(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){
-            std::hash<IndexType> indexHasher;
 
             // Hash of cells
-            size_t cHash = indexHasher(mesh.getCells().size());
-            for(auto& cell : mesh.getCells()) {
-                cHash ^= indexHasher(cell.getBoundaryElementIndex());
-            }
-            return cHash ^ hashOfMeshElements<Dimension -1>::hash(mesh);
+            size_t cHash = std::_Hash_impl::hash(mesh.getCells().data(), mesh.getCells().size() * sizeof (MeshElements<Dimension, IndexType, Real, Reserve...>::Cell));
+
+            return cHash ^ HashOfMeshElements<Dimension -1>::hash(mesh);
         }
     };
 
     template<typename Dummy>
-    struct hashOfMeshElements<1, Dummy>{
+    struct HashOfMeshElements<1, Dummy>{
         static size_t hash(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){
-            std::hash<IndexType> indexHasher;
 
             // Hash of cells
-            size_t eHash = indexHasher(mesh.getEdges().size());
-            for(auto& edge : mesh.getEdges()) {
-                eHash ^= edge.getVertexAIndex();
-                eHash ^= edge.getVertexBIndex();
-            }
-            return eHash ^ hashOfMeshElements<0>::hash(mesh);
+            size_t eHash = std::_Hash_impl::hash(mesh.getEdges().data(), mesh.getEdges().size() * sizeof (MeshElements<Dimension, IndexType, Real, Reserve...>::Edge));
+
+            return eHash ^ HashOfMeshElements<0>::hash(mesh);
         }
     };
 
 
     template<typename Dummy>
-    struct hashOfMeshElements<0, Dummy>{
+    struct HashOfMeshElements<0, Dummy>{
         static size_t hash(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){
-            std::hash<Real> vertexHasher;
-            std::hash<IndexType> indexHasher;
 
             // Hash of vertices
-            size_t vHash = indexHasher(mesh.getVertices().size());
-            for(auto& vertex : mesh.getVertices()) {
-                for(unsigned int i = 0; i < vertex.size(); i++) {
-                    vHash ^= vertexHasher(vertex[i]);
-                    //vHash >>= 2;
-                }
-            }
+            size_t vHash = std::_Hash_impl::hash(&mesh.getVertices()[0], mesh.getVertices().size() * sizeof (MeshElements<Dimension, IndexType, Real, Reserve...>::Vertex));
+
             return vHash;
         }
     };
@@ -290,7 +276,7 @@ public:
 
     size_t updateSignature() {
 
-        meshSignature = hashOfMeshElements<Dimension>::hash(*this);
+        meshSignature = HashOfMeshElements<Dimension>::hash(*this);
 
         return meshSignature;