diff --git a/Sources/Core/LinearAlgebra/GlobalMatrix.hpp b/Sources/Core/LinearAlgebra/GlobalMatrix.hpp
index 6ba54fd16e34a60a2b90518717126d89702ef07b..86fb9e9da963ef366a5d3175a4892b48a4e5011b 100644
--- a/Sources/Core/LinearAlgebra/GlobalMatrix.hpp
+++ b/Sources/Core/LinearAlgebra/GlobalMatrix.hpp
@@ -84,7 +84,11 @@ namespace HappyHeart
         const NumberingSubset& GetColNumberingSubset() const;
     
         
-    private:    
+    private:
+        
+        // ===========================================================================
+        // \attention Do not forget to update Swap() if a new data member is added!
+        // =============================================================================
     
         //! Numbering subset used to describe rows.
         const NumberingSubset& row_numbering_subset_;
diff --git a/Sources/Core/LinearAlgebra/GlobalVector.cpp b/Sources/Core/LinearAlgebra/GlobalVector.cpp
index 6583934c46e4f4fd91552dfc9281bfe2a313d560..d74ffb020b0ba1ed7e104e26377585dd4ee180a5 100644
--- a/Sources/Core/LinearAlgebra/GlobalVector.cpp
+++ b/Sources/Core/LinearAlgebra/GlobalVector.cpp
@@ -7,21 +7,29 @@
 //
 
 #include "Core/LinearAlgebra/GlobalVector.hpp"
+#include "Core/NumberingSubset.hpp"
 
 
 namespace HappyHeart
 {
     
     
+    GlobalVector::GlobalVector(const NumberingSubset& numbering_subset)
+    : numbering_subset_(numbering_subset)
+    { }
+    
+    
+    
     GlobalVector::GlobalVector(const GlobalVector& rhs)
-    : Parent(rhs)
+    : Parent(rhs),
+    numbering_subset_(rhs.numbering_subset_)
     { }
     
     
     
     void Swap(GlobalVector& A, GlobalVector& B)
     {
-        // \todo #527 Add assert about numbering subset!
+        assert(A.GetNumberingSubset() == B.GetNumberingSubset());
         
         using Parent = GlobalVector::Parent;
 
diff --git a/Sources/Core/LinearAlgebra/GlobalVector.hpp b/Sources/Core/LinearAlgebra/GlobalVector.hpp
index f7012b01cf06c3fc2d74ec8faca8529c5c4626d6..c2de172f4f1c2c84fd4974d2ca5168db3df4e8a7 100644
--- a/Sources/Core/LinearAlgebra/GlobalVector.hpp
+++ b/Sources/Core/LinearAlgebra/GlobalVector.hpp
@@ -56,7 +56,7 @@ namespace HappyHeart
         ///@{
     
         //! Constructor.
-        explicit GlobalVector() = default;
+        explicit GlobalVector(const NumberingSubset& numbering_subset);
     
         //! Destructor.
         ~GlobalVector() = default;
@@ -75,9 +75,17 @@ namespace HappyHeart
     
         ///@}
     
+        //! Numbering subset used to describe vector.
+        const NumberingSubset& GetNumberingSubset() const;
+        
     private:
-    
-    
+        
+        // ===========================================================================
+        // \attention Do not forget to update Swap() if a new data member is added!
+        // =============================================================================
+        
+        //! Numbering subset used to describe vector.
+        const NumberingSubset& numbering_subset_;
     
     };
     
diff --git a/Sources/Core/LinearAlgebra/GlobalVector.hxx b/Sources/Core/LinearAlgebra/GlobalVector.hxx
index c2286fa2fca4bf7a087297f1656effcdea00c57a..8c19d02e5c11ef32d586543d0d428046a238e520 100644
--- a/Sources/Core/LinearAlgebra/GlobalVector.hxx
+++ b/Sources/Core/LinearAlgebra/GlobalVector.hxx
@@ -14,7 +14,10 @@ namespace HappyHeart
 {
 
 
-
+    inline const NumberingSubset& GlobalVector::GetNumberingSubset() const
+    {
+        return numbering_subset_;
+    }
 
 
 } // namespace HappyHeart
diff --git a/Sources/FormulationSolver/Private/Impl/GlobalVectorWithNumberingSubset.cpp b/Sources/FormulationSolver/Private/Impl/GlobalVectorWithNumberingSubset.cpp
index db30610e5231ad81008386d932c60e594e997d02..22ad0c53e56ef88799448ef22262dff84d49c587 100644
--- a/Sources/FormulationSolver/Private/Impl/GlobalVectorWithNumberingSubset.cpp
+++ b/Sources/FormulationSolver/Private/Impl/GlobalVectorWithNumberingSubset.cpp
@@ -29,7 +29,7 @@ namespace HappyHeart
             
             GlobalVectorWithNumberingSubset
             ::GlobalVectorWithNumberingSubset(const NumberingSubset& a_numbering_subset)
-            : global_vector(std::make_unique<GlobalVector>()),
+            : global_vector(std::make_unique<GlobalVector>(a_numbering_subset)),
             numbering_subset(a_numbering_subset)
             { }
             
diff --git a/Sources/ModelInstances/Hyperelasticity/VariationalFormulationHyperElasticity.hxx b/Sources/ModelInstances/Hyperelasticity/VariationalFormulationHyperElasticity.hxx
index b14e84eab9ec58abe6a13a184733298171900a37..2539cdfd9720da805d3b8d6e4ac26de1914e0661 100644
--- a/Sources/ModelInstances/Hyperelasticity/VariationalFormulationHyperElasticity.hxx
+++ b/Sources/ModelInstances/Hyperelasticity/VariationalFormulationHyperElasticity.hxx
@@ -46,8 +46,8 @@ namespace HappyHeart
             {
                 current_velocity.Scale(-1., __FILE__, __LINE__);
                 
-                GlobalVector diff_displ; // \todo #527 Awful! Store it once!
-                diff_displ.DuplicateLayout(system_solution, __FILE__, __LINE__);
+                std::lock_guard<std::mutex> lock(this->GetMutex());                
+                auto& diff_displ = this->GetNonCstHelperGlobalVector<0>();
                 
                 {
                     diff_displ.Copy(system_solution, __FILE__, __LINE__);