diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/IMDHistoWorkspace.h b/Code/Mantid/Framework/API/inc/MantidAPI/IMDHistoWorkspace.h
index 3f9dd4549f9d36ebc464abbf2d83df7f4b9635a8..9c5c55b504522f00c1ed8bf914332f7c264ece7c 100644
--- a/Code/Mantid/Framework/API/inc/MantidAPI/IMDHistoWorkspace.h
+++ b/Code/Mantid/Framework/API/inc/MantidAPI/IMDHistoWorkspace.h
@@ -96,6 +96,8 @@ public:
   virtual void setCoordinateSystem(
       const Kernel::SpecialCoordinateSystem coordinateSystem) = 0;
 
+  virtual void setDisplayNormalization(
+      const Mantid::API::MDNormalization &preferredNormalization) = 0;
 
 protected:
   /// Protected copy constructor. May be used by childs for cloning.
diff --git a/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/MDHistoWorkspace.h b/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/MDHistoWorkspace.h
index 712bc267acf31e9ed5f222e6460755334e020a1f..fe7f85112132ec008f042285c305905c866bddec 100644
--- a/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/MDHistoWorkspace.h
+++ b/Code/Mantid/Framework/DataObjects/inc/MantidDataObjects/MDHistoWorkspace.h
@@ -393,6 +393,8 @@ public:
   /// Preferred visual normalization method.
   virtual Mantid::API::MDNormalization displayNormalizationHisto() const;
 
+  virtual void setDisplayNormalization(const Mantid::API::MDNormalization& preferredNormalization);
+
 private:
   virtual MDHistoWorkspace *doClone() const {
     return new MDHistoWorkspace(*this);
diff --git a/Code/Mantid/Framework/DataObjects/src/MDHistoWorkspace.cpp b/Code/Mantid/Framework/DataObjects/src/MDHistoWorkspace.cpp
index 3cac232b35581c6f5c2d0b62221949c44e5ad924..b842deb0be1addd99c1f85e78e3c4b5ca07ef0f2 100644
--- a/Code/Mantid/Framework/DataObjects/src/MDHistoWorkspace.cpp
+++ b/Code/Mantid/Framework/DataObjects/src/MDHistoWorkspace.cpp
@@ -1247,5 +1247,9 @@ MDNormalization MDHistoWorkspace::displayNormalizationHisto() const {
   return displayNormalization();// Normalize by the number of events.
 }
 
+void MDHistoWorkspace::setDisplayNormalization(const Mantid::API::MDNormalization& preferredNormalization) {
+  m_displayNormalization = preferredNormalization;
+}
+
 } // namespace Mantid
 } // namespace DataObjects
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/BinMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/BinMD.cpp
index 233f9969e462ece5f60fa6e72cf4727e97cbad83..f914d8e5b0c3d939ef2a99dc1803fbf3ad8a9fac 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/BinMD.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/BinMD.cpp
@@ -437,6 +437,9 @@ void BinMD::exec() {
     outWS->copyExperimentInfos(*inEWS);
   }
 
+  //  Pass on the display normalization from the input workspace
+  outWS->setDisplayNormalization(m_inWS->displayNormalizationHisto());
+
   outWS->updateSum();
   // Save the output
   setProperty("OutputWorkspace", boost::dynamic_pointer_cast<Workspace>(outWS));
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/IntegrateMDHistoWorkspace.cpp b/Code/Mantid/Framework/MDAlgorithms/src/IntegrateMDHistoWorkspace.cpp
index d8b7faabba3636648d640aa24fbca08801e4e0fa..4aad8905a1516b2ab794f98520ae78e70bf426d9 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/IntegrateMDHistoWorkspace.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/IntegrateMDHistoWorkspace.cpp
@@ -353,6 +353,7 @@ void IntegrateMDHistoWorkspace::exec() {
       PARALLEL_END_INTERUPT_REGION
     }
     PARALLEL_CHECK_INTERUPT_REGION
