diff --git a/Framework/Kernel/inc/MantidKernel/DataService.h b/Framework/Kernel/inc/MantidKernel/DataService.h
index 3d6de5faf49853b46c7b000922b295f1dc3808d4..28f8871f0406f9d8a3d565295d8efb4b3b16c1c0 100644
--- a/Framework/Kernel/inc/MantidKernel/DataService.h
+++ b/Framework/Kernel/inc/MantidKernel/DataService.h
@@ -482,15 +482,23 @@ public:
   }
 
   /// Get a vector of the pointers to the data objects stored by the service
-  std::vector<boost::shared_ptr<T>> getObjects() const {
+  std::vector<boost::shared_ptr<T>> getObjects(DataServiceHidden includeHidden = DataServiceHidden::Auto) const {
     std::lock_guard<std::recursive_mutex> _lock(m_mutex);
 
-    const bool showingHidden = showingHiddenObjects();
+	if (includeHidden == DataServiceHidden::Include) {
+		// Return all elements including hidden ones
+	}
+
+	const bool alwaysIncludeHidden = includeHidden == DataServiceHidden::Include;
+    const bool usingAuto =  includeHidden == DataServiceHidden::Auto && showingHiddenObjects();
+	
+	const bool showingHidden = alwaysIncludeHidden || usingAuto;
+
     std::vector<boost::shared_ptr<T>> objects;
     objects.reserve(datamap.size());
-    for (auto it = datamap.begin(); it != datamap.end(); ++it) {
-      if (showingHidden || !isHiddenDataServiceObject(it->first)) {
-        objects.push_back(it->second);
+    for (const auto &it : datamap) {
+      if (showingHidden || !isHiddenDataServiceObject(it.first)) {
+        objects.push_back(it.second);
       }
     }
     return objects;
diff --git a/Framework/Kernel/test/DataServiceTest.h b/Framework/Kernel/test/DataServiceTest.h
index 6dfa57de8dd36099f36898365854f1ebd3416ddb..78cfd6fbabf885b73295d0051c03f9ad669939ad 100644
--- a/Framework/Kernel/test/DataServiceTest.h
+++ b/Framework/Kernel/test/DataServiceTest.h
@@ -6,6 +6,9 @@
 #include <cxxtest/TestSuite.h>
 #include <Poco/NObserver.h>
 #include <boost/make_shared.hpp>
+
+#include <iostream>
+#include <sstream>
 #include <mutex>
 
 using namespace Mantid;
@@ -327,6 +330,84 @@ public:
     TS_ASSERT_EQUALS(objects.at(std::distance(names.cbegin(), cit)), three);
   }
 
+  void test_getObjectsReturnsConfigOption() {
+	  svc.clear();
+
+	  ConfigService::Instance().setString("MantidOptions.InvisibleWorkspaces",
+		  "0");
+	  auto one = boost::make_shared<int>(1);
+	  auto two = boost::make_shared<int>(2);
+	  auto three = boost::make_shared<int>(3);
+	  svc.add("One", one);
+	  svc.add("Two", two);
+	  svc.add("TwoAgain",
+		  two); // Same pointer again - should appear twice in getObjects()
+	  svc.add("__Three", three);
+
+	  auto objects = svc.getObjects(DataServiceHidden::Auto);
+	  auto objectsDefaultCall = svc.getObjects();
+
+	  TSM_ASSERT_EQUALS("Default parameter is not set to auto", objects, objectsDefaultCall);
+
+	  TSM_ASSERT_EQUALS("Hidden entries should not be returned", objects.size(),
+		  3);
+	  // Check the hidden ws isn't present
+	  TS_ASSERT_EQUALS(objects.at(0), one);
+	  TS_ASSERT_EQUALS(objects.at(1), two);
+	  TS_ASSERT_EQUALS(objects.at(2), two);
+	  TSM_ASSERT_EQUALS("Hidden entries should not be returned", std::find(objects.cbegin(), objects.cend(), three),
+		  objects.end());
+
+	  ConfigService::Instance().setString("MantidOptions.InvisibleWorkspaces",
+		  "1");
+	  objects = svc.getObjects();
+	  TS_ASSERT_EQUALS(objects.size(), 4);
+  }
+
+  void test_getObjectsReturnsNoHiddenOption() {
+	  svc.clear();
+
+	  ConfigService::Instance().setString("MantidOptions.InvisibleWorkspaces",
+		  "1");
+	  auto one = boost::make_shared<int>(1);
+	  auto two = boost::make_shared<int>(2);
+	  auto three = boost::make_shared<int>(3);
+	  svc.add("One", one);
+	  svc.add("Two", two);
+	  svc.add("__Three", three);
+
+	  auto objects = svc.getObjects(DataServiceHidden::Exclude);
+	  TSM_ASSERT_EQUALS("Hidden entries should not be returned", objects.size(),
+		  2);
+	  // Check the hidden ws isn't present
+	  TS_ASSERT_EQUALS(objects.at(0), one);
+	  TS_ASSERT_EQUALS(objects.at(1), two);
+	  TSM_ASSERT_EQUALS("Hidden entries should not be returned", std::find(objects.cbegin(), objects.cend(), three),
+		  objects.end());
+  }
+
+  void test_getObjectsReturnsHiddenOption() {
+	  svc.clear();
+
+	  ConfigService::Instance().setString("MantidOptions.InvisibleWorkspaces",
+		  "0");
+	  auto one = boost::make_shared<int>(1);
+	  auto two = boost::make_shared<int>(2);
+	  auto three = boost::make_shared<int>(3);
+	  svc.add("One", one);
+	  svc.add("Two", two);
+	  svc.add("__Three", three);
+
+	  auto objects = svc.getObjects(DataServiceHidden::Include);
+	  TSM_ASSERT_EQUALS("Hidden entries should be returned", objects.size(),
+		  3);
+	  // Check the hidden ws isn't present
+	  TS_ASSERT_DIFFERS(std::find(objects.begin(), objects.end(), one), objects.end());
+	  TS_ASSERT_DIFFERS(std::find(objects.begin(), objects.end(), two), objects.end());
+	  TSM_ASSERT_DIFFERS("Hidden entries should be returned", std::find(objects.cbegin(), objects.cend(), three),
+		  objects.end());
+  }
+
   void test_sortedAndHiddenGetNames() {
     auto one = boost::make_shared<int>(1);
     auto two = boost::make_shared<int>(2);