diff --git a/ecommons/org.eclipse.statet.ecommons.preferences.core/src/org/eclipse/statet/ecommons/preferences/core/PreferenceUtils.java b/ecommons/org.eclipse.statet.ecommons.preferences.core/src/org/eclipse/statet/ecommons/preferences/core/PreferenceUtils.java
index bcdf720..b8c6f91 100644
--- a/ecommons/org.eclipse.statet.ecommons.preferences.core/src/org/eclipse/statet/ecommons/preferences/core/PreferenceUtils.java
+++ b/ecommons/org.eclipse.statet.ecommons.preferences.core/src/org/eclipse/statet/ecommons/preferences/core/PreferenceUtils.java
@@ -139,33 +139,33 @@
 			final boolean deleteFinally)
 			throws BackingStoreException {
 		final IScopeContext scope= InstanceScope.INSTANCE;
-		if (scope.getNode("").nodeExists(fromQualifier)) { //$NON-NLS-1$
-			final var fromNode= scope.getNode(fromQualifier);
-			if (fromNode.getBoolean("migrated", false)) { //$NON-NLS-1$
-				return false;
-			}
-			final var toNode= scope.getNode(toQualifier);
-			for (final String key : fromNode.keys()) {
-				final String value= fromNode.get(key, null);
-				if (value != null && toNode.get(key, null) == null) {
-					toNode.put(key, value);
-				}
-			}
-			
-			toNode.flush();
-			
-			if (deleteFinally) {
-				final var parent= nonNullAssert(fromNode.parent());
-				fromNode.removeNode();
-				parent.flush();
-			}
-			else {
-				fromNode.putBoolean("migrated", true); //$NON-NLS-1$
-				fromNode.flush();
-			}
-			return true;
+		if (!scope.getNode("").nodeExists(fromQualifier)) { //$NON-NLS-1$
+			return false;
 		}
-		return false;
+		final var fromNode= scope.getNode(fromQualifier);
+		if (fromNode.getBoolean("migrated", false)) { //$NON-NLS-1$
+			return false;
+		}
+		final var toNode= scope.getNode(toQualifier);
+		for (final String key : fromNode.keys()) {
+			final String value= fromNode.get(key, null);
+			if (value != null && toNode.get(key, null) == null) {
+				toNode.put(key, value);
+			}
+		}
+		
+		toNode.flush();
+		
+		if (deleteFinally) {
+			final var parent= nonNullAssert(fromNode.parent());
+			fromNode.removeNode();
+			parent.flush();
+		}
+		else {
+			fromNode.putBoolean("migrated", true); //$NON-NLS-1$
+			fromNode.flush();
+		}
+		return true;
 	}
 	
 	