+    outWS->setDisplayNormalization(inWS->displayNormalizationHisto());
     this->setProperty("OutputWorkspace", outWS);
   }
 }
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/MDNormDirectSC.cpp b/Code/Mantid/Framework/MDAlgorithms/src/MDNormDirectSC.cpp
index df1dcf13a34e8cef3773929f16f3cb0eeac7ef88..d4cab12b4a2f41081b5dbe6d3bd143d2608f0fa1 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/MDNormDirectSC.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/MDNormDirectSC.cpp
@@ -122,6 +122,9 @@ void MDNormDirectSC::exec() {
     g_log.warning("Binning limits are outside the limits of the MDWorkspace. "
                   "Not applying normalization.");
   }
+
+  // Set the display normalization based on the input workspace
+  outputWS->setDisplayNormalization(m_inputWS->displayNormalizationHisto());
 }
 
 /**
diff --git a/Code/Mantid/Framework/MDAlgorithms/src/SliceMD.cpp b/Code/Mantid/Framework/MDAlgorithms/src/SliceMD.cpp
index ba99b4778f9be5073d0c9c815e38566392df9de9..04cce85346c22cdbb41114dd83013bda81cc98fd 100644
--- a/Code/Mantid/Framework/MDAlgorithms/src/SliceMD.cpp
+++ b/Code/Mantid/Framework/MDAlgorithms/src/SliceMD.cpp
@@ -280,10 +280,15 @@ void SliceMD::slice(typename MDEventWorkspace<MDE, nd>::sptr ws) {
     alg->setProperty("InputWorkspace", outWS);
     alg->executeAsChildAlg();
   }
+
+  // Pass on the display normalization from the input event workspace to the output event workspace
+  IMDEventWorkspace_sptr outEvent = boost::dynamic_pointer_cast<IMDEventWorkspace>(outWS);
+  outEvent->setDisplayNormalization(ws->displayNormalization());
+  outEvent->setDisplayNormalizationHisto(ws->displayNormalizationHisto());
   // return the size of the input workspace write buffer to its initial value
   // bc->setCacheParameters(sizeof(MDE),writeBufSize);
   this->setProperty("OutputWorkspace",
-                    boost::dynamic_pointer_cast<IMDEventWorkspace>(outWS));
+                    outEvent);
   delete prog;
 }
 
diff --git a/Code/Mantid/Framework/MDAlgorithms/test/BinMDTest.h b/Code/Mantid/Framework/MDAlgorithms/test/BinMDTest.h
index 68385b6595606a0f28832fda6abc7632189186a6..9ef2827472803f9c68511b4bf255f7cdb53f087c 100644
--- a/Code/Mantid/Framework/MDAlgorithms/test/BinMDTest.h
+++ b/Code/Mantid/Framework/MDAlgorithms/test/BinMDTest.h
@@ -128,6 +128,10 @@ public:
     IMDEventWorkspace_sptr in_ws = MDEventsTestHelper::makeMDEW<3>(10, 0.0, 10.0, numEventsPerBox);
     Mantid::Kernel::SpecialCoordinateSystem appliedCoord = Mantid::Kernel::QSample;
     in_ws->setCoordinateSystem(appliedCoord);
+    auto eventNorm = Mantid::API::MDNormalization::VolumeNormalization;
+    auto histoNorm = Mantid::API::MDNormalization::NumEventsNormalization;
+    in_ws->setDisplayNormalization(eventNorm);
+    in_ws->setDisplayNormalizationHisto(histoNorm);
     AnalysisDataService::Instance().addOrReplace("BinMDTest_ws", in_ws);
     
     // 1000 boxes with 1 event each
@@ -179,7 +183,7 @@ public:
     TS_ASSERT(ctFrom);
     // Experiment Infos were copied
     TS_ASSERT_EQUALS( out->getNumExperimentInfo(), in_ws->getNumExperimentInfo());
-
+    TSM_ASSERT_EQUALS("Should have num events normalization", out->displayNormalization(), histoNorm);
     AnalysisDataService::Instance().remove("BinMDTest_ws");
   }
 
diff --git a/Code/Mantid/Framework/MDAlgorithms/test/CutMDTest.h b/Code/Mantid/Framework/MDAlgorithms/test/CutMDTest.h
index ac87a7dba8fc07a436374030e4fb46d3950c957e..1f2b761e5ff76085f480859b03fa30766bfa1726 100644
--- a/Code/Mantid/Framework/MDAlgorithms/test/CutMDTest.h
+++ b/Code/Mantid/Framework/MDAlgorithms/test/CutMDTest.h
@@ -20,12 +20,26 @@ using namespace Mantid::Kernel;
 
 namespace {
 const std::string sharedWSName = "__CutMDTest_dataWS";
+const Mantid::API::MDNormalization eventNorm = Mantid::API::MDNormalization::VolumeNormalization;
+const Mantid::API::MDNormalization histoNorm = Mantid::API::MDNormalization::NumEventsNormalization;
 }
 
 class CutMDTest : public CxxTest::TestSuite {
 private:
   IMDWorkspace_sptr m_inWS;
 
+  void addNormalization(std::string wsName) {
+    auto ws = AnalysisDataService::Instance().retrieveWS<IMDWorkspace>(wsName);
+    auto eventWS = boost::dynamic_pointer_cast<IMDEventWorkspace>(ws);
+    auto histoWS = boost::dynamic_pointer_cast<IMDHistoWorkspace>(ws);
+    if (eventWS) {
+      eventWS->setDisplayNormalization(eventNorm);
+      eventWS->setDisplayNormalizationHisto(histoNorm);
+    } else {
+      eventWS->setDisplayNormalization(histoNorm);
+    }
+  }
+
 public:
   CutMDTest() {
     FrameworkManager::Instance().exec("CreateMDWorkspace", 10,
@@ -54,6 +68,9 @@ public:
 
     m_inWS =
       AnalysisDataService::Instance().retrieveWS<IMDWorkspace>(sharedWSName);
+    auto eventWS = boost::dynamic_pointer_cast<IMDEventWorkspace>(m_inWS);
+    eventWS->setDisplayNormalization(eventNorm);
+    eventWS->setDisplayNormalizationHisto(histoNorm);
   }
 
   virtual ~CutMDTest() { AnalysisDataService::Instance().remove(sharedWSName); }
@@ -82,7 +99,6 @@ public:
     FrameworkManager::Instance().exec("SetSpecialCoordinates", 4,
         "InputWorkspace", wsName.c_str(),
         "SpecialCoordinates", "HKL");
-
     auto algCutMD = FrameworkManager::Instance().createAlgorithm("CutMD");
     algCutMD->initialize();
     algCutMD->setRethrows(true);
@@ -138,6 +154,9 @@ public:
     TS_ASSERT_EQUALS("[0, 'eta', 0]", outWS->getDimension(1)->getName());
     TS_ASSERT_EQUALS("[0, 0, 'xi']", outWS->getDimension(2)->getName());
 
+    TSM_ASSERT_EQUALS("Should have num events normalization",
+                      outWS->displayNormalizationHisto(), histoNorm);
+
     AnalysisDataService::Instance().remove(wsName);
   }
 
@@ -164,6 +183,9 @@ public:
     TS_ASSERT_DELTA(outWS->getDimension(0)->getMaximum(), 0.6, 1E-6);
     TS_ASSERT_EQUALS(outWS->getDimension(0)->getNBins(), 2);
 
+    TSM_ASSERT_EQUALS("Should have num events normalization",
+                      outWS->displayNormalizationHisto(), histoNorm);
+
     AnalysisDataService::Instance().remove(wsName);
   }
 
@@ -189,6 +211,9 @@ public:
     TS_ASSERT_EQUALS(outWS->getDimension(0)->getNBins(), 1);
     TS_ASSERT_EQUALS(outWS->getDimension(1)->getNBins(), 1);
 
+    TSM_ASSERT_EQUALS("Should have num events normalization",
+                      outWS->displayNormalizationHisto(), histoNorm);
+
     AnalysisDataService::Instance().remove(wsName);
   }
 
@@ -224,6 +249,8 @@ public:
     vRow << "v" << V3D(0,1,0) << 0.0 << "r";
     wRow << "w" << V3D(0,0,1) << 0.0 << "r";
 
+    addNormalization(wsName);
+
     auto algCutMD = FrameworkManager::Instance().createAlgorithm("CutMD");
     algCutMD->initialize();
     algCutMD->setRethrows(true);
@@ -251,6 +278,9 @@ public:
     TS_ASSERT_EQUALS("[0, 'eta', 0]", outWS->getDimension(1)->getName());
     TS_ASSERT_EQUALS("[0, 0, 'xi']", outWS->getDimension(2)->getName());
 
+    TSM_ASSERT_EQUALS("Should have num events normalization",
+                      outWS->displayNormalizationHisto(), histoNorm);
+
     AnalysisDataService::Instance().remove(wsName);
   }
 
@@ -286,6 +316,8 @@ public:
     vRow << "v" << V3D(-1,1,0) << 0.0 << "r";
     wRow << "w" << V3D(0,0,1) << 0.0 << "r";
 
+    addNormalization(wsName);
+
     auto algCutMD = FrameworkManager::Instance().createAlgorithm("CutMD");
     algCutMD->initialize();
     algCutMD->setRethrows(true);
@@ -313,6 +345,9 @@ public:
     TS_ASSERT_EQUALS("['-eta', 'eta', 0]", outWS->getDimension(1)->getName());
     TS_ASSERT_EQUALS("[0, 0, 'xi']", outWS->getDimension(2)->getName());
 
+    TSM_ASSERT_EQUALS("Should have num events normalization",
+                      outWS->displayNormalizationHisto(), histoNorm);
+
     AnalysisDataService::Instance().remove(wsName);
   }
 
@@ -348,6 +383,8 @@ public:
     vRow << "v" << V3D(0,1,0) << 0.0 << "r";
     wRow << "w" << V3D(0,0,1) << 0.0 << "r";
 
+    addNormalization(wsName);
+
     auto algCutMD = FrameworkManager::Instance().createAlgorithm("CutMD");
     algCutMD->initialize();
     algCutMD->setRethrows(true);
@@ -375,6 +412,8 @@ public:
     TS_ASSERT_EQUALS("[0, 'eta', 0]", outWS->getDimension(1)->getName());
     TS_ASSERT_EQUALS("[0, 0, 'xi']", outWS->getDimension(2)->getName());
 
+    TSM_ASSERT_EQUALS("Should have num events normalization",
+                      outWS->displayNormalizationHisto(), histoNorm);
     AnalysisDataService::Instance().remove(wsName);
   }
 
@@ -398,6 +437,8 @@ public:
         "InputWorkspace", wsName.c_str(),
         "SpecialCoordinates", "HKL");
 
+    addNormalization(wsName);
+
     auto algCutMD = FrameworkManager::Instance().createAlgorithm("CutMD");
     algCutMD->initialize();
     algCutMD->setRethrows(true);
@@ -439,6 +480,8 @@ public:
       AnalysisDataService::Instance().retrieveWS<IMDHistoWorkspace>(wsOutName);
     TS_ASSERT_EQUALS(16, outWS->getDimension(3)->getNBins());
 
+    TSM_ASSERT_EQUALS("Should have num events normalization",
+                      outWS->displayNormalizationHisto(), histoNorm);
     AnalysisDataService::Instance().remove(wsName);
     AnalysisDataService::Instance().remove(wsOutName);
   }
diff --git a/Code/Mantid/Framework/MDAlgorithms/test/IntegrateMDHistoWorkspaceTest.h b/Code/Mantid/Framework/MDAlgorithms/test/IntegrateMDHistoWorkspaceTest.h
index 54ad6af8eea1365dde91df51054c36150082432f..b15eacf5f4194490f8980f19d92fe0ecee5e40ba 100644
--- a/Code/Mantid/Framework/MDAlgorithms/test/IntegrateMDHistoWorkspaceTest.h
+++ b/Code/Mantid/Framework/MDAlgorithms/test/IntegrateMDHistoWorkspaceTest.h
@@ -112,7 +112,8 @@ public:
   {
     using namespace Mantid::DataObjects;
     MDHistoWorkspace_sptr ws = MDEventsTestHelper::makeFakeMDHistoWorkspace(1.0, 1 /*nd*/, 10);
