diff --git a/Python/ceval.c b/Python/ceval.c
index 2b501c79..5d0a8e4 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1565,21 +1565,42 @@
 			else {
 				object *args = newtupleobject(na);
 				object *kwdict = NULL;
-				if (args == NULL)
+				if (args == NULL) {
 					x = NULL;
-				else if (nk > 0) {
-					err_setstr(SystemError,
-			"calling built-in with keywords not yet implemented");
-					x = NULL;
+					break;
 				}
-				else {
-					while (--na >= 0) {
-						w = POP();
-						SETTUPLEITEM(args, na, w);
+				if (nk > 0) {
+					kwdict = newdictobject();
+					if (kwdict == NULL) {
+						x = NULL;
+						break;
 					}
-					x = call_object(func, args);
-					DECREF(args);
+					err = 0;
+					while (--nk >= 0) {
+						object *value = POP();
+						object *key = POP();
+						err = mappinginsert(
+							kwdict, key, value);
+						if (err) {
+							DECREF(key);
+							DECREF(value);
+							break;
+						}
+					}
+					if (err) {
+						DECREF(args);
+						DECREF(kwdict);
+						break;
+					}
 				}
+				while (--na >= 0) {
+					w = POP();
+					SETTUPLEITEM(args, na, w);
+				}
+				x = PyEval_CallObjectWithKeywords(
+					func, args, kwdict);
+				DECREF(args);
+				XDECREF(kwdict);
 			}
 			DECREF(func);
 			while (stack_pointer > pfunc) {
@@ -2281,25 +2302,28 @@
 	object *arg;
 	object *kw;
 {
-	if (kw != NULL) {
-		err_setstr(SystemError,
-			"calling built-in with keywords not yet implemented");
-		return NULL;
-	}
 	if (is_methodobject(func)) {
 		method meth = getmethod(func);
 		object *self = getself(func);
-		if (!getvarargs(func)) {
+		int flags = getflags(func);
+		if (!(flags & METH_VARARGS)) {
 			int size = gettuplesize(arg);
 			if (size == 1)
 				arg = GETTUPLEITEM(arg, 0);
 			else if (size == 0)
 				arg = NULL;
 		}
+		if (flags & METH_KEYWORDS)
+			return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
+		if (kw != NULL) {
+			err_setstr(TypeError,
+				   "this function takes no keyword arguments");
+			return NULL;
+		}
 		return (*meth)(self, arg);
 	}
 	if (is_classobject(func)) {
-		return newinstanceobject(func, arg);
+		return newinstanceobject(func, arg, kw);
 	}
 	if (is_instanceobject(func)) {
 	        object *res, *call = getattr(func,"__call__");
@@ -2309,7 +2333,7 @@
 				   "no __call__ method defined");
 			return NULL;
 		}
-		res = call_object(call, arg);
+		res = PyEval_CallObjectWithKeywords(call, arg, kw);
 		DECREF(call);
 		return res;
 	}
