diff --git a/src/caoscrawler/converters.py b/src/caoscrawler/converters.py
index cce5146e466209a28b43b4b2b4a2b500f00b5431..1a7f4d56da65c2aa3c436435f3734754ea037cc0 100644
--- a/src/caoscrawler/converters.py
+++ b/src/caoscrawler/converters.py
@@ -53,16 +53,16 @@ from .utils import has_parent
 # by the converters:
 SPECIAL_PROPERTIES = ("description", "name", "id", "path",
                       "file", "checksum", "size")
-# This RE is used to check whether a value is just a single variable:
-SINGLE_VAR_RE = re.compile(r"^\$(\{)?(?P<varname>\w+)(\})?$")
+ID_PATTERN = r"\D[.\w]*"
+SINGLE_VAR_RE = re.compile(r"^\$(\{)?(?P<varname>" + ID_PATTERN + r")(\})?$")
 logger = logging.getLogger(__name__)
 
 
 class CrawlerTemplate(Template):
-    # This adds a dot to the default pattern.
+    # This also adds a dot to the default pattern.
     # See: https://docs.python.org/3/library/string.html#template-strings
     # Default flags is re.IGNORECASE
-    braceidpattern = r"(?a:[_a-z][_\.a-z0-9]*)"
+    braceidpattern = ID_PATTERN
 
 
 def _only_max(children_with_keys):
diff --git a/unittests/test_issues.py b/unittests/test_issues.py
index efc170edaae149950cabc700c4f92a6ac379fb2a..e6fe06efcd055945b9a13576b83f6bf470eaccdd 100644
--- a/unittests/test_issues.py
+++ b/unittests/test_issues.py
@@ -116,12 +116,15 @@ def test_issue_93():
     cfood.yaml does not allow umlaut in $expression"""
     values = GeneralStore()
     expressions = [
-        "1",
+        "foo",
+        "foo.bär",
+        "_1",
         "Ä",
         "ųøîµ",
     ]
     for exp in expressions:
         values[exp] = f"This is {exp}"
+    # ## Test preliminary check
     # With braces
     for exp in expressions:
         assert replace_variables(f"${{{exp}}}", values) == f"This is {exp}"
@@ -129,15 +132,19 @@ def test_issue_93():
     for exp in expressions:
         assert replace_variables(f"${exp}", values) == f"This is {exp}"
 
-
-def test_crawler_template():
-    temp = CrawlerTemplate("$bla")
-    assert temp.safe_substitute(**{"bla": "test"}) == "test"
-
-    # Umlauts are not replaced, because they are not contained
-    # in the CrawlerTemplate's braceidpattern:
-    temp = CrawlerTemplate("$blä")
-    assert temp.safe_substitute(**{"blä": "test"}) == "$blä"
-
-    temp = CrawlerTemplate("${blä}")
-    assert temp.safe_substitute(**{"blä": "test"}) == "${blä}"
+    # ## Test actual replacement
+    for exp in expressions:
+        # as-is
+        propvalue = f"${{{exp}}}"
+        propvalue_template = CrawlerTemplate(propvalue)
+        # from IPython import embed
+        # embed()
+
+        assert propvalue_template.safe_substitute(**values.get_storage()) == f"This is {exp}"
+
+        # String embedded into context
+        propvalue = f"some text before >> ${{{exp}}} << some text after"
+        print(propvalue)
+        propvalue_template = CrawlerTemplate(propvalue)
+        assert (propvalue_template.safe_substitute(**values.get_storage())
+                == f"some text before >> This is {exp} << some text after")