-
+    auto histNorm = Mantid::API::MDNormalization::NumEventsNormalization;
+    ws->setDisplayNormalization(histNorm);
     IntegrateMDHistoWorkspace alg;
     alg.setChild(true);
     alg.setRethrows(true);
@@ -127,6 +128,7 @@ public:
     TS_ASSERT_EQUALS(outWS->getNumDims(), ws->getNumDims());
     TS_ASSERT_EQUALS(outWS->getSignalAt(0), ws->getSignalAt(0));
     TS_ASSERT_EQUALS(outWS->getSignalAt(1), ws->getSignalAt(1));
+    TSM_ASSERT_EQUALS("Should have a num events normalization", outWS->displayNormalization(), histNorm);
   }
 
   void test_1D_integration_exact_binning()
@@ -147,6 +149,8 @@ public:
 
       using namespace Mantid::DataObjects;
       MDHistoWorkspace_sptr ws = MDEventsTestHelper::makeFakeMDHistoWorkspace(1.0 /*signal*/, 1 /*nd*/, 10 /*nbins*/, 10 /*max*/, 1.0 /*error sq*/);
+      auto histNorm = Mantid::API::MDNormalization::NumEventsNormalization;
+      ws->setDisplayNormalization(histNorm);
 
       IntegrateMDHistoWorkspace alg;
       alg.setChild(true);
