diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 3fafa5d..90af888 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -152,7 +152,7 @@
 }
 
 static char buffer_doc[] =
-"buffer(object [, offset[, size]) -> object\n\
+"buffer(object [, offset[, size]]) -> object\n\
 \n\
 Creates a new buffer object which references the given object.\n\
 The buffer will reference a slice of the target object from the\n\
@@ -161,6 +161,30 @@
 
 
 static PyObject *
+builtin_unicode(self, args)
+	PyObject *self;
+	PyObject *args;
+{
+	char *s;
+	int len;
+	char *encoding = NULL;
+	char *errors = NULL;
+
+	if ( !PyArg_ParseTuple(args, "s#|ss:unicode", &s, &len, 
+			       &encoding, &errors) )
+	    return NULL;
+	return PyUnicode_Decode(s, len, encoding, errors);
+}
+
+static char unicode_doc[] =
+"unicode(string [, encoding[, errors]]) -> object\n\
+\n\
+Creates a new unicode object from the given encoded string.\n\
+encoding defaults to 'utf-8' and errors, defining the error handling,\n\
+to 'strict'.";
+
+
+static PyObject *
 builtin_callable(self, args)
 	PyObject *self;
 	PyObject *args;
@@ -312,6 +336,31 @@
 
 
 static PyObject *
+builtin_unichr(self, args)
+	PyObject *self;
+	PyObject *args;
+{
+	long x;
+	Py_UNICODE s[1];
+
+	if (!PyArg_ParseTuple(args, "l:unichr", &x))
+		return NULL;
+	if (x < 0 || x >= 65536) {
+		PyErr_SetString(PyExc_ValueError,
+				"unichr() arg not in range(65536)");
+		return NULL;
+	}
+	s[0] = (Py_UNICODE)x;
+	return PyUnicode_FromUnicode(s, 1);
+}
+
+static char unichr_doc[] =
+"unichr(i) -> unicode character\n\
+\n\
+Return a unicode string of one character with ordinal i; 0 <= i < 65536.";
+
+
+static PyObject *
 builtin_cmp(self, args)
 	PyObject *self;
 	PyObject *args;
@@ -1541,17 +1590,29 @@
 	PyObject *self;
 	PyObject *args;
 {
-	char c;
+	PyObject *obj;
+	long ord;
 
-	if (!PyArg_ParseTuple(args, "c:ord", &c))
+	if (!PyArg_ParseTuple(args, "O:ord", &obj))
 		return NULL;
-	return PyInt_FromLong((long)(c & 0xff));
+
+	if (PyString_Check(obj) && PyString_GET_SIZE(obj) == 1)
+		ord = (long)((unsigned char)*PyString_AS_STRING(obj));
+	else if (PyUnicode_Check(obj) && PyUnicode_GET_SIZE(obj) == 1)
+		ord = (long)*PyUnicode_AS_UNICODE(obj);
+	else {
+		PyErr_SetString(PyExc_TypeError,
+				"expected a string or unicode character");
+		return NULL;
+	}
+
+	return PyInt_FromLong(ord);
 }
 
 static char ord_doc[] =
 "ord(c) -> integer\n\
 \n\
-Return the integer ordinal of a one character string.";
+Return the integer ordinal of a one character [unicode] string.";
 
 
 static PyObject *
@@ -2227,6 +2288,8 @@
 	{"str",		builtin_str, 1, str_doc},
 	{"tuple",	builtin_tuple, 1, tuple_doc},
 	{"type",	builtin_type, 1, type_doc},
+	{"unicode",	builtin_unicode, 1, unicode_doc},
+	{"unichr",	builtin_unichr, 1, unichr_doc},
 	{"vars",	builtin_vars, 1, vars_doc},
 	{"xrange",	builtin_xrange, 1, xrange_doc},
 	{NULL,		NULL},
@@ -2259,6 +2322,7 @@
 PyObject *PyExc_SystemError;
 PyObject *PyExc_SystemExit;
 PyObject *PyExc_UnboundLocalError;
+PyObject *PyExc_UnicodeError;
 PyObject *PyExc_TypeError;
 PyObject *PyExc_ValueError;
 PyObject *PyExc_ZeroDivisionError;
@@ -2304,6 +2368,7 @@
 	{"SystemError",        &PyExc_SystemError,        1},
 	{"SystemExit",         &PyExc_SystemExit,         1},
 	{"UnboundLocalError",  &PyExc_UnboundLocalError,  1},
+	{"UnicodeError",       &PyExc_UnicodeError,       1},
 	{"TypeError",          &PyExc_TypeError,          1},
 	{"ValueError",         &PyExc_ValueError,         1},
 #ifdef MS_WINDOWS
@@ -2467,6 +2532,14 @@
 				 PyExc_NameError) != 0)
 		Py_FatalError("Cannot create string-based exceptions");
 
+	/* Make UnicodeError an alias for ValueError */
+	Py_INCREF(PyExc_ValueError);
+	Py_DECREF(PyExc_UnicodeError);
+	PyExc_UnicodeError = PyExc_ValueError;
+	if (PyDict_SetItemString(dict, "UnicodeError",
+				 PyExc_ValueError) != 0)
+		Py_FatalError("Cannot create string-based exceptions");
+
 	/* missing from the StandardError tuple: Exception, StandardError,
 	 * and SystemExit
 	 */
