diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index f43ac3a..235a91a 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -2435,22 +2435,22 @@
         self.check_wrapped(RuntimeError(msg), msg)
 
     @contextlib.contextmanager
-    def assertNotWrapped(self, operation, exc_type, msg):
+    def assertNotWrapped(self, operation, exc_type, msg_re, msg=None):
+        if msg is None:
+            msg = msg_re
         with self.assertRaisesRegex(exc_type, msg) as caught:
             yield caught
-        actual_msg = str(caught.exception)
-        self.assertNotIn(operation, actual_msg)
-        self.assertNotIn(self.codec_name, actual_msg)
+        self.assertEqual(str(caught.exception), msg)
 
-    def check_not_wrapped(self, obj_to_raise, msg):
+    def check_not_wrapped(self, obj_to_raise, msg_re, msg=None):
         self.set_codec(obj_to_raise)
-        with self.assertNotWrapped("encoding", RuntimeError, msg):
+        with self.assertNotWrapped("encoding", RuntimeError, msg_re, msg):
             "str input".encode(self.codec_name)
-        with self.assertNotWrapped("encoding", RuntimeError, msg):
+        with self.assertNotWrapped("encoding", RuntimeError, msg_re, msg):
             codecs.encode("str input", self.codec_name)
-        with self.assertNotWrapped("decoding", RuntimeError, msg):
+        with self.assertNotWrapped("decoding", RuntimeError, msg_re, msg):
             b"bytes input".decode(self.codec_name)
-        with self.assertNotWrapped("decoding", RuntimeError, msg):
+        with self.assertNotWrapped("decoding", RuntimeError, msg_re, msg):
             codecs.decode(b"bytes input", self.codec_name)
 
     def test_init_override_is_not_wrapped(self):
@@ -2475,8 +2475,23 @@
         self.check_not_wrapped(RuntimeError(1), "1")
 
     def test_multiple_args_is_not_wrapped(self):
-        msg = "\('a', 'b', 'c'\)"
-        self.check_not_wrapped(RuntimeError('a', 'b', 'c'), msg)
+        msg_re = "\('a', 'b', 'c'\)"
+        msg = "('a', 'b', 'c')"
+        self.check_not_wrapped(RuntimeError('a', 'b', 'c'), msg_re, msg)
+
+    # http://bugs.python.org/issue19609
+    def test_codec_lookup_failure_not_wrapped(self):
+        msg = "unknown encoding: %s" % self.codec_name
+        # The initial codec lookup should not be wrapped
+        with self.assertNotWrapped("encoding", LookupError, msg):
+            "str input".encode(self.codec_name)
+        with self.assertNotWrapped("encoding", LookupError, msg):
+            codecs.encode("str input", self.codec_name)
+        with self.assertNotWrapped("decoding", LookupError, msg):
+            b"bytes input".decode(self.codec_name)
+        with self.assertNotWrapped("decoding", LookupError, msg):
+            codecs.decode(b"bytes input", self.codec_name)
+
 
 
 @unittest.skipUnless(sys.platform == 'win32',
diff --git a/Python/codecs.c b/Python/codecs.c
index e2edc26..fe0cab4 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -370,8 +370,10 @@
         goto onError;
 
     result = PyEval_CallObject(encoder, args);
-    if (result == NULL)
+    if (result == NULL) {
+        wrap_codec_error("encoding", encoding);
         goto onError;
+    }
 
     if (!PyTuple_Check(result) ||
         PyTuple_GET_SIZE(result) != 2) {
@@ -392,7 +394,6 @@
     Py_XDECREF(result);
     Py_XDECREF(args);
     Py_XDECREF(encoder);
-    wrap_codec_error("encoding", encoding);
     return NULL;
 }
 
@@ -418,8 +419,10 @@
         goto onError;
 
     result = PyEval_CallObject(decoder,args);
-    if (result == NULL)
+    if (result == NULL) {
+        wrap_codec_error("decoding", encoding);
         goto onError;
+    }
     if (!PyTuple_Check(result) ||
         PyTuple_GET_SIZE(result) != 2) {
         PyErr_SetString(PyExc_TypeError,
@@ -439,7 +442,6 @@
     Py_XDECREF(args);
     Py_XDECREF(decoder);
     Py_XDECREF(result);
-    wrap_codec_error("decoding", encoding);
     return NULL;
 }
 