@@ -169,6 +173,7 @@ public:
       // Check the data.
       TSM_ASSERT_DELTA("Wrong integrated value", 5.0, outWS->getSignalAt(0), 1e-4);
       TSM_ASSERT_DELTA("Wrong error value", std::sqrt(5 * (ws->getErrorAt(0) * ws->getErrorAt(0))), outWS->getErrorAt(0), 1e-4);
+      TSM_ASSERT_EQUALS("Should have a num events normalization", outWS->displayNormalization(), histNorm);
   }
 
 
diff --git a/Code/Mantid/Framework/MDAlgorithms/test/MDNormDirectSCTest.h b/Code/Mantid/Framework/MDAlgorithms/test/MDNormDirectSCTest.h
index 2af9465dfc8b848414b47287eb1715fc9701f934..02e65af99359af41cf90670eb1b020473d9056e5 100644
--- a/Code/Mantid/Framework/MDAlgorithms/test/MDNormDirectSCTest.h
+++ b/Code/Mantid/Framework/MDAlgorithms/test/MDNormDirectSCTest.h
@@ -20,7 +20,6 @@ public:
   static MDNormDirectSCTest *createSuite() { return new MDNormDirectSCTest(); }
   static void destroySuite( MDNormDirectSCTest *suite ) { delete suite; }
 
