diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/Template.java b/common/source/java/ch/systemsx/cisd/common/utilities/Template.java
index 33462ec12507ee1edec6d5a7244d71aa7fded374..49e196e023ca63004788dc870407be4fb7ef6565 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/Template.java
+++ b/common/source/java/ch/systemsx/cisd/common/utilities/Template.java
@@ -250,15 +250,17 @@ public class Template
     public Template createFreshCopy()
     {
         LinkedHashMap<String, VariableToken> map = new LinkedHashMap<String, VariableToken>();
+        for (VariableToken variableToken : variableTokens.values())
+        {
+            String variableName = variableToken.getVariableName();
+            map.put(variableName, new VariableToken(variableName));
+        }
         ArrayList<IToken> list = new ArrayList<IToken>();
         for (IToken token : tokens)
         {
             if (token instanceof VariableToken)
             {
-                String variableName = ((VariableToken) token).getVariableName();
-                VariableToken variableToken = new VariableToken(variableName);
-                map.put(variableName, variableToken);
-                list.add(variableToken);
+                list.add(map.get(((VariableToken) token).getVariableName()));
             } else
             {
                 list.add(token);
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/TemplateTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/TemplateTest.java
index 8e019e68490a5d5d8140e4b3bb036e30f59ab6d6..96beb89adfaa6031043f969ddc4a7360a0b039ac 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/TemplateTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/TemplateTest.java
@@ -165,16 +165,24 @@ public class TemplateTest
     @Test
     public void testCreateFreshCopy()
     {
-        Template template = new Template("hello ${name}!");
+        Template template = new Template("hello ${name}.${name}!");
         Template template1 = template.createFreshCopy();
+        try
+        {
+            template1.createText();
+            fail("IllegalStateException expected");
+        } catch (IllegalStateException e)
+        {
+            assertEquals("The following variables are not bound: name ", e.getMessage());
+        }
         template1.bind("name", "world");
-        assertEquals("hello world!", template1.createText());
-        assertEquals("hello ${name}!", template.createText(false));
+        assertEquals("hello world.world!", template1.createText());
+        assertEquals("hello ${name}.${name}!", template.createText(false));
         
         Template template2 = template.createFreshCopy();
         template2.bind("name", "universe");
-        assertEquals("hello universe!", template2.createText());
-        assertEquals("hello world!", template1.createText());
-        assertEquals("hello ${name}!", template.createText(false));
+        assertEquals("hello universe.universe!", template2.createText());
+        assertEquals("hello world.world!", template1.createText());
+        assertEquals("hello ${name}.${name}!", template.createText(false));
     }
 }