Index: zorg-2.0.4/zorg/config.py
===================================================================
--- zorg-2.0.4.orig/zorg/config.py
+++ zorg-2.0.4/zorg/config.py
@@ -11,6 +11,21 @@ from zorg.parser import *
 from zorg.probe import VideoDevice, Monitor, Output
 from zorg.utils import *
 
+KEYMAP_CONF_TEMPLATE="""\
+# This file is generated by zorg. If you want to change settings
+# in this file, edit the file 10-keyboard.conf in the same
+# directory.
+
+Section "InputClass"
+    Identifier      "Configured Keymap"
+    MatchIsKeyboard "on"
+    MatchTag        "use_configured_keymap"
+
+    %(comment_layout)sOption          "xkb_layout"    "%(layout)s"
+    %(comment_variant)sOption          "xkb_variant"   "%(variant)s"
+EndSection
+"""
+
 def saveXorgConfig(card):
     parser = XorgParser()
 
@@ -265,7 +280,7 @@ def saveDeviceInfo(card):
     f = open(consts.config_file, "w")
     f.write(doc.toPrettyString().replace("\n\n", ""))
 
-def getKeymap():
+def getKeymapOld():
     layout = None
     variant = ""
 
@@ -297,24 +312,44 @@ def getKeymap():
 
     return layout, variant
 
-def saveKeymap(layout, variant=""):
-    if not os.path.exists(consts.config_dir):
-        os.mkdir(consts.config_dir, 0755)
+def getKeymap():
+    layout = None
+    variant = ""
 
     try:
-        doc = piksemel.parse(consts.config_file)
+        p = XorgParser()
+        p.parseFile(consts.keymap_conf)
+        section = p.getSections("InputClass")[0]
+        layout = section.get("xkb_layout")
+        variant = section.get("xkb_variant", "")
+
     except OSError:
-        doc = piksemel.newDocument("ZORG")
+        pass
+
+    if not layout:
+        from pardus.localedata import languages
 
-    keyboardTag = doc.getTag("Keyboard")
+        try:
+            language = file("/etc/mudur/language").read().strip()
+        except IOError:
+            language = "en"
+
+        if not languages.has_key(language):
+            language = "en"
 
-    if keyboardTag:
-        keyboardTag.hide()
+        keymap = languages[language].keymaps[0]
+        layout = keymap.xkb_layout
+        variant = keymap.xkb_variant
 
-    keyboardTag = doc.insertTag("Keyboard")
-    keyboardTag.insertTag("Layout").insertData(layout)
-    if variant:
-        keyboardTag.insertTag("Variant").insertData(variant)
+    return layout, variant
 
-    f = file(consts.config_file, "w")
-    f.write(doc.toPrettyString().replace("\n\n", ""))
+def saveKeymap(layout, variant=""):
+    opts = {"layout": layout,
+            "variant": variant,
+            "comment_layout": "" if layout else "#",
+            "comment_variant": "" if variant else "#"}
+
+    with open(consts.keymap_conf, "w") as f:
+        f.write(KEYMAP_CONF_TEMPLATE % opts)
+        f.flush()
+        os.fsync(f.fileno())
Index: zorg-2.0.4/zorg/consts.py
===================================================================
--- zorg-2.0.4.orig/zorg/consts.py
+++ zorg-2.0.4/zorg/consts.py
@@ -8,6 +8,7 @@ data_dir    = "/usr/share/X11"
 modules_dir = "/usr/lib/xorg/modules"
 
 xorg_conf_file      = "/etc/X11/xorg.conf"
+keymap_conf         = "/etc/X11/xorg.conf.d/00-configured-keymap.conf"
 config_file         = join(config_dir,  "config.xml")
 configured_bus_file = join(config_dir,  "configured_bus")
 drivers_file        = join(data_dir,    "DriversDB")