-
   void test_Init()
   {
     MDNormDirectSC alg;
diff --git a/Code/Mantid/Framework/MDAlgorithms/test/SliceMDTest.h b/Code/Mantid/Framework/MDAlgorithms/test/SliceMDTest.h
index 686d1d946cca71cc33101472628ad5e434b4e526..c095dedf71e103d0c8539da3cffe880e3259eddc 100644
--- a/Code/Mantid/Framework/MDAlgorithms/test/SliceMDTest.h
+++ b/Code/Mantid/Framework/MDAlgorithms/test/SliceMDTest.h
@@ -36,6 +36,10 @@ private:
     alg.initialize();
 
     IMDEventWorkspace_sptr in_ws = MDEventsTestHelper::makeAnyMDEW<MDEvent<3>,3>(10, 0.0, 10.0, 1);
+    auto eventNorm = Mantid::API::MDNormalization::VolumeNormalization;
+    auto histoNorm = Mantid::API::MDNormalization::NumEventsNormalization;
+    in_ws->setDisplayNormalization(eventNorm);
+    in_ws->setDisplayNormalizationHisto(histoNorm);
     AnalysisDataService::Instance().addOrReplace("SliceMDTest_ws", in_ws);
 
     alg.setPropertyValue("InputWorkspace", "SliceMDTest_ws");
@@ -66,7 +70,10 @@ private:
       TSM_ASSERT_EQUALS("MaxRecusionDepth property should be enabled", true,  p->getSettings()->isEnabled(&alg));
       TSM_ASSERT_EQUALS("Should have passed the maxium depth onto the ouput workspace from the input workspace.", size_t(maxDepth), out->getBoxController()->getMaxDepth());
     }
-    
+
+    TSM_ASSERT_EQUALS("Should show volume normalization", out->displayNormalization(), eventNorm);
+    TSM_ASSERT_EQUALS("Should show num event normalization", out->displayNormalizationHisto(), histoNorm);
+
     //Clean up test objects
     AnalysisDataService::Instance().remove("SliceMDTest_ws");
     AnalysisDataService::Instance().remove("SliceMDTest_outWS");