diff --git a/src/OpenFOAM/containers/misc/xfer.H b/src/OpenFOAM/containers/misc/xfer.H
index 2fec7405760bdd69fdcc711c3295b45f52f44669..6654ced746bfdab7e74245d02d4a444816332af2 100644
--- a/src/OpenFOAM/containers/misc/xfer.H
+++ b/src/OpenFOAM/containers/misc/xfer.H
@@ -60,18 +60,24 @@ class xfer
         //- Pointer to temporary object
         mutable T* ptr_;
 
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        xfer(const xfer<T>&);
+
 public:
 
     // Constructors
 
-        //- Null constructor, transfer later by assignment
+        //- Null constructor
+        //  Can be used later to transfer by assignment
         inline xfer();
 
-        //- Construct by transferring the parameter contents into the object
-        inline xfer(T&);
+        //- Construct by copying or by transferring the parameter contents
+        inline xfer(T&, bool allowTransfer=false);
 
-        //- Construct by transferring the parameter contents into the object
-        inline xfer(const xfer<T>&);
+        //- Copy constructor
+        inline xfer(const T&);
 
     // Destructor
 
diff --git a/src/OpenFOAM/containers/misc/xferI.H b/src/OpenFOAM/containers/misc/xferI.H
index fa5d5fa1522e61977838f558f562d7ea59d6d893..f4f4b94197963ffbc2150670d034d43a801e0e03 100644
--- a/src/OpenFOAM/containers/misc/xferI.H
+++ b/src/OpenFOAM/containers/misc/xferI.H
@@ -34,20 +34,27 @@ inline Foam::xfer<T>::xfer()
 
 
 template<class T>
-inline Foam::xfer<T>::xfer(T& t)
+inline Foam::xfer<T>::xfer(T& t, bool allowTransfer)
 :
     ptr_(new T)
 {
-    ptr_->transfer(t);
+    if (allowTransfer)
+    {
+        ptr_->transfer(t);
+    }
+    else
+    {
+        ptr_->operator=(t);
+    }
 }
 
 
 template<class T>
-inline Foam::xfer<T>::xfer(const xfer<T>& t)
+inline Foam::xfer<T>::xfer(const T& t)
 :
     ptr_(new T)
 {
-    ptr_->transfer(*(t.ptr_));
+    ptr_->operator=(t);
 }