diff --git a/Code/Mantid/Framework/MDAlgorithms/test/LoadMDTest.h b/Code/Mantid/Framework/MDAlgorithms/test/LoadMDTest.h
index 1cc01836a3ba52470931df74810372a42e4b1410..855a1f310dda00fdbb340352138cefea008bfce8 100644
--- a/Code/Mantid/Framework/MDAlgorithms/test/LoadMDTest.h
+++ b/Code/Mantid/Framework/MDAlgorithms/test/LoadMDTest.h
@@ -515,6 +515,46 @@ public:
     doTestHisto(ws);
   }
 
+  /// More of an integration test as it uses both load and save.
+  void test_save_and_load_special_coordinates()
+  {
+    MDEventWorkspace1Lean::sptr ws = MDEventsTestHelper::makeMDEW<1>(10, 0.0, 10.0, 2);
+    // Set the special coordinate system
+    const SpecialCoordinateSystem appliedCoordinateSystem = QSample;
+    ws->setCoordinateSystem(appliedCoordinateSystem);
+
+    const std::string inputWSName = "SaveMDSpecialCoordinatesTest";
+    const std::string fileName = inputWSName + ".nxs";
+    AnalysisDataService::Instance().addOrReplace(inputWSName, ws);
+
+    SaveMD saveAlg;
+    saveAlg.initialize();
+    saveAlg.isInitialized();
+    saveAlg.setPropertyValue("InputWorkspace", inputWSName);
+    saveAlg.setPropertyValue("Filename", fileName);
+    saveAlg.execute();
+    TS_ASSERT( saveAlg.isExecuted() );
+
+    LoadMD loadAlg;
+    loadAlg.initialize();
+    loadAlg.isInitialized();
+    loadAlg.setPropertyValue("Filename", fileName);
+    loadAlg.setProperty("FileBackEnd", false);
+    loadAlg.setPropertyValue("OutputWorkspace", "reloaded_again");
+    loadAlg.execute(); 
+    TS_ASSERT( loadAlg.isExecuted() );
+
+    // Check that the special coordinate system is the same before the save-load cycle.
+    TS_ASSERT_EQUALS(appliedCoordinateSystem, ws->getSpecialCoordinateSystem());
+
+    if (Poco::File(fileName).exists())
+    {
+      Poco::File(fileName).remove();
+    }
+    AnalysisDataService::Instance().remove(inputWSName);
+    AnalysisDataService::Instance().remove("OutputWorkspace");
+  }
+
 };
 
 #endif /* MANTID_MDEVENTS_LOADMDEWTEST_H_ */
diff --git a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDEventWorkspace.h b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDEventWorkspace.h
index c6e4ffdc1cd556816c1b9bd093417c7ce29d9b34..a394ac5c4d9a3938071769d8e8bec6be668e3189 100644
--- a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDEventWorkspace.h
+++ b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDEventWorkspace.h
@@ -146,10 +146,7 @@ namespace MDEvents
     void clearMDMasking();
 
      /// Get the special coordinate system.
-    virtual Mantid::API::SpecialCoordinateSystem getSpecialCoordinateSystem() const
-    {
-      return m_coordinateSystem;
-    }
+    virtual Mantid::API::SpecialCoordinateSystem getSpecialCoordinateSystem() const;
 
     /// Set the special coordinate system.
     void setCoordinateSystem(const Mantid::API::SpecialCoordinateSystem coordinateSystem);
@@ -164,9 +161,6 @@ namespace MDEvents
     boost::shared_ptr<BoxCtrlChangesList<MDBoxToChange<MDE,nd> > > m_BoxController;
   private:
 
-    /// The special coordinate system of the workspace.
-    Mantid::API::SpecialCoordinateSystem m_coordinateSystem;
-
   public:
     /// Typedef for a shared pointer of this kind of event workspace
     typedef boost::shared_ptr<MDEventWorkspace<MDE, nd> > sptr;
diff --git a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDHistoWorkspace.h b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDHistoWorkspace.h
index 7a69c69410b99b0e97aeb94f475ba05d01d9dcfe..14e9bc6773c9e208b745f97ea1b2ca339dd8c2fa 100644
--- a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDHistoWorkspace.h
+++ b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDHistoWorkspace.h
@@ -162,10 +162,7 @@ namespace MDEvents
     }
 
     /// Get the special coordinate system.
