diff --git a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDBox.h b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDBox.h
index dfa3daebabb0a691c430d6a58c84b045374af0ba..76d8ec299c78babdafbab01060ad90b2ea547a38 100644
--- a/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDBox.h
+++ b/Code/Mantid/Framework/MDEvents/inc/MantidMDEvents/MDBox.h
@@ -41,9 +41,9 @@ namespace MDEvents
   public:
     MDBox();
 
-    MDBox(Mantid::API::BoxController_sptr splitter, const size_t depth = 0);
+    MDBox(Mantid::API::BoxController_sptr splitter, const size_t depth = 0,int64_t boxSize=0);
 
-    MDBox(Mantid::API::BoxController_sptr splitter, const size_t depth, const std::vector<Mantid::Geometry::MDDimensionExtents> & extentsVector);
+    MDBox(Mantid::API::BoxController_sptr splitter, const size_t depth, const std::vector<Mantid::Geometry::MDDimensionExtents> & extentsVector, int64_t boxSize=0);
 
     MDBox(const MDBox & other);
 
diff --git a/Code/Mantid/Framework/MDEvents/src/LoadMD.cpp b/Code/Mantid/Framework/MDEvents/src/LoadMD.cpp
index 967964d97d0210e9242f1bdce97dd05148cd85e5..2a91f73890829a61a6a5ccc134f028071a92539d 100644
--- a/Code/Mantid/Framework/MDEvents/src/LoadMD.cpp
+++ b/Code/Mantid/Framework/MDEvents/src/LoadMD.cpp
@@ -503,6 +503,7 @@ namespace Mantid
           if (box_type > 0)
           {
             MDBoxBase<MDE,nd> * ibox = NULL;
+            MDBox<MDE,nd> * box;
 
             // Extents of the box, as a vector
             std::vector<Mantid::Geometry::MDDimensionExtents> extentsVector(nd);
@@ -515,38 +516,40 @@ namespace Mantid
             if (box_type == 1)
             {
               // --- Make a MDBox -----
-              MDBox<MDE,nd> * box = new MDBox<MDE,nd>(bc, depth[i], extentsVector);
-              ibox = box;
-
-              if (!BoxStructureOnly)
+              if(BoxStructureOnly)
+              {
+                box = new MDBox<MDE,nd>(bc, depth[i], extentsVector,-1);
+               // Only the box structure is being loaded
+                box->setOnDisk(false);
+                box->setInMemory(true);
+                box->setFileIndex(0,0);
+              }
+              else // !BoxStructureOnly)
               {
                 // Load the events now
                 uint64_t indexStart = box_event_index[i*2];
                 uint64_t numEvents = box_event_index[i*2+1];
-                // Save the index in the file in the box data
-                box->setFileIndex(uint64_t(indexStart), uint64_t(numEvents));
 
-                if (!FileBackEnd)
-                {
-                  // Load if NOT using the file as the back-end,
-                  box->loadNexus(file);
-                  box->setOnDisk(false);
-                  box->setInMemory(true);
-                }
-                else
+                if(FileBackEnd)
                 {
+                  box = new MDBox<MDE,nd>(bc, depth[i], extentsVector,-1);
                   // Box is on disk and NOT in memory
                   box->setOnDisk(true);
                   box->setInMemory(false);
+
                 }
-              }
-              else
-              {
-                // Only the box structure is being loaded
-                box->setOnDisk(false);
-                box->setInMemory(true);
-                box->setFileIndex(0,0);
-              }
+                else
+                {
+                  box = new MDBox<MDE,nd>(bc, depth[i], extentsVector,int64_t(numEvents));
+                  // Load if NOT using the file as the back-end,
+                  box->loadNexus(file);
+                  box->setOnDisk(false);
+                  box->setInMemory(true);
+                }           
+                // Save the index in the file in the box data
+                box->setFileIndex(uint64_t(indexStart), uint64_t(numEvents));                               
+              } // ifBoxStructureOnly
+              ibox = box;
             }
             else if (box_type == 2)
             {
diff --git a/Code/Mantid/Framework/MDEvents/src/MDBox.cpp b/Code/Mantid/Framework/MDEvents/src/MDBox.cpp
index 85df81ac585011dec20cf2b774164d9a933160ec..30042d32cb11bb7ec75bb596d843b483e7495679 100644
--- a/Code/Mantid/Framework/MDEvents/src/MDBox.cpp
+++ b/Code/Mantid/Framework/MDEvents/src/MDBox.cpp
@@ -28,7 +28,7 @@ namespace MDEvents
    * @param splitter :: BoxController that controls how boxes split
    * @param depth :: splitting depth of the new box.
    */
-  TMDE(MDBox)::MDBox(BoxController_sptr splitter, const size_t depth)
+  TMDE(MDBox)::MDBox(BoxController_sptr splitter, const size_t depth,int64_t boxSize)
     : MDBoxBase<MDE, nd>(),
       m_dataBusy(false), m_dataModified(false), m_dataAdded(false),
       m_fileIndexStart(0), m_fileNumEvents(0),
@@ -40,6 +40,9 @@ namespace MDEvents
     this->m_depth = depth;
     // Give it a fresh ID from the controller.
     this->setId( splitter->getNextId() );
+    if(boxSize==0) data.reserve(splitter->getSplitThreshold()+1);
+    if(boxSize>0) data.reserve(boxSize);
+
     //data.reserve(splitter->getSplitThreshold()+1);
    }
 
@@ -49,7 +52,7 @@ namespace MDEvents
    * @param depth :: splitting depth of the new box.
    * @param extentsVector :: vector defining the extents
    */
-  TMDE(MDBox)::MDBox(BoxController_sptr splitter, const size_t depth, const std::vector<Mantid::Geometry::MDDimensionExtents> & extentsVector)
+  TMDE(MDBox)::MDBox(BoxController_sptr splitter, const size_t depth, const std::vector<Mantid::Geometry::MDDimensionExtents> & extentsVector,int64_t boxSize)
       : MDBoxBase<MDE, nd>(extentsVector),
         m_dataBusy(false), m_dataModified(false), m_dataAdded(false),
         m_fileIndexStart(0), m_fileNumEvents(0),
@@ -61,6 +64,8 @@ namespace MDEvents
     this->m_depth = depth;
     // Give it a fresh ID from the controller.
     this->setId( splitter->getNextId() );
+    if(boxSize==0) data.reserve(splitter->getSplitThreshold()+1);
+    if(boxSize>0) data.reserve(boxSize);
     //data.reserve(splitter->getSplitThreshold()+1);
   }