diff --git a/Code/Mantid/Framework/API/inc/MantidAPI/IDataFileChecker.h b/Code/Mantid/Framework/API/inc/MantidAPI/IDataFileChecker.h
index bf575b401e3c3901e3dce594c6fe0ddd247212cb..76ec84ebaa3157206c018a9383c1b2cc8f07db36 100644
--- a/Code/Mantid/Framework/API/inc/MantidAPI/IDataFileChecker.h
+++ b/Code/Mantid/Framework/API/inc/MantidAPI/IDataFileChecker.h
@@ -1,14 +1,9 @@
 #ifndef MANTID_API_IDATAFILECHECKER_H
 #define MANTID_API_IDATAFILECHECKER_H
 
+#include "MantidAPI/DllExport.h"
 #include "MantidAPI/Algorithm.h"
 
-#ifdef WIN32
-static const unsigned char g_hdf5_signature[] = { '\211', 'H', 'D', 'F', '\r', '\n', '\032', '\n' };
-/// Magic HDF5 cookie that is stored in the first 4 bytes of the file.
-static const uint32_t g_hdf5_cookie = 0x0e031301;
-#endif
-
 namespace Mantid
 {
   namespace API
@@ -43,7 +38,7 @@ namespace Mantid
     File change history is stored at: <https://svn.mantidproject.org/mantid/trunk/Code/Mantid>
     Code Documentation is available at: <http://doxygen.mantidproject.org>    
     */
-    class DLLExport IDataFileChecker : public Algorithm
+    class EXPORT_OPT_MANTID_API IDataFileChecker : public Algorithm
     {
     public:
       ///constructor
@@ -51,12 +46,11 @@ namespace Mantid
       /// virtual destructor
       virtual ~IDataFileChecker();
 
-#ifndef WIN32
       /// Magic signature identifying a HDF5 file.
-      static unsigned char const g_hdf5_signature[8];
+      static const unsigned char g_hdf5_signature[8];
       /// Magic HDF5 cookie that is stored in the first 4 bytes of the file.
-      static uint32_t const g_hdf5_cookie;
-#endif
+      static const uint32_t g_hdf5_cookie;
+
       /// The default number of bytes of the header to check
       enum { g_hdr_bytes = 100 };
 
diff --git a/Code/Mantid/Framework/API/src/IDataFileChecker.cpp b/Code/Mantid/Framework/API/src/IDataFileChecker.cpp
index f5b7f96d27beea7790ac709f2a7a59948d52d818..90797e1098ed647489bbc12a119b1b7ef7cbe5ea 100644
--- a/Code/Mantid/Framework/API/src/IDataFileChecker.cpp
+++ b/Code/Mantid/Framework/API/src/IDataFileChecker.cpp
@@ -7,12 +7,11 @@ namespace Mantid
 {
   namespace API
   {
-#ifndef WIN32
+
     // Magic HDF5 signature
-    unsigned char const IDataFileChecker::g_hdf5_signature[8] = { '\211', 'H', 'D', 'F', '\r', '\n', '\032', '\n' };
+    const unsigned char IDataFileChecker::g_hdf5_signature[8] = { '\211', 'H', 'D', 'F', '\r', '\n', '\032', '\n' };
     /// Magic HDF5 cookie that is stored in the first 4 bytes of the file.
-    uint32_t const IDataFileChecker::g_hdf5_cookie = 0x0e031301;
-#endif
+    const uint32_t IDataFileChecker::g_hdf5_cookie = 0x0e031301;
 
     /// constructor
     IDataFileChecker::IDataFileChecker():API::Algorithm()
diff --git a/Code/Mantid/Framework/DataHandling/src/Load.cpp b/Code/Mantid/Framework/DataHandling/src/Load.cpp
index b73b89880be685de9f8237a3e0c073da22df7ca8..2da25174f9ed49a1d4ffea72d995370a3e97a194 100644
--- a/Code/Mantid/Framework/DataHandling/src/Load.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/Load.cpp
@@ -25,11 +25,11 @@ namespace Mantid
     }
 
     /**
-     * Quick file always returns false here
-     * @param filePath File path
-     * @param nread Number of bytes read
-     * @param header_buffer A buffer containing the nread bytes
-     */
+    * Quick file always returns false here
+    * @param filePath File path
+    * @param nread Number of bytes read
+    * @param header_buffer A buffer containing the nread bytes
+    */
     bool Load::quickFileCheck(const std::string& filePath,size_t nread,const file_header& header)
     {
       (void)filePath; (void)nread; (void)header;
@@ -37,10 +37,10 @@ namespace Mantid
     }
 
     /**
-     * File check by looking at the structure of the data file
-     * @param filePath The full file path
-     * @returns -1
-     */
+    * File check by looking at the structure of the data file
+    * @param filePath The full file path
+    * @returns -1
+    */
     int Load::fileCheck(const std::string& filePath)
     {
       (void)filePath;
@@ -50,7 +50,7 @@ namespace Mantid
     /// Initialisation method.
     void Load::init()
     {
-      
+
       std::vector<std::string> exts;
       exts.push_back(".raw");
       exts.push_back(".s*");
@@ -66,51 +66,58 @@ namespace Mantid
       exts.push_back(".csv");
 
       exts.push_back(".spe");
-   
+
       declareProperty(new FileProperty("Filename", "", FileProperty::Load, exts),
-		      "The name of the file to read, including its full or relative\n"
-		      "path. (N.B. case sensitive if running on Linux).");
+        "The name of the file to read, including its full or relative\n"
+        "path. (N.B. case sensitive if running on Linux).");
       declareProperty(new WorkspaceProperty<Workspace>("OutputWorkspace", "",Direction::Output, true), 
-		      "The name of the workspace that will be created, filled with the\n"
-		      "read-in data and stored in the Analysis Data Service.");
+        "The name of the workspace that will be created, filled with the\n"
+        "read-in data and stored in the Analysis Data Service.");
+      BoundedValidator<int> *mustBePositive = new BoundedValidator<int>();
+      mustBePositive->setLower(1);
+      declareProperty("SpectrumMin", 1, mustBePositive);
+      declareProperty("SpectrumMax", EMPTY_INT(), mustBePositive->clone());
+      declareProperty(new ArrayProperty<int>("SpectrumList"));
+      declareProperty("EntryNumber", 0, 
+        "Load a particular entry, if supported by the file format (default: Load all entries)");
       declareProperty("FindLoader", false, "If true the algorithm will only be run as\n"
- 		      "far as is necessary to discover the concrete Load algorithm to use");
+        "far as is necessary to discover the concrete Load algorithm to use");
       declareProperty("LoaderName", std::string(""), "A string containing the name of the concrete loader used", 
- 		      Direction::Output);
+        Direction::Output);
     }
 
     namespace 
     {
       //@cond
       /** 
-       * Checks this property exists in the list of algorithm properties.
-       */
+      * Checks this property exists in the list of algorithm properties.
+      */
       struct hasProperty
       { 
-	/** constructor which takes 1 arguement.
-	 *@param name :: name of the property
-	 */
-	hasProperty(const std::string name):m_name(name){}
-	
-	/**This method comapres teh property name
-	 *@param prop :: shared pointer to property
-	 *@return true if the property exists in the list of properties.
-	 */
-	bool operator()(Mantid::Kernel::Property* prop)
-	{
-	  std::string name=prop->name();
-	  return (!name.compare(m_name));
-	}
-	/// name of teh property
-	std::string m_name;
+        /** constructor which takes 1 arguement.
+        *@param name :: name of the property
+        */
+        hasProperty(const std::string name):m_name(name){}
+
+        /**This method comapres teh property name
+        *@param prop :: shared pointer to property
+        *@return true if the property exists in the list of properties.
+        */
+        bool operator()(Mantid::Kernel::Property* prop)
+        {
+          std::string name=prop->name();
+          return (!name.compare(m_name));
+        }
+        /// name of teh property
+        std::string m_name;
       };
 
       //@endcond
     }
 
     /** 
-     *   Executes the algorithm.
-     */
+    *   Executes the algorithm.
+    */
     void Load::exec()
     {
       std::string fileName = getPropertyValue("Filename");
@@ -125,36 +132,36 @@ namespace Mantid
       }
       else
       {
-	setPropertyValue("LoaderName", loader->name());
+        setPropertyValue("LoaderName", loader->name());
       }
