diff --git a/Code/Mantid/Vates/VisitDataBases/inc/VisitDataBases/avtMDFileReaderFileFormat.h b/Code/Mantid/Vates/VisitDataBases/inc/VisitDataBases/avtMDFileReaderFileFormat.h
index 975babc6f2e89c9e010fa0daa017fbe6003a5601..30faee2f12503b65039a65bdde88ab2667d5d070 100644
--- a/Code/Mantid/Vates/VisitDataBases/inc/VisitDataBases/avtMDFileReaderFileFormat.h
+++ b/Code/Mantid/Vates/VisitDataBases/inc/VisitDataBases/avtMDFileReaderFileFormat.h
@@ -83,6 +83,11 @@ class avtMDFileReaderFileFormat : public avtMTSDFileFormat
     //
 
     virtual int            GetNTimesteps(void);
+    virtual void GetCycles(std::vector<int> &cycles);
+    virtual void GetTimes(std::vector<double> &times);
+
+    virtual bool      ReturnsValidCycle() const;
+    virtual bool      ReturnsValidTime() const;
 
     virtual const char    *GetType(void)   { return "MDFileReader"; };
     virtual void           FreeUpResources(void); 
diff --git a/Code/Mantid/Vates/VisitDataBases/src/avtMDFileReaderFileFormat.C b/Code/Mantid/Vates/VisitDataBases/src/avtMDFileReaderFileFormat.C
index 87ca35c71e205b548596ceac4de0fc49fb3c737b..527e634e3a71720863ed0b979e3e201d92af3fe8 100644
--- a/Code/Mantid/Vates/VisitDataBases/src/avtMDFileReaderFileFormat.C
+++ b/Code/Mantid/Vates/VisitDataBases/src/avtMDFileReaderFileFormat.C
@@ -92,6 +92,28 @@ avtMDFileReaderFileFormat::GetNTimesteps(void)
     return m_executor.getNumberOfTimesteps();
 }
 
+void avtMDFileReaderFileFormat::GetCycles(std::vector<int> &cycles)
+{
+   std::vector<int> allCycles = m_executor.getCycles();
+   cycles.swap(allCycles);
+}
+
+void avtMDFileReaderFileFormat::GetTimes(std::vector<double> &times)
+{
+  std::vector<double> allTimes = m_executor.getTimesteps();
+  times.swap(allTimes);
+}
+
+bool avtMDFileReaderFileFormat::ReturnsValidCycle() const
+{
+  return true;
+}
+
+bool avtMDFileReaderFileFormat::ReturnsValidTime() const
+{
+  return true;
+}
+
 
 // ****************************************************************************
 //  Method: avtMDFileReaderFileFormat::FreeUpResources
diff --git a/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/MultiDimensionalDbPresenter.h b/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/MultiDimensionalDbPresenter.h
index 939e13f08d7684edb45b0cf3cc09d2233ebe9f7a..b1025d5a88d31dc476b53a8c11b35ad4040dc1a6 100644
--- a/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/MultiDimensionalDbPresenter.h
+++ b/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/MultiDimensionalDbPresenter.h
@@ -69,6 +69,12 @@ public:
   /// Gets the number of timesteps in the workspace.
   int getNumberOfTimesteps() const;
 
+  /// Get the actual timestep values to use.
+  std::vector<double> getTimesteps() const;
+
+  /// Get the actual cycle values to use.
+  std::vector<int> getCycles() const;
+
   /// Get x axis name so that it may be applied to labels.
   std::string getXAxisName() const;
 
diff --git a/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/vtkStructuredGridFactory.h b/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/vtkStructuredGridFactory.h
index f540541c1826c011071da15df654a6e093632260..5e3fe3293a7351874a7786c0660d524bab83f258 100644
--- a/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/vtkStructuredGridFactory.h
+++ b/Code/Mantid/Vates/VisitPresenters/inc/MantidVisitPresenters/vtkStructuredGridFactory.h
@@ -106,7 +106,7 @@ vtkStructuredGridFactory<Image> & vtkStructuredGridFactory<Image>::operator=(con
 
 
 template<typename Image>
-vtkStructuredGridFactory<Image>::vtkStructuredGridFactory(boost::shared_ptr<Image> image) : m_scalarName(""), m_timestep(0), m_image(image), m_meshOnly(true)
+vtkStructuredGridFactory<Image>::vtkStructuredGridFactory(boost::shared_ptr<Image> image) : m_image(image), m_scalarName(""), m_timestep(0),  m_meshOnly(true)
 {
 }
 
diff --git a/Code/Mantid/Vates/VisitPresenters/src/MultiDimensionalDbPresenter.cpp b/Code/Mantid/Vates/VisitPresenters/src/MultiDimensionalDbPresenter.cpp
index 2ddec6dddde8665e3f567c8ec1225af8eb2c6572..49916853baf2fbfddfed961d9befb59218e3a8f2 100644
--- a/Code/Mantid/Vates/VisitPresenters/src/MultiDimensionalDbPresenter.cpp
+++ b/Code/Mantid/Vates/VisitPresenters/src/MultiDimensionalDbPresenter.cpp
@@ -112,6 +112,31 @@ int MultiDimensionalDbPresenter::getNumberOfTimesteps() const
   return m_MDWorkspace->gettDimension()->getNBins();
 }
 
