diff --git a/Lib/test/output/test_charmapcodec b/Lib/test/output/test_charmapcodec
index 9b15894..646ccd3 100644
--- a/Lib/test/output/test_charmapcodec
+++ b/Lib/test/output/test_charmapcodec
@@ -1 +1,16 @@
 test_charmapcodec
+u'abc' == u'abc': OK
+u'abcdef' == u'abcdef': OK
+u'defabc' == u'defabc': OK
+u'dabcf' == u'dabcf': OK
+u'dabcfabc' == u'dabcfabc': OK
+'abc' == 'abc': OK
+'abcdef' == 'abcdef': OK
+'defabc' == 'defabc': OK
+'dabcf' == 'dabcf': OK
+'dabcfabc' == 'dabcfabc': OK
+u'def' == u'def': OK
+u'def' == u'def': OK
+u'df' == u'df': OK
+u'df' == u'df': OK
+\001 maps to undefined: OK
diff --git a/Lib/test/test_charmapcodec.py b/Lib/test/test_charmapcodec.py
index 21251fb..ca33cdb 100644
--- a/Lib/test/test_charmapcodec.py
+++ b/Lib/test/test_charmapcodec.py
@@ -1,65 +1,44 @@
-""" Python Character Mapping Codec test
+""" Python character mapping codec test
+
+This uses the test codec in testcodec.py and thus also tests the
+encodings package lookup scheme.
 
 Written by Marc-Andre Lemburg (mal@lemburg.com).
 
 (c) Copyright 2000 Guido van Rossum.
 
 """#"
-import codecs
-
-### Codec APIs
-
-class Codec(codecs.Codec):
-
-    def encode(self,input,errors='strict'):
-
-        return codecs.charmap_encode(input,errors,encoding_map)
-        
-    def decode(self,input,errors='strict'):
-
-        return codecs.charmap_decode(input,errors,decoding_map)
-
-class StreamWriter(Codec,codecs.StreamWriter):
-    pass
-        
-class StreamReader(Codec,codecs.StreamReader):
-    pass
-
-### encodings module API
-
-def getregentry():
-
-    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
-
-### Decoding Map
-
-decoding_map = codecs.make_identity_dict(range(256))
-decoding_map.update({
-        0x0078: u"abc",
-        "abc": 0x0078,
-})
-
-### Encoding Map
-
-encoding_map = {}
-for k,v in decoding_map.items():
-    encoding_map[v] = k
-
-
-### Tests
 
 def check(a, b):
     if a != b:
         print '*** check failed: %s != %s' % (repr(a), repr(b))
-    
-check(unicode('abc', 'mycp'), u'abc')
-check(unicode('xdef', 'mycp'), u'abcdef')
-check(unicode('defx', 'mycp'), u'defabc')
-check(unicode('dxf', 'mycp'), u'dabcf')
-check(unicode('dxfx', 'mycp'), u'dabcfabc')
+    else:
+        print '%s == %s: OK' % (repr(a), repr(b))
 
-check(u'abc'.encode('mycp'), 'abc')
-check(u'xdef'.encode('mycp'), 'abcdef')
-check(u'defx'.encode('mycp'), 'defabc')
-check(u'dxf'.encode('mycp'), 'dabcf')
-check(u'dxfx'.encode('mycp'), 'dabcfabc')
+# test codec's full path name (see test/testcodec.py)
+codecname = 'testcodec'
+    
+check(unicode('abc', codecname), u'abc')
+check(unicode('xdef', codecname), u'abcdef')
+check(unicode('defx', codecname), u'defabc')
+check(unicode('dxf', codecname), u'dabcf')
+check(unicode('dxfx', codecname), u'dabcfabc')
+
+check(u'abc'.encode(codecname), 'abc')
+check(u'xdef'.encode(codecname), 'abcdef')
+check(u'defx'.encode(codecname), 'defabc')
+check(u'dxf'.encode(codecname), 'dabcf')
+check(u'dxfx'.encode(codecname), 'dabcfabc')
+
+check(unicode('ydef', codecname), u'def')
+check(unicode('defy', codecname), u'def')
+check(unicode('dyf', codecname), u'df')
+check(unicode('dyfy', codecname), u'df')
+
+try:
+    unicode('abc\001', codecname)
+except UnicodeError:
+    print '\\001 maps to undefined: OK'
+else:
+    print '*** check failed: \\001 does not map to undefined'
+    
diff --git a/Lib/test/testcodec.py b/Lib/test/testcodec.py
new file mode 100644
index 0000000..0cf9b07
--- /dev/null
+++ b/Lib/test/testcodec.py
@@ -0,0 +1,49 @@
+""" Test Codecs (used by test_charmapcodec)
+
+Written by Marc-Andre Lemburg (mal@lemburg.com).
+
+(c) Copyright 2000 Guido van Rossum.
+
+"""#"
+import codecs
+
+### Codec APIs
+
+class Codec(codecs.Codec):
+
+    def encode(self,input,errors='strict'):
+
+        return codecs.charmap_encode(input,errors,encoding_map)
+        
+    def decode(self,input,errors='strict'):
+
+        return codecs.charmap_decode(input,errors,decoding_map)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+        
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
+
+### Decoding Map
+
+decoding_map = codecs.make_identity_dict(range(256))
+decoding_map.update({
+        0x78: u"abc", # 1-n decoding mapping
+        "abc": 0x0078,# 1-n encoding mapping
+        0x01: None,   # decoding mapping to <undefined>
+        0x79: u"",    # decoding mapping to <remove character>
+})
+
+### Encoding Map
+
+encoding_map = {}
+for k,v in decoding_map.items():
+    encoding_map[v] = k
+
