diff --git a/AUTHORS b/AUTHORS
index 51198269c7..1c570bcb5c 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -39,6 +39,7 @@ Patches have also been contributed by:
   Jim Paris            <jim@jtan.com>
   Chris Lalancette     <clalance@redhat.com>
   Guido Guenther       <agx@sigxcpu.org>
+  Daniel Hokka Zakrisson <daniel@hozac.com>
 
   [....send patches to get your name here....]
 
diff --git a/ChangeLog b/ChangeLog
index 070f320a63..d81f622a85 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
-Mon Jan 15 09:18:53 EST 2008 Daniel P. Berrange <berrange@redhat.com>
+Tue Jan 15 10:01:53 EST 2008 Daniel P. Berrange <berrange@redhat.com>
+
+	* src/qemu_conf.h, src/qemu_conf.c: Add support for 'keymap'
+	parameter wrt to VNC servers (Daniel Hokka Zakrisson)
+
+Tue Jan 15 09:18:53 EST 2008 Daniel P. Berrange <berrange@redhat.com>
 
 	* src/remote_internal.c: Fix off by one in checking SSH
 	argv for NULL. Fix format args in error message to avoid
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index d03d989e22..922223e739 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -218,6 +218,7 @@ void qemudFreeVMDef(struct qemud_vm_def *def) {
         input = input->next;
         free(prev);
     }
+    xmlFree(def->keymap);
     free(def);
 }
 
@@ -1245,6 +1246,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
             else
                 strcpy(def->vncListen, driver->vncListen);
             def->vncListen[BR_INET_ADDR_MAXLEN-1] = '\0';
+            def->keymap = (char *) xmlGetProp(obj->nodesetval->nodeTab[0], BAD_CAST "keymap");
             xmlFree(vncport);
             xmlFree(vnclisten);
         } else if (!strcmp((char *)prop, "sdl")) {
@@ -1807,6 +1809,12 @@ int qemudBuildCommandLine(virConnectPtr conn,
             goto no_memory;
         if (!((*argv)[++n] = strdup(vncdisplay)))
             goto no_memory;
+        if (vm->def->keymap) {
+            if (!((*argv)[++n] = strdup("-k")))
+                goto no_memory;
+            if (!((*argv)[++n] = strdup(vm->def->keymap)))
+                goto no_memory;
+        }
     } else if (vm->def->graphicsType == QEMUD_GRAPHICS_NONE) {
         /* Nada - we added -nographic earlier in this function */
     } else {
@@ -2918,6 +2926,11 @@ char *qemudGenerateXML(virConnectPtr conn,
                               def->vncListen) < 0)
             goto no_memory;
 
+        if (def->keymap &&
+            virBufferVSprintf(buf, " keymap='%s'",
+                              def->keymap) < 0)
+            goto no_memory;
+
         if (virBufferAdd(buf, "/>\n", -1) < 0)
             goto no_memory;
         break;
diff --git a/src/qemu_conf.h b/src/qemu_conf.h
index e2c7514dae..7b242f7c75 100644
--- a/src/qemu_conf.h
+++ b/src/qemu_conf.h
@@ -206,6 +206,7 @@ struct qemud_vm_def {
     int vncPort;
     int vncActivePort;
     char vncListen[BR_INET_ADDR_MAXLEN];
+    char *keymap;
 
     int ndisks;
     struct qemud_vm_disk_def *disks;