diff --git a/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java b/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
index a03ee10..196325e 100644
--- a/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
+++ b/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
@@ -63,6 +63,7 @@
 import java.io.Reader;
 import java.io.StringReader;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 import java.util.function.Consumer;
@@ -270,14 +271,15 @@
 
         ManagementContext origMgmt = mgmt;
         ManagementContext newMgmt = createNewManagementContext();
-        Collection<Application> origApps = origMgmt.getApplications();
-        
+        boolean origRunning = origMgmt != null && origMgmt.isRunning();
+        Collection<Application> origApps = origRunning ? origMgmt.getApplications() : Collections.emptyList();
+
         options = RebindOptions.create(options);
         if (options.classLoader == null) options.classLoader(classLoader);
         if (options.mementoDir == null) options.mementoDir(mementoDir);
-        if (options.origManagementContext == null) options.origManagementContext(origMgmt);
+        if (options.origManagementContext == null && origRunning) options.origManagementContext(origMgmt);
         if (options.newManagementContext == null) options.newManagementContext(newMgmt);
-        
+
         for (Application origApp : origApps) {
             RebindTestUtils.stopPersistence(origApp);
         }
