diff --git a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText2.java b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText2.java
index d0fedf1..578f1e1 100644
--- a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText2.java
+++ b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText2.java
@@ -14,10 +14,7 @@
 
 package org.eclipse.statet.ecommons.variables.core;
 
-import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.PARAMETER;
-import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.RETURN_TYPE;
-import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.TYPE_ARGUMENT;
-import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.TYPE_BOUND;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
 import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullElse;
 
 import java.util.ArrayList;
@@ -35,7 +32,6 @@
 import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.osgi.util.NLS;
 
-import org.eclipse.statet.jcommons.lang.NonNull;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
@@ -105,7 +101,6 @@
 	private static final String RESOLVE_FAILED_VALUE= new String("<unresolved>"); //$NON-NLS-1$
 	
 	
-	@NonNullByDefault({ PARAMETER, RETURN_TYPE, TYPE_BOUND, TYPE_ARGUMENT })
 	private static class VariableReference {
 		
 		/** Offset of '$' */
@@ -115,11 +110,11 @@
 		
 		
 		/** Name of the variable */
-		private final @NonNull String name;
+		private final String name;
 		
-		private IStringVariable variable;
+		private @Nullable IStringVariable variable;
 		
-		private String value;
+		private @Nullable String value;
 		
 		
 		public VariableReference(final int begin, final int end, final String name) {
@@ -251,14 +246,16 @@
 		variable= this.extraVariables.get(name);
 		
 		if (variable == null) {
-			if (this.variableManager == null) {
-				this.variableManager= VariablesPlugin.getDefault().getStringVariableManager();
+			var variableManager= this.variableManager;
+			if (variableManager == null) {
+				variableManager= VariablesPlugin.getDefault().getStringVariableManager();
+				this.variableManager= variableManager;
 			}
 			
-			variable= this.variableManager.getValueVariable(name);
+			variable= variableManager.getValueVariable(name);
 			
 			if (variable == null) {
-				variable= this.variableManager.getDynamicVariable(name);
+				variable= variableManager.getDynamicVariable(name);
 			}
 		}
 		
@@ -375,9 +372,10 @@
 			}
 		}
 		for (final VariableReference ref : this.references) {
-			if (ref.variable != null && ref.hasArg()) {
-				if (!(ref.variable instanceof IDynamicVariable)
-						|| !((IDynamicVariable) ref.variable).supportsArgument()) {
+			final var variable= ref.variable;
+			if (variable != null && ref.hasArg()) {
+				if (!(variable instanceof IDynamicVariable)
+						|| !((IDynamicVariable)variable).supportsArgument()) {
 					this.reporter.problemFound(new Status(IStatus.ERROR, ECommonsVariablesCore.BUNDLE_ID,
 							NLS.bind(Messages.Validation_Ref_VarNoArgs_message,
 									ref.name )),
@@ -418,12 +416,13 @@
 					arg= null;
 				}
 				
-				if (ref.variable == null) {
+				final var variable= ref.variable;
+				if (variable == null) {
 					ref.value= RESOLVE_FAILED_VALUE;
 					continue;
 				}
 				
-				ref.value= resolve(ref.variable, arg);
+				ref.value= resolve(variable, arg);
 			}
 			catch (final CoreException e) {
 				ref.value= RESOLVE_FAILED_VALUE;
@@ -445,8 +444,9 @@
 		while (refIdx < this.references.size()) {
 			final VariableReference ref= this.references.get(refIdx++);
 			if (ref.begin >= begin && ref.begin < end) {
+				final String value= nonNullAssert(ref.value);
 				newText.append(text, begin, ref.begin);
-				newText.append(ref.value);
+				newText.append(value);
 				begin= ref.end;
 			}
 		}
@@ -460,8 +460,13 @@
 		while (refIdx < this.references.size()) {
 			final VariableReference ref= this.references.get(refIdx++);
 			if (ref.begin >= begin && ref.begin < end) {
+				String value= nonNullAssert(ref.value);
+				final var variable= ref.variable;
+				if (variable != null) {
+					value= checkValue(variable, value);
+				}
 				newText.append(text, begin, ref.begin);
-				newText.append(checkValue(ref.variable, ref.value));
+				newText.append(value);
 				begin= ref.end;
 			}
 		}
@@ -473,10 +478,10 @@
 			throws CoreException {
 		final String value;
 		if (variable instanceof IDynamicVariable) {
-			value= ((IDynamicVariable) variable).getValue(argument);
+			value= ((IDynamicVariable)variable).getValue(argument);
 		}
 		else {
-			value= ((IValueVariable) variable).getValue();
+			value= ((IValueVariable)variable).getValue();
 //			if (value != null && value.indexOf("${") >= 0) {
 //				value= VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(value, true);
 //			}