+std::vector<int> MultiDimensionalDbPresenter::getCycles() const
+{
+  verifyExecution();
+  std::vector<int> cycles(m_MDWorkspace->gettDimension()->getNBins());
+  for(unsigned int i=0; i < cycles.size(); i++)
+    {
+      cycles[i] = i;
+    }
+  return cycles;
+}
+
+std::vector<double> MultiDimensionalDbPresenter::getTimesteps() const
+{
+  using namespace Mantid::Geometry;
+  verifyExecution();
+  boost::shared_ptr<const IMDDimension> tDimension = m_MDWorkspace->gettDimension();
+  const double increment = (tDimension->getMaximum() - tDimension->getMinimum())/tDimension->getNBins();
+  std::vector<double> times(tDimension->getNBins());
+  for(unsigned int i=0; i < tDimension->getNBins(); i++)
+  {
+    times[i] = tDimension->getMinimum() + (i*increment);
+  }
+  return times;
+}
+
 vtkDataArray* MultiDimensionalDbPresenter::getScalarData(int timeBin, const char* scalarName) const
 {
   using namespace Mantid::MDDataObjects;
diff --git a/Code/Mantid/Vates/VisitPresenters/test/MultiDimensionalDbPresenterTest.h b/Code/Mantid/Vates/VisitPresenters/test/MultiDimensionalDbPresenterTest.h
index b958b66c357241b5c7c975c544950e3f1b10f95b..59a917b004a537375cb80138b4575bcd6f56c0f7 100644
--- a/Code/Mantid/Vates/VisitPresenters/test/MultiDimensionalDbPresenterTest.h
+++ b/Code/Mantid/Vates/VisitPresenters/test/MultiDimensionalDbPresenterTest.h
@@ -12,13 +12,17 @@ using namespace Mantid::VATES;
 class MultiDimensionalDbPresenterTest : public CxxTest::TestSuite
 {
 
+private:
+
+  static std::string getTestFileName(){return "fe_demo_30.sqw";}
+
 public:
 
 //Simple schenario testing end-to-end working of this presenter.
 void testConstruction()
 {
   MultiDimensionalDbPresenter mdPresenter;
-  mdPresenter.execute("fe_demo_30.sqw");
+  mdPresenter.execute(getTestFileName());
 
   vtkDataArray* data = mdPresenter.getScalarData(1, "signal");
   vtkDataSet* visData = mdPresenter.getMesh();
@@ -29,6 +33,22 @@ void testConstruction()
   visData->Delete();
 }
 
+void testGetCycles()
+{
+  MultiDimensionalDbPresenter mdPresenter;
+  mdPresenter.execute(getTestFileName());
+  std::vector<int> vecCycles = mdPresenter.getCycles();
+  TSM_ASSERT_EQUALS("Wrong number of cycles in cycles collection.", vecCycles.size(), mdPresenter.getNumberOfTimesteps());
+}
+
+void testGetTimesteps()
+{
+  MultiDimensionalDbPresenter mdPresenter;
+  mdPresenter.execute(getTestFileName());
+  std::vector<double> vecTimes = mdPresenter.getTimesteps();
+  TSM_ASSERT_EQUALS("Wrong number of times in times collection.", vecTimes.size(), mdPresenter.getNumberOfTimesteps());
+}
+
 void testGetScalarDataThrows()
 {
   MultiDimensionalDbPresenter mdPresenter;
@@ -53,7 +73,28 @@ void testGetNumberOfTimestepsThrows()
 
   //No execution call. Test that type cannot be used improperly.
 
-  TSM_ASSERT_THROWS("Accessing mesh data without first calling execute should not be possible", mdPresenter.getNumberOfTimesteps(), std::runtime_error);
+  TSM_ASSERT_THROWS("Accessing timestep number data without first calling execute should not be possible", mdPresenter.getNumberOfTimesteps(), std::runtime_error);
+}
+
+void testGetCylesThrows()
+{
+  MultiDimensionalDbPresenter mdPresenter;
+
+  //No execution call. Test that type cannot be used improperly.
+
+  TSM_ASSERT_THROWS("Accessing cycles data without first calling execute should not be possible", mdPresenter.getCycles(), std::runtime_error);
+
+}
+
+void testGetTimestepsThrows()
+{
+
+  MultiDimensionalDbPresenter mdPresenter;
+
+  //No execution call. Test that type cannot be used improperly.
+
+  TSM_ASSERT_THROWS("Accessing timestep data without first calling execute should not be possible", mdPresenter.getTimesteps(), std::runtime_error);
+
 }