diff --git a/src/if_py_both.h b/src/if_py_both.h
index 64b7e54..71c30af 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -18,7 +18,7 @@
 #endif
 
 #ifdef FEAT_MBYTE
-# define ENC_OPT p_enc
+# define ENC_OPT ((char *)p_enc)
 #else
 # define ENC_OPT "latin1"
 #endif
@@ -92,28 +92,29 @@
 StringToChars(PyObject *object, PyObject **todecref)
 {
     char_u	*p;
-    PyObject	*bytes = NULL;
 
     if (PyBytes_Check(object))
     {
 
-	if (PyString_AsStringAndSize(object, (char **) &p, NULL) == -1)
-	    return NULL;
-	if (p == NULL)
+	if (PyBytes_AsStringAndSize(object, (char **) &p, NULL) == -1
+		|| p == NULL)
 	    return NULL;
 
 	*todecref = NULL;
     }
     else if (PyUnicode_Check(object))
     {
-	bytes = PyUnicode_AsEncodedString(object, (char *)ENC_OPT, NULL);
-	if (bytes == NULL)
+	PyObject	*bytes;
+
+	if (!(bytes = PyUnicode_AsEncodedString(object, ENC_OPT, NULL)))
 	    return NULL;
 
-	if(PyString_AsStringAndSize(bytes, (char **) &p, NULL) == -1)
+	if(PyBytes_AsStringAndSize(bytes, (char **) &p, NULL) == -1
+		|| p == NULL)
+	{
+	    Py_DECREF(bytes);
 	    return NULL;
-	if (p == NULL)
-	    return NULL;
+	}
 
 	*todecref = bytes;
     }
@@ -133,6 +134,7 @@
 
     if (!(string = PyString_FromString(s)))
 	return -1;
+
     if (PyList_Append(list, string))
     {
 	Py_DECREF(string);
@@ -534,10 +536,8 @@
     }
 
     if (our_tv->v_type == VAR_STRING)
-    {
 	result = PyString_FromString(our_tv->vval.v_string == NULL
 					? "" : (char *)our_tv->vval.v_string);
-    }
     else if (our_tv->v_type == VAR_NUMBER)
     {
 	char buf[NUMBUFLEN];
@@ -3385,22 +3385,31 @@
     static char *
 StringToLine(PyObject *obj)
 {
-    const char *str;
-    char *save;
-    PyObject *bytes;
-    PyInt len;
-    PyInt i;
-    char *p;
+    char	*str;
+    char	*save;
+    PyObject	*bytes = NULL;
+    Py_ssize_t	len;
+    PyInt	i;
+    char	*p;
 
-    if (obj == NULL || !PyString_Check(obj))
+    if (PyBytes_Check(obj))
     {
-	PyErr_BadArgument();
-	return NULL;
+	if (PyBytes_AsStringAndSize(obj, &str, &len) == -1
+		|| str == NULL)
+	    return NULL;
     }
+    else if (PyUnicode_Check(obj))
+    {
+	if (!(bytes = PyUnicode_AsEncodedString(obj, ENC_OPT, NULL)))
+	    return NULL;
 
-    bytes = PyString_AsBytes(obj);  /* for Python 2 this does nothing */
-    str = PyString_AsString(bytes);
-    len = PyString_Size(bytes);
+	if(PyBytes_AsStringAndSize(bytes, &str, &len) == -1
+		|| str == NULL)
+	{
+	    Py_DECREF(bytes);
+	    return NULL;
+	}
+    }
 
     /*
      * Error checking: String must not contain newlines, as we
@@ -3439,7 +3448,7 @@
     }
 
     save[i] = '\0';
-    PyString_FreeBytes(bytes);  /* Python 2 does nothing here */
+    Py_XDECREF(bytes);  /* Python 2 does nothing here */
 
     return save;
 }
@@ -3568,10 +3577,10 @@
 
 	return OK;
     }
-    else if (PyString_Check(line))
+    else if (PyBytes_Check(line) || PyUnicode_Check(line))
     {
-	char *save = StringToLine(line);
-	buf_T *savebuf;
+	char	*save = StringToLine(line);
+	buf_T	*savebuf;
 
 	if (save == NULL)
 	    return FAIL;
@@ -3821,7 +3830,7 @@
     /* First of all, we check the type of the supplied Python object.
      * It must be a string or a list, or the call is in error.
      */
-    if (PyString_Check(lines))
+    if (PyBytes_Check(lines) || PyUnicode_Check(lines))
     {
 	char	*str = StringToLine(lines);
 	buf_T	*savebuf;
@@ -5254,7 +5263,7 @@
     {
 	char_u	*result;
 
-	if (PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1)
+	if (PyBytes_AsStringAndSize(obj, (char **) &result, NULL) == -1)
 	    return -1;
 	if (result == NULL)
 	    return -1;
@@ -5269,11 +5278,11 @@
 	PyObject	*bytes;
 	char_u	*result;
 
-	bytes = PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, NULL);
+	bytes = PyUnicode_AsEncodedString(obj, ENC_OPT, NULL);
 	if (bytes == NULL)
 	    return -1;
 
-	if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1)
+	if(PyBytes_AsStringAndSize(bytes, (char **) &result, NULL) == -1)
 	    return -1;
 	if (result == NULL)
 	    return -1;
diff --git a/src/if_python.c b/src/if_python.c
index 4a7c9d2..ed51119 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -68,12 +68,9 @@
 #undef main /* Defined in python.h - aargh */
 #undef HAVE_FCNTL_H /* Clash with os_win32.h */
 
-#define PyBytes_FromString PyString_FromString
-#define PyBytes_Check PyString_Check
-
-/* No-op conversion functions, use with care! */
-#define PyString_AsBytes(obj) (obj)
-#define PyString_FreeBytes(obj)
+#define PyBytes_FromString      PyString_FromString
+#define PyBytes_Check           PyString_Check
+#define PyBytes_AsStringAndSize PyString_AsStringAndSize
 
 #if !defined(FEAT_PYTHON) && defined(PROTO)
 /* Use this to be able to generate prototypes without python being used. */
diff --git a/src/if_python3.c b/src/if_python3.c
index d53d601..9052e41 100644
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -84,13 +84,8 @@
 
 #define PyInt Py_ssize_t
 #define PyString_Check(obj) PyUnicode_Check(obj)
-#define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER)
-#define PyString_FreeBytes(obj) Py_XDECREF(bytes)
-#define PyString_AsString(obj) PyBytes_AsString(obj)
-#define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
 #define PyString_FromString(repr) PyUnicode_FromString(repr)
 #define PyString_FromFormat PyUnicode_FromFormat
-#define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len)
 #define PyInt_Check(obj) PyLong_Check(obj)
 #define PyInt_FromLong(i) PyLong_FromLong(i)
 #define PyInt_AsLong(obj) PyLong_AsLong(obj)
@@ -357,7 +352,7 @@
 # endif
 static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
 static char* (*py3_PyBytes_AsString)(PyObject *bytes);
-static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, int *length);
+static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, Py_ssize_t *length);
 static PyObject* (*py3_PyBytes_FromString)(char *str);
 static PyObject* (*py3_PyFloat_FromDouble)(double num);
 static double (*py3_PyFloat_AsDouble)(PyObject *);
diff --git a/src/version.c b/src/version.c
index 29a1b28..2fc01b6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1228,
+/**/
     1227,
 /**/
     1226,