-      
+
       bool findOnly = getProperty("FindLoader");
       if( findOnly ) return;
 
       g_log.information()<<"The sub load algorithm  created to execute is "
-			 << loader->name() << "  and it version is  " 
-			 << loader->version() <<std::endl;
+        << loader->name() << "  and it version is  " 
+        << loader->version() <<std::endl;
       double startProgress(0.0), endProgress(1.0);
       initialiseLoadSubAlgorithm(loader,startProgress,endProgress,true,-1);
-  
+
       //get the list of properties for this algorithm
       std::vector<Kernel::Property*> props=getProperties();
       ///get the list properties for the sub load algorithm
       std::vector<Kernel::Property*>loader_props=loader->getProperties();
-      
+
       //loop through the properties of this algorithm 
       std::vector<Kernel::Property*>::iterator itr;
       for (itr=props.begin();itr!=props.end();++itr)
       {        
-	std::vector<Mantid::Kernel::Property*>::iterator prop;
-	//if  the load sub algorithm has the same property then set it.
-	prop=std::find_if(loader_props.begin(),loader_props.end(),hasProperty((*itr)->name()));
-	if(prop!=loader_props.end())
-	{ 
-          
-	  loader->setPropertyValue((*prop)->name(),getPropertyValue((*prop)->name()));
-	}
-        
+        std::vector<Mantid::Kernel::Property*>::iterator prop;
+        //if  the load sub algorithm has the same property then set it.
+        prop=std::find_if(loader_props.begin(),loader_props.end(),hasProperty((*itr)->name()));
+        if(prop!=loader_props.end())
+        { 
+
+          loader->setPropertyValue((*prop)->name(),getPropertyValue((*prop)->name()));
+        }
+
       }
       // Execute the concrete loader
       loader->execute();
