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 022316d8f554f8a77aec6fc57a10405c676eec38..f4643284399ef2dcfdf185b374e4e12e87e974ad 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/Template.java
+++ b/common/source/java/ch/systemsx/cisd/common/utilities/Template.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * A little template engine. Usage example:
@@ -280,6 +281,14 @@ public class Template
         }
         return new Template(map, list);
     }
+    
+    /**
+     * Returns all placeholder names.
+     */
+    public Set<String> getPlaceholderNames()
+    {
+        return variableTokens.keySet();
+    }
 
     /**
      * Binds the specified value to the specified placeholder name.
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 a7ff8c04a8ccba224bdeb15b0ea7103f90762d6c..087d19c2bc22a7aa6c356362746fda908d479aeb 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/TemplateTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/TemplateTest.java
@@ -19,6 +19,8 @@ package ch.systemsx.cisd.common.utilities;
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.fail;
 
+import java.util.Set;
+
 import org.testng.annotations.Test;
 
 /**
@@ -53,6 +55,7 @@ public class TemplateTest
     {
         Template template = new Template("hello ${name}${name}");
         template.bind("name", "world");
+        assertEquals(1, template.getPlaceholderNames().size());
         assertEquals("hello worldworld", template.createText());
     }
 
@@ -62,6 +65,10 @@ public class TemplateTest
         Template template = new Template("hello ${name}, do you know ${name2}?");
         template.bind("name", "world");
         template.bind("name2", "Albert Einstein");
+        Set<String> placeholderNames = template.getPlaceholderNames();
+        assertEquals(true, placeholderNames.contains("name"));
+        assertEquals(true, placeholderNames.contains("name2"));
+        assertEquals(2, placeholderNames.size());
         assertEquals("hello world, do you know Albert Einstein?", template.createText());
     }