diff --git a/Lib/re.py b/Lib/re.py
index b701bb6..e0d363f 100644
--- a/Lib/re.py
+++ b/Lib/re.py
@@ -44,6 +44,20 @@
 #
 #
 
+def valid_identifier(id):
+    if len(id) == 0:
+	return 0
+    if ('word' not in syntax_table[id[0]]) or ('digit' in syntax_table[id[0]]):
+	return 0
+    for char in id[1:]:
+	if 'word' not in syntax_table[char]:
+	    return 0
+    return 1
+
+#
+#
+#
+
 def match(pattern, string, flags=0):
     return compile(pattern, flags).match(string)
 
@@ -787,13 +801,15 @@
 			raise error, 'extension ends prematurely'
 
 		    elif pattern[index] == '<':
-			# Handle Python symbolic group names (?<...>...)
+			# Handle Python symbolic group names (?P<...>...)
 			index = index + 1
 			end = string.find(pattern, '>', index)
 			if end == -1:
 			    raise error, 'no end to symbolic group name'
 			name = pattern[index:end]
-			# XXX check syntax of name
+			if not valid_identifier(name):
+			    raise error, ('symbolic group name must be a '
+					  'valid identifier')
 			index = end + 1
 			groupindex[name] = register
 			stack.append([OpenParen(register)])
@@ -808,7 +824,7 @@
 			if end == -1:
 			    raise error, 'no ) to end symbolic group name'
 			name = pattern[start:end]
-			if name not in groupindex:
+			if name not in groupindex.keys():
 			    raise error, ('symbolic group name ' + name + \
 					  ' has not been used yet')
 			stack.append([MatchMemory(groupindex[name])])
@@ -1148,8 +1164,11 @@
 		stack.append([Exact(char)])
 
 	elif char == '[':
+	    # compile character class
+	    
 	    if index >= len(pattern):
-		raise error, 'incomplete set'
+		raise error, 'unclosed character class'
+	    
 	    negate = 0
 	    last = ''
 	    set = []
@@ -1157,42 +1176,64 @@
 	    if pattern[index] == '^':
 		negate = 1
 		index = index + 1
-	    if index >= len(pattern):
-		raise error, 'incomplete set'
+		if index >= len(pattern):
+		    raise error, 'unclosed character class'
 
+	    if pattern[index] == ']':
+		set.append(']')
+		index = index + 1
+		if index >= len(pattern):
+		    raise error, 'unclosed character class'
+		
+	    elif pattern[index] == '-':
+		set.append('-')
+		index = index + 1
+		if index >= len(pattern):
+		    raise error, 'unclosed character class'
+		
 	    while (index < len(pattern)) and (pattern[index] != ']'):
 		next = pattern[index]
 		index = index + 1
 		if next == '-':
-		    if last == '':
-			raise error, 'improper use of range in character set'
+		    if index >= len(pattern):
+			raise error, 'incomplete range in character class'
 
-		    start = last
-		    
-		    if (index >= len(pattern)) or (pattern[index] == ']'):
-			raise error, 'incomplete range in set'
-		    
-		    if pattern[index] == '\\':
-			escape_type, value, index = expand_escape(pattern,
-								  index + 1,
-								  CHARCLASS)
-
-			if escape_type == CHAR:
-			    end = value
-			else:
-			    raise error, ('illegal escape in character '
-					  'class range')
-		    else:
-			end = pattern[index]
+		    elif pattern[index] == ']':
+			set.append('-')
 			
-		    if start > end:
-			raise error, 'range arguments out of order in set'
-		    for char in map(chr, range(ord(start), ord(end) + 1)):
-			if char not in set:
-			    set.append(char)
+		    else:
+			if last == '':
+			    raise error, ('improper use of range in '
+					  'character class')
+
+			start = last
+			
+			if pattern[index] == '\\':
+			    escape_type,
+			    value,
+			    index = expand_escape(pattern,
+						  index + 1,
+						  CHARCLASS)
+
+			    if escape_type == CHAR:
+				end = value
+				
+			    else:
+				raise error, ('illegal escape in character '
+					      'class range')
+			else:
+			    end = pattern[index]
+			    index = index + 1
+
+			if start > end:
+			    raise error, ('range arguments out of order '
+					  'in character class')
+			
+			for char in map(chr, range(ord(start), ord(end) + 1)):
+			    if char not in set:
+				set.append(char)
 			    
-		    last = ''
-		    index = index + 1
+			last = ''
 
 		elif next == '\\':
 		    # expand syntax meta-characters and add to set
