diff --git a/Code/Mantid/Framework/DataHandling/src/Load.cpp b/Code/Mantid/Framework/DataHandling/src/Load.cpp
index 458f7332ee92da323ef2f9b18bfdb821c6431010..30ffb1b311ace88dcf48db3159e222d38896f357 100644
--- a/Code/Mantid/Framework/DataHandling/src/Load.cpp
+++ b/Code/Mantid/Framework/DataHandling/src/Load.cpp
@@ -509,8 +509,8 @@ namespace Mantid
       // Else we have multiple loaded workspaces - group them and set the group as output.
       else
       {
-        Mantid::API::IAlgorithm_sptr groupingAlg = 
-          Mantid::API::AlgorithmManager::Instance().create("GroupWorkspaces", 1);
+        Mantid::API::IAlgorithm_sptr groupingAlg = this->createSubAlgorithm("GroupWorkspaces",0, 0, true, 1);
+        groupingAlg->setAlwaysStoreInADS(true);
 
         groupingAlg->setProperty("InputWorkspaces",loadedWsNames);
         groupingAlg->setProperty("OutputWorkspace",outputWsName.c_str());
@@ -687,8 +687,9 @@ namespace Mantid
       Mantid::API::IAlgorithm_sptr loadAlg = createSubAlgorithm("Load", 1);
 
       // Here, as a workaround for groupworkspaces who's members have names but no
-      // accompanying entries in the ADS, we set the sub algo to not be a child.
-      loadAlg->setChild(false);
+      // accompanying entries in the ADS, we set the sub algo to setAlwaysStoreInADS.
+      //loadAlg->setChild(false);
+      loadAlg->setAlwaysStoreInADS(true);
 
       // Get the list properties for the concrete loader load algorithm
       const std::vector<Kernel::Property*> & props = getProperties();
@@ -756,7 +757,8 @@ namespace Mantid
         return;
 
       Mantid::API::IAlgorithm_sptr renameAlg = createSubAlgorithm("RenameWorkspace", 1);
-      renameAlg->setChild(false);
+      renameAlg->setChild(true); // Must be keep child=true to prevent locking errors
+      renameAlg->setAlwaysStoreInADS(true);
       renameAlg->setPropertyValue("InputWorkspace", oldName);
       renameAlg->setPropertyValue("OutputWorkspace", newName);
       renameAlg->executeAsSubAlg();