diff --git a/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/MDHistoWorkspace.h b/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/MDHistoWorkspace.h
index 567c10f6b009b1df0f485e376a91607be42a43b4..8e6eaca21128413edfb3dda1b232c9a73f2ca8a3 100644
--- a/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/MDHistoWorkspace.h
+++ b/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/MDHistoWorkspace.h
@@ -371,6 +371,8 @@ public:
 
   /// Apply masking.
   void setMDMasking(Mantid::Geometry::MDImplicitFunction *maskingRegion);
+  /// Apply masking.
+  void setMDMaskAt(const size_t& index, bool mask);
 
   /// Clear masking.
   void clearMDMasking();
diff --git a/Code/Mantid/Framework/DataObjects/src/MDHistoWorkspace.cpp b/Code/Mantid/Framework/DataObjects/src/MDHistoWorkspace.cpp
index f5264363224903ad911355fe21108c6960d95b05..b1687145357598e2bc49e6c4c4822dcd663e0adc 100644
--- a/Code/Mantid/Framework/DataObjects/src/MDHistoWorkspace.cpp
+++ b/Code/Mantid/Framework/DataObjects/src/MDHistoWorkspace.cpp
@@ -1165,6 +1165,15 @@ void MDHistoWorkspace::setMDMasking(
   }
 }
 
+/**
+ * Set the masking
+ * @param index : linear index to mask
+ * @param mask : True to mask. False to clear.
+ */
+void MDHistoWorkspace::setMDMaskAt(const size_t& index, bool mask){
+    m_masks[index] = mask;
+}
+
 /// Clear any existing masking.
 void MDHistoWorkspace::clearMDMasking() {
   for (size_t i = 0; i < this->getNPoints(); ++i) {
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/TransposeMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/TransposeMD.cpp
index 55c9619e4fdf79d8ca11fea6e521563f12eb93f3..179182bfc13068add75f7bd6db99d263c31bc638 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/TransposeMD.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/TransposeMD.cpp
@@ -106,15 +106,13 @@ void TransposeMD::exec() {
   }
 
 
-  std::vector<coord_t> origin;
+  std::vector<coord_t> origin(nDimsOutput, 0.0);
   std::vector<Geometry::IMDDimension_sptr> targetGeometry;
   for (size_t i = 0; i < nDimsOutput; ++i) {
     // Clone the dimension corresponding to the axis requested.
     auto cloneDim = Geometry::IMDDimension_sptr(
         new Geometry::MDHistoDimension(inWS->getDimension(axes[i]).get()));
     targetGeometry.push_back(cloneDim);
-    // Set the same origin as we have on the input workspace
-    origin.push_back(coord_t(cloneDim->getMinimum()));
   }
 
   // Make the output workspace in the right shape.
@@ -134,8 +132,10 @@ void TransposeMD::exec() {
 
       size_t index = outWS->getLinearIndexAtCoord(&outcoords[0]);
       outWS->setSignalAt(index, inIterator->getSignal());
-      outWS->setErrorSquaredAt(index, inIterator->getError()*inIterator->getError());
-      // TODO more otherwise
+      const double error = inIterator->getError();
+      outWS->setErrorSquaredAt(index, error*error);
+      outWS->setNumEventsAt(index, inIterator->getNumEvents());
+      outWS->setMDMaskAt(index, inIterator->getIsMasked());
 
   }while(inIterator->next());