@@ -163,18 +170,18 @@ namespace Mantid
     }
 
     /** Get a shared pointer to the load algorithm with highest preference for loading
-     *@param filePath :: path of the file
-     *@return filePath - path of the file
-     */
+    *@param filePath :: path of the file
+    *@return filePath - path of the file
+    */
     API::IAlgorithm_sptr Load::getFileLoader(const std::string& filePath)
     {
       /* Open the file and read in the first bufferSize bytes - these will
-       * be used to determine the type of the file
-       */
+      * be used to determine the type of the file
+      */
       FILE* fp = fopen(filePath.c_str(), "rb");
       if (fp == NULL)
       {
-	throw Kernel::Exception::FileError("Unable to open the file:", filePath);
+        throw Kernel::Exception::FileError("Unable to open the file:", filePath);
       }
       //unsigned char* header_buffer = header_buffer_union.c;
       //unsigned char * header_buffer = IDataFileChecker::g_hdr_buf.get();
@@ -184,14 +191,14 @@ namespace Mantid
       header.full_hdr[g_hdr_bytes] = '\0';
       if (nread == -1)
       {
-	fclose(fp);
+        fclose(fp);
       }
 
       if (fclose(fp) != 0)
       {
-	throw std::runtime_error("Error while closing file \"" + filePath + "\"");
+        throw std::runtime_error("Error while closing file \"" + filePath + "\"");
       } 
-      
+
       // Iterate through all loaders and attempt to find the best qualified for the job.
       // Each algorithm has a quick and long file check. The long version returns an integer
       // giving its certainty about be able to load the file. The highest wins.
@@ -200,42 +207,42 @@ namespace Mantid
       API::IAlgorithm_sptr winningLoader;
       std::vector<std::string>::const_iterator cend = loaderNames.end();
       for( std::vector<std::string>::const_iterator citr = loaderNames.begin(); citr != cend;
-	   ++citr )
+        ++citr )
       {
-	IDataFileChecker_sptr loader = API::LoadAlgorithmFactory::Instance().create(*citr);
-	if( loader->quickFileCheck(filePath, nread, header) )
-	{
-	  int pref = loader->fileCheck(filePath);
-	  // Can't just pick the first as there might be one later in the list with a higher
-	  // preference
-	  if( pref > highestPref )
-	  {
-	    highestPref = pref;
-	    winningLoader = loader;
-	  }
-	}
+        IDataFileChecker_sptr loader = API::LoadAlgorithmFactory::Instance().create(*citr);
+        if( loader->quickFileCheck(filePath, nread, header) )
+        {
+          int pref = loader->fileCheck(filePath);
+          // Can't just pick the first as there might be one later in the list with a higher
+          // preference
+          if( pref > highestPref )
+          {
+            highestPref = pref;
+            winningLoader = loader;
+          }
+        }
       }
 
       if( !winningLoader )
       {
-	throw std::runtime_error("Cannot find a loader for \"" + filePath + "\"");
+        throw std::runtime_error("Cannot find a loader for \"" + filePath + "\"");
       }
       return winningLoader;
     }
 
     /** This method set the algorithm as a child algorithm.
-     *  @param alg :: The shared pointer to a  algorithm
-     *  @param startProgress :: The percentage progress value of the overall 
-     *  algorithm where this child algorithm starts
-     *  @param endProgress :: The percentage progress value of the overall 
-     *  algorithm where this child algorithm ends
-     *  @param enableLogging :: Set to false to disable logging from the child algorithm
-     *  @param version ::  The version of the child algorithm to create. 
-     *  By default gives the latest version.
-     */
+    *  @param alg :: The shared pointer to a  algorithm
+    *  @param startProgress :: The percentage progress value of the overall 
+    *  algorithm where this child algorithm starts
+    *  @param endProgress :: The percentage progress value of the overall 
+    *  algorithm where this child algorithm ends
+    *  @param enableLogging :: Set to false to disable logging from the child algorithm
+    *  @param version ::  The version of the child algorithm to create. 
+    *  By default gives the latest version.
+    */
     void Load::initialiseLoadSubAlgorithm(API::IAlgorithm_sptr alg, 
-					  const double startProgress, const double endProgress, 
-					  const bool enableLogging, const int& version)
+      const double startProgress, const double endProgress, 
+      const bool enableLogging, const int& version)
     {
       (void) version; // Avoid compiler warning.
       //Set as a child so that we are in control of output storage
@@ -247,61 +254,61 @@ namespace Mantid
       const std::vector< Property*> &props = alg->getProperties();
       for (unsigned int i = 0; i < props.size(); ++i)
       {
-	if (props[i]->direction() == 1 && dynamic_cast<IWorkspaceProperty*>(props[i]) )
-	{
-	  if ( props[i]->value().empty() ) props[i]->setValue("LoadChildWorkspace");
-	}
+        if (props[i]->direction() == 1 && dynamic_cast<IWorkspaceProperty*>(props[i]) )
+        {
+          if ( props[i]->value().empty() ) props[i]->setValue("LoadChildWorkspace");
+        }
       }
 
       if (startProgress >= 0. && endProgress > startProgress && endProgress <= 1.)
       {
-	alg->addObserver(m_progressObserver);
-	alg->setChildStartProgress(startProgress);
-	alg->setChildEndProgress(endProgress);
+        alg->addObserver(m_progressObserver);
+        alg->setChildStartProgress(startProgress);
+        alg->setChildEndProgress(endProgress);
       }
 
     }
