diff --git a/Lib/string.py b/Lib/string.py
index 8cbf573..e5afa9b 100644
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -152,6 +152,7 @@
             mapping = _multimap(kws, args[0])
         else:
             mapping = args[0]
+        delimiter = self.delimiter[-1]
         # Helper function for .sub()
         def convert(mo):
             # Check the most common path first.
@@ -162,9 +163,10 @@
                 # fail if val is a Unicode containing non-ASCII characters.
                 return '%s' % val
             if mo.group('escaped') is not None:
-                return '$'
+                return delimiter
             if mo.group('invalid') is not None:
                 self._invalid(mo)
+            raise ValueError('Unrecognized named group in pattern', pattern)
         return self.pattern.sub(convert, self.template)
 
     def safe_substitute(self, *args, **kws):
@@ -176,6 +178,7 @@
             mapping = _multimap(kws, args[0])
         else:
             mapping = args[0]
+        delimiter = self.delimiter[-1]            
         # Helper function for .sub()
         def convert(mo):
             named = mo.group('named')
@@ -185,16 +188,18 @@
                     # will fail if val is a Unicode containing non-ASCII
                     return '%s' % mapping[named]
                 except KeyError:
-                    return '$' + named
+                    return delimiter + named
             braced = mo.group('braced')
-            try:
-                return '%s' % mapping[braced]
-            except KeyError:
-                return '${' + braced + '}'
+            if braced is not None:
+                try:
+                    return '%s' % mapping[braced]
+                except KeyError:
+                    return delimiter + '{' + braced + '}'
             if mo.group('escaped') is not None:
-                return '$'
+                return delimiter
             if mo.group('invalid') is not None:
                 self._invalid(mo)
+            raise ValueError('Unrecognized named group in pattern', pattern)
         return self.pattern.sub(convert, self.template)
 
 
diff --git a/Lib/test/test_pep292.py b/Lib/test/test_pep292.py
index c22f59b..f955774 100644
--- a/Lib/test/test_pep292.py
+++ b/Lib/test/test_pep292.py
@@ -150,17 +150,27 @@
         raises(TypeError, s.substitute, d, {})
         raises(TypeError, s.safe_substitute, d, {})
 
-
-def suite():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(TestTemplate))
-    return suite
-
+    def test_delimiter_override(self):
+        class AmpersandTemplate(Template):
+            delimiter = '&'
+        s = AmpersandTemplate('this &gift is for &{who} &&')
+        self.assertEqual(s.substitute(gift='bud', who='you'),
+                         'this bud is for you &')
+        self.assertRaises(KeyError, s.substitute)
+        self.assertEqual(s.safe_substitute(gift='bud', who='you'),
+                         'this bud is for you &')
+        self.assertEqual(s.safe_substitute(),
+                         'this &gift is for &{who} &')
+        s = AmpersandTemplate('this &gift is for &{who} &')
+        self.assertRaises(ValueError, s.substitute,
+                          dict(gift='bud', who='you'))
+        self.assertRaises(ValueError, s.safe_substitute)
 
 def test_main():
     from test import test_support
-    test_support.run_suite(suite())
+    test_classes = [TestTemplate,]
+    test_support.run_unittest(*test_classes)
 
 
 if __name__ == '__main__':
-    unittest.main()
+    test_main()
