diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index 6e5c587..73689ef 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -758,7 +758,9 @@
 			datalen, ctx->errors, final ? MBENC_FLUSH : 0);
 	if (r == NULL) {
 		/* recover the original pending buffer */
-		memcpy(ctx->pending, inbuf_tmp, Py_UNICODE_SIZE * origpending);
+		if (origpending > 0)
+			memcpy(ctx->pending, inbuf_tmp,
+				Py_UNICODE_SIZE * origpending);
 		ctx->pendingsize = origpending;
 		goto errorexit;
 	}
@@ -887,17 +889,9 @@
 mbiencoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	MultibyteIncrementalEncoderObject *self;
-	PyObject *codec;
+	PyObject *codec = NULL;
 	char *errors = NULL;
 
-	codec = PyObject_GetAttrString((PyObject *)type, "codec");
-	if (codec == NULL)
-		return NULL;
-	if (!MultibyteCodec_Check(codec)) {
-		PyErr_SetString(PyExc_TypeError, "codec is unexpected type");
-		return NULL;
-	}
-
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|s:IncrementalEncoder",
 					 incnewkwarglist, &errors))
 		return NULL;
@@ -906,6 +900,14 @@
 	if (self == NULL)
 		return NULL;
 
+	codec = PyObject_GetAttrString((PyObject *)type, "codec");
+	if (codec == NULL)
+		goto errorexit;
+	if (!MultibyteCodec_Check(codec)) {
+		PyErr_SetString(PyExc_TypeError, "codec is unexpected type");
+		goto errorexit;
+	}
+
 	self->codec = ((MultibyteCodecObject *)codec)->codec;
 	self->pendingsize = 0;
 	self->errors = internal_error_callback(errors);
@@ -915,10 +917,12 @@
 	    self->codec->encinit(&self->state, self->codec->config) != 0)
 		goto errorexit;
 
+	Py_DECREF(codec);
 	return (PyObject *)self;
 
 errorexit:
 	Py_XDECREF(self);
+	Py_XDECREF(codec);
 	return NULL;
 }
 
@@ -1080,17 +1084,9 @@
 mbidecoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	MultibyteIncrementalDecoderObject *self;
-	PyObject *codec;
+	PyObject *codec = NULL;
 	char *errors = NULL;
 
-	codec = PyObject_GetAttrString((PyObject *)type, "codec");
-	if (codec == NULL)
-		return NULL;
-	if (!MultibyteCodec_Check(codec)) {
-		PyErr_SetString(PyExc_TypeError, "codec is unexpected type");
-		return NULL;
-	}
-
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|s:IncrementalDecoder",
 					 incnewkwarglist, &errors))
 		return NULL;
@@ -1099,6 +1095,14 @@
 	if (self == NULL)
 		return NULL;
 
+	codec = PyObject_GetAttrString((PyObject *)type, "codec");
+	if (codec == NULL)
+		goto errorexit;
+	if (!MultibyteCodec_Check(codec)) {
+		PyErr_SetString(PyExc_TypeError, "codec is unexpected type");
+		goto errorexit;
+	}
+
 	self->codec = ((MultibyteCodecObject *)codec)->codec;
 	self->pendingsize = 0;
 	self->errors = internal_error_callback(errors);
@@ -1108,10 +1112,12 @@
 	    self->codec->decinit(&self->state, self->codec->config) != 0)
 		goto errorexit;
 
+	Py_DECREF(codec);
 	return (PyObject *)self;
 
 errorexit:
 	Py_XDECREF(self);
+	Py_XDECREF(codec);
 	return NULL;
 }
 
@@ -1381,17 +1387,9 @@
 mbstreamreader_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	MultibyteStreamReaderObject *self;
-	PyObject *codec, *stream;
+	PyObject *stream, *codec = NULL;
 	char *errors = NULL;
 
