diff --git a/Code/Mantid/Framework/DataHandling/src/Load.cpp b/Code/Mantid/Framework/DataHandling/src/Load.cpp
index 0ecf0eedebf18704c67e3657ce1b9e75da4f8d3b..cbbb53a107cc2910a73e3f3aa7a2b29c22999030 100644
--- a/Code/Mantid/Framework/DataHandling/src/Load.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/Load.cpp
@@ -8,6 +8,7 @@
 #include "MantidKernel/ArrayProperty.h"
 #include "MantidAPI/LoadAlgorithmFactory.h"
 #include "MantidAPI/AlgorithmManager.h"
+#include "MantidKernel/FacilityInfo.h"
 
 namespace Mantid
 {
@@ -199,21 +200,14 @@ namespace Mantid
     /// Initialisation method.
     void Load::init()
     {
-
-      std::vector<std::string> exts;
-      exts.push_back(".raw");
-      exts.push_back(".s*");
-      exts.push_back(".add");
-
-      exts.push_back(".nxs");
-      exts.push_back(".nx5");
+      // Take extensions first from Facility object
+      const FacilityInfo & defaultFacility = Mantid::Kernel::ConfigService::Instance().Facility();
+      std::vector<std::string> exts = defaultFacility.extensions();
+      // Add in some other known extensions
       exts.push_back(".xml");
-      exts.push_back(".n*");
-
       exts.push_back(".dat");
       exts.push_back(".txt");
       exts.push_back(".csv");
-
       exts.push_back(".spe");
 
       declareProperty(new FileProperty("Filename", "", FileProperty::Load, exts),
diff --git a/Code/Mantid/MantidQt/API/src/AlgorithmDialog.cpp b/Code/Mantid/MantidQt/API/src/AlgorithmDialog.cpp
index 30575516b2e6add62e1a1eb7dd87cef6d93b606c..33e6003a75ffbf93f5124b2577bf4cc025ed1a8d 100644
--- a/Code/Mantid/MantidQt/API/src/AlgorithmDialog.cpp
+++ b/Code/Mantid/MantidQt/API/src/AlgorithmDialog.cpp
@@ -421,7 +421,6 @@ QString AlgorithmDialog::openFileDialog(const QString & propName)
     {
       // --------- Load a File -------------
       filter = "Files (";
-      
       std::set<std::string>::const_iterator iend = exts.end();
       // Push a wild-card onto the front of each file suffix
       for( std::set<std::string>::const_iterator itr = exts.begin(); itr != iend; ++itr)
@@ -439,15 +438,24 @@ QString AlgorithmDialog::openFileDialog(const QString & propName)
   else if ( prop->isSaveProperty() )
   {
     // --------- Save a File -------------
-    //Have each filter on a separate line
-    QString filter("");
+    //Have each filter on a separate line with the default as the first
+    std::string defaultExt = prop->getDefaultExt();
+    QString filter; 
+    if( !defaultExt.empty() )
+    {
+      filter = "*" + QString::fromStdString(defaultExt) + ";;";
+    }
     std::set<std::string>::const_iterator iend = exts.end();
     for( std::set<std::string>::const_iterator itr = exts.begin(); itr != iend; ++itr)
     {
-      filter.append("*"+QString::fromStdString(*itr) + ";;");
+      if( (*itr) != defaultExt )
+      {
+        filter.append("*"+QString::fromStdString(*itr) + ";;");
+      }
     }
     //Remove last two semi-colons or else we get an extra empty option in the box
     filter.chop(2);
+    // Prepend the default filter
     QString selectedFilter;
     filename = QFileDialog::getSaveFileName(this, "Save file", AlgorithmInputHistory::Instance().getPreviousDirectory(), filter, &selectedFilter);
     
diff --git a/Code/Mantid/MantidQt/CustomDialogs/src/LoadDialog.cpp b/Code/Mantid/MantidQt/CustomDialogs/src/LoadDialog.cpp
index 87408c7b566357ab243764cb92545b4ede2a60c2..a52748795f848581fe43867da985340cee17ef8d 100644
--- a/Code/Mantid/MantidQt/CustomDialogs/src/LoadDialog.cpp
+++ b/Code/Mantid/MantidQt/CustomDialogs/src/LoadDialog.cpp
@@ -15,6 +15,7 @@
 #include "MantidKernel/MaskedProperty.h"
 #include "MantidAPI/IWorkspaceProperty.h"
 #include "MantidAPI/FileProperty.h"
+#include "MantidAPI/AlgorithmManager.h"
 
 namespace MantidQt
 {
@@ -141,7 +142,8 @@ namespace MantidQt
       m_fileWidget->allowMultipleFiles(false);
       m_fileWidget->isOptional(false);
       m_fileWidget->doMultiEntry(false);
-      m_fileWidget->setAlgorithmProperty("Load"); // Slight hack to get only the all-files option in browse
+      m_fileWidget->setAlgorithmProperty("Load|Filename");
+      m_fileWidget->extsAsSingleOption(false);
       m_fileWidget->readSettings("Mantid/Algorithms/Load");
       QHBoxLayout *propLine = new QHBoxLayout;
       propLine->addWidget(m_fileWidget);
diff --git a/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MWRunFiles.h b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MWRunFiles.h
index c19432c8e7665f04eceb7b2b30d237cd23ff8d39..6a80a46d3110672ec9969cdbcf38a06d3d510261 100644
--- a/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MWRunFiles.h
+++ b/Code/Mantid/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MWRunFiles.h
@@ -53,6 +53,7 @@ namespace MantidQt
       Q_PROPERTY(ButtonOpts buttonOpt READ doButtonOpt WRITE doButtonOpt)
       Q_PROPERTY(QString algorithmAndProperty READ getAlgorithmProperty WRITE setAlgorithmProperty)
       Q_PROPERTY(QStringList fileExtensions READ getFileExtensions WRITE setFileExtensions)
+      Q_PROPERTY(bool extsAsSingleOption READ extsAsSingleOption WRITE extsAsSingleOption)
       Q_ENUMS(ButtonOpts)
 
     public:
@@ -88,9 +89,11 @@ namespace MantidQt
       QString getAlgorithmProperty() const;
       void setAlgorithmProperty(const QString & name);
       QStringList getFileExtensions() const;
+      void setFileExtensions(const QStringList & extensions);
+      bool extsAsSingleOption() const;
+      void extsAsSingleOption(const bool value);
       bool isEmpty() const;
       QString getText() const;
-      void setFileExtensions(const QStringList & extensions);
 
       // Standard setters/getters
       bool isValid() const;
@@ -159,6 +162,8 @@ namespace MantidQt
       QString m_algorithmProperty;
       /// The file extensions to look for
       QStringList m_fileExtensions;
+      /// If true the exts are displayed as one option in the dialog
+      bool m_extsAsSingleOption;
 
       /// The Ui form
       Ui::MWRunFiles m_uiForm;
diff --git a/Code/Mantid/MantidQt/MantidWidgets/src/MWRunFiles.cpp b/Code/Mantid/MantidQt/MantidWidgets/src/MWRunFiles.cpp
index e9613355e51f6c623b3b2aa9fbd9dd187c689e06..2544dbe78cd38548fca9bbe8fa866aff9a905ae8 100644
--- a/Code/Mantid/MantidQt/MantidWidgets/src/MWRunFiles.cpp
+++ b/Code/Mantid/MantidQt/MantidWidgets/src/MWRunFiles.cpp
@@ -9,7 +9,7 @@
 #include <QStringList>
 #include <QFileDialog>
 #include <QFileInfo>
-
+#include <QHash>
 #include "Poco/File.h"
 
 using namespace Mantid::Kernel;
@@ -19,7 +19,8 @@ using namespace MantidQt::MantidWidgets;
 MWRunFiles::MWRunFiles(QWidget *parent) : MantidWidget(parent),
   m_findRunFiles(true), m_allowMultipleFiles(true), m_isOptional(false),
   m_buttonOpt(Text), m_multiEntry(false), m_fileProblem(""),
-  m_entryNumProblem(""), m_algorithmProperty(""), m_fileFilter("")
+  m_entryNumProblem(""), m_algorithmProperty(""), m_fileExtensions(), m_extsAsSingleOption(true),
+  m_fileFilter("")
 {
   m_uiForm.setupUi(this);
 
@@ -212,6 +213,24 @@ void MWRunFiles::setFileExtensions(const QStringList & extensions)
   m_fileFilter.clear();
 }
 
+/**
+ * Returns whether the file dialog should display the exts as a single list or as multiple items
+ * @return boolean
+ */
+bool MWRunFiles::extsAsSingleOption() const
+{
+  return m_extsAsSingleOption;
+}
+
+/**
+ * Sets whether the file dialog should display the exts as a single list or as multiple items
+ * @@param value :: If true the file dialog wil contain a single entry will all filters
+ */
+void MWRunFiles::extsAsSingleOption(const bool value)
+{
+  m_extsAsSingleOption = value;
+}
+
 /**
 * Is the input within the widget valid?
 * @returns True of the file names within the widget are valid, false otherwise
@@ -483,19 +502,53 @@ QString MWRunFiles::createFileFilter()
   QString fileFilter;
   if( !fileExts.isEmpty() )
   {
-    QStringListIterator itr(fileExts);
-    fileFilter += "Files (";
-    while( itr.hasNext() )
+    // The list may contain upper and lower cased versions, ensure these are on the same line
+    // I want this ordered
+    QList<QPair<QString, QStringList> > finalIndex;
+    QStringListIterator sitr(fileExts);
+    QString ext = sitr.next();
+    finalIndex.append(qMakePair(ext.toUpper(), QStringList(ext)));
+    while( sitr.hasNext() )
+    {
+      ext = sitr.next();
+      QString key = ext.toUpper();
+      bool found(false);
+      const size_t itemCount = finalIndex.count();
+      for( size_t i = 0 ; i < itemCount; ++i )
+      {
+        if( key == finalIndex[i].first )
+        {
+          finalIndex[i].second.append(ext);
+          found = true;
+          break;
+        }
+      }
+      if( !found )
+      {
+        finalIndex.append(qMakePair(key, QStringList(ext)));
+      }
+    }
+    
+    if( extsAsSingleOption() )
+    {
+      fileFilter += "Files (";
+      QListIterator<QPair<QString, QStringList> > itr(finalIndex);
+      while( itr.hasNext() )
+      {
+        const QStringList values = itr.next().second;
+        fileFilter += "*" + values.join(" *");
+      }
+      fileFilter += ");;";
+    }
+    else
     {
-      QString ext = itr.next();
-      fileFilter += "*" + ext;
-      if( itr.hasNext() )
+      QListIterator<QPair<QString, QStringList> > itr(finalIndex);
+      while( itr.hasNext() )
       {
-	fileFilter += " ";
+        const QStringList values = itr.next().second;
+        fileFilter += "Files (*" + values.join(" *") + ");;";
       }
     }
-    fileFilter += ")";
-    fileFilter += ";;";
   }
   fileFilter += "All Files (*.*)";
   return fileFilter;