-    virtual Mantid::API::SpecialCoordinateSystem getSpecialCoordinateSystem() const
-    {
-      return m_coordinateSystem;
-    }
+    virtual Mantid::API::SpecialCoordinateSystem getSpecialCoordinateSystem() const;
 
     /// Set the special coordinate system.
     void setCoordinateSystem(const Mantid::API::SpecialCoordinateSystem coordinateSystem);
diff --git a/Code/Mantid/Framework/MDEvents/src/MDEventWorkspace.cpp b/Code/Mantid/Framework/MDEvents/src/MDEventWorkspace.cpp
index a0688f9aed862e12059a2232e210bd7fc8507d2b..f61dea4afd84f202211d123bfd17c2b572da88fa 100644
--- a/Code/Mantid/Framework/MDEvents/src/MDEventWorkspace.cpp
+++ b/Code/Mantid/Framework/MDEvents/src/MDEventWorkspace.cpp
@@ -20,6 +20,7 @@
 #include <algorithm>
 #include "MantidMDEvents/MDBoxIterator.h"
 #include "MantidKernel/Memory.h"
+#include "MantidKernel/Exception.h"
 
 using namespace Mantid;
 using namespace Mantid::Kernel;
@@ -38,8 +39,7 @@ namespace MDEvents
   TMDE(
   MDEventWorkspace)::MDEventWorkspace()
     //m_BoxController(boost::make_shared<BoxController>(nd))
-  : m_BoxController(boost::make_shared<BoxCtrlChangesList<MDBoxToChange<MDE,nd> > >(nd)),
-  m_coordinateSystem(Mantid::API::None)
+  : m_BoxController(boost::make_shared<BoxCtrlChangesList<MDBoxToChange<MDE,nd> > >(nd))
   {
     // First box is at depth 0, and has this default boxController
     data = new MDBox<MDE, nd>(m_BoxController, 0);
@@ -819,10 +819,41 @@ namespace MDEvents
   Set the special coordinate system (if any) to use.
   @param coordinateSystem : Special coordinate system to use.
   */
-    TMDE(
-      void MDEventWorkspace)::setCoordinateSystem(const Mantid::API::SpecialCoordinateSystem coordinateSystem)
+  TMDE(
+    void MDEventWorkspace)::setCoordinateSystem(const Mantid::API::SpecialCoordinateSystem coordinateSystem)
   {
-    m_coordinateSystem = coordinateSystem;
+    // If there isn't an experiment info, create one.
+    if(this->getNumExperimentInfo() == 0)
+    {
+      ExperimentInfo_sptr expInfo = boost::shared_ptr<ExperimentInfo>(new ExperimentInfo());
+      this->addExperimentInfo(expInfo);
+    }
+    this->getExperimentInfo(0)->mutableRun().addProperty("CoordinateSystem", (int)coordinateSystem, true);
+  }
+
+  /**
+  Get the special coordinate system (if any) to use.
+  @return Special coordinate system if any.
+  */
+  TMDE(
+    Mantid::API::SpecialCoordinateSystem MDEventWorkspace)::getSpecialCoordinateSystem() const
+  {
+    Mantid::API::SpecialCoordinateSystem result = None;
+    try
+    {
+      auto nInfos = this->getNumExperimentInfo();
+      if(nInfos > 0)
+      {
+        Property* prop = this->getExperimentInfo(0)->run().getProperty("CoordinateSystem");
+        PropertyWithValue<int>* p = dynamic_cast<PropertyWithValue<int>* >(prop);
+        int temp = *p;
+        result = (SpecialCoordinateSystem)temp;
+      }
+    }
+    catch(Mantid::Kernel::Exception::NotFoundError&)
+    {
+    }
+    return result;
   }
 
 }//namespace MDEvents
diff --git a/Code/Mantid/Framework/MDEvents/src/MDHistoWorkspace.cpp b/Code/Mantid/Framework/MDEvents/src/MDHistoWorkspace.cpp
index bd21c36c419ecbb06637c243b0d437c1c8799396..2ae9b6b5a059585e8b29f8d8a6aded0bc21c32eb 100644
--- a/Code/Mantid/Framework/MDEvents/src/MDHistoWorkspace.cpp
+++ b/Code/Mantid/Framework/MDEvents/src/MDHistoWorkspace.cpp
@@ -31,8 +31,7 @@ namespace MDEvents
       Mantid::Geometry::MDHistoDimension_sptr dimZ, Mantid::Geometry::MDHistoDimension_sptr dimT)
   : IMDHistoWorkspace(),
     numDimensions(0),
