diff --git a/services/mgmt/node/impl/impl_test.go b/services/mgmt/node/impl/impl_test.go
index 16988ec..6935713 100644
--- a/services/mgmt/node/impl/impl_test.go
+++ b/services/mgmt/node/impl/impl_test.go
@@ -295,7 +295,7 @@
 	}
 	scriptPathV2 := evalLink()
 	if scriptPathFactory == scriptPathV2 {
-		t.Errorf("current link didn't change")
+		t.Fatalf("current link didn't change")
 	}
 
 	// This is from the child node manager started by the node manager
@@ -325,7 +325,7 @@
 	// repository: this should fail, and current link should be unchanged.
 	updateExpectError(t, "v2NM", verror.NotFound)
 	if evalLink() != scriptPathV2 {
-		t.Errorf("script changed")
+		t.Fatalf("script changed")
 	}
 
 	// Create a third version of the node manager and issue an update.
@@ -336,7 +336,7 @@
 
 	scriptPathV3 := evalLink()
 	if scriptPathV3 == scriptPathV2 {
-		t.Errorf("current link didn't change")
+		t.Fatalf("current link didn't change")
 	}
 
 	// This is from the child node manager started by the node manager
@@ -369,7 +369,7 @@
 	nm.CloseStdin()
 	runNM.Expect("v3NM terminating")
 	if evalLink() != scriptPathV2 {
-		t.Errorf("current link didn't change")
+		t.Fatalf("current link was not reverted correctly")
 	}
 	deferrer = nil
 	runNM.Cleanup()
@@ -388,7 +388,7 @@
 	revert(t, "v2NM")
 	runNM.Expect("v2NM terminating")
 	if evalLink() != scriptPathFactory {
-		t.Errorf("current link didn't change")
+		t.Fatalf("current link was not reverted correctly")
 	}
 	deferrer = nil
 	runNM.Cleanup()
@@ -436,7 +436,7 @@
 	defer server.Stop()
 	pingCh := make(chan struct{})
 	if err := server.Serve("pingserver", ipc.SoloDispatcher(pingServerDisp(pingCh), nil)); err != nil {
-		t.Errorf("Failed to set up ping server")
+		t.Fatalf("Failed to set up ping server")
 	}
 
 	// Create an envelope for an app.
@@ -477,7 +477,7 @@
 		t.Fatalf("BindApplication(%v) failed: %v", instanceName, err)
 	}
 	if err := stub.Stop(rt.R().NewContext(), 5); err != nil {
-		t.Errorf("Stop failed: %v", err)
+		t.Fatalf("Stop failed: %v", err)
 	}
 
 	// HACK ALERT: for now, we peek inside the node manager's directory
@@ -498,9 +498,9 @@
 	rootDir := filepath.Join(instanceDir, "root")
 	testFile := filepath.Join(rootDir, "testfile")
 	if read, err := ioutil.ReadFile(testFile); err != nil {
-		t.Errorf("Failed to read %v: %v", testFile, err)
+		t.Fatalf("Failed to read %v: %v", testFile, err)
 	} else if want, got := "goodbye world", string(read); want != got {
-		t.Errorf("Expected to read %v, got %v instead", want, got)
+		t.Fatalf("Expected to read %v, got %v instead", want, got)
 	}
 	// END HACK
 }
diff --git a/services/mgmt/node/impl/invoker.go b/services/mgmt/node/impl/invoker.go
index 3343470..d9cd129 100644
--- a/services/mgmt/node/impl/invoker.go
+++ b/services/mgmt/node/impl/invoker.go
@@ -164,7 +164,7 @@
 
 	errInvalidSuffix      = verror.BadArgf("invalid suffix")
 	errOperationFailed    = verror.Internalf("operation failed")
-	errUpdateInProgress   = verror.Existsf("update in progress")
+	errInProgress         = verror.Existsf("operation in progress")
 	errIncompatibleUpdate = verror.BadArgf("update failed: mismatching app title")
 	errUpdateNoOp         = verror.NotFoundf("no different version available")
 	errNotExist           = verror.NotFoundf("object does not exist")
@@ -638,7 +638,7 @@
 	i.internal.updatingMutex.Lock()
 	if i.internal.updating {
 		i.internal.updatingMutex.Unlock()
-		return errUpdateInProgress
+		return errInProgress
 	} else {
 		i.internal.updating = true
 	}
@@ -894,7 +894,7 @@
 		i.internal.updatingMutex.Lock()
 		if i.internal.updating {
 			i.internal.updatingMutex.Unlock()
-			return errUpdateInProgress
+			return errInProgress
 		} else {
 			i.internal.updating = true
 		}
diff --git a/services/mgmt/node/impl/util_test.go b/services/mgmt/node/impl/util_test.go
index 762bf02..4d07917 100644
--- a/services/mgmt/node/impl/util_test.go
+++ b/services/mgmt/node/impl/util_test.go
@@ -90,15 +90,17 @@
 
 // resolveExpectError verifies that the given name is not in the mounttable.
 func resolveExpectError(t *testing.T, name string, errID verror.ID) {
+	rt.R().Namespace().FlushCacheEntry(name)
 	if results, err := rt.R().Namespace().Resolve(rt.R().NewContext(), name); err == nil {
-		t.Errorf("Resolve(%v) succeeded with results %v when it was expected to fail", name, results)
+		t.Fatalf("Resolve(%v) succeeded with results %v when it was expected to fail", name, results)
 	} else if !verror.Is(err, errID) {
-		t.Errorf("Resolve(%v) failed with error %v, expected error ID %v", err, errID)
+		t.Fatalf("Resolve(%v) failed with error %v, expected error ID %v", err, errID)
 	}
 }
 
 // resolve looks up the given name in the mounttable.
 func resolve(t *testing.T, name string) string {
+	rt.R().Namespace().FlushCacheEntry(name)
 	results, err := rt.R().Namespace().Resolve(rt.R().NewContext(), name)
 	if err != nil {
 		t.Fatalf("Resolve(%v) failed: %v", name, err)
@@ -114,13 +116,13 @@
 
 func updateExpectError(t *testing.T, name string, errID verror.ID) {
 	if err := invokeUpdate(t, name); !verror.Is(err, errID) {
-		t.Errorf("Unexpected update error %v, expected error ID %v", err, errID)
+		t.Fatalf("Unexpected update error %v, expected error ID %v", err, errID)
 	}
 }
 
 func update(t *testing.T, name string) {
 	if err := invokeUpdate(t, name); err != nil {
-		t.Errorf("Update() failed: %v", err)
+		t.Fatalf("Update() failed: %v", err)
 	}
 }
 
@@ -135,13 +137,13 @@
 
 func revertExpectError(t *testing.T, name string, errID verror.ID) {
 	if err := invokeRevert(t, name); !verror.Is(err, errID) {
-		t.Errorf("Unexpected revert error %v, expected error ID %v", err, errID)
+		t.Fatalf("Unexpected revert error %v, expected error ID %v", err, errID)
 	}
 }
 
 func revert(t *testing.T, name string) {
 	if err := invokeRevert(t, name); err != nil {
-		t.Errorf("Revert() failed: %v", err)
+		t.Fatalf("Revert() failed: %v", err)
 	}
 }
 