-	codec = PyObject_GetAttrString((PyObject *)type, "codec");
-	if (codec == NULL)
-		return NULL;
-	if (!MultibyteCodec_Check(codec)) {
-		PyErr_SetString(PyExc_TypeError, "codec is unexpected type");
-		return NULL;
-	}
-
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|s:StreamReader",
 				streamkwarglist, &stream, &errors))
 		return NULL;
@@ -1400,6 +1398,14 @@
 	if (self == NULL)
 		return NULL;
 
+	codec = PyObject_GetAttrString((PyObject *)type, "codec");
+	if (codec == NULL)
+		goto errorexit;
+	if (!MultibyteCodec_Check(codec)) {
+		PyErr_SetString(PyExc_TypeError, "codec is unexpected type");
+		goto errorexit;
+	}
+
 	self->codec = ((MultibyteCodecObject *)codec)->codec;
 	self->stream = stream;
 	Py_INCREF(stream);
@@ -1411,10 +1417,12 @@
 	    self->codec->decinit(&self->state, self->codec->config) != 0)
 		goto errorexit;
 
+	Py_DECREF(codec);
 	return (PyObject *)self;
 
 errorexit:
 	Py_XDECREF(self);
+	Py_XDECREF(codec);
 	return NULL;
 }
 
@@ -1501,6 +1509,7 @@
 	if (wr == NULL)
 		return -1;
 
+	Py_DECREF(wr);
 	return 0;
 }
 
@@ -1583,17 +1592,9 @@
 mbstreamwriter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	MultibyteStreamWriterObject *self;
-	PyObject *codec, *stream;
+	PyObject *stream, *codec = NULL;
 	char *errors = NULL;
 
-	codec = PyObject_GetAttrString((PyObject *)type, "codec");
-	if (codec == NULL)
-		return NULL;
-	if (!MultibyteCodec_Check(codec)) {
-		PyErr_SetString(PyExc_TypeError, "codec is unexpected type");
-		return NULL;
-	}
-
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|s:StreamWriter",
 				streamkwarglist, &stream, &errors))
 		return NULL;
@@ -1602,6 +1603,14 @@
 	if (self == NULL)
 		return NULL;
 
+	codec = PyObject_GetAttrString((PyObject *)type, "codec");
+	if (codec == NULL)
+		goto errorexit;
+	if (!MultibyteCodec_Check(codec)) {
+		PyErr_SetString(PyExc_TypeError, "codec is unexpected type");
+		goto errorexit;
+	}
+
 	self->codec = ((MultibyteCodecObject *)codec)->codec;
 	self->stream = stream;
 	Py_INCREF(stream);
@@ -1613,10 +1622,12 @@
 	    self->codec->encinit(&self->state, self->codec->config) != 0)
 		goto errorexit;
 
+	Py_DECREF(codec);
 	return (PyObject *)self;
 
 errorexit:
 	Py_XDECREF(self);
+	Py_XDECREF(codec);
 	return NULL;
 }
 
diff --git a/Modules/cjkcodecs/multibytecodec.h b/Modules/cjkcodecs/multibytecodec.h
index 671ecae..22ea5d4 100644
--- a/Modules/cjkcodecs/multibytecodec.h
+++ b/Modules/cjkcodecs/multibytecodec.h
@@ -123,10 +123,10 @@
 #define ERROR_IGNORE		(PyObject *)(2)
 #define ERROR_REPLACE		(PyObject *)(3)
 #define ERROR_ISCUSTOM(p)	((p) < ERROR_STRICT || ERROR_REPLACE < (p))
-#define ERROR_DECREF(p) do {		\
-	if (ERROR_ISCUSTOM(p)) {	\
-		Py_DECREF(p);		\
-	}				\
+#define ERROR_DECREF(p) do {			\
+	if (p != NULL && ERROR_ISCUSTOM(p)) {	\
+		Py_DECREF(p);			\
+	}					\
 } while (0);
 
 #define MBENC_FLUSH		0x0001 /* encode all characters encodable */