-    m_nEventsContributed(std::numeric_limits<uint64_t>::quiet_NaN()),
-    m_coordinateSystem(None)
+    m_nEventsContributed(std::numeric_limits<uint64_t>::quiet_NaN())
   {
     std::vector<Mantid::Geometry::MDHistoDimension_sptr> dimensions;
     if (dimX) dimensions.push_back(dimX);
@@ -1264,9 +1263,38 @@ namespace MDEvents
   Set the special coordinate system (if any) to use.
   @param coordinateSystem : Special coordinate system to use.
   */
-  void MDHistoWorkspace::setCoordinateSystem(const Mantid::API::SpecialCoordinateSystem coordinateSystem)
+    void MDHistoWorkspace::setCoordinateSystem(const Mantid::API::SpecialCoordinateSystem coordinateSystem)
+  {
+    // If there isn't an experiment info, create one.
+    if(this->getNumExperimentInfo() == 0)
+    {
+      ExperimentInfo_sptr expInfo = boost::shared_ptr<ExperimentInfo>(new ExperimentInfo());
+      this->addExperimentInfo(expInfo);
+    }
+    this->getExperimentInfo(0)->mutableRun().addProperty("CoordinateSystem", (int)coordinateSystem, true);
+  }
+
+  /**
+  Get the special coordinate system (if any) to use.
+  */
+  Mantid::API::SpecialCoordinateSystem MDHistoWorkspace::getSpecialCoordinateSystem() const
   {
-    m_coordinateSystem = coordinateSystem;
+    Mantid::API::SpecialCoordinateSystem result = None;
+    try
+    {
+      auto nInfos = this->getNumExperimentInfo();
+      if(nInfos > 0)
+      {
+        Property* prop = this->getExperimentInfo(0)->run().getProperty("CoordinateSystem");
+        PropertyWithValue<int>* p = dynamic_cast<PropertyWithValue<int>* >(prop);
+        int temp = *p;
+        result = (SpecialCoordinateSystem)temp;
+      }
+    }
+    catch(Mantid::Kernel::Exception::NotFoundError&)
+    {
+    }
+    return result;
   }
 
 } // namespace Mantid
diff --git a/Code/Mantid/Framework/MDEvents/test/MDEventWorkspaceTest.h b/Code/Mantid/Framework/MDEvents/test/MDEventWorkspaceTest.h
index 4640228740f121574f60fe67f46567c7674652c4..7c3e9ac8619fcfd437abd8ea3dc2af5eeea2b7b9 100644
--- a/Code/Mantid/Framework/MDEvents/test/MDEventWorkspaceTest.h
+++ b/Code/Mantid/Framework/MDEvents/test/MDEventWorkspaceTest.h
@@ -593,7 +593,7 @@ public:
 
   void test_getSpecialCoordinateSystem_default()
   {
-     MDEventWorkspace1Lean::sptr ws = MDEventsTestHelper::makeMDEW<1>(10, 0.0, 10.0, 1 /*event per box*/);
+    MDEventWorkspace1Lean::sptr ws = MDEventsTestHelper::makeMDEW<1>(10, 0.0, 10.0, 1 /*event per box*/);
     TSM_ASSERT_EQUALS("Should default to no special coordinate system.", Mantid::API::None, ws->getSpecialCoordinateSystem());
   }
 
diff --git a/Code/Mantid/Framework/MDEvents/test/MDHistoWorkspaceTest.h b/Code/Mantid/Framework/MDEvents/test/MDHistoWorkspaceTest.h
index 21b8b93f2003c8cd5d77143d6eefe5e2ac1607ac..1c2352f8bb764bc959acd0732c53114be8903866 100644
--- a/Code/Mantid/Framework/MDEvents/test/MDHistoWorkspaceTest.h
+++ b/Code/Mantid/Framework/MDEvents/test/MDHistoWorkspaceTest.h
@@ -964,6 +964,10 @@ public:
     TS_ASSERT_EQUALS(Mantid::API::QLab, ws->getSpecialCoordinateSystem());
   }
 
+
+
+
+
 };