-        
+
     /**
-     * Set the output workspace(s) if the load's return workspace
-     *  has type API::Workspace
-     *@param load :: shared pointer to load algorithm
-     */
+    * Set the output workspace(s) if the load's return workspace
+    *  has type API::Workspace
+    *@param load :: shared pointer to load algorithm
+    */
     void Load::setOutputWorkspace(API::IAlgorithm_sptr& load)
     {
       try
       {
-	Workspace_sptr ws = load->getProperty("OutputWorkspace"); 
-	WorkspaceGroup_sptr wsg = boost::dynamic_pointer_cast<WorkspaceGroup>(ws);
-	if (wsg)
-	{
-	  setProperty("OutputWorkspace",ws);
-	  std::vector<std::string> names = wsg->getNames();
-	  for(size_t i = 0; i < names.size(); ++i)
-	  {
-	    std::ostringstream propName;
-	    propName << "OutputWorkspace_" << (i+1);
-	    DataObjects::Workspace2D_sptr memberwsws1 = load->getProperty(propName.str());
-
-	    std::string memberwsName = load->getPropertyValue(propName.str());
-	    declareProperty(new WorkspaceProperty<>(propName.str(),memberwsName,Direction::Output));
-	    setProperty(propName.str(),boost::dynamic_pointer_cast<MatrixWorkspace>(memberwsws1));
-	  }
-	}
-	else
-	{ 
-	  setProperty("OutputWorkspace",ws);
-	}
+        Workspace_sptr ws = load->getProperty("OutputWorkspace"); 
+        WorkspaceGroup_sptr wsg = boost::dynamic_pointer_cast<WorkspaceGroup>(ws);
+        if (wsg)
+        {
+          setProperty("OutputWorkspace",ws);
+          std::vector<std::string> names = wsg->getNames();
+          for(size_t i = 0; i < names.size(); ++i)
+          {
+            std::ostringstream propName;
+            propName << "OutputWorkspace_" << (i+1);
+            DataObjects::Workspace2D_sptr memberwsws1 = load->getProperty(propName.str());
+
+            std::string memberwsName = load->getPropertyValue(propName.str());
+            declareProperty(new WorkspaceProperty<>(propName.str(),memberwsName,Direction::Output));
+            setProperty(propName.str(),boost::dynamic_pointer_cast<MatrixWorkspace>(memberwsws1));
+          }
+        }
+        else
+        { 
+          setProperty("OutputWorkspace",ws);
+        }
       }
       catch(std::runtime_error&)
       {
-	MatrixWorkspace_sptr mws=load->getProperty("OutputWorkspace");
-	setProperty("OutputWorkspace",boost::dynamic_pointer_cast<Workspace>(mws));
+        MatrixWorkspace_sptr mws=load->getProperty("OutputWorkspace");
+        setProperty("OutputWorkspace",boost::dynamic_pointer_cast<Workspace>(mws));
       }
-         
-     
+
+
     }
 
-  
+
   } // namespace DataHandling
 } // namespace Mantid
diff --git a/Code/Mantid/Framework/DataHandling/test/SaveSPETest.h b/Code/Mantid/Framework/DataHandling/test/SaveSPETest.h
index a412b80c5613341ef58731ebe839c892f858d341..1a5a164185d8728e1f3162f48af67afb604d7045 100644
--- a/Code/Mantid/Framework/DataHandling/test/SaveSPETest.h
+++ b/Code/Mantid/Framework/DataHandling/test/SaveSPETest.h
@@ -147,7 +147,7 @@ public:
     TS_ASSERT( saver->isExecuted() );
     
     TS_ASSERT( Poco::File(outputFile).exists() );
-    if( Poco::File(outputFile).exists() );
+    if( Poco::File(outputFile).exists() )
     {    
       Poco::File(outputFile).remove();  
     }