diff --git a/Module.hs b/Module.hs
new file mode 100644
--- /dev/null
+++ b/Module.hs
@@ -0,0 +1,95 @@
+{-# OPTIONS_GHC -Wall #-}
+-----------------------------------------------------------------------------
+-- |
+-- Copyright   :  (C) 2014 Edward Kmett and Gabríel Arthúr Pétursson
+-- License     :  BSD-style (see the file LICENSE.gl)
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  experimental
+-- Portability :  portable
+--
+----------------------------------------------------------------------------
+module Module
+  ( Module(..)
+  , Export(..)
+  , Body(..)
+  , renderModule
+  , saveModule
+  ) where
+
+import Data.List
+import System.Directory
+import System.FilePath
+import Text.Printf
+import Utils
+
+data Module = Module
+  { moduleName :: String
+  , moduleExport :: [Export]
+  , moduleBody :: [Body]
+  } deriving (Eq, Show)
+
+data Export
+  = Section
+    { sectionHeading :: String
+    , sectionExport :: [String]
+    }
+  | Subsection
+    { sectionHeading :: String
+    , sectionExport :: [String]
+    } deriving (Eq, Show)
+
+data Body
+  = Import [String]
+  | Function String String String
+  | Pattern String (Maybe String) String
+  | Code String
+  deriving (Eq, Show)
+
+renderModule :: Module -> String
+renderModule m =
+  printf 
+    ("-- This file was automatically generated.\n" ++
+    "{-# LANGUAGE CPP, ScopedTypeVariables, PatternSynonyms #-}\n" ++
+    "module %s%s where\n\n%s")
+     (moduleName m) (renderExports $ moduleExport m) (intercalate "\n\n" . map renderBody $ moduleBody m)
+
+
+renderExports :: [Export] -> String
+renderExports [] = ""
+renderExports exports =
+    printf " (\n%s)"
+  . intercalate "\n"
+  . zipWith renderExport (True : repeat False)
+  $ filter nonEmpty exports
+  where
+    renderExport :: Bool -> Export -> String
+    renderExport first (Section heading export) =
+      printf "  -- * %s\n  %s %s"
+        heading
+        (if first then " " else ",")
+        ((++"\n") . intercalate "\n  , " $ export)
+    renderExport first (Subsection heading export) =
+      printf "  -- ** %s\n  %s %s"
+        heading
+        (if first then " " else ",")
+        ((++"\n") . intercalate "\n  , " $ export)
+    nonEmpty :: Export -> Bool
+    nonEmpty (Section _ []) = False
+    nonEmpty (Subsection _ []) = False
+    nonEmpty _ = True
+
+renderBody :: Body -> String
+renderBody body = case body of
+  Import m -> intercalate "\n" $ map (printf "import %s") m
+  Function name signature b -> printf "%s :: %s\n%s %s" name signature name b
+  Pattern name (Just signature) b -> printf "pattern %s %s :: %s" name b signature
+  Pattern name Nothing b -> printf "pattern %s %s" name b
+  Code code -> code
+
+saveModule :: FilePath -> Module -> IO ()
+saveModule fp m = do
+  createDirectoryIfMissing True folderPath
+  writeFile filePath $ renderModule m
+  where
+    filePath = fp </> replace "." [pathSeparator] (moduleName m) <.> "hs"
+    folderPath = intercalate [pathSeparator] . init $ splitOn [pathSeparator] filePath
diff --git a/Text/XkbCommon/InternalTypes.hsc b/Text/XkbCommon/InternalTypes.hsc
--- a/Text/XkbCommon/InternalTypes.hsc
+++ b/Text/XkbCommon/InternalTypes.hsc
@@ -1,4 +1,6 @@
 {-# LANGUAGE CPP, EmptyDataDecls, GeneralizedNewtypeDeriving, TemplateHaskell #-}
+-- | This module is intended to be used only when interoperating with other C libraries.
+-- For other usecases, `Text.XkbCommon.Types` is probably preferable.
 module Text.XkbCommon.InternalTypes
    ( Context, CContext, InternalContext, toContext, fromContext, withContext,
      ContextFlags(..), defaultFlags,
diff --git a/Text/XkbCommon/ParseDefines.hs b/Text/XkbCommon/ParseDefines.hs
--- a/Text/XkbCommon/ParseDefines.hs
+++ b/Text/XkbCommon/ParseDefines.hs
@@ -12,11 +12,11 @@
 -- this function calls the c preprocessor to find out what the full path to a header file is.
 readHeader :: String -> IO (String, String)
 readHeader str = do
-   cpp_out <- readProcess "cpp" [] ("#include<" ++ str ++ ">")
-   -- parse output:
-   let headerfile = read $ head $ map ((!! 2) . words) (filter (isInfixOf str) $ lines cpp_out)
-   header <- readFile headerfile
-   return (headerfile, header)
+  cpp_out <- readProcess "cpp" [] ("#include<" ++ str ++ ">")
+  -- parse output:
+  let headerfile = read $ head $ map ((!! 2) . words) (filter (isInfixOf str) $ lines cpp_out)
+  header <- readFile headerfile
+  return (headerfile, header)
 
 getKeysymDefs :: IO [(String,Integer)]
 getKeysymDefs = do
@@ -35,7 +35,8 @@
 genKeycodes :: IO [Dec]
 genKeycodes = do
    (headerFilename, keysyms_header) <- readHeader "linux/input.h"
-   (_, defs) <- macroPassReturningSymTab [] defaultBoolOptions [(newfile headerFilename, keysyms_header)]
+   preprocessed <- cppIfdef headerFilename [] [] defaultBoolOptions keysyms_header
+   (_, defs) <- macroPassReturningSymTab [] defaultBoolOptions preprocessed
    let exclude_defs = []
    let filtered_defs = filter (\ (name, val) -> isPrefixOf "KEY_" name && notElem name exclude_defs && isJust (maybeRead val :: Maybe Int)) defs
    let parsed_defs = map (drop 4 *** read) filtered_defs
diff --git a/Utils.hs b/Utils.hs
new file mode 100644
--- /dev/null
+++ b/Utils.hs
@@ -0,0 +1,30 @@
+{-# OPTIONS_GHC -Wall #-}
+-----------------------------------------------------------------------------
+-- |
+-- Copyright   :  (C) 2014 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE.gl)
+-- Maintainer  :  Edward Kmett <ekmett@gmail.com>
+-- Stability   :  experimental
+-- Portability :  portable
+--
+-- Simple string munging utilities
+----------------------------------------------------------------------------
+module Utils (splitOn, strip, replace) where
+
+import Data.Char (isSpace)
+import Data.List (intercalate, isPrefixOf)
+
+strip :: String -> String
+strip = dropWhile isSpace . reverse . dropWhile isSpace . reverse
+
+replace :: Eq a => [a] -> [a] -> [a] -> [a]
+replace a b = intercalate b . splitOn a
+
+splitOn :: Eq a => [a] -> [a] -> [[a]]
+splitOn _ [] = []
+splitOn xs ys0 = go [] ys0 where
+  go acc ys
+    | isPrefixOf xs ys = reverse acc : go [] (drop (length xs) ys)
+    | otherwise = case ys of
+      z:zs -> go (z:acc) zs
+      [] -> [reverse acc]
diff --git a/data/compat/accessx b/data/compat/accessx
new file mode 100644
--- /dev/null
+++ b/data/compat/accessx
@@ -0,0 +1,52 @@
+default partial xkb_compatibility "basic" {
+    interpret AccessX_Enable { 
+	action= LockControls(controls=AccessXKeys); 
+    };
+};
+
+partial xkb_compatibility "full" {
+
+    interpret AccessX_Enable {
+	action= LockControls(controls=AccessXKeys); 
+    };
+
+    interpret AccessX_Feedback_Enable { 
+	action= LockControls(controls=AccessXFeedback); 
+    };
+
+    interpret RepeatKeys_Enable {
+	action= LockControls(controls=RepeatKeys);
+    };
+
+    interpret SlowKeys_Enable {
+	action= LockControls(controls=SlowKeys);
+    };
+
+    interpret BounceKeys_Enable {
+	action= LockControls(controls=BounceKeys);
+    };
+
+    interpret StickyKeys_Enable {
+	action= LockControls(controls=StickyKeys);
+    };
+
+    interpret MouseKeys_Enable {
+	action= LockControls(controls=MouseKeys);
+    };
+
+    interpret MouseKeys_Accel_Enable {
+	action= LockControls(controls=MouseKeysAccel);
+    };
+
+    interpret Overlay1_Enable {
+	action= LockControls(controls=Overlay1);
+    };
+
+    interpret Overlay2_Enable {
+	action= LockControls(controls=Overlay2);
+    };
+
+    interpret AudibleBell_Enable {
+	action= LockControls(controls=AudibleBell);
+    };
+};
diff --git a/data/compat/basic b/data/compat/basic
new file mode 100644
--- /dev/null
+++ b/data/compat/basic
@@ -0,0 +1,48 @@
+// Minimal set of symbol interpretations to provide 
+// reasonable default behavior (Num lock, shift and 
+// caps lock and mode switch) and set up the 
+// automatic updating of common keyboard LEDs.
+
+default xkb_compatibility "basic"  {
+    virtual_modifiers NumLock,AltGr;
+
+    interpret.repeat= False;
+    setMods.clearLocks= True;
+    latchMods.clearLocks= True;
+    latchMods.latchToLock= True;
+
+    interpret Shift_Lock+AnyOf(Shift+Lock) {
+	action= LockMods(modifiers=Shift);
+    };
+
+    interpret Any+Lock {
+	action= LockMods(modifiers=Lock);
+    };
+
+    interpret Num_Lock+Any {
+	virtualModifier= NumLock;
+	action= LockMods(modifiers=NumLock);
+    };
+
+    interpret Mode_switch {
+	useModMapMods= level1;
+	virtualModifier= AltGr;
+	action= SetGroup(group=+1);
+    };
+
+    interpret Any + Any {
+	action= SetMods(modifiers=modMapMods);
+    };
+
+    group 2 = AltGr;
+    group 3 = AltGr;
+    group 4 = AltGr;
+
+    include "ledcaps"
+    include "lednum"
+    indicator "Shift Lock" {
+	!allowExplicit;
+	whichModState= Locked;
+	modifiers= Shift;
+    };
+};
diff --git a/data/compat/caps b/data/compat/caps
new file mode 100644
--- /dev/null
+++ b/data/compat/caps
@@ -0,0 +1,12 @@
+partial xkb_compatibility "caps_lock"  {
+    // Keysym Caps_Lock locks Lock modifier.
+    // With this, the keysym Caps_Lock can be used without binding the whole
+    // key to a real modifier.
+	// This is essential when you don't want to use caps lock on the first
+	// level.
+	// This should not have any compatibility issues when used together with
+	// other layouts which don't utilize this capability.
+    interpret Caps_Lock {
+        action = LockMods(modifiers = Lock);
+    };
+};
diff --git a/data/compat/complete b/data/compat/complete
new file mode 100644
--- /dev/null
+++ b/data/compat/complete
@@ -0,0 +1,10 @@
+default xkb_compatibility "complete"  {
+    include "basic"
+    augment "iso9995"
+    augment "mousekeys"
+    augment "accessx(full)"
+    augment "misc"
+    augment "xfree86"
+    augment "level5"
+    augment "caps(caps_lock)"
+};
diff --git a/data/compat/iso9995 b/data/compat/iso9995
new file mode 100644
--- /dev/null
+++ b/data/compat/iso9995
@@ -0,0 +1,76 @@
+// Fairly complete set of symbol interpretations 
+// to provide reasonable default behavior
+
+default partial xkb_compatibility "default"  {
+    virtual_modifiers LevelThree,AltGr;
+
+    interpret.repeat= False;
+    setMods.clearLocks= True;
+    latchMods.clearLocks= True;
+    latchMods.latchToLock= True;
+
+    interpret ISO_Level2_Latch+Shift {
+	useModMapMods= level1;
+	action= LatchMods(modifiers=Shift);
+    };
+
+    interpret ISO_Level3_Shift+Any {
+	useModMapMods= level1;
+	virtualModifier= LevelThree;
+	action= SetMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Shift {
+	action= SetMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Latch+Any {
+	useModMapMods= level1;
+	virtualModifier= LevelThree;
+	action= LatchMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Latch {
+	action= LatchMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Lock+Any {
+	useModMapMods= level1;
+	virtualModifier= LevelThree;
+	action= LockMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Lock {
+	action= LockMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Group_Latch {
+	useModMapMods= level1;
+	virtualModifier= AltGr;
+	action= LatchGroup(group=2);
+    };
+
+    interpret ISO_Next_Group {
+	useModMapMods= level1;
+	virtualModifier= AltGr;
+	action= LockGroup(group=+1);
+    };
+
+    interpret ISO_Prev_Group {
+	useModMapMods= level1;
+	virtualModifier= AltGr;
+	action= LockGroup(group=-1);
+    };
+    interpret ISO_First_Group {
+	action= LockGroup(group=1);
+    };
+
+    interpret ISO_Last_Group {
+	action= LockGroup(group=2);
+    };
+
+    indicator "Group 2" {
+	!allowExplicit;
+	groups= All-Group1;
+    };
+};
diff --git a/data/compat/ledcaps b/data/compat/ledcaps
new file mode 100644
--- /dev/null
+++ b/data/compat/ledcaps
@@ -0,0 +1,23 @@
+// Use Caps Lock LED to show either Caps Lock, Group, or Shift Lock state
+
+default partial xkb_compatibility "caps_lock"   {
+   indicator "Caps Lock" {
+       !allowExplicit;
+       whichModState= Locked;
+       modifiers= Lock;
+   };
+};
+
+partial xkb_compatibility "group_lock"   {
+   indicator "Caps Lock" {
+       modifiers= None;
+       groups=All-group1;
+   };
+};
+
+partial xkb_compatibility "shift_lock"   {
+   indicator "Caps Lock" {
+       whichModState= Locked;
+       modifiers= Shift;
+   };
+};
diff --git a/data/compat/lednum b/data/compat/lednum
new file mode 100644
--- /dev/null
+++ b/data/compat/lednum
@@ -0,0 +1,23 @@
+// Use Num Lock LED to show either Num Lock, Group, or Shift Lock state
+
+default partial xkb_compatibility "num_lock"   {
+    indicator "Num Lock" {
+       !allowExplicit;
+       whichModState= Locked;
+       modifiers= NumLock;
+   };
+};
+
+partial xkb_compatibility "group_lock"   {
+   indicator "Num Lock" {
+       modifiers= None;
+       groups=All-group1;
+   };
+};
+
+partial xkb_compatibility "shift_lock"   {
+   indicator "Num Lock" {
+       whichModState= Locked;
+       modifiers= Shift;
+   };
+};
diff --git a/data/compat/ledscroll b/data/compat/ledscroll
new file mode 100644
--- /dev/null
+++ b/data/compat/ledscroll
@@ -0,0 +1,23 @@
+// Use Scroll Lock LED to show either Scroll Lock, Group, or Shift Lock state
+
+default partial xkb_compatibility "scroll_lock"   {
+   indicator "Scroll Lock" {
+       allowExplicit;
+       whichModState= Locked;
+       modifiers= ScrollLock;
+   };
+};
+
+partial xkb_compatibility "group_lock"   {
+   indicator "Scroll Lock" {
+       modifiers= None;
+       groups=All-group1;
+   };
+};
+
+partial xkb_compatibility "shift_lock"   {
+   indicator "Scroll Lock" {
+       whichModState= Locked;
+       modifiers= Shift;
+   };
+};
diff --git a/data/compat/level5 b/data/compat/level5
new file mode 100644
--- /dev/null
+++ b/data/compat/level5
@@ -0,0 +1,51 @@
+// Fairly complete set of symbol interpretations 
+// to provide reasonable default behavior
+
+default partial xkb_compatibility "default"  {
+    virtual_modifiers LevelFive;
+
+    interpret.repeat= False;
+    setMods.clearLocks= True;
+    latchMods.clearLocks= True;
+    latchMods.latchToLock= True;
+
+    interpret ISO_Level5_Shift+Any {
+	useModMapMods= level1;
+	virtualModifier= LevelFive;
+	action= SetMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Shift {
+	action= SetMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Latch+Any {
+	virtualModifier= LevelFive;
+	action= LatchMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Latch {
+	action= LatchMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Lock+Any {
+	virtualModifier= LevelFive;
+	action= LockMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Lock {
+	action= LockMods(modifiers=LevelFive);
+    };
+};
+partial xkb_compatibility "level5_lock"  {
+	// This defines a Level5-Lock using the NumLock real modifier in order to
+	// create arbitrary level-behaviour, which would not be possible with the
+	// virtual modifier.
+	// See also: types/level5 : EIGHT_LEVEL_LEVEL_FIVE_LOCK
+	// See also: symbols/level5(lock)
+    virtual_modifiers NumLock;
+    
+    interpret ISO_Level5_Lock {
+        action = LockMods(modifiers = NumLock);
+    };
+};
diff --git a/data/compat/misc b/data/compat/misc
new file mode 100644
--- /dev/null
+++ b/data/compat/misc
@@ -0,0 +1,122 @@
+default partial xkb_compatibility "misc"  {
+
+    virtual_modifiers	Alt,Meta,Super,Hyper,ScrollLock;
+
+    // Interpretations for some other useful keys
+
+    interpret Terminate_Server {
+        action = Terminate();
+    };
+
+    setMods.clearLocks= True;
+
+    // Sets the "Alt" virtual modifier
+
+    interpret Alt_L+Any     {
+        //useModMapMods= level1;
+	virtualModifier= Alt;
+	action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Alt_L	{
+	action = SetMods(modifiers=Alt);
+    };
+
+    interpret Alt_R+Any     {
+        //useModMapMods= level1;
+	virtualModifier= Alt;
+	action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Alt_R	{
+	action = SetMods(modifiers=Alt);
+    };
+
+    // Sets the "Meta" virtual modifier
+
+    interpret Meta_L+Any     {
+//        useModMapMods= level1;
+	virtualModifier= Meta;
+	action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Meta_L	{
+	action = SetMods(modifiers=Meta);
+    };
+
+    interpret Meta_R+Any     {
+        //useModMapMods= level1;
+	virtualModifier= Meta;
+	action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Meta_R	{
+	action = SetMods(modifiers=Meta);
+    };
+
+    // Sets the "Super" virtual modifier
+
+    interpret Super_L+Any     {
+//        useModMapMods= level1;
+	virtualModifier= Super;
+	action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Super_L	{
+	action = SetMods(modifiers=Super);
+    };
+
+    interpret Super_R+Any     {
+        //useModMapMods= level1;
+	virtualModifier= Super;
+	action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Super_R	{
+	action = SetMods(modifiers=Super);
+    };
+
+    // Sets the "Hyper" virtual modifier
+
+    interpret Hyper_L+Any     {
+//        useModMapMods= level1;
+	virtualModifier= Hyper;
+	action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Hyper_L	{
+	action = SetMods(modifiers=Hyper);
+    };
+
+    interpret Hyper_R+Any     {
+        //useModMapMods= level1;
+	virtualModifier= Hyper;
+	action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Hyper_R	{
+	action = SetMods(modifiers=Hyper);
+    };
+
+    // Sets the "ScrollLock" virtual modifier and
+    // makes it actually lock when pressed.  Sets
+    // up a map for the scroll lock indicator.
+    interpret Scroll_Lock+Any	{
+	virtualModifier= ScrollLock;
+	action = LockMods(modifiers=modMapMods);
+    };
+
+    include "ledscroll"
+	
+    include "misc(assign_shift_left_action)"
+};
+
+partial xkb_compatibility "assign_shift_left_action"  {
+    // Because of the irrevertable modifier mapping in symbols/pc <LFSH> is 
+    // getting bound to the Lock modifier when using 
+    // symbols/shift(both_capslock), creating unwanted behaviour. 
+    // This is a quirk, to circumvent the problem.
+    interpret Shift_L {
+        action = SetMods(modifiers = Shift);
+    };
+};
diff --git a/data/compat/mousekeys b/data/compat/mousekeys
new file mode 100644
--- /dev/null
+++ b/data/compat/mousekeys
@@ -0,0 +1,202 @@
+// Interpretations for arrow keys and a bunch of other 
+// common keysyms which make it possible to bind "mouse" 
+// keys using xmodmap and activate or deactivate them 
+// from the keyboard.
+
+default partial xkb_compatibility "mousekeys" {
+
+    // Keypad actions.
+    //
+    interpret.repeat= True;
+
+    interpret KP_1 { 
+	action = MovePtr(x=-1,y= +1); 
+    };
+    interpret KP_End { 
+	action = MovePtr(x=-1,y= +1); 
+    };
+
+    interpret KP_2 { 
+	action = MovePtr(x=+0,y= +1); 
+    };
+    interpret KP_Down { 
+	action = MovePtr(x=+0,y= +1); 
+    };
+
+    interpret KP_3 { 
+	action = MovePtr(x=+1,y=+1); 
+    };
+    interpret KP_Next { 
+ 	action = MovePtr(x=+1,y=+1); 
+    };
+
+    interpret KP_4 { 
+	action = MovePtr(x=-1,y=+0); 
+    };
+    interpret KP_Left { 
+	action = MovePtr(x=-1,y=+0); 
+    };
+
+    interpret KP_6 { 
+	action = MovePtr(x=+1,y=+0); 
+    };
+    interpret KP_Right { 
+ 	action = MovePtr(x=+1,y=+0); 
+    };
+
+    interpret KP_7 { 
+	action = MovePtr(x=-1,y=-1); 
+    };
+    interpret KP_Home { 
+	action = MovePtr(x=-1,y=-1); 
+    };
+
+    interpret KP_8 { 
+	action = MovePtr(x=+0,y=-1); 
+    };
+    interpret KP_Up { 
+	action = MovePtr(x=+0,y=-1); 
+    };
+
+    interpret KP_9 { 
+	action = MovePtr(x=+1,y=-1); 
+    };
+    interpret KP_Prior { 
+	action = MovePtr(x=+1,y=-1); 
+    };
+
+    interpret KP_5 { 
+	action = PointerButton(button=default); 
+    };
+    interpret KP_Begin { 
+	action = PointerButton(button=default); 
+    };
+
+    interpret KP_F2 { 
+	action = SetPtrDflt(affect=defaultButton,button=1); 
+    };
+    interpret KP_Divide { 
+	action = SetPtrDflt(affect=defaultButton,button=1); 
+    };
+
+    interpret KP_F3 { 
+	action = SetPtrDflt(affect=defaultButton,button=2); 
+    };
+    interpret KP_Multiply { 
+	action = SetPtrDflt(affect=defaultButton,button=2); 
+    };
+
+    interpret KP_F4 { 
+	action = SetPtrDflt(affect=defaultButton,button=3); 
+    };
+    interpret KP_Subtract { 
+	action = SetPtrDflt(affect=defaultButton,button=3); 
+    };
+
+    interpret KP_Separator { 
+	action = PointerButton(button=default,count=2); 
+    };
+    interpret KP_Add { 
+	action = PointerButton(button=default,count=2);
+    };
+
+    interpret KP_0 { 
+	action = LockPointerButton(button=default,affect=lock); 
+    };
+    interpret KP_Insert { 
+	action = LockPointerButton(button=default,affect=lock); 
+    };
+
+    interpret KP_Decimal { 
+	action = LockPointerButton(button=default,affect=unlock); 
+    };
+    interpret KP_Delete { 
+	action = LockPointerButton(button=default,affect=unlock); 
+    };
+
+    // Additional mappings for Solaris keypad compatibility
+    interpret F25 { // aka KP_Divide
+	action = SetPtrDflt(affect=defaultButton,button=1); 
+    };
+    interpret F26 { // aka KP_Multiply
+	action = SetPtrDflt(affect=defaultButton,button=2); 
+    };
+    interpret F27 { // aka KP_Home
+	action = MovePtr(x=-1,y=-1); 
+    };
+    interpret F29 { // aka KP_Prior
+	action = MovePtr(x=+1,y=-1); 
+    };
+    interpret F31 { // aka KP_Begin
+	action = PointerButton(button=default); 
+    };
+    interpret F33 { // aka KP_End
+	action = MovePtr(x=-1,y= +1); 
+    };
+    interpret F35 { // aka KP_Next
+ 	action = MovePtr(x=+1,y=+1); 
+    };
+
+    interpret.repeat= False;
+
+
+    // New Keysym Actions.
+    //
+    interpret Pointer_Button_Dflt {
+	action= PointerButton(button=default);
+    };
+    interpret Pointer_Button1 {
+	action= PointerButton(button=1);
+    };
+    interpret Pointer_Button2 {
+	action= PointerButton(button=2);
+    };
+    interpret Pointer_Button3 {
+	action= PointerButton(button=3);
+    };
+    interpret Pointer_DblClick_Dflt {
+	action= PointerButton(button=default,count=2);
+    };
+    interpret Pointer_DblClick1 {
+	action= PointerButton(button=1,count=2);
+    };
+    interpret Pointer_DblClick2 {
+	action= PointerButton(button=2,count=2);
+    };
+    interpret Pointer_DblClick3 {
+	action= PointerButton(button=3,count=2);
+    };
+    interpret Pointer_Drag_Dflt	{
+	action= LockPointerButton(button=default);
+    };
+    interpret Pointer_Drag1 {
+	action= LockPointerButton(button=1);
+    };
+    interpret Pointer_Drag2 {
+	action= LockPointerButton(button=2);
+    };
+    interpret Pointer_Drag3 {
+	action= LockPointerButton(button=3);
+    };
+
+    interpret Pointer_EnableKeys {
+	action= LockControls(controls=MouseKeys);
+    };
+    interpret Pointer_Accelerate {
+	action= LockControls(controls=MouseKeysAccel);
+    };
+    interpret Pointer_DfltBtnNext {
+	action= SetPtrDflt(affect=defaultButton,button= +1);
+    };
+    interpret Pointer_DfltBtnPrev {
+	action= SetPtrDflt(affect=defaultButton,button= -1);
+    };
+
+
+    // Allow an indicator for MouseKeys.
+    indicator "Mouse Keys" {
+//	!allowExplicit;
+	indicatorDrivesKeyboard;
+	controls= MouseKeys;
+    };
+};
diff --git a/data/compat/pc b/data/compat/pc
new file mode 100644
--- /dev/null
+++ b/data/compat/pc
@@ -0,0 +1,17 @@
+default partial xkb_compatibility "pc"  {
+
+    // Sets the "Alt" virtual modifier
+
+    virtual_modifiers	Alt;
+
+    setMods.clearLocks= True;
+    interpret Alt_L+Any     { 
+	virtualModifier= Alt;
+	action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Alt_R+Any	{
+	virtualModifier= Alt;
+	action = SetMods(modifiers=modMapMods);
+    };
+};
diff --git a/data/compat/xfree86 b/data/compat/xfree86
new file mode 100644
--- /dev/null
+++ b/data/compat/xfree86
@@ -0,0 +1,66 @@
+//  XFree86 special keysyms
+
+default partial xkb_compatibility "basic"  {
+
+    interpret.repeat= True;
+
+    interpret  XF86_Switch_VT_1 {
+        action = SwitchScreen(Screen=1, !SameServer);
+    };
+    interpret  XF86_Switch_VT_2 {
+        action = SwitchScreen(Screen=2, !SameServer);
+    };
+    interpret  XF86_Switch_VT_3 {
+        action = SwitchScreen(Screen=3, !SameServer);
+    };
+    interpret  XF86_Switch_VT_4 {
+        action = SwitchScreen(Screen=4, !SameServer);
+    };
+    interpret  XF86_Switch_VT_5 {
+        action = SwitchScreen(Screen=5, !SameServer);
+    };
+    interpret  XF86_Switch_VT_6 {
+        action = SwitchScreen(Screen=6, !SameServer);
+    };
+    interpret  XF86_Switch_VT_7 {
+        action = SwitchScreen(Screen=7, !SameServer);
+    };
+    interpret  XF86_Switch_VT_8 {
+        action = SwitchScreen(Screen=8, !SameServer);
+    };
+    interpret  XF86_Switch_VT_9 {
+        action = SwitchScreen(Screen=9, !SameServer);
+    };
+    interpret  XF86_Switch_VT_10 {
+        action = SwitchScreen(Screen=10, !SameServer);
+    };
+    interpret  XF86_Switch_VT_11 {
+        action = SwitchScreen(Screen=11, !SameServer);
+    };
+    interpret  XF86_Switch_VT_12 {
+        action = SwitchScreen(Screen=12, !SameServer);
+    };
+
+    interpret XF86LogGrabInfo {
+        action = Private(type=0x86, data="PrGrbs");
+    };
+    interpret XF86LogWindowTree {
+        action = Private(type=0x86, data="PrWins");
+    };
+
+    interpret XF86_Next_VMode {
+        action = Private(type=0x86, data="+VMode");
+    };
+    interpret XF86_Prev_VMode {
+        action = Private(type=0x86, data="-VMode");
+    };
+};
+
+partial xkb_compatibility "grab_break" {
+    interpret XF86_Ungrab {
+        action = Private(type=0x86, data="Ungrab");
+    };
+    interpret XF86_ClearGrab {
+        action = Private(type=0x86, data="ClsGrb");
+    };
+};
diff --git a/data/keycodes/aliases b/data/keycodes/aliases
new file mode 100644
--- /dev/null
+++ b/data/keycodes/aliases
@@ -0,0 +1,99 @@
+
+// keycode aliases for phonetic keyboard maps
+
+default
+xkb_keycodes "qwerty" {
+
+   alias <LatQ> = <AD01>;
+   alias <LatW> = <AD02>;
+   alias <LatE> = <AD03>;
+   alias <LatR> = <AD04>;
+   alias <LatT> = <AD05>;
+   alias <LatY> = <AD06>;
+   alias <LatU> = <AD07>;
+   alias <LatI> = <AD08>;
+   alias <LatO> = <AD09>;
+   alias <LatP> = <AD10>;
+
+   alias <LatA> = <AC01>;
+   alias <LatS> = <AC02>;
+   alias <LatD> = <AC03>;
+   alias <LatF> = <AC04>;
+   alias <LatG> = <AC05>;
+   alias <LatH> = <AC06>;
+   alias <LatJ> = <AC07>;
+   alias <LatK> = <AC08>;
+   alias <LatL> = <AC09>;
+
+   alias <LatZ> = <AB01>;
+   alias <LatX> = <AB02>;
+   alias <LatC> = <AB03>;
+   alias <LatV> = <AB04>;
+   alias <LatB> = <AB05>;
+   alias <LatN> = <AB06>;
+   alias <LatM> = <AB07>;
+};
+
+xkb_keycodes "azerty" {
+
+   alias <LatA> = <AD01>;
+   alias <LatZ> = <AD02>;
+   alias <LatE> = <AD03>;
+   alias <LatR> = <AD04>;
+   alias <LatT> = <AD05>;
+   alias <LatY> = <AD06>;
+   alias <LatU> = <AD07>;
+   alias <LatI> = <AD08>;
+   alias <LatO> = <AD09>;
+   alias <LatP> = <AD10>;
+
+   alias <LatQ> = <AC01>;
+   alias <LatS> = <AC02>;
+   alias <LatD> = <AC03>;
+   alias <LatF> = <AC04>;
+   alias <LatG> = <AC05>;
+   alias <LatH> = <AC06>;
+   alias <LatJ> = <AC07>;
+   alias <LatK> = <AC08>;
+   alias <LatL> = <AC09>;
+   alias <LatM> = <AC10>;
+
+   alias <LatW> = <AB01>;
+   alias <LatX> = <AB02>;
+   alias <LatC> = <AB03>;
+   alias <LatV> = <AB04>;
+   alias <LatB> = <AB05>;
+   alias <LatN> = <AB06>;
+};
+
+xkb_keycodes "qwertz" {
+
+   alias <LatQ> = <AD01>;
+   alias <LatW> = <AD02>;
+   alias <LatE> = <AD03>;
+   alias <LatR> = <AD04>;
+   alias <LatT> = <AD05>;
+   alias <LatZ> = <AD06>;
+   alias <LatU> = <AD07>;
+   alias <LatI> = <AD08>;
+   alias <LatO> = <AD09>;
+   alias <LatP> = <AD10>;
+
+   alias <LatA> = <AC01>;
+   alias <LatS> = <AC02>;
+   alias <LatD> = <AC03>;
+   alias <LatF> = <AC04>;
+   alias <LatG> = <AC05>;
+   alias <LatH> = <AC06>;
+   alias <LatJ> = <AC07>;
+   alias <LatK> = <AC08>;
+   alias <LatL> = <AC09>;
+
+   alias <LatY> = <AB01>;
+   alias <LatX> = <AB02>;
+   alias <LatC> = <AB03>;
+   alias <LatV> = <AB04>;
+   alias <LatB> = <AB05>;
+   alias <LatN> = <AB06>;
+   alias <LatM> = <AB07>;
+};
diff --git a/data/keycodes/aliases-xkbcommon b/data/keycodes/aliases-xkbcommon
new file mode 100644
--- /dev/null
+++ b/data/keycodes/aliases-xkbcommon
@@ -0,0 +1,99 @@
+
+// keycode aliases for phonetic keyboard maps
+
+default
+xkb_keycodes "qwerty" {
+
+   alias <LatQ> = <Q>;
+   alias <LatW> = <W>;
+   alias <LatE> = <E>;
+   alias <LatR> = <R>;
+   alias <LatT> = <T>;
+   alias <LatY> = <Y>;
+   alias <LatU> = <U>;
+   alias <LatI> = <I>;
+   alias <LatO> = <O>;
+   alias <LatP> = <P>;
+
+   alias <LatA> = <A>;
+   alias <LatS> = <S>;
+   alias <LatD> = <D>;
+   alias <LatF> = <F>;
+   alias <LatG> = <G>;
+   alias <LatH> = <H>;
+   alias <LatJ> = <J>;
+   alias <LatK> = <K>;
+   alias <LatL> = <L>;
+
+   alias <LatZ> = <Z>;
+   alias <LatX> = <X>;
+   alias <LatC> = <C>;
+   alias <LatV> = <V>;
+   alias <LatB> = <B>;
+   alias <LatN> = <N>;
+   alias <LatM> = <M>;
+};
+
+xkb_keycodes "azerty" {
+
+   alias <LatA> = <Q>;
+   alias <LatZ> = <W>;
+   alias <LatE> = <E>;
+   alias <LatR> = <R>;
+   alias <LatT> = <T>;
+   alias <LatY> = <Y>;
+   alias <LatU> = <U>;
+   alias <LatI> = <I>;
+   alias <LatO> = <O>;
+   alias <LatP> = <P>;
+
+   alias <LatQ> = <A>;
+   alias <LatS> = <S>;
+   alias <LatD> = <D>;
+   alias <LatF> = <F>;
+   alias <LatG> = <G>;
+   alias <LatH> = <H>;
+   alias <LatJ> = <J>;
+   alias <LatK> = <K>;
+   alias <LatL> = <L>;
+   alias <LatM> = <SEMICOLON>;
+
+   alias <LatW> = <Z>;
+   alias <LatX> = <X>;
+   alias <LatC> = <C>;
+   alias <LatV> = <V>;
+   alias <LatB> = <B>;
+   alias <LatN> = <N>;
+};
+
+xkb_keycodes "qwertz" {
+
+   alias <LatQ> = <Q>;
+   alias <LatW> = <W>;
+   alias <LatE> = <E>;
+   alias <LatR> = <R>;
+   alias <LatT> = <T>;
+   alias <LatZ> = <Y>;
+   alias <LatU> = <U>;
+   alias <LatI> = <I>;
+   alias <LatO> = <O>;
+   alias <LatP> = <P>;
+
+   alias <LatA> = <A>;
+   alias <LatS> = <S>;
+   alias <LatD> = <D>;
+   alias <LatF> = <F>;
+   alias <LatG> = <G>;
+   alias <LatH> = <H>;
+   alias <LatJ> = <J>;
+   alias <LatK> = <K>;
+   alias <LatL> = <L>;
+
+   alias <LatY> = <Z>;
+   alias <LatX> = <X>;
+   alias <LatC> = <C>;
+   alias <LatV> = <V>;
+   alias <LatB> = <B>;
+   alias <LatN> = <N>;
+   alias <LatM> = <M>;
+};
diff --git a/data/keycodes/empty b/data/keycodes/empty
new file mode 100644
--- /dev/null
+++ b/data/keycodes/empty
@@ -0,0 +1,4 @@
+default xkb_keycodes "empty" {
+    minimum= 8;
+    maximum= 255;
+};
diff --git a/data/keycodes/evdev b/data/keycodes/evdev
new file mode 100644
--- /dev/null
+++ b/data/keycodes/evdev
@@ -0,0 +1,314 @@
+// translation from evdev scancodes to something resembling xfree86 keycodes.
+
+default xkb_keycodes "evdev" {
+	minimum = 8;
+	maximum = 255;
+
+        # Added for pc105 compatibility
+        <LSGT> = 94;
+
+	<TLDE> = 49;
+	<AE01> = 10;
+	<AE02> = 11;
+	<AE03> = 12;
+	<AE04> = 13;
+	<AE05> = 14;
+	<AE06> = 15;
+	<AE07> = 16;
+	<AE08> = 17;
+	<AE09> = 18;
+	<AE10> = 19;
+	<AE11> = 20;
+	<AE12> = 21;
+	<BKSP> = 22;
+
+	<TAB> = 23;
+	<AD01> = 24;
+	<AD02> = 25;
+	<AD03> = 26;
+	<AD04> = 27;
+	<AD05> = 28;
+	<AD06> = 29;
+	<AD07> = 30;
+	<AD08> = 31;
+	<AD09> = 32;
+	<AD10> = 33;
+	<AD11> = 34;
+	<AD12> = 35;
+	<BKSL> = 51;
+	alias <AC12> = <BKSL>;
+	<RTRN> = 36;
+
+	<CAPS> = 66;
+	<AC01> = 38;
+	<AC02> = 39;
+	<AC03> = 40;
+	<AC04> = 41;
+	<AC05> = 42;
+	<AC06> = 43;
+	<AC07> = 44;
+	<AC08> = 45;
+	<AC09> = 46;
+	<AC10> = 47;
+	<AC11> = 48;
+
+	<LFSH> = 50;
+	<AB01> = 52;
+	<AB02> = 53;
+	<AB03> = 54;
+	<AB04> = 55;
+	<AB05> = 56;
+	<AB06> = 57;
+	<AB07> = 58;
+	<AB08> = 59;
+	<AB09> = 60;
+	<AB10> = 61;
+	<RTSH> = 62;
+
+	<LALT> = 64;
+	<LCTL> = 37;
+	<SPCE> = 65;
+	<RCTL> = 105;
+	<RALT> = 108;
+	// Microsoft keyboard extra keys
+	<LWIN> = 133;
+	<RWIN> = 134;
+	<COMP> = 135;
+	alias <MENU> = <COMP>;
+
+	<ESC> = 9;
+	<FK01> = 67;
+	<FK02> = 68;
+	<FK03> = 69;
+	<FK04> = 70;
+	<FK05> = 71;
+	<FK06> = 72;
+	<FK07> = 73;
+	<FK08> = 74;
+	<FK09> = 75;
+	<FK10> = 76;
+	<FK11> = 95;
+	<FK12> = 96;
+
+	<PRSC> = 107;
+	// <SYRQ> = 107;
+	<SCLK> = 78;
+	<PAUS> = 127;
+	// <BRK> = 419;
+
+	<INS> = 118;
+	<HOME> = 110;
+	<PGUP> = 112;
+	<DELE> = 119;
+	<END> = 115;
+	<PGDN> = 117;
+
+	<UP> = 111;
+	<LEFT> = 113;
+	<DOWN> = 116;
+	<RGHT> = 114;
+
+	<NMLK> = 77;
+	<KPDV> = 106;
+	<KPMU> = 63;
+	<KPSU> = 82;
+
+	<KP7> = 79;
+	<KP8> = 80;
+	<KP9> = 81;
+	<KPAD> = 86;
+
+	<KP4> = 83;
+	<KP5> = 84;
+	<KP6> = 85;
+
+	<KP1> = 87;
+	<KP2> = 88;
+	<KP3> = 89;
+	<KPEN> = 104;
+
+	<KP0> = 90;
+	<KPDL> = 91;
+	<KPEQ> = 125;
+
+	<FK13> = 191;
+	<FK14> = 192;
+	<FK15> = 193;
+	<FK16> = 194;
+	<FK17> = 195;
+	<FK18> = 196;
+	<FK19> = 197;
+	<FK20> = 198;
+	<FK21> = 199;
+	<FK22> = 200;
+	<FK23> = 201;
+	<FK24> = 202;
+
+	// Keys that are generated on Japanese keyboards
+
+	//<HZTG> =  93;	// Hankaku/Zenkakau toggle - not actually used
+	alias <HZTG> = <TLDE>;
+	<HKTG> = 101;	// Hiragana/Katakana toggle
+	<AB11> = 97;	// backslash/underscore
+	<HENK> = 100;	// Henkan
+	<MUHE> = 102;	// Muhenkan
+	<AE13> = 132;	// Yen
+	<KATA> =  98;	// Katakana
+	<HIRA> =  99;	// Hiragana
+	<JPCM> = 103;	// KPJPComma
+	//<RO>   =  97;	// Romaji
+
+	// Keys that are generated on Korean keyboards
+
+	<HNGL> = 130;	// Hangul Latin toggle
+	<HJCV> = 131;	// Hangul to Hanja conversion
+
+	// Solaris compatibility
+
+	alias <LMTA> = <LWIN>;
+	alias <RMTA> = <RWIN>;
+	<MUTE> = 121;
+	<VOL-> = 122;
+	<VOL+> = 123;
+	<POWR> = 124;
+	<STOP> = 136;
+	<AGAI> = 137;
+	<PROP> = 138;
+	<UNDO> = 139;
+	<FRNT> = 140;
+	<COPY> = 141;
+	<OPEN> = 142;
+	<PAST> = 143;
+	<FIND> = 144;
+	<CUT>  = 145;
+	<HELP> = 146;
+
+	// Extended keys that may be generated on "Internet" keyboards.
+	// evdev has standardize names for these.
+
+	<LNFD> = 109;	// #define KEY_LINEFEED            101
+	<I120> = 120;	// #define KEY_MACRO               112
+	<I126> = 126;	// #define KEY_KPPLUSMINUS         118
+	<I128> = 128;   // #define KEY_SCALE               120
+	<I129> = 129;	// #define KEY_KPCOMMA             121
+	<I147> = 147;	// #define KEY_MENU                139
+	<I148> = 148;	// #define KEY_CALC                140
+	<I149> = 149;	// #define KEY_SETUP               141
+	<I150> = 150;	// #define KEY_SLEEP               142
+	<I151> = 151;	// #define KEY_WAKEUP              143
+	<I152> = 152;	// #define KEY_FILE                144
+	<I153> = 153;	// #define KEY_SENDFILE            145
+	<I154> = 154;	// #define KEY_DELETEFILE          146
+	<I155> = 155;	// #define KEY_XFER                147
+	<I156> = 156;	// #define KEY_PROG1               148
+	<I157> = 157;	// #define KEY_PROG2               149
+	<I158> = 158;	// #define KEY_WWW                 150
+	<I159> = 159;	// #define KEY_MSDOS               151
+	<I160> = 160;	// #define KEY_COFFEE              152
+	<I161> = 161;	// #define KEY_DIRECTION           153
+	<I162> = 162;	// #define KEY_CYCLEWINDOWS        154
+	<I163> = 163;	// #define KEY_MAIL                155
+	<I164> = 164;	// #define KEY_BOOKMARKS           156
+	<I165> = 165;	// #define KEY_COMPUTER            157
+	<I166> = 166;	// #define KEY_BACK                158
+	<I167> = 167;	// #define KEY_FORWARD             159
+	<I168> = 168;	// #define KEY_CLOSECD             160
+	<I169> = 169;	// #define KEY_EJECTCD             161
+	<I170> = 170;	// #define KEY_EJECTCLOSECD        162
+	<I171> = 171;	// #define KEY_NEXTSONG            163
+	<I172> = 172;	// #define KEY_PLAYPAUSE           164
+	<I173> = 173;	// #define KEY_PREVIOUSSONG        165
+	<I174> = 174;	// #define KEY_STOPCD              166
+	<I175> = 175;	// #define KEY_RECORD              167
+	<I176> = 176;	// #define KEY_REWIND              168
+	<I177> = 177;	// #define KEY_PHONE               169
+	<I178> = 178;	// #define KEY_ISO                 170
+	<I179> = 179;	// #define KEY_CONFIG              171
+	<I180> = 180;	// #define KEY_HOMEPAGE            172
+	<I181> = 181;	// #define KEY_REFRESH             173
+	<I182> = 182;	// #define KEY_EXIT                174
+	<I183> = 183;	// #define KEY_MOVE                175
+	<I184> = 184;	// #define KEY_EDIT                176
+	<I185> = 185;	// #define KEY_SCROLLUP            177
+	<I186> = 186;	// #define KEY_SCROLLDOWN          178
+	<I187> = 187;	// #define KEY_KPLEFTPAREN         179
+	<I188> = 188;	// #define KEY_KPRIGHTPAREN        180
+	<I189> = 189;	// #define KEY_NEW                 181
+	<I190> = 190;	// #define KEY_REDO                182
+	<I208> = 208;	// #define KEY_PLAYCD              200
+	<I209> = 209;	// #define KEY_PAUSECD             201
+	<I210> = 210;	// #define KEY_PROG3               202
+	<I211> = 211;	// #define KEY_PROG4               203 conflicts with AB11
+	<I212> = 212;   // #define KEY_DASHBOARD           204
+	<I213> = 213;	// #define KEY_SUSPEND             205
+	<I214> = 214;	// #define KEY_CLOSE               206
+	<I215> = 215;	// #define KEY_PLAY                207
+	<I216> = 216;	// #define KEY_FASTFORWARD         208
+	<I217> = 217;	// #define KEY_BASSBOOST           209
+	<I218> = 218;	// #define KEY_PRINT               210
+	<I219> = 219;	// #define KEY_HP                  211
+	<I220> = 220;	// #define KEY_CAMERA              212
+	<I221> = 221;	// #define KEY_SOUND               213
+	<I222> = 222;	// #define KEY_QUESTION            214
+	<I223> = 223;	// #define KEY_EMAIL               215
+	<I224> = 224;	// #define KEY_CHAT                216
+	<I225> = 225;	// #define KEY_SEARCH              217
+	<I226> = 226;	// #define KEY_CONNECT             218
+	<I227> = 227;	// #define KEY_FINANCE             219
+	<I228> = 228;	// #define KEY_SPORT               220
+	<I229> = 229;	// #define KEY_SHOP                221
+	<I230> = 230;	// #define KEY_ALTERASE            222
+	<I231> = 231;	// #define KEY_CANCEL              223
+	<I232> = 232;	// #define KEY_BRIGHTNESSDOWN      224
+	<I233> = 233;	// #define KEY_BRIGHTNESSUP        225
+	<I234> = 234;	// #define KEY_MEDIA               226
+	<I235> = 235;	// #define KEY_SWITCHVIDEOMODE     227
+	<I236> = 236;	// #define KEY_KBDILLUMTOGGLE      228
+	<I237> = 237;	// #define KEY_KBDILLUMDOWN        229
+	<I238> = 238;	// #define KEY_KBDILLUMUP          230
+	<I239> = 239;	// #define KEY_SEND                231
+	<I240> = 240;	// #define KEY_REPLY               232
+	<I241> = 241;	// #define KEY_FORWARDMAIL         233
+	<I242> = 242;	// #define KEY_SAVE                234
+	<I243> = 243;	// #define KEY_DOCUMENTS           235
+	<I244> = 244;	// #define KEY_BATTERY             236
+	<I245> = 245;	// #define KEY_BLUETOOTH           237
+	<I246> = 246;	// #define KEY_WLAN                238
+	<I247> = 247;	// #define KEY_UWB                 239
+	<I248> = 248;	// #define KEY_UNKNOWN             240
+	<I249> = 249;	// #define KEY_VIDEO_NEXT          241
+	<I250> = 250;	// #define KEY_VIDEO_PREV          242
+	<I251> = 251;	// #define KEY_BRIGHTNESS_CYCLE    243
+	<I252> = 252;	// #define KEY_BRIGHTNESS_ZERO     244
+	<I253> = 253;	// #define KEY_DISPLAY_OFF         245
+
+	// Fake keycodes for virtual keys
+	<LVL3> =   92;
+	<MDSW> =   203;
+	<ALT>  =   204;
+	<META> =   205;
+	<SUPR> =   206;
+	<HYPR> =   207;
+
+	indicator 1  = "Caps Lock";
+	indicator 2  = "Num Lock";
+	indicator 3  = "Scroll Lock";
+	indicator 4  = "Compose";
+	indicator 5  = "Kana";
+	indicator 6  = "Sleep";
+	indicator 7  = "Suspend";
+	indicator 8  = "Mute";
+	indicator 9  = "Misc";
+	indicator 10 = "Mail";
+	indicator 11 = "Charging";
+
+	alias <ALGR> = <RALT>;
+
+	// For Brazilian ABNT2
+	alias <KPPT> = <I129>;
+};
+
+// PC98
+xkb_keycodes "pc98" {
+    include "evdev(evdev)"
+};
diff --git a/data/keycodes/evdev-xkbcommon b/data/keycodes/evdev-xkbcommon
new file mode 100644
--- /dev/null
+++ b/data/keycodes/evdev-xkbcommon
@@ -0,0 +1,505 @@
+default xkb_keycodes "evdev" {
+    <ZERO>              =  0;
+    <ESC>               =  1;
+    <1>                 =  2;
+    <2>                 =  3;
+    <3>                 =  4;
+    <4>                 =  5;
+    <5>                 =  6;
+    <6>                 =  7;
+    <7>                 =  8;
+    <8>                 =  9;
+    <9>                 =  10;
+    <0>                 =  11;
+    <MINUS>             =  12;
+    <EQUAL>             =  13;
+    <BACKSPACE>         =  14;
+    <TAB>               =  15;
+    <Q>                 =  16;
+    <W>                 =  17;
+    <E>                 =  18;
+    <R>                 =  19;
+    <T>                 =  20;
+    <Y>                 =  21;
+    <U>                 =  22;
+    <I>                 =  23;
+    <O>                 =  24;
+    <P>                 =  25;
+    <LEFTBRACE>         =  26;
+    <RIGHTBRACE>        =  27;
+    <ENTER>             =  28;
+    <LEFTCTRL>          =  29;
+    <A>                 =  30;
+    <S>                 =  31;
+    <D>                 =  32;
+    <F>                 =  33;
+    <G>                 =  34;
+    <H>                 =  35;
+    <J>                 =  36;
+    <K>                 =  37;
+    <L>                 =  38;
+    <SEMICOLON>         =  39;
+    <APOSTROPHE>        =  40;
+    <GRAVE>             =  41;
+    <LEFTSHIFT>         =  42;
+    <BACKSLASH>         =  43;
+    <Z>                 =  44;
+    <X>                 =  45;
+    <C>                 =  46;
+    <V>                 =  47;
+    <B>                 =  48;
+    <N>                 =  49;
+    <M>                 =  50;
+    <COMMA>             =  51;
+    <DOT>               =  52;
+    <SLASH>             =  53;
+    <RIGHTSHIFT>        =  54;
+    <KPASTERISK>        =  55;
+    <LEFTALT>           =  56;
+    <SPACE>             =  57;
+    <CAPSLOCK>          =  58;
+    <F1>                =  59;
+    <F2>                =  60;
+    <F3>                =  61;
+    <F4>                =  62;
+    <F5>                =  63;
+    <F6>                =  64;
+    <F7>                =  65;
+    <F8>                =  66;
+    <F9>                =  67;
+    <F10>               =  68;
+    <NUMLOCK>           =  69;
+    <SCROLLLOCK>        =  70;
+    <KP7>               =  71;
+    <KP8>               =  72;
+    <KP9>               =  73;
+    <KPMINUS>           =  74;
+    <KP4>               =  75;
+    <KP5>               =  76;
+    <KP6>               =  77;
+    <KPPLUS>            =  78;
+    <KP1>               =  79;
+    <KP2>               =  80;
+    <KP3>               =  81;
+    <KP0>               =  82;
+    <KPDOT>             =  83;
+    <ZENKAKUHANKAKU>    =  85;
+    <102ND>             =  86;
+    <F11>               =  87;
+    <F12>               =  88;
+    <RO>                =  89;
+    <KATAKANA>          =  90;
+    <HIRAGANA>          =  91;
+    <HENKAN>            =  92;
+    <KATAKANAHIRAGANA>  =  93;
+    <MUHENKAN>          =  94;
+    <KPJPCOMMA>         =  95;
+    <KPENTER>           =  96;
+    <RIGHTCTRL>         =  97;
+    <KPSLASH>           =  98;
+    <SYSRQ>             =  99;
+    <RIGHTALT>          =  100;
+    <LINEFEED>          =  101;
+    <HOME>              =  102;
+    <UP>                =  103;
+    <PAGEUP>            =  104;
+    <LEFT>              =  105;
+    <RIGHT>             =  106;
+    <END>               =  107;
+    <DOWN>              =  108;
+    <PAGEDOWN>          =  109;
+    <INSERT>            =  110;
+    <DELETE>            =  111;
+    <MACRO>             =  112;
+    <MUTE>              =  113;
+    <VOLUMEDOWN>        =  114;
+    <VOLUMEUP>          =  115;
+    <POWER>             =  116;
+    <KPEQUAL>           =  117;
+    <KPPLUSMINUS>       =  118;
+    <PAUSE>             =  119;
+    <SCALE>             =  120;
+    <KPCOMMA>           =  121;
+    <HANGEUL>           =  122;
+    <HANJA>             =  123;
+    <YEN>               =  124;
+    <LEFTMETA>          =  125;
+    <RIGHTMETA>         =  126;
+    <COMPOSE>           =  127;
+    <STOP>              =  128;
+    <AGAIN>             =  129;
+    <PROPS>             =  130;
+    <UNDO>              =  131;
+    <FRONT>             =  132;
+    <COPY>              =  133;
+    <OPEN>              =  134;
+    <PASTE>             =  135;
+    <FIND>              =  136;
+    <CUT>               =  137;
+    <HELP>              =  138;
+    <MENU>              =  139;
+    <CALC>              =  140;
+    <SETUP>             =  141;
+    <SLEEP>             =  142;
+    <WAKEUP>            =  143;
+    <FILE>              =  144;
+    <SENDFILE>          =  145;
+    <DELETEFILE>        =  146;
+    <XFER>              =  147;
+    <PROG1>             =  148;
+    <PROG2>             =  149;
+    <WWW>               =  150;
+    <MSDOS>             =  151;
+    <COFFEE>            =  152;
+    <DIRECTION>         =  153;
+    <CYCLEWINDOWS>      =  154;
+    <MAIL>              =  155;
+    <BOOKMARKS>         =  156;
+    <COMPUTER>          =  157;
+    <BACK>              =  158;
+    <FORWARD>           =  159;
+    <CLOSECD>           =  160;
+    <EJECTCD>           =  161;
+    <EJECTCLOSECD>      =  162;
+    <NEXTSONG>          =  163;
+    <PLAYPAUSE>         =  164;
+    <PREVIOUSSONG>      =  165;
+    <STOPCD>            =  166;
+    <RECORD>            =  167;
+    <REWIND>            =  168;
+    <PHONE>             =  169;
+    <ISO>               =  170;
+    <CONFIG>            =  171;
+    <HOMEPAGE>          =  172;
+    <REFRESH>           =  173;
+    <EXIT>              =  174;
+    <MOVE>              =  175;
+    <EDIT>              =  176;
+    <SCROLLUP>          =  177;
+    <SCROLLDOWN>        =  178;
+    <KPLEFTPAREN>       =  179;
+    <KPRIGHTPAREN>      =  180;
+    <NEW>               =  181;
+    <REDO>              =  182;
+    <F13>               =  183;
+    <F14>               =  184;
+    <F15>               =  185;
+    <F16>               =  186;
+    <F17>               =  187;
+    <F18>               =  188;
+    <F19>               =  189;
+    <F20>               =  190;
+    <F21>               =  191;
+    <F22>               =  192;
+    <F23>               =  193;
+    <F24>               =  194;
+    <PLAYCD>            =  200;
+    <PAUSECD>           =  201;
+    <PROG3>             =  202;
+    <PROG4>             =  203;
+    <DASHBOARD>         =  204;
+    <SUSPEND>           =  205;
+    <CLOSE>             =  206;
+    <PLAY>              =  207;
+    <FASTFORWARD>       =  208;
+    <BASSBOOST>         =  209;
+    <PRINT>             =  210;
+    <HP>                =  211;
+    <CAMERA>            =  212;
+    <SOUND>             =  213;
+    <QUESTION>          =  214;
+    <EMAIL>             =  215;
+    <CHAT>              =  216;
+    <SEARCH>            =  217;
+    <CONNECT>           =  218;
+    <FINANCE>           =  219;
+    <SPORT>             =  220;
+    <SHOP>              =  221;
+    <ALTERASE>          =  222;
+    <CANCEL>            =  223;
+    <BRIGHTNESSDOWN>    =  224;
+    <BRIGHTNESSUP>      =  225;
+    <MEDIA>             =  226;
+    <SWITCHVIDEOMODE>   =  227;
+    <KBDILLUMTOGGLE>    =  228;
+    <KBDILLUMDOWN>      =  229;
+    <KBDILLUMUP>        =  230;
+    <SEND>              =  231;
+    <REPLY>             =  232;
+    <FORWARDMAIL>       =  233;
+    <SAVE>              =  234;
+    <DOCUMENTS>         =  235;
+    <BATTERY>           =  236;
+    <BLUETOOTH>         =  237;
+    <WLAN>              =  238;
+    <UWB>               =  239;
+    <UNKNOWN>           =  240;
+    <VIDEO_NEXT>        =  241;
+    <VIDEO_PREV>        =  242;
+    <BRIGHTNESS_CYCLE>  =  243;
+    <BRIGHTNESS_ZERO>   =  244;
+    <DISPLAY_OFF>       =  245;
+    <WIMAX>             =  246;
+    <RFKILL>            =  247;
+    <MICMUTE>           =  248;
+
+    // Fake keycodes for virtual keys
+    <LVL3>              =  84;
+    <MDSW>              =  195;
+    <ALT>               =  196;
+    <META>              =  197;
+    <SUPR>              =  198;
+    <HYPR>              =  199;
+
+    indicator 0x01 = "Num Lock";    // NUML
+    indicator 0x02 = "Caps Lock";   // CAPSL
+    indicator 0x03 = "Scroll Lock"; // SCROLLL
+    indicator 0x04 = "Compose";     // COMPOSE
+    indicator 0x05 = "Kana";        // KANA
+    indicator 0x06 = "Sleep";       // SLEEP
+    indicator 0x07 = "Suspend";     // SUSPEND
+    indicator 0x08 = "Mute";        // MUTE
+    indicator 0x09 = "Misc";        // MISC
+    indicator 0x0a = "Mail";        // MAIL
+    indicator 0x0b = "Charging";    // CHARGING
+
+    alias <TLDE> = <GRAVE>;
+    alias <AE01> = <1>;
+    alias <AE02> = <2>;
+    alias <AE03> = <3>;
+    alias <AE04> = <4>;
+    alias <AE05> = <5>;
+    alias <AE06> = <6>;
+    alias <AE07> = <7>;
+    alias <AE08> = <8>;
+    alias <AE09> = <9>;
+    alias <AE10> = <0>;
+    alias <AE11> = <MINUS>;
+    alias <AE12> = <EQUAL>;
+    alias <BKSP> = <BACKSPACE>;
+
+    alias <AD01> = <Q>;
+    alias <AD02> = <W>;
+    alias <AD03> = <E>;
+    alias <AD04> = <R>;
+    alias <AD05> = <T>;
+    alias <AD06> = <Y>;
+    alias <AD07> = <U>;
+    alias <AD08> = <I>;
+    alias <AD09> = <O>;
+    alias <AD10> = <P>;
+    alias <AD11> = <LEFTBRACE>;
+    alias <AD12> = <RIGHTBRACE>;
+    alias <BKSL> = <BACKSLASH>;
+    alias <AC12> = <BACKSLASH>;
+    alias <RTRN> = <ENTER>;
+
+    alias <CAPS> = <CAPSLOCK>;
+    alias <AC01> = <A>;
+    alias <AC02> = <S>;
+    alias <AC03> = <D>;
+    alias <AC04> = <F>;
+    alias <AC05> = <G>;
+    alias <AC06> = <H>;
+    alias <AC07> = <J>;
+    alias <AC08> = <K>;
+    alias <AC09> = <L>;
+    alias <AC10> = <SEMICOLON>;
+    alias <AC11> = <APOSTROPHE>;
+
+    alias <LFSH> = <LEFTSHIFT>;
+    alias <AB01> = <Z>;
+    alias <AB02> = <X>;
+    alias <AB03> = <C>;
+    alias <AB04> = <V>;
+    alias <AB05> = <B>;
+    alias <AB06> = <N>;
+    alias <AB07> = <M>;
+    alias <AB08> = <COMMA>;
+    alias <AB09> = <DOT>;
+    alias <AB10> = <SLASH>;
+    alias <RTSH> = <RIGHTSHIFT>;
+
+    alias <LALT> = <LEFTALT>;
+    alias <LCTL> = <LEFTCTRL>;
+    alias <SPCE> = <SPACE>;
+    alias <RCTL> = <RIGHTCTRL>;
+    alias <RALT> = <RIGHTALT>;
+    alias <LWIN> = <LEFTMETA>;
+    alias <RWIN> = <RIGHTMETA>;
+    alias <COMP> = <COMPOSE>;
+    alias <MENU> = <COMPOSE>;
+
+    alias <FK01> = <F1>;
+    alias <FK02> = <F2>;
+    alias <FK03> = <F3>;
+    alias <FK04> = <F4>;
+    alias <FK05> = <F5>;
+    alias <FK06> = <F6>;
+    alias <FK07> = <F7>;
+    alias <FK08> = <F8>;
+    alias <FK09> = <F9>;
+    alias <FK10> = <F10>;
+    alias <FK11> = <F11>;
+    alias <FK12> = <F12>;
+
+    alias <PRSC> = <SYSRQ>;
+    alias <SCLK> = <SCROLLLOCK>;
+    alias <PAUS> = <PAUSE>;
+
+    alias <INS> = <INSERT>;
+    alias <PGUP> = <PAGEUP>;
+    alias <DELE> = <DELETE>;
+    alias <PGDN> = <PAGEDOWN>;
+
+    alias <RGHT> = <RIGHT>;
+
+    alias <NMLK> = <NUMLOCK>;
+    alias <KPDV> = <KPSLASH>;
+    alias <KPMU> = <KPASTERISK>;
+    alias <KPSU> = <KPMINUS>;
+
+    alias <KPAD> = <KPPLUS>;
+
+    alias <KPEN> = <KPENTER>;
+
+    alias <KPDL> = <KPDOT>;
+    alias <KPEQ> = <KPEQUAL>;
+
+    alias <FK13> = <F13>;
+    alias <FK14> = <F14>;
+    alias <FK15> = <F15>;
+    alias <FK16> = <F16>;
+    alias <FK17> = <F17>;
+    alias <FK18> = <F18>;
+    alias <FK19> = <F19>;
+    alias <FK20> = <F20>;
+    alias <FK21> = <F21>;
+    alias <FK22> = <F22>;
+    alias <FK23> = <F23>;
+    alias <FK24> = <F24>;
+
+    alias <HZTG> = <APOSTROPHE>;
+    alias <HKTG> = <KATAKANAHIRAGANA>;
+    alias <AB11> = <RO>;
+    alias <HENK> = <HENKAN>;
+    alias <MUHE> = <MUHENKAN>;
+    alias <AE13> = <YEN>;
+    alias <KATA> = <KATAKANA>;
+    alias <HIRA> = <HIRAGANA>;
+    alias <JPCM> = <KPJPCOMMA>;
+
+    alias <HNGL> = <HANGEUL>;
+    alias <HJCV> = <HANJA>;
+
+    alias <LMTA> = <LEFTMETA>;
+    alias <RMTA> = <RIGHTMETA>;
+    alias <VOL-> = <VOLUMEDOWN>;
+    alias <VOL+> = <VOLUMEUP>;
+    alias <POWR> = <POWER>;
+    alias <AGAI> = <AGAIN>;
+    alias <PROP> = <PROPS>;
+    alias <FRNT> = <FRONT>;
+    alias <PAST> = <PASTE>;
+
+    alias <LNFD> = <LINEFEED>;
+    alias <I120> = <MACRO>;
+    alias <I126> = <KPPLUSMINUS>;
+    alias <I128> = <SCALE>;
+    alias <I129> = <KPCOMMA>;
+    alias <I147> = <MENU>;
+    alias <I148> = <CALC>;
+    alias <I149> = <SETUP>;
+    alias <I150> = <SLEEP>;
+    alias <I151> = <WAKEUP>;
+    alias <I152> = <FILE>;
+    alias <I153> = <SENDFILE>;
+    alias <I154> = <DELETEFILE>;
+    alias <I155> = <XFER>;
+    alias <I156> = <PROG1>;
+    alias <I157> = <PROG2>;
+    alias <I158> = <WWW>;
+    alias <I159> = <MSDOS>;
+    alias <I160> = <COFFEE>;
+    alias <I161> = <DIRECTION>;
+    alias <I162> = <CYCLEWINDOWS>;
+    alias <I163> = <MAIL>;
+    alias <I164> = <BOOKMARKS>;
+    alias <I165> = <COMPUTER>;
+    alias <I166> = <BACK>;
+    alias <I167> = <FORWARD>;
+    alias <I168> = <CLOSECD>;
+    alias <I169> = <EJECTCD>;
+    alias <I170> = <EJECTCLOSECD>;
+    alias <I171> = <NEXTSONG>;
+    alias <I172> = <PLAYPAUSE>;
+    alias <I173> = <PREVIOUSSONG>;
+    alias <I174> = <STOPCD>;
+    alias <I175> = <RECORD>;
+    alias <I176> = <REWIND>;
+    alias <I177> = <PHONE>;
+    alias <I178> = <ISO>;
+    alias <I179> = <CONFIG>;
+    alias <I180> = <HOMEPAGE>;
+    alias <I181> = <REFRESH>;
+    alias <I182> = <EXIT>;
+    alias <I183> = <MOVE>;
+    alias <I184> = <EDIT>;
+    alias <I185> = <SCROLLUP>;
+    alias <I186> = <SCROLLDOWN>;
+    alias <I187> = <KPLEFTPAREN>;
+    alias <I188> = <KPRIGHTPAREN>;
+    alias <I189> = <NEW>;
+    alias <I190> = <REDO>;
+    alias <I208> = <PLAYCD>;
+    alias <I209> = <PAUSECD>;
+    alias <I210> = <PROG3>;
+    alias <I211> = <PROG4>;
+    alias <I212> = <DASHBOARD>;
+    alias <I213> = <SUSPEND>;
+    alias <I214> = <CLOSE>;
+    alias <I215> = <PLAY>;
+    alias <I216> = <FASTFORWARD>;
+    alias <I217> = <BASSBOOST>;
+    alias <I218> = <PRINT>;
+    alias <I219> = <HP>;
+    alias <I220> = <CAMERA>;
+    alias <I221> = <SOUND>;
+    alias <I222> = <QUESTION>;
+    alias <I223> = <EMAIL>;
+    alias <I224> = <CHAT>;
+    alias <I225> = <SEARCH>;
+    alias <I226> = <CONNECT>;
+    alias <I227> = <FINANCE>;
+    alias <I228> = <SPORT>;
+    alias <I229> = <SHOP>;
+    alias <I230> = <ALTERASE>;
+    alias <I231> = <CANCEL>;
+    alias <I232> = <BRIGHTNESSDOWN>;
+    alias <I233> = <BRIGHTNESSUP>;
+    alias <I234> = <MEDIA>;
+    alias <I235> = <SWITCHVIDEOMODE>;
+    alias <I236> = <KBDILLUMTOGGLE>;
+    alias <I237> = <KBDILLUMDOWN>;
+    alias <I238> = <KBDILLUMUP>;
+    alias <I239> = <SEND>;
+    alias <I240> = <REPLY>;
+    alias <I241> = <FORWARDMAIL>;
+    alias <I242> = <SAVE>;
+    alias <I243> = <DOCUMENTS>;
+    alias <I244> = <BATTERY>;
+    alias <I245> = <BLUETOOTH>;
+    alias <I246> = <WLAN>;
+    alias <I247> = <UWB>;
+    alias <I248> = <UNKNOWN>;
+    alias <I249> = <VIDEO_NEXT>;
+    alias <I250> = <VIDEO_PREV>;
+    alias <I251> = <BRIGHTNESS_CYCLE>;
+    alias <I252> = <BRIGHTNESS_ZERO>;
+    alias <I253> = <DISPLAY_OFF>;
+
+    alias <ALGR> = <RIGHTALT>;
+
+    // For Brazilian ABNT2
+    alias <KPPT> = <KPCOMMA>;
+};
diff --git a/data/keycodes/xfree86 b/data/keycodes/xfree86
new file mode 100644
--- /dev/null
+++ b/data/keycodes/xfree86
@@ -0,0 +1,410 @@
+// "standard" XFree86 codes
+// It seems that the "default" must be the first entry in the file.
+
+default xkb_keycodes "xfree86" {
+    include "xfree86(basic)"
+    <BKSL> =  51;
+    alias <AC12> = <BKSL>;
+    <LSGT> =  94;
+};
+
+xkb_keycodes "basic" {
+
+    minimum= 8;
+    maximum= 255;
+
+    <TLDE> =  49;
+    alias <AE00> = <TLDE>;	// Some geometries use AE00
+    <AE01> =  10;
+    <AE02> =  11;
+    <AE03> =  12;
+    <AE04> =  13;
+    <AE05> =  14;
+    <AE06> =  15;
+    <AE07> =  16;
+    <AE08> =  17;
+    <AE09> =  18;
+    <AE10> =  19;
+    <AE11> =  20;
+    <AE12> =  21;
+    <BKSP> =  22;
+
+    <TAB>  =  23;
+    <AD01> =  24;
+    <AD02> =  25;
+    <AD03> =  26;
+    <AD04> =  27;
+    <AD05> =  28;
+    <AD06> =  29;
+    <AD07> =  30;
+    <AD08> =  31;
+    <AD09> =  32;
+    <AD10> =  33;
+    <AD11> =  34;
+    <AD12> =  35;
+    <RTRN> =  36;
+
+    <CAPS> =  66;
+    <AC01> =  38;
+    <AC02> =  39;
+    <AC03> =  40;
+    <AC04> =  41;
+    <AC05> =  42;
+    <AC06> =  43;
+    <AC07> =  44;
+    <AC08> =  45;
+    <AC09> =  46;
+    <AC10> =  47;
+    <AC11> =  48;
+
+    <LFSH> =  50;
+    <AB01> =  52;
+    <AB02> =  53;
+    <AB03> =  54;
+    <AB04> =  55;
+    <AB05> =  56;
+    <AB06> =  57;
+    <AB07> =  58;
+    <AB08> =  59;
+    <AB09> =  60;
+    <AB10> =  61;
+    <RTSH> =  62;
+
+    <LALT> =  64;
+    <LCTL> =  37;
+    <SPCE> =  65;
+    <RCTL> = 109;
+    <RALT> = 113;
+    // Microsoft keyboard extra keys
+    <LWIN> = 115;
+    <RWIN> = 116;
+    <MENU> = 117;
+
+    <ESC>  =   9;
+    <FK01> =  67;
+    <FK02> =  68;
+    <FK03> =  69;
+    <FK04> =  70;
+    <FK05> =  71;
+    <FK06> =  72;
+    <FK07> =  73;
+    <FK08> =  74;
+    <FK09> =  75;
+    <FK10> =  76;
+    <FK11> =  95;
+    <FK12> =  96;
+
+    <PRSC> = 111;
+    <SYRQ> =  92;
+    <SCLK> =  78;
+    <PAUS> = 110;
+    <BRK>  = 114;
+
+    <INS>  = 106;
+    <HOME> =  97;
+    <PGUP> =  99;
+    <DELE> = 107;
+    <END>  = 103;
+    <PGDN> = 105;
+
+    <UP>   =  98;
+    <LEFT> = 100;
+    <DOWN> = 104;
+    <RGHT> = 102;
+
+    <NMLK> =  77;
+    <KPDV> = 112;
+    <KPMU> =  63;
+    <KPSU> =  82;
+
+    <KP7>  =  79;
+    <KP8>  =  80;
+    <KP9>  =  81;
+    <KPAD> =  86;
+
+    <KP4>  =  83;
+    <KP5>  =  84;
+    <KP6>  =  85;
+
+    <KP1>  =  87;
+    <KP2>  =  88;
+    <KP3>  =  89;
+    <KPEN> = 108;
+
+    <KP0>  =  90;
+    <KPDL> =  91;
+    <KPEQ> = 126;
+
+    <FK13> =  118;
+    <FK14> =  119;
+    <FK15> =  120;
+    <FK16> =  121;
+    <FK17> =  122;
+    <KPDC> =  123;
+
+    // Keys that are generated on Japanese keyboards
+
+    alias <HZTG> = <TLDE>;	// Hankaku_Zenkaku toggle
+    <HKTG> =   208;		// Hiragana_Katakana toggle
+    <AB11> =   211;		// backslash/underscore
+    <XFER> =   129;		// Henkan
+    <NFER> =   131;		// Muhenkan
+    <AE13> =   133;		// Yen
+    <EISU> =   210;		// Alphanumeric mode on macintosh
+    <KANA> =   209;		// Kana mode on macintosh
+
+    // Keys that are generated on Korean keyboards
+
+    alias <HNGL> = <FK16>;     // Hangul Latin toggle
+    alias <HJCV> = <FK17>;     // Hangul to Hanja conversion
+
+    // Extended keys that may be generated on "Internet" keyboards.
+    // These are not standardised, hence the meaningless names.
+    // The entries commented out are never generated because the raw codes
+    // in those positions are already used for well-defined keys.
+
+    alias <I01> = <XFER>;
+    <I02> =   130;
+    alias <I03> = <NFER>;
+    <I04> =   132;
+    alias <I05> = <AE13>;
+    <I06> =   134;
+    <I07> =   135;
+    <I08> =   136;
+    <I09> =   137;
+    <I0A> =   138;
+    <I0B> =   139;
+    <I0C> =   140;
+    <I0D> =   141;
+    <I0E> =   142;
+    <I0F> =   143;
+    <I10> =   144;
+    <I11> =   145;
+    <I12> =   146;
+    <I13> =   147;
+    <I14> =   148;
+    <I15> =   149;
+    <I16> =   150;
+    <I17> =   151;
+    <I18> =   152;
+    <I19> =   153;
+    <I1A> =   154;
+    <I1B> =   155;
+    // <I1C> =   156;	<META>
+    // <I1D> =   157;	<K59>
+    <I1E> =   158;
+    <I1F> =   159;
+    <I20> =   160;
+    <I21> =   161;
+    <I22> =   162;
+    <I23> =   163;
+    <I24> =   164;
+    <I25> =   165;
+    <I26> =   166;
+    <I27> =   167;
+    <I28> =   168;
+    <I29> =   169;
+    // <I2A> =   170;	<K5A>
+    <I2B> =   171;
+    <I2C> =   172;
+    <I2D> =   173;
+    <I2E> =   174;
+    <I2F> =   175;
+    <I30> =   176;
+    <I31> =   177;
+    <I32> =   178;
+    <I33> =   179;
+    <I34> =   180;
+    // <I35> =   181;	<K5B>
+    // <I36> =   182;	<K5D>
+    // <I37> =   183;	<K5E>
+    // <I38> =   184;	<K5F>
+    <I39> =   185;
+    <I3A> =   186;
+    <I3B> =   187;
+    <I3C> =   188;
+    // <I3D> =   189;	<K62>
+    // <I3E> =   190;	<K63>
+    // <I3F> =   191;	<K64>
+    // <I40> =   192;	<K65>
+    // <I41> =   193;	<K66>
+    <I42> =   194;
+    <I43> =   195;
+    <I44> =   196;
+    <I45> =   197;
+    // <I46> =   198;	<K67>
+    // <I47> =   199;	<K68>
+    // <I48> =   200;	<K69>
+    // <I49> =   201;	<K6A>
+    <I4A> =   202;
+    // <I4B> =   203;	<K6B>
+    // <I4C> =   204;	<K6C>
+    // <I4D> =   205;	<K6D>
+    // <I4E> =   206;	<K6E>
+    // <I4F> =   207;	<K6F>
+    // <I50> =   208;	<K70>
+    // <I51> =   209;	<K71>
+    // <I52> =   210;	<K72>
+    // <I53> =   211;	<K73>
+    <I54> =   212;
+    <I55> =   213;
+    <I56> =   214;
+    <I57> =   215;
+    <I58> =   216;
+    <I59> =   217;
+    <I5A> =   218;
+    // <I5B> =   219;	<K74>
+    // <I5C> =   220;	<K75>
+    // <I5D> =   221;	<K76>
+    <I5E> =   222;
+    <I5F> =   223;
+    <I60> =   224;
+    <I61> =   225;
+    <I62> =   226;
+    <I63> =   227;
+    <I64> =   228;
+    <I65> =   229;
+    <I66> =   230;
+    <I67> =   231;
+    <I68> =   232;
+    <I69> =   233;
+    <I6A> =   234;
+    <I6B> =   235;
+    <I6C> =   236;
+    <I6D> =   237;
+    <I6E> =   238;
+    <I6F> =   239;
+    <I70> =   240;
+    <I71> =   241;
+    <I72> =   242;
+    <I73> =   243;
+    <I74> =   244;
+    <I75> =   245;
+    <I76> =   246;
+    <I77> =   247;
+    <I78> =   248;
+    <I79> =   249;
+    <I7A> =   250;
+    <I7B> =   251;
+    <I7C> =   252;
+    <I7D> =   253;
+    <I7E> =   254;
+    <I7F> =   255;
+
+    // MacBooks generate 0x65 for the lower brightness key
+    <II65> =  101;
+
+    // Required for apple/logitech_g15 keyboard
+    <II5D> = 93;
+
+    // Codes generated for scancodes 0x59-0x5f, 0x62-0x76
+    <K59> =   157;		// <I1D>
+    <K5A> =   170;		// <I2A>
+    <K5B> =   181;		// <I35>
+    alias <K5C> = <KPEQ>;
+    <K5D> =   182;		// <I36>
+    <K5E> =   183;		// <I37>
+    <K5F> =   184;		// <I38>
+    <K62> =   189;		// <I3D>
+    <K63> =   190;		// <I3E>
+    <K64> =   191;		// <I3F>
+    <K65> =   192;		// <I40>
+    <K66> =   193;		// <I41>
+    <K67> =   198;		// <I46>
+    <K68> =   199;		// <I47>
+    <K69> =   200;		// <I48>
+    <K6A> =   201;		// <I49>
+    <K6B> =   203;		// <I4B>
+    <K6C> =   204;		// <I4C>
+    <K6D> =   205;		// <I4D>
+    <K6E> =   206;		// <I4E>
+    <K6F> =   207;		// <I4F>
+    alias <K70> = <HKTG>;	// <I50>
+    alias <K71> = <KANA>;	// <I51>
+    alias <K72> = <EISU>;	// <I52>
+    alias <K73> = <AB11>;	// <I53>
+    <K74> =   219;		// <I5B>
+    <K75> =   220;		// <I5C>
+    <K76> =   221;		// <I5D>
+   
+    // Solaris compatibility
+
+    alias <LMTA> = <LWIN>;
+    alias <RMTA> = <RWIN>;
+    alias <COMP> = <MENU>;
+    alias <POWR> = <I0C>;
+    alias <MUTE> = <I0D>;
+    alias <VOL-> = <I0E>;
+    alias <VOL+> = <I0F>;
+    alias <HELP> = <I10>;
+    alias <STOP> = <I11>;
+    alias <AGAI> = <I12>;
+    alias <PROP> = <I13>;
+    alias <UNDO> = <I14>;
+    alias <FRNT> = <I15>;
+    alias <COPY> = <I16>;
+    alias <OPEN> = <I17>;
+    alias <PAST> = <I18>;
+    alias <FIND> = <I19>;
+    alias <CUT>  = <I1A>;
+    alias <OUTP> = <I56>;
+    alias <KITG> = <I57>;
+    alias <KIDN> = <I58>;
+    alias <KIUP> = <I59>;
+
+    // Other codes never generated.  The XFree86 ddx never generates
+    // these codes.
+    // Thus we can use them as fake keys
+    <MDSW> =     8;
+    <LVL3> =   124; // <U7C>
+    <ALT>  =   125; // <U7D>
+    <META> =   156; // <I1C>
+    <SUPR> =   127; // <U7F>
+    <HYPR> =   128; // <U80>
+
+    indicator 1 = "Caps Lock";
+    indicator 2 = "Num Lock";
+    indicator 3 = "Scroll Lock";
+
+    alias <ALGR> = <RALT>;
+
+    // For Brazilian ABNT2
+    alias <KPPT> = <I06>;
+};
+
+// What keyboard is this?
+
+xkb_keycodes "102" {
+    include "xfree86(xfree86)"
+
+    // There will be warnings from xkbcomp because of multiple definitions.
+
+    <RALT> = 122;
+    <RCTL> = 123;
+
+    <PRSC> = 121;
+    <PAUS> = 118;
+
+    <INS>  = 131;
+    <HOME> = 135;
+    <PGUP> = 119;
+    <DELE> = 129;
+    <END>  = 130;
+    <PGDN> = 134;
+
+    <UP>   = 128;
+    <LEFT> = 132;
+    <DOWN> = 120;
+    <RGHT> = 133;
+
+    <KPDV> = 125;
+
+    <KPEN> = 124;
+};
+
+
+// IBM ThinkPad Z60m/Z60t/Z61m/Z61t
+xkb_keycodes "thinkpadz60" {
+    include "xfree86(xfree86)"
+    <MENU> = 227;
+};
diff --git a/data/keymaps/bad.xkb b/data/keymaps/bad.xkb
new file mode 100644
--- /dev/null
+++ b/data/keymaps/bad.xkb
@@ -0,0 +1,5 @@
+xkb_keymap {
+    xkb_types     { include "complete" };
+    xkb_compat    { include "complete" };
+    xkb_symbols   { include "pc+us" };
+};
diff --git a/data/keymaps/basic.xkb b/data/keymaps/basic.xkb
new file mode 100644
--- /dev/null
+++ b/data/keymaps/basic.xkb
@@ -0,0 +1,6 @@
+xkb_keymap {
+    xkb_keycodes  { include "evdev+aliases(qwerty)" };
+    xkb_types     { include "complete" };
+    xkb_compat    { include "complete" };
+    xkb_symbols   { include "pc+us" };
+};
diff --git a/data/keymaps/comprehensive-plus-geom.xkb b/data/keymaps/comprehensive-plus-geom.xkb
new file mode 100644
--- /dev/null
+++ b/data/keymaps/comprehensive-plus-geom.xkb
@@ -0,0 +1,1813 @@
+xkb_keymap {
+xkb_keycodes "evdev+aliases(qwerty)" {
+    minimum = 8;
+    maximum = 255;
+     <ESC> = 9;
+    <AE01> = 10;
+    <AE02> = 11;
+    <AE03> = 12;
+    <AE04> = 13;
+    <AE05> = 14;
+    <AE06> = 15;
+    <AE07> = 16;
+    <AE08> = 17;
+    <AE09> = 18;
+    <AE10> = 19;
+    <AE11> = 20;
+    <AE12> = 21;
+    <BKSP> = 22;
+     <TAB> = 23;
+    <AD01> = 24;
+    <AD02> = 25;
+    <AD03> = 26;
+    <AD04> = 27;
+    <AD05> = 28;
+    <AD06> = 29;
+    <AD07> = 30;
+    <AD08> = 31;
+    <AD09> = 32;
+    <AD10> = 33;
+    <AD11> = 34;
+    <AD12> = 35;
+    <RTRN> = 36;
+    <LCTL> = 37;
+    <AC01> = 38;
+    <AC02> = 39;
+    <AC03> = 40;
+    <AC04> = 41;
+    <AC05> = 42;
+    <AC06> = 43;
+    <AC07> = 44;
+    <AC08> = 45;
+    <AC09> = 46;
+    <AC10> = 47;
+    <AC11> = 48;
+    <TLDE> = 49;
+    <LFSH> = 50;
+    <BKSL> = 51;
+    <AB01> = 52;
+    <AB02> = 53;
+    <AB03> = 54;
+    <AB04> = 55;
+    <AB05> = 56;
+    <AB06> = 57;
+    <AB07> = 58;
+    <AB08> = 59;
+    <AB09> = 60;
+    <AB10> = 61;
+    <RTSH> = 62;
+    <KPMU> = 63;
+    <LALT> = 64;
+    <SPCE> = 65;
+    <CAPS> = 66;
+    <FK01> = 67;
+    <FK02> = 68;
+    <FK03> = 69;
+    <FK04> = 70;
+    <FK05> = 71;
+    <FK06> = 72;
+    <FK07> = 73;
+    <FK08> = 74;
+    <FK09> = 75;
+    <FK10> = 76;
+    <NMLK> = 77;
+    <SCLK> = 78;
+     <KP7> = 79;
+     <KP8> = 80;
+     <KP9> = 81;
+    <KPSU> = 82;
+     <KP4> = 83;
+     <KP5> = 84;
+     <KP6> = 85;
+    <KPAD> = 86;
+     <KP1> = 87;
+     <KP2> = 88;
+     <KP3> = 89;
+     <KP0> = 90;
+    <KPDL> = 91;
+    <LVL3> = 92;
+    <LSGT> = 94;
+    <FK11> = 95;
+    <FK12> = 96;
+    <AB11> = 97;
+    <KATA> = 98;
+    <HIRA> = 99;
+    <HENK> = 100;
+    <HKTG> = 101;
+    <MUHE> = 102;
+    <JPCM> = 103;
+    <KPEN> = 104;
+    <RCTL> = 105;
+    <KPDV> = 106;
+    <PRSC> = 107;
+    <RALT> = 108;
+    <LNFD> = 109;
+    <HOME> = 110;
+      <UP> = 111;
+    <PGUP> = 112;
+    <LEFT> = 113;
+    <RGHT> = 114;
+     <END> = 115;
+    <DOWN> = 116;
+    <PGDN> = 117;
+     <INS> = 118;
+    <DELE> = 119;
+    <I120> = 120;
+    <MUTE> = 121;
+    <VOL-> = 122;
+    <VOL+> = 123;
+    <POWR> = 124;
+    <KPEQ> = 125;
+    <I126> = 126;
+    <PAUS> = 127;
+    <I128> = 128;
+    <I129> = 129;
+    <HNGL> = 130;
+    <HJCV> = 131;
+    <AE13> = 132;
+    <LWIN> = 133;
+    <RWIN> = 134;
+    <COMP> = 135;
+    <STOP> = 136;
+    <AGAI> = 137;
+    <PROP> = 138;
+    <UNDO> = 139;
+    <FRNT> = 140;
+    <COPY> = 141;
+    <OPEN> = 142;
+    <PAST> = 143;
+    <FIND> = 144;
+     <CUT> = 145;
+    <HELP> = 146;
+    <I147> = 147;
+    <I148> = 148;
+    <I149> = 149;
+    <I150> = 150;
+    <I151> = 151;
+    <I152> = 152;
+    <I153> = 153;
+    <I154> = 154;
+    <I155> = 155;
+    <I156> = 156;
+    <I157> = 157;
+    <I158> = 158;
+    <I159> = 159;
+    <I160> = 160;
+    <I161> = 161;
+    <I162> = 162;
+    <I163> = 163;
+    <I164> = 164;
+    <I165> = 165;
+    <I166> = 166;
+    <I167> = 167;
+    <I168> = 168;
+    <I169> = 169;
+    <I170> = 170;
+    <I171> = 171;
+    <I172> = 172;
+    <I173> = 173;
+    <I174> = 174;
+    <I175> = 175;
+    <I176> = 176;
+    <I177> = 177;
+    <I178> = 178;
+    <I179> = 179;
+    <I180> = 180;
+    <I181> = 181;
+    <I182> = 182;
+    <I183> = 183;
+    <I184> = 184;
+    <I185> = 185;
+    <I186> = 186;
+    <I187> = 187;
+    <I188> = 188;
+    <I189> = 189;
+    <I190> = 190;
+    <FK13> = 191;
+    <FK14> = 192;
+    <FK15> = 193;
+    <FK16> = 194;
+    <FK17> = 195;
+    <FK18> = 196;
+    <FK19> = 197;
+    <FK20> = 198;
+    <FK21> = 199;
+    <FK22> = 200;
+    <FK23> = 201;
+    <FK24> = 202;
+    <MDSW> = 203;
+     <ALT> = 204;
+    <META> = 205;
+    <SUPR> = 206;
+    <HYPR> = 207;
+    <I208> = 208;
+    <I209> = 209;
+    <I210> = 210;
+    <I211> = 211;
+    <I212> = 212;
+    <I213> = 213;
+    <I214> = 214;
+    <I215> = 215;
+    <I216> = 216;
+    <I217> = 217;
+    <I218> = 218;
+    <I219> = 219;
+    <I220> = 220;
+    <I221> = 221;
+    <I222> = 222;
+    <I223> = 223;
+    <I224> = 224;
+    <I225> = 225;
+    <I226> = 226;
+    <I227> = 227;
+    <I228> = 228;
+    <I229> = 229;
+    <I230> = 230;
+    <I231> = 231;
+    <I232> = 232;
+    <I233> = 233;
+    <I234> = 234;
+    <I235> = 235;
+    <I236> = 236;
+    <I237> = 237;
+    <I238> = 238;
+    <I239> = 239;
+    <I240> = 240;
+    <I241> = 241;
+    <I242> = 242;
+    <I243> = 243;
+    <I244> = 244;
+    <I245> = 245;
+    <I246> = 246;
+    <I247> = 247;
+    <I248> = 248;
+    <I249> = 249;
+    <I250> = 250;
+    <I251> = 251;
+    <I252> = 252;
+    <I253> = 253;
+    indicator 1 = "Caps Lock";
+    indicator 2 = "Num Lock";
+    indicator 3 = "Scroll Lock";
+    indicator 4 = "Compose";
+    indicator 5 = "Kana";
+    indicator 6 = "Sleep";
+    indicator 7 = "Suspend";
+    indicator 8 = "Mute";
+    indicator 9 = "Misc";
+    indicator 10 = "Mail";
+    indicator 11 = "Charging";
+    virtual indicator 12 = "Shift Lock";
+    virtual indicator 13 = "Group 2";
+    virtual indicator 14 = "Mouse Keys";
+    alias <AC12> = <BKSL>;
+    alias <MENU> = <COMP>;
+    alias <HZTG> = <TLDE>;
+    alias <LMTA> = <LWIN>;
+    alias <RMTA> = <RWIN>;
+    alias <ALGR> = <RALT>;
+    alias <KPPT> = <I129>;
+    alias <LatQ> = <AD01>;
+    alias <LatW> = <AD02>;
+    alias <LatE> = <AD03>;
+    alias <LatR> = <AD04>;
+    alias <LatT> = <AD05>;
+    alias <LatY> = <AD06>;
+    alias <LatU> = <AD07>;
+    alias <LatI> = <AD08>;
+    alias <LatO> = <AD09>;
+    alias <LatP> = <AD10>;
+    alias <LatA> = <AC01>;
+    alias <LatS> = <AC02>;
+    alias <LatD> = <AC03>;
+    alias <LatF> = <AC04>;
+    alias <LatG> = <AC05>;
+    alias <LatH> = <AC06>;
+    alias <LatJ> = <AC07>;
+    alias <LatK> = <AC08>;
+    alias <LatL> = <AC09>;
+    alias <LatZ> = <AB01>;
+    alias <LatX> = <AB02>;
+    alias <LatC> = <AB03>;
+    alias <LatV> = <AB04>;
+    alias <LatB> = <AB05>;
+    alias <LatN> = <AB06>;
+    alias <LatM> = <AB07>;
+};
+
+xkb_types "complete" {
+
+    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+    type "ONE_LEVEL" {
+        modifiers= none;
+        level_name[Level1]= "Any";
+    };
+    type "TWO_LEVEL" {
+        modifiers= Shift;
+        map[Shift]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+    };
+    type "ALPHABETIC" {
+        modifiers= Shift+Lock;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Caps";
+    };
+    type "KEYPAD" {
+        modifiers= Shift+NumLock;
+        map[Shift]= Level2;
+        map[NumLock]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Number";
+    };
+    type "SHIFT+ALT" {
+        modifiers= Shift+Alt;
+        map[Shift+Alt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift+Alt";
+    };
+    type "PC_CONTROL_LEVEL2" {
+        modifiers= Control;
+        map[Control]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Control";
+    };
+    type "PC_LCONTROL_LEVEL2" {
+        modifiers= LControl;
+        map[LControl]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "LControl";
+    };
+    type "PC_RCONTROL_LEVEL2" {
+        modifiers= RControl;
+        map[RControl]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "RControl";
+    };
+    type "PC_ALT_LEVEL2" {
+        modifiers= Alt;
+        map[Alt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Alt";
+    };
+    type "PC_LALT_LEVEL2" {
+        modifiers= LAlt;
+        map[LAlt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "LAlt";
+    };
+    type "PC_RALT_LEVEL2" {
+        modifiers= RAlt;
+        map[RAlt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "RAlt";
+    };
+    type "CTRL+ALT" {
+        modifiers= Shift+Control+Alt+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Control+Alt]= Level5;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "Ctrl+Alt";
+    };
+    type "LOCAL_EIGHT_LEVEL" {
+        modifiers= Shift+Lock+Control+LevelThree;
+        map[Shift+Lock]= Level1;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+Lock+LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level4;
+        map[Control]= Level5;
+        map[Shift+Lock+Control]= Level5;
+        map[Shift+Control]= Level6;
+        map[Lock+Control]= Level6;
+        map[Control+LevelThree]= Level7;
+        map[Shift+Lock+Control+LevelThree]= Level7;
+        map[Shift+Control+LevelThree]= Level8;
+        map[Lock+Control+LevelThree]= Level8;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Level3";
+        level_name[Level4]= "Shift Level3";
+        level_name[Level5]= "Ctrl";
+        level_name[Level6]= "Shift Ctrl";
+        level_name[Level7]= "Level3 Ctrl";
+        level_name[Level8]= "Shift Level3 Ctrl";
+    };
+    type "THREE_LEVEL" {
+        modifiers= Shift+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Level3";
+    };
+    type "EIGHT_LEVEL" {
+        modifiers= Shift+LevelThree+LevelFive;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[LevelFive]= Level5;
+        map[Shift+LevelFive]= Level6;
+        map[LevelThree+LevelFive]= Level7;
+        map[Shift+LevelThree+LevelFive]= Level8;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "X";
+        level_name[Level6]= "X Shift";
+        level_name[Level7]= "X Alt Base";
+        level_name[Level8]= "X Shift Alt";
+    };
+    type "EIGHT_LEVEL_ALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree+LevelFive;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level4;
+        map[Shift+Lock+LevelThree]= Level3;
+        map[LevelFive]= Level5;
+        map[Shift+LevelFive]= Level6;
+        map[Lock+LevelFive]= Level6;
+        map[LevelThree+LevelFive]= Level7;
+        map[Shift+LevelThree+LevelFive]= Level8;
+        map[Lock+LevelThree+LevelFive]= Level8;
+        map[Shift+Lock+LevelThree+LevelFive]= Level7;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "X";
+        level_name[Level6]= "X Shift";
+        level_name[Level7]= "X Alt Base";
+        level_name[Level8]= "X Shift Alt";
+    };
+    type "EIGHT_LEVEL_SEMIALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree+LevelFive;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level3;
+        preserve[Lock+LevelThree]= Lock;
+        map[Shift+Lock+LevelThree]= Level4;
+        preserve[Shift+Lock+LevelThree]= Lock;
+        map[LevelFive]= Level5;
+        map[Shift+LevelFive]= Level6;
+        map[Lock+LevelFive]= Level6;
+        preserve[Lock+LevelFive]= Lock;
+        map[LevelThree+LevelFive]= Level7;
+        map[Shift+LevelThree+LevelFive]= Level8;
+        map[Lock+LevelThree+LevelFive]= Level7;
+        preserve[Lock+LevelThree+LevelFive]= Lock;
+        map[Shift+Lock+LevelThree+LevelFive]= Level8;
+        preserve[Shift+Lock+LevelThree+LevelFive]= Lock;
+        map[Shift+Lock+LevelFive]= Level1;
+        preserve[Shift+Lock+LevelFive]= Lock;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "X";
+        level_name[Level6]= "X Shift";
+        level_name[Level7]= "X Alt Base";
+        level_name[Level8]= "X Shift Alt";
+    };
+    type "FOUR_LEVEL" {
+        modifiers= Shift+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_ALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level4;
+        map[Shift+Lock+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_SEMIALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level3;
+        preserve[Lock+LevelThree]= Lock;
+        map[Shift+Lock+LevelThree]= Level4;
+        preserve[Shift+Lock+LevelThree]= Lock;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_MIXED_KEYPAD" {
+        modifiers= Shift+NumLock+LevelThree;
+        map[Shift+NumLock]= Level1;
+        map[NumLock]= Level2;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[NumLock+LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Shift+NumLock+LevelThree]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Number";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_X" {
+        modifiers= Shift+Control+Alt+LevelThree;
+        map[LevelThree]= Level2;
+        map[Shift+LevelThree]= Level3;
+        map[Control+Alt]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Alt Base";
+        level_name[Level3]= "Shift Alt";
+        level_name[Level4]= "Ctrl+Alt";
+    };
+    type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level4;
+        preserve[Lock]= Lock;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level3;
+        preserve[Lock+LevelThree]= Lock;
+        map[Shift+Lock+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "AltGr Base";
+        level_name[Level4]= "Shift AltGr";
+    };
+    type "FOUR_LEVEL_PLUS_LOCK" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock]= Level5;
+        map[Shift+Lock]= Level2;
+        map[Lock+LevelThree]= Level3;
+        map[Shift+Lock+LevelThree]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "Lock";
+    };
+    type "FOUR_LEVEL_KEYPAD" {
+        modifiers= Shift+NumLock+LevelThree;
+        map[Shift]= Level2;
+        map[NumLock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[NumLock+LevelThree]= Level4;
+        map[Shift+NumLock+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Number";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Alt Number";
+    };
+};
+
+xkb_compatibility "complete" {
+
+    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+    interpret.useModMapMods= AnyLevel;
+    interpret.repeat= False;
+    interpret.locking= False;
+    interpret ISO_Level2_Latch+Exactly(Shift) {
+        useModMapMods=level1;
+        action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
+    };
+    interpret Shift_Lock+AnyOf(Shift+Lock) {
+        action= LockMods(modifiers=Shift);
+    };
+    interpret Num_Lock+AnyOf(all) {
+        virtualModifier= NumLock;
+        action= LockMods(modifiers=NumLock);
+    };
+    interpret ISO_Lock+AnyOf(all) {
+        action= ISOLock(modifiers=modMapMods,affect=all);
+    };
+    interpret ISO_Level3_Shift+AnyOf(all) {
+        virtualModifier= LevelThree;
+        useModMapMods=level1;
+        action= SetMods(modifiers=LevelThree,clearLocks);
+    };
+    interpret ISO_Level3_Latch+AnyOf(all) {
+        virtualModifier= LevelThree;
+        useModMapMods=level1;
+        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+    };
+    interpret ISO_Level3_Lock+AnyOf(all) {
+        virtualModifier= LevelThree;
+        useModMapMods=level1;
+        action= LockMods(modifiers=LevelThree);
+    };
+    interpret Alt_L+AnyOf(all) {
+        virtualModifier= Alt;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Alt_R+AnyOf(all) {
+        virtualModifier= Alt;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Meta_L+AnyOf(all) {
+        virtualModifier= Meta;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Meta_R+AnyOf(all) {
+        virtualModifier= Meta;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Super_L+AnyOf(all) {
+        virtualModifier= Super;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Super_R+AnyOf(all) {
+        virtualModifier= Super;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Hyper_L+AnyOf(all) {
+        virtualModifier= Hyper;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Hyper_R+AnyOf(all) {
+        virtualModifier= Hyper;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Scroll_Lock+AnyOf(all) {
+        virtualModifier= ScrollLock;
+        action= LockMods(modifiers=modMapMods);
+    };
+    interpret ISO_Level5_Shift+AnyOf(all) {
+        virtualModifier= LevelFive;
+        useModMapMods=level1;
+        action= SetMods(modifiers=LevelFive,clearLocks);
+    };
+    interpret ISO_Level5_Latch+AnyOf(all) {
+        virtualModifier= LevelFive;
+        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+    };
+    interpret ISO_Level5_Lock+AnyOf(all) {
+        virtualModifier= LevelFive;
+        action= LockMods(modifiers=LevelFive);
+    };
+    interpret Mode_switch+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= SetGroup(group=+1);
+    };
+    interpret ISO_Level3_Shift+AnyOfOrNone(all) {
+        action= SetMods(modifiers=LevelThree,clearLocks);
+    };
+    interpret ISO_Level3_Latch+AnyOfOrNone(all) {
+        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+    };
+    interpret ISO_Level3_Lock+AnyOfOrNone(all) {
+        action= LockMods(modifiers=LevelThree);
+    };
+    interpret ISO_Group_Latch+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= LatchGroup(group=2);
+    };
+    interpret ISO_Next_Group+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= LockGroup(group=+1);
+    };
+    interpret ISO_Prev_Group+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= LockGroup(group=-1);
+    };
+    interpret ISO_First_Group+AnyOfOrNone(all) {
+        action= LockGroup(group=1);
+    };
+    interpret ISO_Last_Group+AnyOfOrNone(all) {
+        action= LockGroup(group=2);
+    };
+    interpret KP_1+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+1);
+    };
+    interpret KP_End+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+1);
+    };
+    interpret KP_2+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=+1);
+    };
+    interpret KP_Down+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=+1);
+    };
+    interpret KP_3+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+1);
+    };
+    interpret KP_Next+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+1);
+    };
+    interpret KP_4+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+0);
+    };
+    interpret KP_Left+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+0);
+    };
+    interpret KP_6+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+0);
+    };
+    interpret KP_Right+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+0);
+    };
+    interpret KP_7+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=-1);
+    };
+    interpret KP_Home+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=-1);
+    };
+    interpret KP_8+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=-1);
+    };
+    interpret KP_Up+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=-1);
+    };
+    interpret KP_9+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=-1);
+    };
+    interpret KP_Prior+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=-1);
+    };
+    interpret KP_5+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default);
+    };
+    interpret KP_Begin+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default);
+    };
+    interpret KP_F2+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=1);
+    };
+    interpret KP_Divide+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=1);
+    };
+    interpret KP_F3+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=2);
+    };
+    interpret KP_Multiply+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=2);
+    };
+    interpret KP_F4+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=3);
+    };
+    interpret KP_Subtract+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=3);
+    };
+    interpret KP_Separator+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default,count=2);
+    };
+    interpret KP_Add+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default,count=2);
+    };
+    interpret KP_0+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=lock);
+    };
+    interpret KP_Insert+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=lock);
+    };
+    interpret KP_Decimal+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=unlock);
+    };
+    interpret KP_Delete+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=unlock);
+    };
+    interpret F25+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=1);
+    };
+    interpret F26+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=2);
+    };
+    interpret F27+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=-1);
+    };
+    interpret F29+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=-1);
+    };
+    interpret F31+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default);
+    };
+    interpret F33+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+1);
+    };
+    interpret F35+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+1);
+    };
+    interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
+        action= PtrBtn(button=default);
+    };
+    interpret Pointer_Button1+AnyOfOrNone(all) {
+        action= PtrBtn(button=1);
+    };
+    interpret Pointer_Button2+AnyOfOrNone(all) {
+        action= PtrBtn(button=2);
+    };
+    interpret Pointer_Button3+AnyOfOrNone(all) {
+        action= PtrBtn(button=3);
+    };
+    interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
+        action= PtrBtn(button=default,count=2);
+    };
+    interpret Pointer_DblClick1+AnyOfOrNone(all) {
+        action= PtrBtn(button=1,count=2);
+    };
+    interpret Pointer_DblClick2+AnyOfOrNone(all) {
+        action= PtrBtn(button=2,count=2);
+    };
+    interpret Pointer_DblClick3+AnyOfOrNone(all) {
+        action= PtrBtn(button=3,count=2);
+    };
+    interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=default,affect=both);
+    };
+    interpret Pointer_Drag1+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=1,affect=both);
+    };
+    interpret Pointer_Drag2+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=2,affect=both);
+    };
+    interpret Pointer_Drag3+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=3,affect=both);
+    };
+    interpret Pointer_EnableKeys+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeys);
+    };
+    interpret Pointer_Accelerate+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeysAccel);
+    };
+    interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
+        action= SetPtrDflt(affect=button,button=+1);
+    };
+    interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
+        action= SetPtrDflt(affect=button,button=-1);
+    };
+    interpret AccessX_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=AccessXKeys);
+    };
+    interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=AccessXFeedback);
+    };
+    interpret RepeatKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=RepeatKeys);
+    };
+    interpret SlowKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=SlowKeys);
+    };
+    interpret BounceKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=BounceKeys);
+    };
+    interpret StickyKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=StickyKeys);
+    };
+    interpret MouseKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeys);
+    };
+    interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeysAccel);
+    };
+    interpret Overlay1_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=Overlay1);
+    };
+    interpret Overlay2_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=Overlay2);
+    };
+    interpret AudibleBell_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=AudibleBell);
+    };
+    interpret Terminate_Server+AnyOfOrNone(all) {
+        action= Terminate();
+    };
+    interpret Alt_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Alt,clearLocks);
+    };
+    interpret Alt_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Alt,clearLocks);
+    };
+    interpret Meta_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Meta,clearLocks);
+    };
+    interpret Meta_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Meta,clearLocks);
+    };
+    interpret Super_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Super,clearLocks);
+    };
+    interpret Super_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Super,clearLocks);
+    };
+    interpret Hyper_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Hyper,clearLocks);
+    };
+    interpret Hyper_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Hyper,clearLocks);
+    };
+    interpret Shift_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Shift,clearLocks);
+    };
+    interpret XF86Switch_VT_1+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=1,!same);
+    };
+    interpret XF86Switch_VT_2+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=2,!same);
+    };
+    interpret XF86Switch_VT_3+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=3,!same);
+    };
+    interpret XF86Switch_VT_4+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=4,!same);
+    };
+    interpret XF86Switch_VT_5+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=5,!same);
+    };
+    interpret XF86Switch_VT_6+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=6,!same);
+    };
+    interpret XF86Switch_VT_7+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=7,!same);
+    };
+    interpret XF86Switch_VT_8+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=8,!same);
+    };
+    interpret XF86Switch_VT_9+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=9,!same);
+    };
+    interpret XF86Switch_VT_10+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=10,!same);
+    };
+    interpret XF86Switch_VT_11+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=11,!same);
+    };
+    interpret XF86Switch_VT_12+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=12,!same);
+    };
+    interpret XF86LogGrabInfo+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);
+    };
+    interpret XF86LogWindowTree+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);
+    };
+    interpret XF86Next_VMode+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+    };
+    interpret XF86Prev_VMode+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+    };
+    interpret ISO_Level5_Shift+AnyOfOrNone(all) {
+        action= SetMods(modifiers=LevelFive,clearLocks);
+    };
+    interpret ISO_Level5_Latch+AnyOfOrNone(all) {
+        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+    };
+    interpret ISO_Level5_Lock+AnyOfOrNone(all) {
+        action= LockMods(modifiers=LevelFive);
+    };
+    interpret Caps_Lock+AnyOfOrNone(all) {
+        action= LockMods(modifiers=Lock);
+    };
+    interpret Any+Exactly(Lock) {
+        action= LockMods(modifiers=Lock);
+    };
+    interpret Any+AnyOf(all) {
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    indicator "Caps Lock" {
+        !allowExplicit;
+        whichModState= locked;
+        modifiers= Lock;
+    };
+    indicator "Num Lock" {
+        !allowExplicit;
+        whichModState= locked;
+        modifiers= NumLock;
+    };
+    indicator "Scroll Lock" {
+        whichModState= locked;
+        modifiers= ScrollLock;
+    };
+    indicator "Shift Lock" {
+        !allowExplicit;
+        whichModState= locked;
+        modifiers= Shift;
+    };
+    indicator "Group 2" {
+        !allowExplicit;
+        groups= 0xfe;
+    };
+    indicator "Mouse Keys" {
+        indicatorDrivesKeyboard;
+        controls= mouseKeys;
+    };
+};
+
+xkb_symbols "pc+us+inet(evdev)+ctrl(nocaps)+compose(rwin)+terminate(ctrl_alt_bksp)" {
+
+    name[group1]="English (US)";
+
+    key  <ESC> {         [          Escape ] };
+    key <AE01> {         [               1,          exclam ] };
+    key <AE02> {         [               2,              at ] };
+    key <AE03> {         [               3,      numbersign ] };
+    key <AE04> {         [               4,          dollar ] };
+    key <AE05> {         [               5,         percent ] };
+    key <AE06> {         [               6,     asciicircum ] };
+    key <AE07> {         [               7,       ampersand ] };
+    key <AE08> {         [               8,        asterisk ] };
+    key <AE09> {         [               9,       parenleft ] };
+    key <AE10> {         [               0,      parenright ] };
+    key <AE11> {         [           minus,      underscore ] };
+    key <AE12> {         [           equal,            plus ] };
+    key <BKSP> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [       BackSpace,       BackSpace,        NoSymbol,        NoSymbol, Terminate_Server ]
+    };
+    key  <TAB> {         [             Tab,    ISO_Left_Tab ] };
+    key <AD01> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               q,               Q ]
+    };
+    key <AD02> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               w,               W ]
+    };
+    key <AD03> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               e,               E ]
+    };
+    key <AD04> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               r,               R ]
+    };
+    key <AD05> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               t,               T ]
+    };
+    key <AD06> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               y,               Y ]
+    };
+    key <AD07> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               u,               U ]
+    };
+    key <AD08> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               i,               I ]
+    };
+    key <AD09> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               o,               O ]
+    };
+    key <AD10> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               p,               P ]
+    };
+    key <AD11> {         [     bracketleft,       braceleft ] };
+    key <AD12> {         [    bracketright,      braceright ] };
+    key <RTRN> {         [          Return ] };
+    key <LCTL> {         [       Control_L ] };
+    key <AC01> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               a,               A ]
+    };
+    key <AC02> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               s,               S ]
+    };
+    key <AC03> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               d,               D ]
+    };
+    key <AC04> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               f,               F ]
+    };
+    key <AC05> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               g,               G ]
+    };
+    key <AC06> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               h,               H ]
+    };
+    key <AC07> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               j,               J ]
+    };
+    key <AC08> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               k,               K ]
+    };
+    key <AC09> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               l,               L ]
+    };
+    key <AC10> {         [       semicolon,           colon ] };
+    key <AC11> {         [      apostrophe,        quotedbl ] };
+    key <TLDE> {         [           grave,      asciitilde ] };
+    key <LFSH> {         [         Shift_L ] };
+    key <BKSL> {         [       backslash,             bar ] };
+    key <AB01> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               z,               Z ]
+    };
+    key <AB02> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               x,               X ]
+    };
+    key <AB03> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               c,               C ]
+    };
+    key <AB04> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               v,               V ]
+    };
+    key <AB05> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               b,               B ]
+    };
+    key <AB06> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               n,               N ]
+    };
+    key <AB07> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               m,               M ]
+    };
+    key <AB08> {         [           comma,            less ] };
+    key <AB09> {         [          period,         greater ] };
+    key <AB10> {         [           slash,        question ] };
+    key <RTSH> {         [         Shift_R ] };
+    key <KPMU> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ]
+    };
+    key <LALT> {         [           Alt_L,          Meta_L ] };
+    key <SPCE> {         [           space ] };
+    key <CAPS> {         [       Control_L,       Control_L ] };
+    key <FK01> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
+    };
+    key <FK02> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
+    };
+    key <FK03> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
+    };
+    key <FK04> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
+    };
+    key <FK05> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
+    };
+    key <FK06> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F6,              F6,              F6,              F6, XF86Switch_VT_6 ]
+    };
+    key <FK07> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F7,              F7,              F7,              F7, XF86Switch_VT_7 ]
+    };
+    key <FK08> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F8,              F8,              F8,              F8, XF86Switch_VT_8 ]
+    };
+    key <FK09> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F9,              F9,              F9,              F9, XF86Switch_VT_9 ]
+    };
+    key <FK10> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [             F10,             F10,             F10,             F10, XF86Switch_VT_10 ]
+    };
+    key <NMLK> {         [        Num_Lock ] };
+    key <SCLK> {         [     Scroll_Lock ] };
+    key  <KP7> {         [         KP_Home,            KP_7 ] };
+    key  <KP8> {         [           KP_Up,            KP_8 ] };
+    key  <KP9> {         [        KP_Prior,            KP_9 ] };
+    key <KPSU> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ]
+    };
+    key  <KP4> {         [         KP_Left,            KP_4 ] };
+    key  <KP5> {         [        KP_Begin,            KP_5 ] };
+    key  <KP6> {         [        KP_Right,            KP_6 ] };
+    key <KPAD> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ]
+    };
+    key  <KP1> {         [          KP_End,            KP_1 ] };
+    key  <KP2> {         [         KP_Down,            KP_2 ] };
+    key  <KP3> {         [         KP_Next,            KP_3 ] };
+    key  <KP0> {         [       KP_Insert,            KP_0 ] };
+    key <KPDL> {         [       KP_Delete,      KP_Decimal ] };
+    key <LVL3> {         [ ISO_Level3_Shift ] };
+    key <LSGT> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [            less,         greater,             bar,       brokenbar ]
+    };
+    key <FK11> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
+    };
+    key <FK12> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
+    };
+    key <KATA> {         [        Katakana ] };
+    key <HIRA> {         [        Hiragana ] };
+    key <HENK> {         [     Henkan_Mode ] };
+    key <HKTG> {         [ Hiragana_Katakana ] };
+    key <MUHE> {         [        Muhenkan ] };
+    key <KPEN> {         [        KP_Enter ] };
+    key <RCTL> {         [       Control_R ] };
+    key <KPDV> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ]
+    };
+    key <PRSC> {
+        type= "PC_ALT_LEVEL2",
+        symbols[Group1]= [           Print,         Sys_Req ]
+    };
+    key <RALT> {
+        type= "TWO_LEVEL",
+        symbols[Group1]= [           Alt_R,          Meta_R ]
+    };
+    key <LNFD> {         [        Linefeed ] };
+    key <HOME> {         [            Home ] };
+    key   <UP> {         [              Up ] };
+    key <PGUP> {         [           Prior ] };
+    key <LEFT> {         [            Left ] };
+    key <RGHT> {         [           Right ] };
+    key  <END> {         [             End ] };
+    key <DOWN> {         [            Down ] };
+    key <PGDN> {         [            Next ] };
+    key  <INS> {         [          Insert ] };
+    key <DELE> {         [          Delete ] };
+    key <MUTE> {         [   XF86AudioMute ] };
+    key <VOL-> {         [ XF86AudioLowerVolume ] };
+    key <VOL+> {         [ XF86AudioRaiseVolume ] };
+    key <POWR> {         [    XF86PowerOff ] };
+    key <KPEQ> {         [        KP_Equal ] };
+    key <I126> {         [       plusminus ] };
+    key <PAUS> {
+        type= "PC_CONTROL_LEVEL2",
+        symbols[Group1]= [           Pause,           Break ]
+    };
+    key <I128> {         [     XF86LaunchA ] };
+    key <I129> {         [      KP_Decimal,      KP_Decimal ] };
+    key <HNGL> {         [          Hangul ] };
+    key <HJCV> {         [    Hangul_Hanja ] };
+    key <LWIN> {         [         Super_L ] };
+    key <RWIN> {
+        type= "TWO_LEVEL",
+        symbols[Group1]= [       Multi_key,       Multi_key ]
+    };
+    key <COMP> {         [            Menu ] };
+    key <STOP> {         [          Cancel ] };
+    key <AGAI> {         [            Redo ] };
+    key <PROP> {         [        SunProps ] };
+    key <UNDO> {         [            Undo ] };
+    key <FRNT> {         [        SunFront ] };
+    key <COPY> {         [        XF86Copy ] };
+    key <OPEN> {         [         SunOpen ] };
+    key <PAST> {         [       XF86Paste ] };
+    key <FIND> {         [            Find ] };
+    key  <CUT> {         [         XF86Cut ] };
+    key <HELP> {         [            Help ] };
+    key <I147> {         [      XF86MenuKB ] };
+    key <I148> {         [  XF86Calculator ] };
+    key <I150> {         [       XF86Sleep ] };
+    key <I151> {         [      XF86WakeUp ] };
+    key <I152> {         [    XF86Explorer ] };
+    key <I153> {         [        XF86Send ] };
+    key <I155> {         [        XF86Xfer ] };
+    key <I156> {         [     XF86Launch1 ] };
+    key <I157> {         [     XF86Launch2 ] };
+    key <I158> {         [         XF86WWW ] };
+    key <I159> {         [         XF86DOS ] };
+    key <I160> {         [ XF86ScreenSaver ] };
+    key <I162> {         [ XF86RotateWindows ] };
+    key <I163> {         [        XF86Mail ] };
+    key <I164> {         [   XF86Favorites ] };
+    key <I165> {         [  XF86MyComputer ] };
+    key <I166> {         [        XF86Back ] };
+    key <I167> {         [     XF86Forward ] };
+    key <I169> {         [       XF86Eject ] };
+    key <I170> {         [       XF86Eject,       XF86Eject ] };
+    key <I171> {         [   XF86AudioNext ] };
+    key <I172> {         [   XF86AudioPlay,  XF86AudioPause ] };
+    key <I173> {         [   XF86AudioPrev ] };
+    key <I174> {         [   XF86AudioStop,       XF86Eject ] };
+    key <I175> {         [ XF86AudioRecord ] };
+    key <I176> {         [ XF86AudioRewind ] };
+    key <I177> {         [       XF86Phone ] };
+    key <I179> {         [       XF86Tools ] };
+    key <I180> {         [    XF86HomePage ] };
+    key <I181> {         [      XF86Reload ] };
+    key <I182> {         [       XF86Close ] };
+    key <I185> {         [    XF86ScrollUp ] };
+    key <I186> {         [  XF86ScrollDown ] };
+    key <I187> {         [       parenleft ] };
+    key <I188> {         [      parenright ] };
+    key <I189> {         [         XF86New ] };
+    key <I190> {         [            Redo ] };
+    key <FK13> {         [       XF86Tools ] };
+    key <FK14> {         [     XF86Launch5 ] };
+    key <FK15> {         [     XF86Launch6 ] };
+    key <FK16> {         [     XF86Launch7 ] };
+    key <FK17> {         [     XF86Launch8 ] };
+    key <FK18> {         [     XF86Launch9 ] };
+    key <FK21> {         [ XF86TouchpadToggle ] };
+    key <FK22> {         [  XF86TouchpadOn ] };
+    key <FK23> {         [ XF86TouchpadOff ] };
+    key <MDSW> {         [     Mode_switch ] };
+    key  <ALT> {         [        NoSymbol,           Alt_L ] };
+    key <META> {         [        NoSymbol,          Meta_L ] };
+    key <SUPR> {         [        NoSymbol,         Super_L ] };
+    key <HYPR> {         [        NoSymbol,         Hyper_L ] };
+    key <I208> {         [   XF86AudioPlay ] };
+    key <I209> {         [  XF86AudioPause ] };
+    key <I210> {         [     XF86Launch3 ] };
+    key <I211> {         [     XF86Launch4 ] };
+    key <I212> {         [     XF86LaunchB ] };
+    key <I213> {         [     XF86Suspend ] };
+    key <I214> {         [       XF86Close ] };
+    key <I215> {         [   XF86AudioPlay ] };
+    key <I216> {         [ XF86AudioForward ] };
+    key <I218> {         [           Print ] };
+    key <I220> {         [      XF86WebCam ] };
+    key <I223> {         [        XF86Mail ] };
+    key <I224> {         [   XF86Messenger ] };
+    key <I225> {         [      XF86Search ] };
+    key <I226> {         [          XF86Go ] };
+    key <I227> {         [     XF86Finance ] };
+    key <I228> {         [        XF86Game ] };
+    key <I229> {         [        XF86Shop ] };
+    key <I231> {         [          Cancel ] };
+    key <I232> {         [ XF86MonBrightnessDown ] };
+    key <I233> {         [ XF86MonBrightnessUp ] };
+    key <I234> {         [  XF86AudioMedia ] };
+    key <I235> {         [     XF86Display ] };
+    key <I236> {         [ XF86KbdLightOnOff ] };
+    key <I237> {         [ XF86KbdBrightnessDown ] };
+    key <I238> {         [ XF86KbdBrightnessUp ] };
+    key <I239> {         [        XF86Send ] };
+    key <I240> {         [       XF86Reply ] };
+    key <I241> {         [ XF86MailForward ] };
+    key <I242> {         [        XF86Save ] };
+    key <I243> {         [   XF86Documents ] };
+    key <I244> {         [     XF86Battery ] };
+    key <I245> {         [   XF86Bluetooth ] };
+    key <I246> {         [        XF86WLAN ] };
+    modifier_map Control { <LCTL> };
+    modifier_map Shift { <LFSH> };
+    modifier_map Shift { <RTSH> };
+    modifier_map Mod1 { <LALT> };
+    modifier_map Control { <CAPS> };
+    modifier_map Mod2 { <NMLK> };
+    modifier_map Mod5 { <LVL3> };
+    modifier_map Control { <RCTL> };
+    modifier_map Mod1 { <RALT> };
+    modifier_map Mod4 { <LWIN> };
+    modifier_map Mod5 { <MDSW> };
+    modifier_map Mod1 { <META> };
+    modifier_map Mod4 { <SUPR> };
+    modifier_map Mod4 { <HYPR> };
+};
+
+xkb_geometry "pc(pc105)" {
+
+    width=       470;
+    height=      180;
+
+    alias <AC00> = <CAPS>;
+    alias <AA00> = <LCTL>;
+
+    baseColor=   "white";
+    labelColor=  "black";
+    xfont=       "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
+    description= "Generic 105";
+
+    shape "NORM" {
+        corner= 1,
+        { [  18,  18 ] },
+        { [   2,   1 ], [  16,  16 ] }
+    };
+    shape "BKSP" {
+        corner= 1,
+        { [  38,  18 ] },
+        { [   2,   1 ], [  36,  16 ] }
+    };
+    shape "TABK" {
+        corner= 1,
+        { [  28,  18 ] },
+        { [   2,   1 ], [  26,  16 ] }
+    };
+    shape "BKSL" {
+        corner= 1,
+        { [  28,  18 ] },
+        { [   2,   1 ], [  26,  16 ] }
+    };
+    shape "RTRN" {
+        corner= 1,
+        { [   0,   0 ], [  28,   0 ], [  28,  37 ], [   5,  37 ],
+          [   5,  18 ], [   0,  18 ] },
+        { [   2,   1 ], [  26,   1 ], [  26,  35 ], [   7,  35 ],
+          [   7,  16 ], [   2,  16 ] },
+        approx= { [   5,   0 ], [  28,  37 ] }
+    };
+    shape "CAPS" {
+        corner= 1,
+        { [  33,  18 ] },
+        { [   2,   1 ], [  31,  16 ] }
+    };
+    shape "LFSH" {
+        corner= 1,
+        { [  25,  18 ] },
+        { [   2,   1 ], [  23,  16 ] }
+    };
+    shape "RTSH" {
+        corner= 1,
+        { [  50,  18 ] },
+        { [   2,   1 ], [  48,  16 ] }
+    };
+    shape "MODK" {
+        corner= 1,
+        { [  27,  18 ] },
+        { [   2,   1 ], [  25,  16 ] }
+    };
+    shape "SMOD" {
+        corner= 1,
+        { [  23,  18 ] },
+        { [   2,   1 ], [  21,  16 ] }
+    };
+    shape "SPCE" {
+        corner= 1,
+        { [ 113,  18 ] },
+        { [   2,   1 ], [ 111,  16 ] }
+    };
+    shape "KP0" {
+        corner= 1,
+        { [  37,  18 ] },
+        { [   2,   1 ], [  35,  16 ] }
+    };
+    shape "KPAD" {
+        corner= 1,
+        { [  18,  37 ] },
+        { [   2,   1 ], [  16,  35 ] }
+    };
+    shape "LEDS" { { [  75,  20 ] } };
+    shape "LED" { { [   5,   1 ] } };
+    section "Function" {
+        key.color= "grey20";
+        priority=  7;
+        top=       22;
+        left=      19;
+        width=     351;
+        height=    19;
+        row {
+            top=  1;
+            left= 1;
+            keys {
+                {  <ESC>, "NORM",   1 },
+                { <FK01>, "NORM",  20, color="white" },
+                { <FK02>, "NORM",   1, color="white" },
+                { <FK03>, "NORM",   1, color="white" },
+                { <FK04>, "NORM",   1, color="white" },
+                { <FK05>, "NORM",  11, color="white" },
+                { <FK06>, "NORM",   1, color="white" },
+                { <FK07>, "NORM",   1, color="white" },
+                { <FK08>, "NORM",   1, color="white" },
+                { <FK09>, "NORM",  11, color="white" },
+                { <FK10>, "NORM",   1, color="white" },
+                { <FK11>, "NORM",   1, color="white" },
+                { <FK12>, "NORM",   1, color="white" },
+                { <PRSC>, "NORM",   8, color="white" },
+                { <SCLK>, "NORM",   1, color="white" },
+                { <PAUS>, "NORM",   1, color="white" }
+            };
+        };
+    }; // End of "Function" section
+
+    section "Alpha" {
+        key.color= "white";
+        priority=  8;
+        top=       61;
+        left=      19;
+        width=     287;
+        height=    95;
+        row {
+            top=  1;
+            left= 1;
+            keys {
+                { <TLDE>, "NORM",   1 }, { <AE01>, "NORM",   1 },
+                { <AE02>, "NORM",   1 }, { <AE03>, "NORM",   1 },
+                { <AE04>, "NORM",   1 }, { <AE05>, "NORM",   1 },
+                { <AE06>, "NORM",   1 }, { <AE07>, "NORM",   1 },
+                { <AE08>, "NORM",   1 }, { <AE09>, "NORM",   1 },
+                { <AE10>, "NORM",   1 }, { <AE11>, "NORM",   1 },
+                { <AE12>, "NORM",   1 },
+                { <BKSP>, "BKSP",   1, color="grey20" }
+            };
+        };
+        row {
+            top=  20;
+            left= 1;
+            keys {
+                {  <TAB>, "TABK",   1, color="grey20" },
+                { <AD01>, "NORM",   1 }, { <AD02>, "NORM",   1 },
+                { <AD03>, "NORM",   1 }, { <AD04>, "NORM",   1 },
+                { <AD05>, "NORM",   1 }, { <AD06>, "NORM",   1 },
+                { <AD07>, "NORM",   1 }, { <AD08>, "NORM",   1 },
+                { <AD09>, "NORM",   1 }, { <AD10>, "NORM",   1 },
+                { <AD11>, "NORM",   1 }, { <AD12>, "NORM",   1 },
+                { <RTRN>, "RTRN",   1, color="grey20" }
+            };
+        };
+        row {
+            top=  39;
+            left= 1;
+            keys {
+                { <CAPS>, "CAPS",   1, color="grey20" },
+                { <AC01>, "NORM",   1 }, { <AC02>, "NORM",   1 },
+                { <AC03>, "NORM",   1 }, { <AC04>, "NORM",   1 },
+                { <AC05>, "NORM",   1 }, { <AC06>, "NORM",   1 },
+                { <AC07>, "NORM",   1 }, { <AC08>, "NORM",   1 },
+                { <AC09>, "NORM",   1 }, { <AC10>, "NORM",   1 },
+                { <AC11>, "NORM",   1 }, { <BKSL>, "NORM",   1 }
+            };
+        };
+        row {
+            top=  58;
+            left= 1;
+            keys {
+                { <LFSH>, "LFSH",   1, color="grey20" },
+                { <LSGT>, "NORM",   1 }, { <AB01>, "NORM",   1 },
+                { <AB02>, "NORM",   1 }, { <AB03>, "NORM",   1 },
+                { <AB04>, "NORM",   1 }, { <AB05>, "NORM",   1 },
+                { <AB06>, "NORM",   1 }, { <AB07>, "NORM",   1 },
+                { <AB08>, "NORM",   1 }, { <AB09>, "NORM",   1 },
+                { <AB10>, "NORM",   1 },
+                { <RTSH>, "RTSH",   1, color="grey20" }
+            };
+        };
+        row {
+            top=  77;
+            left= 1;
+            keys {
+                { <LCTL>, "MODK",   1, color="grey20" },
+                { <LWIN>, "SMOD",   1, color="grey20" },
+                { <LALT>, "SMOD",   1, color="grey20" },
+                { <SPCE>, "SPCE",   1 },
+                { <RALT>, "SMOD",   1, color="grey20" },
+                { <RWIN>, "SMOD",   1, color="grey20" },
+                { <MENU>, "SMOD",   1, color="grey20" },
+                { <RCTL>, "SMOD",   1, color="grey20" }
+            };
+        };
+    }; // End of "Alpha" section
+
+    section "Editing" {
+        key.color= "grey20";
+        priority=  9;
+        top=       61;
+        left=      312;
+        width=     58;
+        height=    95;
+        row {
+            top=  1;
+            left= 1;
+            keys {
+                {  <INS>, "NORM",   1 }, { <HOME>, "NORM",   1 },
+                { <PGUP>, "NORM",   1 }
+            };
+        };
+        row {
+            top=  20;
+            left= 1;
+            keys {
+                { <DELE>, "NORM",   1 }, {  <END>, "NORM",   1 },
+                { <PGDN>, "NORM",   1 }
+            };
+        };
+        row {
+            top=  58;
+            left= 20;
+            keys {
+                {   <UP>, "NORM",   1 }
+            };
+        };
+        row {
+            top=  77;
+            left= 1;
+            keys {
+                { <LEFT>, "NORM",   1 }, { <DOWN>, "NORM",   1 },
+                { <RGHT>, "NORM",   1 }
+            };
+        };
+    }; // End of "Editing" section
+
+    section "Keypad" {
+        key.color= "grey20";
+        priority=  10;
+        top=       61;
+        left=      376;
+        width=     77;
+        height=    95;
+        row {
+            top=  1;
+            left= 1;
+            keys {
+                { <NMLK>, "NORM",   1 }, { <KPDV>, "NORM",   1 },
+                { <KPMU>, "NORM",   1 }, { <KPSU>, "NORM",   1 }
+            };
+        };
+        row {
+            top=  20;
+            left= 1;
+            keys {
+                {  <KP7>, "NORM",   1, color="white" },
+                {  <KP8>, "NORM",   1, color="white" },
+                {  <KP9>, "NORM",   1, color="white" },
+                { <KPAD>, "KPAD",   1 }
+            };
+        };
+        row {
+            top=  39;
+            left= 1;
+            keys {
+                {  <KP4>, "NORM",   1, color="white" },
+                {  <KP5>, "NORM",   1, color="white" },
+                {  <KP6>, "NORM",   1, color="white" }
+            };
+        };
+        row {
+            top=  58;
+            left= 1;
+            keys {
+                {  <KP1>, "NORM",   1, color="white" },
+                {  <KP2>, "NORM",   1, color="white" },
+                {  <KP3>, "NORM",   1, color="white" },
+                { <KPEN>, "KPAD",   1 }
+            };
+        };
+        row {
+            top=  77;
+            left= 1;
+            keys {
+                {  <KP0>, "KP0",   1, color="white" },
+                { <KPDL>, "NORM",   1, color="white" }
+            };
+        };
+    }; // End of "Keypad" section
+
+    solid "LedPanel" {
+        top=      22;
+        left=     377;
+        priority= 0;
+        color= "grey10";
+        shape= "LEDS";
+    };
+    indicator "Num Lock" {
+        top=      37;
+        left=     382;
+        priority= 1;
+        onColor= "green";
+        offColor= "green30";
+        shape= "LED";
+    };
+    indicator "Caps Lock" {
+        top=      37;
+        left=     407;
+        priority= 2;
+        onColor= "green";
+        offColor= "green30";
+        shape= "LED";
+    };
+    indicator "Scroll Lock" {
+        top=      37;
+        left=     433;
+        priority= 3;
+        onColor= "green";
+        offColor= "green30";
+        shape= "LED";
+    };
+    text "NumLockLabel" {
+        top=      25;
+        left=     378;
+        priority= 4;
+        width=  19.8;
+        height=  10;
+        XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
+        text=  "Num\nLock";
+    };
+    text "CapsLockLabel" {
+        top=      25;
+        left=     403;
+        priority= 5;
+        width=  26.4;
+        height=  10;
+        XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
+        text=  "Caps\nLock";
+    };
+    text "ScrollLockLabel" {
+        top=      25;
+        left=     428;
+        priority= 6;
+        width=  39.6;
+        height=  10;
+        XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
+        text=  "Scroll\nLock";
+    };
+};
+
+};
diff --git a/data/keymaps/divide-by-zero.xkb b/data/keymaps/divide-by-zero.xkb
new file mode 100644
--- /dev/null
+++ b/data/keymaps/divide-by-zero.xkb
@@ -0,0 +1,21 @@
+xkb_keymap {
+	xkb_keycodes {
+		 <ESC> = 1;
+	};
+
+	xkb_types {
+		virtual_modifiers NumLock;
+	};
+
+	xkb_compatibility {
+		virtual_modifiers NumLock;
+		interpret KP_1+AnyOfOrNone(all) {
+			repeat= True;
+			action= MovePtr(x=(1/0),y=+1);
+		};
+	};
+
+	xkb_symbols {
+		key <HYPR> {	[        NoSymbol,         Hyper_L ] };
+	};
+};
diff --git a/data/keymaps/no-types.xkb b/data/keymaps/no-types.xkb
new file mode 100644
--- /dev/null
+++ b/data/keymaps/no-types.xkb
@@ -0,0 +1,1025 @@
+xkb_keymap {
+	xkb_keycodes {
+		minimum = 8;
+		maximum = 255;
+		 <ESC> = 9;
+		<AE01> = 10;
+		<AE02> = 11;
+		<AE03> = 12;
+		<AE04> = 13;
+		<AE05> = 14;
+		<AE06> = 15;
+		<AE07> = 16;
+		<AE08> = 17;
+		<AE09> = 18;
+		<AE10> = 19;
+		<AE11> = 20;
+		<AE12> = 21;
+		<BKSP> = 22;
+		 <TAB> = 23;
+		<AD01> = 24;
+		<AD02> = 25;
+		<AD03> = 26;
+		<AD04> = 27;
+		<AD05> = 28;
+		<AD06> = 29;
+		<AD07> = 30;
+		<AD08> = 31;
+		<AD09> = 32;
+		<AD10> = 33;
+		<AD11> = 34;
+		<AD12> = 35;
+		<RTRN> = 36;
+		<LCTL> = 37;
+		<AC01> = 38;
+		<AC02> = 39;
+		<AC03> = 40;
+		<AC04> = 41;
+		<AC05> = 42;
+		<AC06> = 43;
+		<AC07> = 44;
+		<AC08> = 45;
+		<AC09> = 46;
+		<AC10> = 47;
+		<AC11> = 48;
+		<TLDE> = 49;
+		<LFSH> = 50;
+		<BKSL> = 51;
+		<AB01> = 52;
+		<AB02> = 53;
+		<AB03> = 54;
+		<AB04> = 55;
+		<AB05> = 56;
+		<AB06> = 57;
+		<AB07> = 58;
+		<AB08> = 59;
+		<AB09> = 60;
+		<AB10> = 61;
+		<RTSH> = 62;
+		<KPMU> = 63;
+		<LALT> = 64;
+		<SPCE> = 65;
+		<CAPS> = 66;
+		<FK01> = 67;
+		<FK02> = 68;
+		<FK03> = 69;
+		<FK04> = 70;
+		<FK05> = 71;
+		<FK06> = 72;
+		<FK07> = 73;
+		<FK08> = 74;
+		<FK09> = 75;
+		<FK10> = 76;
+		<NMLK> = 77;
+		<SCLK> = 78;
+		 <KP7> = 79;
+		 <KP8> = 80;
+		 <KP9> = 81;
+		<KPSU> = 82;
+		 <KP4> = 83;
+		 <KP5> = 84;
+		 <KP6> = 85;
+		<KPAD> = 86;
+		 <KP1> = 87;
+		 <KP2> = 88;
+		 <KP3> = 89;
+		 <KP0> = 90;
+		<KPDL> = 91;
+		<LVL3> = 92;
+		<LSGT> = 94;
+		<FK11> = 95;
+		<FK12> = 96;
+		<AB11> = 97;
+		<KATA> = 98;
+		<HIRA> = 99;
+		<HENK> = 100;
+		<HKTG> = 101;
+		<MUHE> = 102;
+		<JPCM> = 103;
+		<KPEN> = 104;
+		<RCTL> = 105;
+		<KPDV> = 106;
+		<PRSC> = 107;
+		<RALT> = 108;
+		<LNFD> = 109;
+		<HOME> = 110;
+		  <UP> = 111;
+		<PGUP> = 112;
+		<LEFT> = 113;
+		<RGHT> = 114;
+		 <END> = 115;
+		<DOWN> = 116;
+		<PGDN> = 117;
+		 <INS> = 118;
+		<DELE> = 119;
+		<I120> = 120;
+		<MUTE> = 121;
+		<VOL-> = 122;
+		<VOL+> = 123;
+		<POWR> = 124;
+		<KPEQ> = 125;
+		<I126> = 126;
+		<PAUS> = 127;
+		<I128> = 128;
+		<I129> = 129;
+		<HNGL> = 130;
+		<HJCV> = 131;
+		<AE13> = 132;
+		<LWIN> = 133;
+		<RWIN> = 134;
+		<COMP> = 135;
+		<STOP> = 136;
+		<AGAI> = 137;
+		<PROP> = 138;
+		<UNDO> = 139;
+		<FRNT> = 140;
+		<COPY> = 141;
+		<OPEN> = 142;
+		<PAST> = 143;
+		<FIND> = 144;
+		 <CUT> = 145;
+		<HELP> = 146;
+		<I147> = 147;
+		<I148> = 148;
+		<I149> = 149;
+		<I150> = 150;
+		<I151> = 151;
+		<I152> = 152;
+		<I153> = 153;
+		<I154> = 154;
+		<I155> = 155;
+		<I156> = 156;
+		<I157> = 157;
+		<I158> = 158;
+		<I159> = 159;
+		<I160> = 160;
+		<I161> = 161;
+		<I162> = 162;
+		<I163> = 163;
+		<I164> = 164;
+		<I165> = 165;
+		<I166> = 166;
+		<I167> = 167;
+		<I168> = 168;
+		<I169> = 169;
+		<I170> = 170;
+		<I171> = 171;
+		<I172> = 172;
+		<I173> = 173;
+		<I174> = 174;
+		<I175> = 175;
+		<I176> = 176;
+		<I177> = 177;
+		<I178> = 178;
+		<I179> = 179;
+		<I180> = 180;
+		<I181> = 181;
+		<I182> = 182;
+		<I183> = 183;
+		<I184> = 184;
+		<I185> = 185;
+		<I186> = 186;
+		<I187> = 187;
+		<I188> = 188;
+		<I189> = 189;
+		<I190> = 190;
+		<FK13> = 191;
+		<FK14> = 192;
+		<FK15> = 193;
+		<FK16> = 194;
+		<FK17> = 195;
+		<FK18> = 196;
+		<FK19> = 197;
+		<FK20> = 198;
+		<FK21> = 199;
+		<FK22> = 200;
+		<FK23> = 201;
+		<FK24> = 202;
+		<MDSW> = 203;
+		 <ALT> = 204;
+		<META> = 205;
+		<SUPR> = 206;
+		<HYPR> = 207;
+		<I208> = 208;
+		<I209> = 209;
+		<I210> = 210;
+		<I211> = 211;
+		<I212> = 212;
+		<I213> = 213;
+		<I214> = 214;
+		<I215> = 215;
+		<I216> = 216;
+		<I217> = 217;
+		<I218> = 218;
+		<I219> = 219;
+		<I220> = 220;
+		<I221> = 221;
+		<I222> = 222;
+		<I223> = 223;
+		<I224> = 224;
+		<I225> = 225;
+		<I226> = 226;
+		<I227> = 227;
+		<I228> = 228;
+		<I229> = 229;
+		<I230> = 230;
+		<I231> = 231;
+		<I232> = 232;
+		<I233> = 233;
+		<I234> = 234;
+		<I235> = 235;
+		<I236> = 236;
+		<I237> = 237;
+		<I238> = 238;
+		<I239> = 239;
+		<I240> = 240;
+		<I241> = 241;
+		<I242> = 242;
+		<I243> = 243;
+		<I244> = 244;
+		<I245> = 245;
+		<I246> = 246;
+		<I247> = 247;
+		<I248> = 248;
+		<I249> = 249;
+		<I250> = 250;
+		<I251> = 251;
+		<I252> = 252;
+		<I253> = 253;
+		indicator 1 = "Caps Lock";
+		indicator 2 = "Num Lock";
+		indicator 3 = "Scroll Lock";
+		indicator 4 = "Compose";
+		indicator 5 = "Kana";
+		indicator 6 = "Sleep";
+		indicator 7 = "Suspend";
+		indicator 8 = "Mute";
+		indicator 9 = "Misc";
+		indicator 10 = "Mail";
+		indicator 11 = "Charging";
+		indicator 12 = "Shift Lock";
+		indicator 13 = "Group 2";
+		indicator 14 = "Mouse Keys";
+		alias <AC12> = <BKSL>;
+		alias <MENU> = <COMP>;
+		alias <HZTG> = <TLDE>;
+		alias <LMTA> = <LWIN>;
+		alias <RMTA> = <RWIN>;
+		alias <ALGR> = <RALT>;
+		alias <KPPT> = <I129>;
+		alias <LatQ> = <AD01>;
+		alias <LatW> = <AD02>;
+		alias <LatE> = <AD03>;
+		alias <LatR> = <AD04>;
+		alias <LatT> = <AD05>;
+		alias <LatY> = <AD06>;
+		alias <LatU> = <AD07>;
+		alias <LatI> = <AD08>;
+		alias <LatO> = <AD09>;
+		alias <LatP> = <AD10>;
+		alias <LatA> = <AC01>;
+		alias <LatS> = <AC02>;
+		alias <LatD> = <AC03>;
+		alias <LatF> = <AC04>;
+		alias <LatG> = <AC05>;
+		alias <LatH> = <AC06>;
+		alias <LatJ> = <AC07>;
+		alias <LatK> = <AC08>;
+		alias <LatL> = <AC09>;
+		alias <LatZ> = <AB01>;
+		alias <LatX> = <AB02>;
+		alias <LatC> = <AB03>;
+		alias <LatV> = <AB04>;
+		alias <LatB> = <AB05>;
+		alias <LatN> = <AB06>;
+		alias <LatM> = <AB07>;
+	};
+
+	xkb_types {
+	};
+
+	xkb_compatibility {
+		virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+		interpret.useModMapMods= AnyLevel;
+		interpret.repeat= false;
+		interpret.locking= false;
+		interpret ISO_Level2_Latch+Exactly(Shift) {
+			useModMapMods=level1;
+			action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
+		};
+		interpret Shift_Lock+AnyOf(Shift+Lock) {
+			action= LockMods(modifiers=Shift);
+		};
+		interpret Num_Lock+AnyOf(all) {
+			virtualModifier= NumLock;
+			action= LockMods(modifiers=NumLock);
+		};
+		interpret ISO_Lock+AnyOf(all) {
+                        action= NoAction();
+		};
+		interpret ISO_Level3_Shift+AnyOf(all) {
+			virtualModifier= LevelThree;
+			useModMapMods=level1;
+			action= SetMods(modifiers=LevelThree,clearLocks);
+		};
+		interpret ISO_Level3_Latch+AnyOf(all) {
+			virtualModifier= LevelThree;
+			useModMapMods=level1;
+			action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+		};
+		interpret ISO_Level3_Lock+AnyOf(all) {
+			virtualModifier= LevelThree;
+			useModMapMods=level1;
+			action= LockMods(modifiers=LevelThree);
+		};
+		interpret Alt_L+AnyOf(all) {
+			virtualModifier= Alt;
+			action= SetMods(modifiers=modMapMods,clearLocks);
+		};
+		interpret Alt_R+AnyOf(all) {
+			virtualModifier= Alt;
+			action= SetMods(modifiers=modMapMods,clearLocks);
+		};
+		interpret Meta_L+AnyOf(all) {
+			virtualModifier= Meta;
+			action= SetMods(modifiers=modMapMods,clearLocks);
+		};
+		interpret Meta_R+AnyOf(all) {
+			virtualModifier= Meta;
+			action= SetMods(modifiers=modMapMods,clearLocks);
+		};
+		interpret Super_L+AnyOf(all) {
+			virtualModifier= Super;
+			action= SetMods(modifiers=modMapMods,clearLocks);
+		};
+		interpret Super_R+AnyOf(all) {
+			virtualModifier= Super;
+			action= SetMods(modifiers=modMapMods,clearLocks);
+		};
+		interpret Hyper_L+AnyOf(all) {
+			virtualModifier= Hyper;
+			action= SetMods(modifiers=modMapMods,clearLocks);
+		};
+		interpret Hyper_R+AnyOf(all) {
+			virtualModifier= Hyper;
+			action= SetMods(modifiers=modMapMods,clearLocks);
+		};
+		interpret Scroll_Lock+AnyOf(all) {
+			virtualModifier= ScrollLock;
+			action= LockMods(modifiers=modMapMods);
+		};
+		interpret ISO_Level5_Shift+AnyOf(all) {
+			virtualModifier= LevelFive;
+			useModMapMods=level1;
+			action= SetMods(modifiers=LevelFive,clearLocks);
+		};
+		interpret ISO_Level5_Latch+AnyOf(all) {
+			virtualModifier= LevelFive;
+			action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+		};
+		interpret ISO_Level5_Lock+AnyOf(all) {
+			virtualModifier= LevelFive;
+			action= LockMods(modifiers=LevelFive);
+		};
+		interpret Mode_switch+AnyOfOrNone(all) {
+			virtualModifier= AltGr;
+			useModMapMods=level1;
+			action= SetGroup(group=+1);
+		};
+		interpret ISO_Level3_Shift+AnyOfOrNone(all) {
+			action= SetMods(modifiers=LevelThree,clearLocks);
+		};
+		interpret ISO_Level3_Latch+AnyOfOrNone(all) {
+			action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+		};
+		interpret ISO_Level3_Lock+AnyOfOrNone(all) {
+			action= LockMods(modifiers=LevelThree);
+		};
+		interpret ISO_Group_Latch+AnyOfOrNone(all) {
+			virtualModifier= AltGr;
+			useModMapMods=level1;
+			action= LatchGroup(group=2);
+		};
+		interpret ISO_Next_Group+AnyOfOrNone(all) {
+			virtualModifier= AltGr;
+			useModMapMods=level1;
+			action= LockGroup(group=+1);
+		};
+		interpret ISO_Prev_Group+AnyOfOrNone(all) {
+			virtualModifier= AltGr;
+			useModMapMods=level1;
+			action= LockGroup(group=-1);
+		};
+		interpret ISO_First_Group+AnyOfOrNone(all) {
+			action= LockGroup(group=1);
+		};
+		interpret ISO_Last_Group+AnyOfOrNone(all) {
+			action= LockGroup(group=2);
+		};
+		interpret KP_1+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=-1,y=+1);
+		};
+		interpret KP_End+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=-1,y=+1);
+		};
+		interpret KP_2+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+0,y=+1);
+		};
+		interpret KP_Down+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+0,y=+1);
+		};
+		interpret KP_3+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+1,y=+1);
+		};
+		interpret KP_Next+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+1,y=+1);
+		};
+		interpret KP_4+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=-1,y=+0);
+		};
+		interpret KP_Left+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=-1,y=+0);
+		};
+		interpret KP_6+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+1,y=+0);
+		};
+		interpret KP_Right+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+1,y=+0);
+		};
+		interpret KP_7+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=-1,y=-1);
+		};
+		interpret KP_Home+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=-1,y=-1);
+		};
+		interpret KP_8+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+0,y=-1);
+		};
+		interpret KP_Up+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+0,y=-1);
+		};
+		interpret KP_9+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+1,y=-1);
+		};
+		interpret KP_Prior+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+1,y=-1);
+		};
+		interpret KP_5+AnyOfOrNone(all) {
+			repeat= true;
+			action= PtrBtn(button=default);
+		};
+		interpret KP_Begin+AnyOfOrNone(all) {
+			repeat= true;
+			action= PtrBtn(button=default);
+		};
+		interpret KP_F2+AnyOfOrNone(all) {
+			repeat= true;
+			action= SetPtrDflt(affect=button,button=1);
+		};
+		interpret KP_Divide+AnyOfOrNone(all) {
+			repeat= true;
+			action= SetPtrDflt(affect=button,button=1);
+		};
+		interpret KP_F3+AnyOfOrNone(all) {
+			repeat= true;
+			action= SetPtrDflt(affect=button,button=2);
+		};
+		interpret KP_Multiply+AnyOfOrNone(all) {
+			repeat= true;
+			action= SetPtrDflt(affect=button,button=2);
+		};
+		interpret KP_F4+AnyOfOrNone(all) {
+			repeat= true;
+			action= SetPtrDflt(affect=button,button=3);
+		};
+		interpret KP_Subtract+AnyOfOrNone(all) {
+			repeat= true;
+			action= SetPtrDflt(affect=button,button=3);
+		};
+		interpret KP_Separator+AnyOfOrNone(all) {
+			repeat= true;
+			action= PtrBtn(button=default,count=2);
+		};
+		interpret KP_Add+AnyOfOrNone(all) {
+			repeat= true;
+			action= PtrBtn(button=default,count=2);
+		};
+		interpret KP_0+AnyOfOrNone(all) {
+			repeat= true;
+			action= LockPtrBtn(button=default,affect=lock);
+		};
+		interpret KP_Insert+AnyOfOrNone(all) {
+			repeat= true;
+			action= LockPtrBtn(button=default,affect=lock);
+		};
+		interpret KP_Decimal+AnyOfOrNone(all) {
+			repeat= true;
+			action= LockPtrBtn(button=default,affect=unlock);
+		};
+		interpret KP_Delete+AnyOfOrNone(all) {
+			repeat= true;
+			action= LockPtrBtn(button=default,affect=unlock);
+		};
+		interpret F25+AnyOfOrNone(all) {
+			repeat= true;
+			action= SetPtrDflt(affect=button,button=1);
+		};
+		interpret F26+AnyOfOrNone(all) {
+			repeat= true;
+			action= SetPtrDflt(affect=button,button=2);
+		};
+		interpret F27+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=-1,y=-1);
+		};
+		interpret F29+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+1,y=-1);
+		};
+		interpret F31+AnyOfOrNone(all) {
+			repeat= true;
+			action= PtrBtn(button=default);
+		};
+		interpret F33+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=-1,y=+1);
+		};
+		interpret F35+AnyOfOrNone(all) {
+			repeat= true;
+			action= MovePtr(x=+1,y=+1);
+		};
+		interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
+			action= PtrBtn(button=default);
+		};
+		interpret Pointer_Button1+AnyOfOrNone(all) {
+			action= PtrBtn(button=1);
+		};
+		interpret Pointer_Button2+AnyOfOrNone(all) {
+			action= PtrBtn(button=2);
+		};
+		interpret Pointer_Button3+AnyOfOrNone(all) {
+			action= PtrBtn(button=3);
+		};
+		interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
+			action= PtrBtn(button=default,count=2);
+		};
+		interpret Pointer_DblClick1+AnyOfOrNone(all) {
+			action= PtrBtn(button=1,count=2);
+		};
+		interpret Pointer_DblClick2+AnyOfOrNone(all) {
+			action= PtrBtn(button=2,count=2);
+		};
+		interpret Pointer_DblClick3+AnyOfOrNone(all) {
+			action= PtrBtn(button=3,count=2);
+		};
+		interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
+			action= LockPtrBtn(button=default,affect=both);
+		};
+		interpret Pointer_Drag1+AnyOfOrNone(all) {
+			action= LockPtrBtn(button=1,affect=both);
+		};
+		interpret Pointer_Drag2+AnyOfOrNone(all) {
+			action= LockPtrBtn(button=2,affect=both);
+		};
+		interpret Pointer_Drag3+AnyOfOrNone(all) {
+			action= LockPtrBtn(button=3,affect=both);
+		};
+		interpret Pointer_EnableKeys+AnyOfOrNone(all) {
+			action= LockControls(controls=mouseKeys);
+		};
+		interpret Pointer_Accelerate+AnyOfOrNone(all) {
+			action= LockControls(controls=mouseKeysAccel);
+		};
+		interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
+			action= SetPtrDflt(affect=button,button=+1);
+		};
+		interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
+			action= SetPtrDflt(affect=button,button=-1);
+		};
+		interpret AccessX_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=accessXKeys);
+		};
+		interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=accessXFeedback);
+		};
+		interpret RepeatKeys_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=repeatKeys);
+		};
+		interpret SlowKeys_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=slowKeys);
+		};
+		interpret BounceKeys_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=bounceKeys);
+		};
+		interpret StickyKeys_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=stickyKeys);
+		};
+		interpret MouseKeys_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=mouseKeys);
+		};
+		interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=mouseKeysAccel);
+		};
+		interpret Overlay1_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=none);
+		};
+		interpret Overlay2_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=none);
+		};
+		interpret AudibleBell_Enable+AnyOfOrNone(all) {
+			action= LockControls(controls=audibleBell);
+		};
+		interpret Terminate_Server+AnyOfOrNone(all) {
+			action= Terminate();
+		};
+		interpret Alt_L+AnyOfOrNone(all) {
+			action= SetMods(modifiers=Alt,clearLocks);
+		};
+		interpret Alt_R+AnyOfOrNone(all) {
+			action= SetMods(modifiers=Alt,clearLocks);
+		};
+		interpret Meta_L+AnyOfOrNone(all) {
+			action= SetMods(modifiers=Meta,clearLocks);
+		};
+		interpret Meta_R+AnyOfOrNone(all) {
+			action= SetMods(modifiers=Meta,clearLocks);
+		};
+		interpret Super_L+AnyOfOrNone(all) {
+			action= SetMods(modifiers=Super,clearLocks);
+		};
+		interpret Super_R+AnyOfOrNone(all) {
+			action= SetMods(modifiers=Super,clearLocks);
+		};
+		interpret Hyper_L+AnyOfOrNone(all) {
+			action= SetMods(modifiers=Hyper,clearLocks);
+		};
+		interpret Hyper_R+AnyOfOrNone(all) {
+			action= SetMods(modifiers=Hyper,clearLocks);
+		};
+		interpret Shift_L+AnyOfOrNone(all) {
+			action= SetMods(modifiers=Shift,clearLocks);
+		};
+		interpret XF86Switch_VT_1+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=1,!same);
+		};
+		interpret XF86Switch_VT_2+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=2,!same);
+		};
+		interpret XF86Switch_VT_3+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=3,!same);
+		};
+		interpret XF86Switch_VT_4+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=4,!same);
+		};
+		interpret XF86Switch_VT_5+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=5,!same);
+		};
+		interpret XF86Switch_VT_6+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=6,!same);
+		};
+		interpret XF86Switch_VT_7+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=7,!same);
+		};
+		interpret XF86Switch_VT_8+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=8,!same);
+		};
+		interpret XF86Switch_VT_9+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=9,!same);
+		};
+		interpret XF86Switch_VT_10+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=10,!same);
+		};
+		interpret XF86Switch_VT_11+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=11,!same);
+		};
+		interpret XF86Switch_VT_12+AnyOfOrNone(all) {
+			repeat= true;
+			action= SwitchScreen(screen=12,!same);
+		};
+		interpret XF86LogGrabInfo+AnyOfOrNone(all) {
+			repeat= true;
+			action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);
+		};
+		interpret XF86LogWindowTree+AnyOfOrNone(all) {
+			repeat= true;
+			action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);
+		};
+		interpret XF86Next_VMode+AnyOfOrNone(all) {
+			repeat= true;
+			action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+		};
+		interpret XF86Prev_VMode+AnyOfOrNone(all) {
+			repeat= true;
+			action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+		};
+		interpret ISO_Level5_Shift+AnyOfOrNone(all) {
+			action= SetMods(modifiers=LevelFive,clearLocks);
+		};
+		interpret ISO_Level5_Latch+AnyOfOrNone(all) {
+			action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+		};
+		interpret ISO_Level5_Lock+AnyOfOrNone(all) {
+			action= LockMods(modifiers=LevelFive);
+		};
+		interpret Caps_Lock+AnyOfOrNone(all) {
+			action= LockMods(modifiers=Lock);
+		};
+		interpret Any+Exactly(Lock) {
+			action= LockMods(modifiers=Lock);
+		};
+		interpret Any+AnyOf(all) {
+			action= SetMods(modifiers=modMapMods,clearLocks);
+		};
+		group 2 = AltGr;
+		group 3 = AltGr;
+		group 4 = AltGr;
+		indicator "Caps Lock" {
+			whichModState= locked;
+			modifiers= Lock;
+		};
+		indicator "Num Lock" {
+			whichModState= locked;
+			modifiers= NumLock;
+		};
+		indicator "Scroll Lock" {
+			whichModState= locked;
+			modifiers= ScrollLock;
+		};
+		indicator "Shift Lock" {
+			whichModState= locked;
+			modifiers= Shift;
+		};
+		indicator "Group 2" {
+			groups= 0xfe;
+		};
+		indicator "Mouse Keys" {
+			controls= mouseKeys;
+		};
+	};
+
+	xkb_symbols {
+		name[group1]="English (US)";
+
+		key  <ESC> {	[          Escape ] };
+		key <AE01> {	[               1 ] };
+		key <AE02> {	[               2 ] };
+		key <AE03> {	[               3 ] };
+		key <AE04> {	[               4 ] };
+		key <AE05> {	[               5 ] };
+		key <AE06> {	[               6 ] };
+		key <AE07> {	[               7 ] };
+		key <AE08> {	[               8 ] };
+		key <AE09> {	[               9 ] };
+		key <AE10> {	[               0 ] };
+		key <AE11> {	[           minus ] };
+		key <AE12> {	[           equal ] };
+		key <BKSP> {	[       BackSpace ] };
+		key  <TAB> {	[             Tab ] };
+		key <AD01> {    [               q ] };
+		key <AD02> {    [               w ] };
+		key <AD03> {    [               e ] };
+		key <AD04> {    [               r ] };
+		key <AD05> {    [               t ] };
+		key <AD06> {    [               y ] };
+		key <AD07> {    [               u ] };
+		key <AD08> {    [               i ] };
+		key <AD09> {    [               o ] };
+		key <AD10> {    [               p ] };
+		key <AD11> {	[     bracketleft ] };
+		key <AD12> {	[    bracketright ] };
+		key <RTRN> {	[          Return ] };
+		key <LCTL> {	[       Control_L ] };
+		key <AC01> {    [               a ] };
+		key <AC02> {    [               s ] };
+		key <AC03> {    [               d ] };
+		key <AC04> {    [               f ] };
+		key <AC05> {    [               g ] };
+		key <AC06> {    [               h ] };
+		key <AC07> {    [               j ] };
+		key <AC08> {    [               k ] };
+		key <AC09> {    [               l ] };
+		key <AC10> {	[       semicolon ] };
+		key <AC11> {	[      apostrophe ] };
+		key <TLDE> {	[           grave ] };
+		key <LFSH> {	[         Shift_L ] };
+		key <BKSL> {	[        NoSymbol ] };
+		key <AB01> {    [               z ] };
+		key <AB02> {    [               x ] };
+		key <AB03> {    [               c ] };
+		key <AB04> {    [               v ] };
+		key <AB05> {    [               b ] };
+		key <AB06> {    [               n ] };
+		key <AB07> {    [               m ] };
+		key <AB08> {	[           comma ] };
+		key <AB09> {	[          period ] };
+		key <AB10> {	[           slash ] };
+		key <RTSH> {	[         Shift_R ] };
+		key <KPMU> {    [     KP_Multiply ] };
+		key <LALT> {	[           Alt_L ] };
+		key <SPCE> {	[           space ] };
+		key <CAPS> {	[       Caps_Lock ] };
+		key <FK01> {    [              F1 ] };
+		key <FK02> {    [              F2 ] };
+		key <FK03> {    [              F3 ] };
+		key <FK04> {    [              F4 ] };
+		key <FK05> {    [              F5 ] };
+		key <FK06> {    [              F6 ] };
+		key <FK07> {    [              F7 ] };
+		key <FK08> {    [              F8 ] };
+		key <FK09> {    [              F9 ] };
+		key <FK10> {    [             F10 ] };
+		key <NMLK> {	[        Num_Lock ] };
+		key <SCLK> {	[     Scroll_Lock ] };
+		key  <KP7> {	[         KP_Home ] };
+		key  <KP8> {	[           KP_Up ] };
+		key  <KP9> {	[        KP_Prior ] };
+		key <KPSU> {    [     KP_Subtract ] };
+		key  <KP4> {	[         KP_Left ] };
+		key  <KP5> {	[        KP_Begin ] };
+		key  <KP6> {	[        KP_Right ] };
+		key <KPAD> {    [          KP_Add ] };
+		key  <KP1> {	[          KP_End ] };
+		key  <KP2> {	[         KP_Down ] };
+		key  <KP3> {	[         KP_Next ] };
+		key  <KP0> {	[       KP_Insert ] };
+		key <KPDL> {	[       KP_Delete ] };
+		key <LVL3> {	[ ISO_Level3_Shift ] };
+		key <LSGT> {    [            less ] };
+		key <FK11> {    [             F11 ] };
+		key <FK12> {    [             F12 ] };
+		key <KATA> {	[        Katakana ] };
+		key <HIRA> {	[        Hiragana ] };
+		key <HENK> {	[     Henkan_Mode ] };
+		key <HKTG> {	[ Hiragana_Katakana ] };
+		key <MUHE> {	[        Muhenkan ] };
+		key <KPEN> {	[        KP_Enter ] };
+		key <RCTL> {	[       Control_R ] };
+		key <KPDV> {    [       KP_Divide ] };
+		key <PRSC> {    [           Print ] };
+		key <RALT> {    [           Alt_R ] };
+		key <LNFD> {	[        Linefeed ] };
+		key <HOME> {	[            Home ] };
+		key   <UP> {	[              Up ] };
+		key <PGUP> {	[           Prior ] };
+		key <LEFT> {	[            Left ] };
+		key <RGHT> {	[           Right ] };
+		key  <END> {	[             End ] };
+		key <DOWN> {	[            Down ] };
+		key <PGDN> {	[            Next ] };
+		key  <INS> {	[          Insert ] };
+		key <DELE> {	[          Delete ] };
+		key <MUTE> {	[   XF86AudioMute ] };
+		key <VOL-> {	[ XF86AudioLowerVolume ] };
+		key <VOL+> {	[ XF86AudioRaiseVolume ] };
+		key <POWR> {	[    XF86PowerOff ] };
+		key <KPEQ> {	[        KP_Equal ] };
+		key <I126> {	[       plusminus ] };
+		key <PAUS> {    [           Pause ] };
+		key <I128> {	[     XF86LaunchA ] };
+		key <I129> {	[       KP_Decimal] };
+		key <HNGL> {	[          Hangul ] };
+		key <HJCV> {	[    Hangul_Hanja ] };
+		key <LWIN> {	[         Super_L ] };
+		key <RWIN> {	[         Super_R ] };
+		key <COMP> {	[            Menu ] };
+		key <STOP> {	[          Cancel ] };
+		key <AGAI> {	[            Redo ] };
+		key <PROP> {	[        SunProps ] };
+		key <UNDO> {	[            Undo ] };
+		key <FRNT> {	[        SunFront ] };
+		key <COPY> {	[        XF86Copy ] };
+		key <OPEN> {	[         SunOpen ] };
+		key <PAST> {	[       XF86Paste ] };
+		key <FIND> {	[            Find ] };
+		key  <CUT> {	[         XF86Cut ] };
+		key <HELP> {	[            Help ] };
+		key <I147> {	[      XF86MenuKB ] };
+		key <I148> {	[  XF86Calculator ] };
+		key <I150> {	[       XF86Sleep ] };
+		key <I151> {	[      XF86WakeUp ] };
+		key <I152> {	[    XF86Explorer ] };
+		key <I153> {	[        XF86Send ] };
+		key <I155> {	[        XF86Xfer ] };
+		key <I156> {	[     XF86Launch1 ] };
+		key <I157> {	[     XF86Launch2 ] };
+		key <I158> {	[         XF86WWW ] };
+		key <I159> {	[         XF86DOS ] };
+		key <I160> {	[ XF86ScreenSaver ] };
+		key <I162> {	[ XF86RotateWindows ] };
+		key <I163> {	[        XF86Mail ] };
+		key <I164> {	[   XF86Favorites ] };
+		key <I165> {	[  XF86MyComputer ] };
+		key <I166> {	[        XF86Back ] };
+		key <I167> {	[     XF86Forward ] };
+		key <I169> {	[       XF86Eject ] };
+		key <I170> {	[       XF86Eject ] };
+		key <I171> {	[   XF86AudioNext ] };
+		key <I172> {	[   XF86AudioPlay ] };
+		key <I173> {	[   XF86AudioPrev ] };
+		key <I174> {	[   XF86AudioStop ] };
+		key <I175> {	[ XF86AudioRecord ] };
+		key <I176> {	[ XF86AudioRewind ] };
+		key <I177> {	[       XF86Phone ] };
+		key <I179> {	[       XF86Tools ] };
+		key <I180> {	[    XF86HomePage ] };
+		key <I181> {	[      XF86Reload ] };
+		key <I182> {	[       XF86Close ] };
+		key <I185> {	[    XF86ScrollUp ] };
+		key <I186> {	[  XF86ScrollDown ] };
+		key <I187> {	[       parenleft ] };
+		key <I188> {	[      parenright ] };
+		key <I189> {	[         XF86New ] };
+		key <I190> {	[            Redo ] };
+		key <FK13> {	[       XF86Tools ] };
+		key <FK14> {	[     XF86Launch5 ] };
+		key <FK15> {	[     XF86Launch6 ] };
+		key <FK16> {	[     XF86Launch7 ] };
+		key <FK17> {	[     XF86Launch8 ] };
+		key <FK18> {	[     XF86Launch9 ] };
+		key <FK21> {	[ XF86TouchpadToggle ] };
+		key <FK22> {	[  XF86TouchpadOn ] };
+		key <FK23> {	[ XF86TouchpadOff ] };
+		key <MDSW> {	[     Mode_switch ] };
+		key  <ALT> {	[        NoSymbol ] };
+		key <META> {	[        NoSymbol ] };
+		key <SUPR> {	[        NoSymbol ] };
+		key <HYPR> {	[        NoSymbol ] };
+		key <I208> {	[   XF86AudioPlay ] };
+		key <I209> {	[  XF86AudioPause ] };
+		key <I210> {	[     XF86Launch3 ] };
+		key <I211> {	[     XF86Launch4 ] };
+		key <I212> {	[     XF86LaunchB ] };
+		key <I213> {	[     XF86Suspend ] };
+		key <I214> {	[       XF86Close ] };
+		key <I215> {	[   XF86AudioPlay ] };
+		key <I216> {	[ XF86AudioForward ] };
+		key <I218> {	[           Print ] };
+		key <I220> {	[      XF86WebCam ] };
+		key <I223> {	[        XF86Mail ] };
+		key <I224> {	[   XF86Messenger ] };
+		key <I225> {	[      XF86Search ] };
+		key <I226> {	[          XF86Go ] };
+		key <I227> {	[     XF86Finance ] };
+		key <I228> {	[        XF86Game ] };
+		key <I229> {	[        XF86Shop ] };
+		key <I231> {	[          Cancel ] };
+		key <I232> {	[ XF86MonBrightnessDown ] };
+		key <I233> {	[ XF86MonBrightnessUp ] };
+		key <I234> {	[  XF86AudioMedia ] };
+		key <I235> {	[     XF86Display ] };
+		key <I236> {	[ XF86KbdLightOnOff ] };
+		key <I237> {	[ XF86KbdBrightnessDown ] };
+		key <I238> {	[ XF86KbdBrightnessUp ] };
+		key <I239> {	[        XF86Send ] };
+		key <I240> {	[       XF86Reply ] };
+		key <I241> {	[ XF86MailForward ] };
+		key <I242> {	[        XF86Save ] };
+		key <I243> {	[   XF86Documents ] };
+		key <I244> {	[     XF86Battery ] };
+		key <I245> {	[   XF86Bluetooth ] };
+		key <I246> {	[        XF86WLAN ] };
+		modifier_map Control { <LCTL> };
+		modifier_map Shift { <LFSH> };
+		modifier_map Shift { <RTSH> };
+		modifier_map Mod1 { <LALT> };
+		modifier_map Lock { <CAPS> };
+		modifier_map Mod2 { <NMLK> };
+		modifier_map Mod5 { <LVL3> };
+		modifier_map Control { <RCTL> };
+		modifier_map Mod1 { <RALT> };
+		modifier_map Mod4 { <LWIN> };
+		modifier_map Mod4 { <RWIN> };
+		modifier_map Mod5 { <MDSW> };
+		modifier_map Mod1 { <META> };
+		modifier_map Mod4 { <SUPR> };
+		modifier_map Mod4 { <HYPR> };
+	};
+};
diff --git a/data/keymaps/quartz.xkb b/data/keymaps/quartz.xkb
new file mode 100644
--- /dev/null
+++ b/data/keymaps/quartz.xkb
@@ -0,0 +1,1139 @@
+xkb_keymap {
+xkb_keycodes "empty_aliases(qwerty)" {
+    minimum = 8;
+    maximum = 255;
+    virtual indicator 1 = "Caps Lock";
+    virtual indicator 2 = "Num Lock";
+    virtual indicator 3 = "Shift Lock";
+    virtual indicator 4 = "Group 2";
+    virtual indicator 5 = "Mouse Keys";
+    virtual indicator 6 = "Scroll Lock";
+};
+
+xkb_types "complete" {
+
+    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+    type "ONE_LEVEL" {
+        modifiers= none;
+        level_name[Level1]= "Any";
+    };
+    type "TWO_LEVEL" {
+        modifiers= Shift;
+        map[Shift]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+    };
+    type "ALPHABETIC" {
+        modifiers= Shift+Lock;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Caps";
+    };
+    type "KEYPAD" {
+        modifiers= Shift+NumLock;
+        map[Shift]= Level2;
+        map[NumLock]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Number";
+    };
+    type "SHIFT+ALT" {
+        modifiers= Shift+Alt;
+        map[Shift+Alt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift+Alt";
+    };
+    type "PC_CONTROL_LEVEL2" {
+        modifiers= Control;
+        map[Control]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Control";
+    };
+    type "PC_LCONTROL_LEVEL2" {
+        modifiers= LControl;
+        map[LControl]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "LControl";
+    };
+    type "PC_RCONTROL_LEVEL2" {
+        modifiers= RControl;
+        map[RControl]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "RControl";
+    };
+    type "PC_ALT_LEVEL2" {
+        modifiers= Alt;
+        map[Alt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Alt";
+    };
+    type "PC_LALT_LEVEL2" {
+        modifiers= LAlt;
+        map[LAlt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "LAlt";
+    };
+    type "PC_RALT_LEVEL2" {
+        modifiers= RAlt;
+        map[RAlt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "RAlt";
+    };
+    type "CTRL+ALT" {
+        modifiers= Control+Alt;
+        map[Control+Alt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Ctrl+Alt";
+    };
+    type "LOCAL_EIGHT_LEVEL" {
+        modifiers= Shift+Lock+Control+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+Lock+LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level4;
+        map[Control]= Level5;
+        map[Shift+Lock+Control]= Level5;
+        map[Shift+Control]= Level6;
+        map[Lock+Control]= Level6;
+        map[Control+LevelThree]= Level7;
+        map[Shift+Lock+Control+LevelThree]= Level7;
+        map[Shift+Control+LevelThree]= Level8;
+        map[Lock+Control+LevelThree]= Level8;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Level3";
+        level_name[Level4]= "Shift Level3";
+        level_name[Level5]= "Ctrl";
+        level_name[Level6]= "Shift Ctrl";
+        level_name[Level7]= "Level3 Ctrl";
+        level_name[Level8]= "Shift Level3 Ctrl";
+    };
+    type "THREE_LEVEL" {
+        modifiers= Shift+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Level3";
+    };
+    type "EIGHT_LEVEL" {
+        modifiers= Shift+LevelThree+LevelFive;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[LevelFive]= Level5;
+        map[Shift+LevelFive]= Level6;
+        map[LevelThree+LevelFive]= Level7;
+        map[Shift+LevelThree+LevelFive]= Level8;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "X";
+        level_name[Level6]= "X Shift";
+        level_name[Level7]= "X Alt Base";
+        level_name[Level8]= "X Shift Alt";
+    };
+    type "EIGHT_LEVEL_ALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree+LevelFive;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level4;
+        map[Shift+Lock+LevelThree]= Level3;
+        map[LevelFive]= Level5;
+        map[Shift+LevelFive]= Level6;
+        map[Lock+LevelFive]= Level6;
+        map[LevelThree+LevelFive]= Level7;
+        map[Shift+LevelThree+LevelFive]= Level8;
+        map[Lock+LevelThree+LevelFive]= Level8;
+        map[Shift+Lock+LevelThree+LevelFive]= Level7;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "X";
+        level_name[Level6]= "X Shift";
+        level_name[Level7]= "X Alt Base";
+        level_name[Level8]= "X Shift Alt";
+    };
+    type "EIGHT_LEVEL_SEMIALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree+LevelFive;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level3;
+        preserve[Lock+LevelThree]= Lock;
+        map[Shift+Lock+LevelThree]= Level4;
+        preserve[Shift+Lock+LevelThree]= Lock;
+        map[LevelFive]= Level5;
+        map[Shift+LevelFive]= Level6;
+        map[Lock+LevelFive]= Level6;
+        preserve[Lock+LevelFive]= Lock;
+        map[LevelThree+LevelFive]= Level7;
+        map[Shift+LevelThree+LevelFive]= Level8;
+        map[Lock+LevelThree+LevelFive]= Level7;
+        preserve[Lock+LevelThree+LevelFive]= Lock;
+        map[Shift+Lock+LevelThree+LevelFive]= Level8;
+        preserve[Shift+Lock+LevelThree+LevelFive]= Lock;
+        map[Shift+Lock+LevelFive]= Level1;
+        preserve[Shift+Lock+LevelFive]= Lock;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "X";
+        level_name[Level6]= "X Shift";
+        level_name[Level7]= "X Alt Base";
+        level_name[Level8]= "X Shift Alt";
+    };
+    type "FOUR_LEVEL" {
+        modifiers= Shift+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_ALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level4;
+        map[Shift+Lock+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_SEMIALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level3;
+        preserve[Lock+LevelThree]= Lock;
+        map[Shift+Lock+LevelThree]= Level4;
+        preserve[Shift+Lock+LevelThree]= Lock;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_MIXED_KEYPAD" {
+        modifiers= Shift+NumLock+LevelThree;
+        map[NumLock]= Level2;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[NumLock+LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Shift+NumLock+LevelThree]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Number";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_X" {
+        modifiers= Shift+Control+Alt+LevelThree;
+        map[LevelThree]= Level2;
+        map[Shift+LevelThree]= Level3;
+        map[Control+Alt]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Alt Base";
+        level_name[Level3]= "Shift Alt";
+        level_name[Level4]= "Ctrl+Alt";
+    };
+    type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level4;
+        preserve[Lock]= Lock;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level3;
+        preserve[Lock+LevelThree]= Lock;
+        map[Shift+Lock+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "AltGr Base";
+        level_name[Level4]= "Shift AltGr";
+    };
+    type "FOUR_LEVEL_PLUS_LOCK" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock]= Level5;
+        map[Shift+Lock]= Level2;
+        map[Lock+LevelThree]= Level3;
+        map[Shift+Lock+LevelThree]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "Lock";
+    };
+    type "FOUR_LEVEL_KEYPAD" {
+        modifiers= Shift+NumLock+LevelThree;
+        map[Shift]= Level2;
+        map[NumLock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[NumLock+LevelThree]= Level4;
+        map[Shift+NumLock+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Number";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Alt Number";
+    };
+};
+
+xkb_compatibility "complete" {
+
+    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+    interpret.useModMapMods= AnyLevel;
+    interpret.repeat= False;
+    interpret.locking= False;
+    interpret ISO_Level2_Latch+Exactly(Shift) {
+        useModMapMods=level1;
+        action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
+    };
+    interpret Shift_Lock+AnyOf(Shift+Lock) {
+        action= LockMods(modifiers=Shift);
+    };
+    interpret Num_Lock+AnyOf(all) {
+        virtualModifier= NumLock;
+        action= LockMods(modifiers=NumLock);
+    };
+    interpret ISO_Lock+AnyOf(all) {
+        action= ISOLock(modifiers=modMapMods,affect=all);
+    };
+    interpret ISO_Level3_Shift+AnyOf(all) {
+        virtualModifier= LevelThree;
+        useModMapMods=level1;
+        action= SetMods(modifiers=LevelThree,clearLocks);
+    };
+    interpret ISO_Level3_Latch+AnyOf(all) {
+        virtualModifier= LevelThree;
+        useModMapMods=level1;
+        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+    };
+    interpret ISO_Level3_Lock+AnyOf(all) {
+        virtualModifier= LevelThree;
+        useModMapMods=level1;
+        action= LockMods(modifiers=LevelThree);
+    };
+    interpret Alt_L+AnyOf(all) {
+        virtualModifier= Alt;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Alt_R+AnyOf(all) {
+        virtualModifier= Alt;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Meta_L+AnyOf(all) {
+        virtualModifier= Meta;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Meta_R+AnyOf(all) {
+        virtualModifier= Meta;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Super_L+AnyOf(all) {
+        virtualModifier= Super;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Super_R+AnyOf(all) {
+        virtualModifier= Super;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Hyper_L+AnyOf(all) {
+        virtualModifier= Hyper;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Hyper_R+AnyOf(all) {
+        virtualModifier= Hyper;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Scroll_Lock+AnyOf(all) {
+        virtualModifier= ScrollLock;
+        action= LockMods(modifiers=modMapMods);
+    };
+    interpret ISO_Level5_Shift+AnyOf(all) {
+        virtualModifier= LevelFive;
+        useModMapMods=level1;
+        action= SetMods(modifiers=LevelFive,clearLocks);
+    };
+    interpret ISO_Level5_Latch+AnyOf(all) {
+        virtualModifier= LevelFive;
+        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+    };
+    interpret ISO_Level5_Lock+AnyOf(all) {
+        virtualModifier= LevelFive;
+        action= LockMods(modifiers=LevelFive);
+    };
+    interpret Mode_switch+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= SetGroup(group=+1);
+    };
+    interpret ISO_Level3_Shift+AnyOfOrNone(all) {
+        action= SetMods(modifiers=LevelThree,clearLocks);
+    };
+    interpret ISO_Level3_Latch+AnyOfOrNone(all) {
+        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+    };
+    interpret ISO_Level3_Lock+AnyOfOrNone(all) {
+        action= LockMods(modifiers=LevelThree);
+    };
+    interpret ISO_Group_Latch+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= LatchGroup(group=2);
+    };
+    interpret ISO_Next_Group+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= LockGroup(group=+1);
+    };
+    interpret ISO_Prev_Group+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= LockGroup(group=-1);
+    };
+    interpret ISO_First_Group+AnyOfOrNone(all) {
+        action= LockGroup(group=1);
+    };
+    interpret ISO_Last_Group+AnyOfOrNone(all) {
+        action= LockGroup(group=2);
+    };
+    interpret KP_1+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+1);
+    };
+    interpret KP_End+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+1);
+    };
+    interpret KP_2+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=+1);
+    };
+    interpret KP_Down+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=+1);
+    };
+    interpret KP_3+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+1);
+    };
+    interpret KP_Next+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+1);
+    };
+    interpret KP_4+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+0);
+    };
+    interpret KP_Left+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+0);
+    };
+    interpret KP_6+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+0);
+    };
+    interpret KP_Right+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+0);
+    };
+    interpret KP_7+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=-1);
+    };
+    interpret KP_Home+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=-1);
+    };
+    interpret KP_8+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=-1);
+    };
+    interpret KP_Up+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=-1);
+    };
+    interpret KP_9+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=-1);
+    };
+    interpret KP_Prior+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=-1);
+    };
+    interpret KP_5+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default);
+    };
+    interpret KP_Begin+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default);
+    };
+    interpret KP_F2+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=1);
+    };
+    interpret KP_Divide+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=1);
+    };
+    interpret KP_F3+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=2);
+    };
+    interpret KP_Multiply+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=2);
+    };
+    interpret KP_F4+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=3);
+    };
+    interpret KP_Subtract+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=3);
+    };
+    interpret KP_Separator+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default,count=2);
+    };
+    interpret KP_Add+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default,count=2);
+    };
+    interpret KP_0+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=lock);
+    };
+    interpret KP_Insert+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=lock);
+    };
+    interpret KP_Decimal+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=unlock);
+    };
+    interpret KP_Delete+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=unlock);
+    };
+    interpret F25+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=1);
+    };
+    interpret F26+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=2);
+    };
+    interpret F27+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=-1);
+    };
+    interpret F29+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=-1);
+    };
+    interpret F31+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default);
+    };
+    interpret F33+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+1);
+    };
+    interpret F35+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+1);
+    };
+    interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
+        action= PtrBtn(button=default);
+    };
+    interpret Pointer_Button1+AnyOfOrNone(all) {
+        action= PtrBtn(button=1);
+    };
+    interpret Pointer_Button2+AnyOfOrNone(all) {
+        action= PtrBtn(button=2);
+    };
+    interpret Pointer_Button3+AnyOfOrNone(all) {
+        action= PtrBtn(button=3);
+    };
+    interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
+        action= PtrBtn(button=default,count=2);
+    };
+    interpret Pointer_DblClick1+AnyOfOrNone(all) {
+        action= PtrBtn(button=1,count=2);
+    };
+    interpret Pointer_DblClick2+AnyOfOrNone(all) {
+        action= PtrBtn(button=2,count=2);
+    };
+    interpret Pointer_DblClick3+AnyOfOrNone(all) {
+        action= PtrBtn(button=3,count=2);
+    };
+    interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=default,affect=both);
+    };
+    interpret Pointer_Drag1+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=1,affect=both);
+    };
+    interpret Pointer_Drag2+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=2,affect=both);
+    };
+    interpret Pointer_Drag3+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=3,affect=both);
+    };
+    interpret Pointer_EnableKeys+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeys);
+    };
+    interpret Pointer_Accelerate+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeysAccel);
+    };
+    interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
+        action= SetPtrDflt(affect=button,button=+1);
+    };
+    interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
+        action= SetPtrDflt(affect=button,button=-1);
+    };
+    interpret AccessX_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=AccessXKeys);
+    };
+    interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=AccessXFeedback);
+    };
+    interpret RepeatKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=RepeatKeys);
+    };
+    interpret SlowKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=SlowKeys);
+    };
+    interpret BounceKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=BounceKeys);
+    };
+    interpret StickyKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=StickyKeys);
+    };
+    interpret MouseKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeys);
+    };
+    interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeysAccel);
+    };
+    interpret Overlay1_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=Overlay1);
+    };
+    interpret Overlay2_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=Overlay2);
+    };
+    interpret AudibleBell_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=AudibleBell);
+    };
+    interpret Terminate_Server+AnyOfOrNone(all) {
+        action= Terminate();
+    };
+    interpret Alt_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Alt,clearLocks);
+    };
+    interpret Alt_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Alt,clearLocks);
+    };
+    interpret Meta_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Meta,clearLocks);
+    };
+    interpret Meta_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Meta,clearLocks);
+    };
+    interpret Super_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Super,clearLocks);
+    };
+    interpret Super_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Super,clearLocks);
+    };
+    interpret Hyper_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Hyper,clearLocks);
+    };
+    interpret Hyper_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Hyper,clearLocks);
+    };
+    interpret XF86Switch_VT_1+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=1,!same);
+    };
+    interpret XF86Switch_VT_2+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=2,!same);
+    };
+    interpret XF86Switch_VT_3+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=3,!same);
+    };
+    interpret XF86Switch_VT_4+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=4,!same);
+    };
+    interpret XF86Switch_VT_5+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=5,!same);
+    };
+    interpret XF86Switch_VT_6+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=6,!same);
+    };
+    interpret XF86Switch_VT_7+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=7,!same);
+    };
+    interpret XF86Switch_VT_8+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=8,!same);
+    };
+    interpret XF86Switch_VT_9+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=9,!same);
+    };
+    interpret XF86Switch_VT_10+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=10,!same);
+    };
+    interpret XF86Switch_VT_11+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=11,!same);
+    };
+    interpret XF86Switch_VT_12+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=12,!same);
+    };
+    interpret XF86Ungrab+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x55,data[1]=0x6e,data[2]=0x67,data[3]=0x72,data[4]=0x61,data[5]=0x62,data[6]=0x00);
+    };
+    interpret XF86ClearGrab+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x43,data[1]=0x6c,data[2]=0x73,data[3]=0x47,data[4]=0x72,data[5]=0x62,data[6]=0x00);
+    };
+    interpret XF86Next_VMode+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+    };
+    interpret XF86Prev_VMode+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+    };
+    interpret ISO_Level5_Shift+AnyOfOrNone(all) {
+        action= SetMods(modifiers=LevelFive,clearLocks);
+    };
+    interpret ISO_Level5_Latch+AnyOfOrNone(all) {
+        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+    };
+    interpret ISO_Level5_Lock+AnyOfOrNone(all) {
+        action= LockMods(modifiers=LevelFive);
+    };
+    interpret Any+Exactly(Lock) {
+        action= LockMods(modifiers=Lock);
+    };
+    interpret Any+AnyOf(all) {
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    group 2 = AltGr;
+    group 3 = AltGr;
+    group 4 = AltGr;
+    indicator "Caps Lock" {
+        !allowExplicit;
+        whichModState= locked;
+        modifiers= Lock;
+    };
+    indicator "Num Lock" {
+        !allowExplicit;
+        whichModState= locked;
+        modifiers= NumLock;
+    };
+    indicator "Shift Lock" {
+        !allowExplicit;
+        whichModState= locked;
+        modifiers= Shift;
+    };
+    indicator "Group 2" {
+        !allowExplicit;
+        groups= 0xfe;
+    };
+    indicator "Mouse Keys" {
+        indicatorDrivesKeyboard;
+        controls= mouseKeys;
+    };
+    indicator "Scroll Lock" {
+        whichModState= locked;
+        modifiers= ScrollLock;
+    };
+};
+
+xkb_symbols "unknown" {
+
+    key     <> {
+        type= "ALPHABETIC",
+        symbols[Group1]= [               a,               A ],
+        symbols[Group2]= [           aring,           Aring ]
+    };
+    modifier_map Mod2 { <> };
+};
+
+xkb_geometry "pc(pc104)" {
+
+    width=       470;
+    height=      180;
+
+    baseColor=   "white";
+    labelColor=  "black";
+    xfont=       "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
+    description= "Generic 104";
+
+    shape "NORM" {
+        corner= 1,
+        { [  18,  18 ] },
+        { [   2,   1 ], [  16,  16 ] }
+    };
+    shape "BKSP" {
+        corner= 1,
+        { [  38,  18 ] },
+        { [   2,   1 ], [  36,  16 ] }
+    };
+    shape "TABK" {
+        corner= 1,
+        { [  28,  18 ] },
+        { [   2,   1 ], [  26,  16 ] }
+    };
+    shape "BKSL" {
+        corner= 1,
+        { [  28,  18 ] },
+        { [   2,   1 ], [  26,  16 ] }
+    };
+    shape "RTRN" {
+        corner= 1,
+        { [  42,  18 ] },
+        { [   2,   1 ], [  40,  16 ] }
+    };
+    shape "CAPS" {
+        corner= 1,
+        { [  33,  18 ] },
+        { [   2,   1 ], [  31,  16 ] }
+    };
+    shape "LFSH" {
+        corner= 1,
+        { [  42,  18 ] },
+        { [   2,   1 ], [  40,  16 ] }
+    };
+    shape "RTSH" {
+        corner= 1,
+        { [  52,  18 ] },
+        { [   2,   1 ], [  50,  16 ] }
+    };
+    shape "MODK" {
+        corner= 1,
+        { [  27,  18 ] },
+        { [   2,   1 ], [  25,  16 ] }
+    };
+    shape "SMOD" {
+        corner= 1,
+        { [  23,  18 ] },
+        { [   2,   1 ], [  21,  16 ] }
+    };
+    shape "SPCE" {
+        corner= 1,
+        { [ 113,  18 ] },
+        { [   2,   1 ], [ 111,  16 ] }
+    };
+    shape "KP0" {
+        corner= 1,
+        { [  37,  18 ] },
+        { [   2,   1 ], [  35,  16 ] }
+    };
+    shape "KPAD" {
+        corner= 1,
+        { [  18,  37 ] },
+        { [   2,   1 ], [  16,  35 ] }
+    };
+    shape "LEDS" { { [  75,  20 ] } };
+    shape "LED" { { [   5,   1 ] } };
+    section "Function" {
+        key.color= "grey20";
+        priority=  7;
+        top=       22;
+        left=      19;
+        width=     351;
+        height=    19;
+        row {
+            top=  1;
+            left= 1;
+            keys {
+                {  <ESC>, "NORM",   1 },
+                { <FK01>, "NORM",  20, color="white" },
+                { <FK02>, "NORM",   1, color="white" },
+                { <FK03>, "NORM",   1, color="white" },
+                { <FK04>, "NORM",   1, color="white" },
+                { <FK05>, "NORM",  11, color="white" },
+                { <FK06>, "NORM",   1, color="white" },
+                { <FK07>, "NORM",   1, color="white" },
+                { <FK08>, "NORM",   1, color="white" },
+                { <FK09>, "NORM",  11, color="white" },
+                { <FK10>, "NORM",   1, color="white" },
+                { <FK11>, "NORM",   1, color="white" },
+                { <FK12>, "NORM",   1, color="white" },
+                { <PRSC>, "NORM",   8, color="white" },
+                { <SCLK>, "NORM",   1, color="white" },
+                { <PAUS>, "NORM",   1, color="white" }
+            };
+        };
+    }; // End of "Function" section
+
+    section "Alpha" {
+        key.color= "white";
+        priority=  8;
+        top=       61;
+        left=      19;
+        width=     287;
+        height=    95;
+        row {
+            top=  1;
+            left= 1;
+            keys {
+                { <TLDE>, "NORM",   1 }, { <AE01>, "NORM",   1 },
+                { <AE02>, "NORM",   1 }, { <AE03>, "NORM",   1 },
+                { <AE04>, "NORM",   1 }, { <AE05>, "NORM",   1 },
+                { <AE06>, "NORM",   1 }, { <AE07>, "NORM",   1 },
+                { <AE08>, "NORM",   1 }, { <AE09>, "NORM",   1 },
+                { <AE10>, "NORM",   1 }, { <AE11>, "NORM",   1 },
+                { <AE12>, "NORM",   1 },
+                { <BKSP>, "BKSP",   1, color="grey20" }
+            };
+        };
+        row {
+            top=  20;
+            left= 1;
+            keys {
+                {  <TAB>, "TABK",   1, color="grey20" },
+                { <AD01>, "NORM",   1 }, { <AD02>, "NORM",   1 },
+                { <AD03>, "NORM",   1 }, { <AD04>, "NORM",   1 },
+                { <AD05>, "NORM",   1 }, { <AD06>, "NORM",   1 },
+                { <AD07>, "NORM",   1 }, { <AD08>, "NORM",   1 },
+                { <AD09>, "NORM",   1 }, { <AD10>, "NORM",   1 },
+                { <AD11>, "NORM",   1 }, { <AD12>, "NORM",   1 },
+                { <BKSL>, "BKSL",   1 }
+            };
+        };
+        row {
+            top=  39;
+            left= 1;
+            keys {
+                { <CAPS>, "CAPS",   1, color="grey20" },
+                { <AC01>, "NORM",   1 }, { <AC02>, "NORM",   1 },
+                { <AC03>, "NORM",   1 }, { <AC04>, "NORM",   1 },
+                { <AC05>, "NORM",   1 }, { <AC06>, "NORM",   1 },
+                { <AC07>, "NORM",   1 }, { <AC08>, "NORM",   1 },
+                { <AC09>, "NORM",   1 }, { <AC10>, "NORM",   1 },
+                { <AC11>, "NORM",   1 },
+                { <RTRN>, "RTRN",   1, color="grey20" }
+            };
+        };
+        row {
+            top=  58;
+            left= 1;
+            keys {
+                { <LFSH>, "LFSH",   1, color="grey20" },
+                { <AB01>, "NORM",   1 }, { <AB02>, "NORM",   1 },
+                { <AB03>, "NORM",   1 }, { <AB04>, "NORM",   1 },
+                { <AB05>, "NORM",   1 }, { <AB06>, "NORM",   1 },
+                { <AB07>, "NORM",   1 }, { <AB08>, "NORM",   1 },
+                { <AB09>, "NORM",   1 }, { <AB10>, "NORM",   1 },
+                { <RTSH>, "RTSH",   1, color="grey20" }
+            };
+        };
+        row {
+            top=  77;
+            left= 1;
+            keys {
+                { <LCTL>, "MODK",   1, color="grey20" },
+                { <LWIN>, "SMOD",   1, color="grey20" },
+                { <LALT>, "SMOD",   1, color="grey20" },
+                { <SPCE>, "SPCE",   1 },
+                { <RALT>, "SMOD",   1, color="grey20" },
+                { <RWIN>, "SMOD",   1, color="grey20" },
+                { <MENU>, "SMOD",   1, color="grey20" },
+                { <RCTL>, "SMOD",   1, color="grey20" }
+            };
+        };
+    }; // End of "Alpha" section
+
+    section "Editing" {
+        key.color= "grey20";
+        priority=  9;
+        top=       61;
+        left=      312;
+        width=     58;
+        height=    95;
+        row {
+            top=  1;
+            left= 1;
+            keys {
+                {  <INS>, "NORM",   1 }, { <HOME>, "NORM",   1 },
+                { <PGUP>, "NORM",   1 }
+            };
+        };
+        row {
+            top=  20;
+            left= 1;
+            keys {
+                { <DELE>, "NORM",   1 }, {  <END>, "NORM",   1 },
+                { <PGDN>, "NORM",   1 }
+            };
+        };
+        row {
+            top=  58;
+            left= 20;
+            keys {
+                {   <UP>, "NORM",   1 }
+            };
+        };
+        row {
+            top=  77;
+            left= 1;
+            keys {
+                { <LEFT>, "NORM",   1 }, { <DOWN>, "NORM",   1 },
+                { <RGHT>, "NORM",   1 }
+            };
+        };
+    }; // End of "Editing" section
+
+    section "Keypad" {
+        key.color= "grey20";
+        priority=  10;
+        top=       61;
+        left=      376;
+        width=     77;
+        height=    95;
+        row {
+            top=  1;
+            left= 1;
+            keys {
+                { <NMLK>, "NORM",   1 }, { <KPDV>, "NORM",   1 },
+                { <KPMU>, "NORM",   1 }, { <KPSU>, "NORM",   1 }
+            };
+        };
+        row {
+            top=  20;
+            left= 1;
+            keys {
+                {  <KP7>, "NORM",   1, color="white" },
+                {  <KP8>, "NORM",   1, color="white" },
+                {  <KP9>, "NORM",   1, color="white" },
+                { <KPAD>, "KPAD",   1 }
+            };
+        };
+        row {
+            top=  39;
+            left= 1;
+            keys {
+                {  <KP4>, "NORM",   1, color="white" },
+                {  <KP5>, "NORM",   1, color="white" },
+                {  <KP6>, "NORM",   1, color="white" }
+            };
+        };
+        row {
+            top=  58;
+            left= 1;
+            keys {
+                {  <KP1>, "NORM",   1, color="white" },
+                {  <KP2>, "NORM",   1, color="white" },
+                {  <KP3>, "NORM",   1, color="white" },
+                { <KPEN>, "KPAD",   1 }
+            };
+        };
+        row {
+            top=  77;
+            left= 1;
+            keys {
+                {  <KP0>, "KP0",   1, color="white" },
+                { <KPDL>, "NORM",   1, color="white" }
+            };
+        };
+    }; // End of "Keypad" section
+
+    solid "LedPanel" {
+        top=      22;
+        left=     377;
+        priority= 0;
+        color= "grey10";
+        shape= "LEDS";
+    };
+    indicator "Num Lock" {
+        top=      37;
+        left=     382;
+        priority= 1;
+        onColor= "green";
+        offColor= "green30";
+        shape= "LED";
+    };
+    indicator "Caps Lock" {
+        top=      37;
+        left=     407;
+        priority= 2;
+        onColor= "green";
+        offColor= "green30";
+        shape= "LED";
+    };
+    indicator "Scroll Lock" {
+        top=      37;
+        left=     433;
+        priority= 3;
+        onColor= "green";
+        offColor= "green30";
+        shape= "LED";
+    };
+    text "NumLockLabel" {
+        top=      25;
+        left=     378;
+        priority= 4;
+        width=  19.8;
+        height=  10;
+        XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
+        text=  "Num\nLock";
+    };
+    text "CapsLockLabel" {
+        top=      25;
+        left=     403;
+        priority= 5;
+        width=  26.4;
+        height=  10;
+        XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
+        text=  "Caps\nLock";
+    };
+    text "ScrollLockLabel" {
+        top=      25;
+        left=     428;
+        priority= 6;
+        width=  39.6;
+        height=  10;
+        XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
+        text=  "Scroll\nLock";
+    };
+};
+
+};
diff --git a/data/keymaps/stringcomp.data b/data/keymaps/stringcomp.data
new file mode 100644
--- /dev/null
+++ b/data/keymaps/stringcomp.data
@@ -0,0 +1,1913 @@
+xkb_keymap {
+xkb_keycodes "evdev_aliases(qwerty)" {
+	minimum = 8;
+	maximum = 255;
+	<ESC>                = 9;
+	<AE01>               = 10;
+	<AE02>               = 11;
+	<AE03>               = 12;
+	<AE04>               = 13;
+	<AE05>               = 14;
+	<AE06>               = 15;
+	<AE07>               = 16;
+	<AE08>               = 17;
+	<AE09>               = 18;
+	<AE10>               = 19;
+	<AE11>               = 20;
+	<AE12>               = 21;
+	<BKSP>               = 22;
+	<TAB>                = 23;
+	<AD01>               = 24;
+	<AD02>               = 25;
+	<AD03>               = 26;
+	<AD04>               = 27;
+	<AD05>               = 28;
+	<AD06>               = 29;
+	<AD07>               = 30;
+	<AD08>               = 31;
+	<AD09>               = 32;
+	<AD10>               = 33;
+	<AD11>               = 34;
+	<AD12>               = 35;
+	<RTRN>               = 36;
+	<LCTL>               = 37;
+	<AC01>               = 38;
+	<AC02>               = 39;
+	<AC03>               = 40;
+	<AC04>               = 41;
+	<AC05>               = 42;
+	<AC06>               = 43;
+	<AC07>               = 44;
+	<AC08>               = 45;
+	<AC09>               = 46;
+	<AC10>               = 47;
+	<AC11>               = 48;
+	<TLDE>               = 49;
+	<LFSH>               = 50;
+	<BKSL>               = 51;
+	<AB01>               = 52;
+	<AB02>               = 53;
+	<AB03>               = 54;
+	<AB04>               = 55;
+	<AB05>               = 56;
+	<AB06>               = 57;
+	<AB07>               = 58;
+	<AB08>               = 59;
+	<AB09>               = 60;
+	<AB10>               = 61;
+	<RTSH>               = 62;
+	<KPMU>               = 63;
+	<LALT>               = 64;
+	<SPCE>               = 65;
+	<CAPS>               = 66;
+	<FK01>               = 67;
+	<FK02>               = 68;
+	<FK03>               = 69;
+	<FK04>               = 70;
+	<FK05>               = 71;
+	<FK06>               = 72;
+	<FK07>               = 73;
+	<FK08>               = 74;
+	<FK09>               = 75;
+	<FK10>               = 76;
+	<NMLK>               = 77;
+	<SCLK>               = 78;
+	<KP7>                = 79;
+	<KP8>                = 80;
+	<KP9>                = 81;
+	<KPSU>               = 82;
+	<KP4>                = 83;
+	<KP5>                = 84;
+	<KP6>                = 85;
+	<KPAD>               = 86;
+	<KP1>                = 87;
+	<KP2>                = 88;
+	<KP3>                = 89;
+	<KP0>                = 90;
+	<KPDL>               = 91;
+	<LVL3>               = 92;
+	<LSGT>               = 94;
+	<FK11>               = 95;
+	<FK12>               = 96;
+	<AB11>               = 97;
+	<KATA>               = 98;
+	<HIRA>               = 99;
+	<HENK>               = 100;
+	<HKTG>               = 101;
+	<MUHE>               = 102;
+	<JPCM>               = 103;
+	<KPEN>               = 104;
+	<RCTL>               = 105;
+	<KPDV>               = 106;
+	<PRSC>               = 107;
+	<RALT>               = 108;
+	<LNFD>               = 109;
+	<HOME>               = 110;
+	<UP>                 = 111;
+	<PGUP>               = 112;
+	<LEFT>               = 113;
+	<RGHT>               = 114;
+	<END>                = 115;
+	<DOWN>               = 116;
+	<PGDN>               = 117;
+	<INS>                = 118;
+	<DELE>               = 119;
+	<I120>               = 120;
+	<MUTE>               = 121;
+	<VOL->               = 122;
+	<VOL+>               = 123;
+	<POWR>               = 124;
+	<KPEQ>               = 125;
+	<I126>               = 126;
+	<PAUS>               = 127;
+	<I128>               = 128;
+	<I129>               = 129;
+	<HNGL>               = 130;
+	<HJCV>               = 131;
+	<AE13>               = 132;
+	<LWIN>               = 133;
+	<RWIN>               = 134;
+	<COMP>               = 135;
+	<STOP>               = 136;
+	<AGAI>               = 137;
+	<PROP>               = 138;
+	<UNDO>               = 139;
+	<FRNT>               = 140;
+	<COPY>               = 141;
+	<OPEN>               = 142;
+	<PAST>               = 143;
+	<FIND>               = 144;
+	<CUT>                = 145;
+	<HELP>               = 146;
+	<I147>               = 147;
+	<I148>               = 148;
+	<I149>               = 149;
+	<I150>               = 150;
+	<I151>               = 151;
+	<I152>               = 152;
+	<I153>               = 153;
+	<I154>               = 154;
+	<I155>               = 155;
+	<I156>               = 156;
+	<I157>               = 157;
+	<I158>               = 158;
+	<I159>               = 159;
+	<I160>               = 160;
+	<I161>               = 161;
+	<I162>               = 162;
+	<I163>               = 163;
+	<I164>               = 164;
+	<I165>               = 165;
+	<I166>               = 166;
+	<I167>               = 167;
+	<I168>               = 168;
+	<I169>               = 169;
+	<I170>               = 170;
+	<I171>               = 171;
+	<I172>               = 172;
+	<I173>               = 173;
+	<I174>               = 174;
+	<I175>               = 175;
+	<I176>               = 176;
+	<I177>               = 177;
+	<I178>               = 178;
+	<I179>               = 179;
+	<I180>               = 180;
+	<I181>               = 181;
+	<I182>               = 182;
+	<I183>               = 183;
+	<I184>               = 184;
+	<I185>               = 185;
+	<I186>               = 186;
+	<I187>               = 187;
+	<I188>               = 188;
+	<I189>               = 189;
+	<I190>               = 190;
+	<FK13>               = 191;
+	<FK14>               = 192;
+	<FK15>               = 193;
+	<FK16>               = 194;
+	<FK17>               = 195;
+	<FK18>               = 196;
+	<FK19>               = 197;
+	<FK20>               = 198;
+	<FK21>               = 199;
+	<FK22>               = 200;
+	<FK23>               = 201;
+	<FK24>               = 202;
+	<MDSW>               = 203;
+	<ALT>                = 204;
+	<META>               = 205;
+	<SUPR>               = 206;
+	<HYPR>               = 207;
+	<I208>               = 208;
+	<I209>               = 209;
+	<I210>               = 210;
+	<I211>               = 211;
+	<I212>               = 212;
+	<I213>               = 213;
+	<I214>               = 214;
+	<I215>               = 215;
+	<I216>               = 216;
+	<I217>               = 217;
+	<I218>               = 218;
+	<I219>               = 219;
+	<I220>               = 220;
+	<I221>               = 221;
+	<I222>               = 222;
+	<I223>               = 223;
+	<I224>               = 224;
+	<I225>               = 225;
+	<I226>               = 226;
+	<I227>               = 227;
+	<I228>               = 228;
+	<I229>               = 229;
+	<I230>               = 230;
+	<I231>               = 231;
+	<I232>               = 232;
+	<I233>               = 233;
+	<I234>               = 234;
+	<I235>               = 235;
+	<I236>               = 236;
+	<I237>               = 237;
+	<I238>               = 238;
+	<I239>               = 239;
+	<I240>               = 240;
+	<I241>               = 241;
+	<I242>               = 242;
+	<I243>               = 243;
+	<I244>               = 244;
+	<I245>               = 245;
+	<I246>               = 246;
+	<I247>               = 247;
+	<I248>               = 248;
+	<I249>               = 249;
+	<I250>               = 250;
+	<I251>               = 251;
+	<I252>               = 252;
+	<I253>               = 253;
+	indicator 1 = "Caps Lock";
+	indicator 2 = "Num Lock";
+	indicator 3 = "Scroll Lock";
+	indicator 4 = "Compose";
+	indicator 5 = "Kana";
+	indicator 6 = "Sleep";
+	indicator 7 = "Suspend";
+	indicator 8 = "Mute";
+	indicator 9 = "Misc";
+	indicator 10 = "Mail";
+	indicator 11 = "Charging";
+	indicator 12 = "Shift Lock";
+	indicator 13 = "Group 2";
+	indicator 14 = "Mouse Keys";
+	alias <AC12>         = <BKSL>;
+	alias <MENU>         = <COMP>;
+	alias <HZTG>         = <TLDE>;
+	alias <LMTA>         = <LWIN>;
+	alias <RMTA>         = <RWIN>;
+	alias <ALGR>         = <RALT>;
+	alias <KPPT>         = <I129>;
+	alias <LatQ>         = <AD01>;
+	alias <LatW>         = <AD02>;
+	alias <LatE>         = <AD03>;
+	alias <LatR>         = <AD04>;
+	alias <LatT>         = <AD05>;
+	alias <LatY>         = <AD06>;
+	alias <LatU>         = <AD07>;
+	alias <LatI>         = <AD08>;
+	alias <LatO>         = <AD09>;
+	alias <LatP>         = <AD10>;
+	alias <LatA>         = <AC01>;
+	alias <LatS>         = <AC02>;
+	alias <LatD>         = <AC03>;
+	alias <LatF>         = <AC04>;
+	alias <LatG>         = <AC05>;
+	alias <LatH>         = <AC06>;
+	alias <LatJ>         = <AC07>;
+	alias <LatK>         = <AC08>;
+	alias <LatL>         = <AC09>;
+	alias <LatZ>         = <AB01>;
+	alias <LatX>         = <AB02>;
+	alias <LatC>         = <AB03>;
+	alias <LatV>         = <AB04>;
+	alias <LatB>         = <AB05>;
+	alias <LatN>         = <AB06>;
+	alias <LatM>         = <AB07>;
+};
+
+xkb_types "complete" {
+	virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+	type "ONE_LEVEL" {
+		modifiers= none;
+		level_name[Level1]= "Any";
+	};
+	type "TWO_LEVEL" {
+		modifiers= Shift;
+		map[Shift]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+	};
+	type "ALPHABETIC" {
+		modifiers= Shift+Lock;
+		map[Shift]= Level2;
+		map[Lock]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Caps";
+	};
+	type "SHIFT+ALT" {
+		modifiers= Shift+Alt;
+		map[Shift+Alt]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift+Alt";
+	};
+	type "PC_CONTROL_LEVEL2" {
+		modifiers= Control;
+		map[Control]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Control";
+	};
+	type "PC_LCONTROL_LEVEL2" {
+		modifiers= LControl;
+		map[LControl]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "LControl";
+	};
+	type "PC_RCONTROL_LEVEL2" {
+		modifiers= RControl;
+		map[RControl]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "RControl";
+	};
+	type "PC_ALT_LEVEL2" {
+		modifiers= Alt;
+		map[Alt]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Alt";
+	};
+	type "PC_LALT_LEVEL2" {
+		modifiers= LAlt;
+		map[LAlt]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "LAlt";
+	};
+	type "PC_RALT_LEVEL2" {
+		modifiers= RAlt;
+		map[RAlt]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "RAlt";
+	};
+	type "CTRL+ALT" {
+		modifiers= Shift+Control+Alt+LevelThree;
+		map[Shift]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[Control+Alt]= Level5;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Shift Alt";
+		level_name[Level5]= "Ctrl+Alt";
+	};
+	type "LOCAL_EIGHT_LEVEL" {
+		modifiers= Shift+Lock+Control+LevelThree;
+		map[Shift]= Level2;
+		map[Lock]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+Lock+LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[Lock+LevelThree]= Level4;
+		map[Control]= Level5;
+		map[Shift+Lock+Control]= Level5;
+		map[Shift+Control]= Level6;
+		map[Lock+Control]= Level6;
+		map[Control+LevelThree]= Level7;
+		map[Shift+Lock+Control+LevelThree]= Level7;
+		map[Shift+Control+LevelThree]= Level8;
+		map[Lock+Control+LevelThree]= Level8;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Level3";
+		level_name[Level4]= "Shift Level3";
+		level_name[Level5]= "Ctrl";
+		level_name[Level6]= "Shift Ctrl";
+		level_name[Level7]= "Level3 Ctrl";
+		level_name[Level8]= "Shift Level3 Ctrl";
+	};
+	type "THREE_LEVEL" {
+		modifiers= Shift+LevelThree;
+		map[Shift]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level3;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Level3";
+	};
+	type "EIGHT_LEVEL" {
+		modifiers= Shift+LevelThree+LevelFive;
+		map[Shift]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[LevelFive]= Level5;
+		map[Shift+LevelFive]= Level6;
+		map[LevelThree+LevelFive]= Level7;
+		map[Shift+LevelThree+LevelFive]= Level8;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Shift Alt";
+		level_name[Level5]= "X";
+		level_name[Level6]= "X Shift";
+		level_name[Level7]= "X Alt Base";
+		level_name[Level8]= "X Shift Alt";
+	};
+	type "EIGHT_LEVEL_ALPHABETIC" {
+		modifiers= Shift+Lock+LevelThree+LevelFive;
+		map[Shift]= Level2;
+		map[Lock]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[Lock+LevelThree]= Level4;
+		map[Shift+Lock+LevelThree]= Level3;
+		map[LevelFive]= Level5;
+		map[Shift+LevelFive]= Level6;
+		map[Lock+LevelFive]= Level6;
+		map[LevelThree+LevelFive]= Level7;
+		map[Shift+LevelThree+LevelFive]= Level8;
+		map[Lock+LevelThree+LevelFive]= Level8;
+		map[Shift+Lock+LevelThree+LevelFive]= Level7;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Shift Alt";
+		level_name[Level5]= "X";
+		level_name[Level6]= "X Shift";
+		level_name[Level7]= "X Alt Base";
+		level_name[Level8]= "X Shift Alt";
+	};
+	type "EIGHT_LEVEL_SEMIALPHABETIC" {
+		modifiers= Shift+Lock+LevelThree+LevelFive;
+		map[Shift]= Level2;
+		map[Lock]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[Lock+LevelThree]= Level3;
+		preserve[Lock+LevelThree]= Lock;
+		map[Shift+Lock+LevelThree]= Level4;
+		preserve[Shift+Lock+LevelThree]= Lock;
+		map[LevelFive]= Level5;
+		map[Shift+LevelFive]= Level6;
+		map[Lock+LevelFive]= Level6;
+		preserve[Lock+LevelFive]= Lock;
+		map[LevelThree+LevelFive]= Level7;
+		map[Shift+LevelThree+LevelFive]= Level8;
+		map[Lock+LevelThree+LevelFive]= Level7;
+		preserve[Lock+LevelThree+LevelFive]= Lock;
+		map[Shift+Lock+LevelThree+LevelFive]= Level8;
+		preserve[Shift+Lock+LevelThree+LevelFive]= Lock;
+		map[Shift+Lock+LevelFive]= Level1;
+		preserve[Shift+Lock+LevelFive]= Lock;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Shift Alt";
+		level_name[Level5]= "X";
+		level_name[Level6]= "X Shift";
+		level_name[Level7]= "X Alt Base";
+		level_name[Level8]= "X Shift Alt";
+	};
+	type "FOUR_LEVEL" {
+		modifiers= Shift+LevelThree;
+		map[Shift]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Shift Alt";
+	};
+	type "FOUR_LEVEL_ALPHABETIC" {
+		modifiers= Shift+Lock+LevelThree;
+		map[Shift]= Level2;
+		map[Lock]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[Lock+LevelThree]= Level4;
+		map[Shift+Lock+LevelThree]= Level3;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Shift Alt";
+	};
+	type "FOUR_LEVEL_SEMIALPHABETIC" {
+		modifiers= Shift+Lock+LevelThree;
+		map[Shift]= Level2;
+		map[Lock]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[Lock+LevelThree]= Level3;
+		preserve[Lock+LevelThree]= Lock;
+		map[Shift+Lock+LevelThree]= Level4;
+		preserve[Shift+Lock+LevelThree]= Lock;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Shift Alt";
+	};
+	type "FOUR_LEVEL_MIXED_KEYPAD" {
+		modifiers= Shift+NumLock+LevelThree;
+		map[NumLock]= Level2;
+		map[Shift]= Level2;
+		map[LevelThree]= Level3;
+		map[NumLock+LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[Shift+NumLock+LevelThree]= Level4;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Number";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Shift Alt";
+	};
+	type "FOUR_LEVEL_X" {
+		modifiers= Shift+Control+Alt+LevelThree;
+		map[LevelThree]= Level2;
+		map[Shift+LevelThree]= Level3;
+		map[Control+Alt]= Level4;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Alt Base";
+		level_name[Level3]= "Shift Alt";
+		level_name[Level4]= "Ctrl+Alt";
+	};
+	type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
+		modifiers= Shift+Lock+LevelThree;
+		map[Shift]= Level2;
+		map[Lock]= Level4;
+		preserve[Lock]= Lock;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[Lock+LevelThree]= Level3;
+		preserve[Lock+LevelThree]= Lock;
+		map[Shift+Lock+LevelThree]= Level3;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "AltGr Base";
+		level_name[Level4]= "Shift AltGr";
+	};
+	type "FOUR_LEVEL_PLUS_LOCK" {
+		modifiers= Shift+Lock+LevelThree;
+		map[Shift]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[Lock]= Level5;
+		map[Shift+Lock]= Level2;
+		map[Lock+LevelThree]= Level3;
+		map[Shift+Lock+LevelThree]= Level4;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Shift";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Shift Alt";
+		level_name[Level5]= "Lock";
+	};
+	type "KEYPAD" {
+		modifiers= Shift+NumLock;
+		map[Shift]= Level2;
+		map[NumLock]= Level2;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Number";
+	};
+	type "FOUR_LEVEL_KEYPAD" {
+		modifiers= Shift+NumLock+LevelThree;
+		map[Shift]= Level2;
+		map[NumLock]= Level2;
+		map[LevelThree]= Level3;
+		map[Shift+LevelThree]= Level4;
+		map[NumLock+LevelThree]= Level4;
+		map[Shift+NumLock+LevelThree]= Level3;
+		level_name[Level1]= "Base";
+		level_name[Level2]= "Number";
+		level_name[Level3]= "Alt Base";
+		level_name[Level4]= "Alt Number";
+	};
+};
+
+xkb_compatibility "complete_caps(caps_lock)_4_misc(assign_shift_left_action)_4_level5(level5_lock)_4" {
+	virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+	interpret.useModMapMods= AnyLevel;
+	interpret.repeat= False;
+	interpret ISO_Level2_Latch+Exactly(Shift) {
+		useModMapMods=level1;
+		action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
+	};
+	interpret Shift_Lock+AnyOf(Shift+Lock) {
+		action= LockMods(modifiers=Shift);
+	};
+	interpret Num_Lock+AnyOf(all) {
+		virtualModifier= NumLock;
+		action= LockMods(modifiers=NumLock);
+	};
+	interpret ISO_Lock+AnyOf(all) {
+		action= NoAction();
+	};
+	interpret ISO_Level3_Shift+AnyOf(all) {
+		virtualModifier= LevelThree;
+		useModMapMods=level1;
+		action= SetMods(modifiers=LevelThree,clearLocks);
+	};
+	interpret ISO_Level3_Latch+AnyOf(all) {
+		virtualModifier= LevelThree;
+		useModMapMods=level1;
+		action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+	};
+	interpret ISO_Level3_Lock+AnyOf(all) {
+		virtualModifier= LevelThree;
+		useModMapMods=level1;
+		action= LockMods(modifiers=LevelThree);
+	};
+	interpret Alt_L+AnyOf(all) {
+		virtualModifier= Alt;
+		action= SetMods(modifiers=modMapMods,clearLocks);
+	};
+	interpret Alt_R+AnyOf(all) {
+		virtualModifier= Alt;
+		action= SetMods(modifiers=modMapMods,clearLocks);
+	};
+	interpret Meta_L+AnyOf(all) {
+		virtualModifier= Meta;
+		action= SetMods(modifiers=modMapMods,clearLocks);
+	};
+	interpret Meta_R+AnyOf(all) {
+		virtualModifier= Meta;
+		action= SetMods(modifiers=modMapMods,clearLocks);
+	};
+	interpret Super_L+AnyOf(all) {
+		virtualModifier= Super;
+		action= SetMods(modifiers=modMapMods,clearLocks);
+	};
+	interpret Super_R+AnyOf(all) {
+		virtualModifier= Super;
+		action= SetMods(modifiers=modMapMods,clearLocks);
+	};
+	interpret Hyper_L+AnyOf(all) {
+		virtualModifier= Hyper;
+		action= SetMods(modifiers=modMapMods,clearLocks);
+	};
+	interpret Hyper_R+AnyOf(all) {
+		virtualModifier= Hyper;
+		action= SetMods(modifiers=modMapMods,clearLocks);
+	};
+	interpret Scroll_Lock+AnyOf(all) {
+		virtualModifier= ScrollLock;
+		action= LockMods(modifiers=modMapMods);
+	};
+	interpret ISO_Level5_Shift+AnyOf(all) {
+		virtualModifier= LevelFive;
+		useModMapMods=level1;
+		action= SetMods(modifiers=LevelFive,clearLocks);
+	};
+	interpret ISO_Level5_Latch+AnyOf(all) {
+		virtualModifier= LevelFive;
+		action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+	};
+	interpret ISO_Level5_Lock+AnyOf(all) {
+		virtualModifier= LevelFive;
+		action= LockMods(modifiers=LevelFive);
+	};
+	interpret Mode_switch+AnyOfOrNone(all) {
+		virtualModifier= AltGr;
+		useModMapMods=level1;
+		action= SetGroup(group=+1);
+	};
+	interpret ISO_Level3_Shift+AnyOfOrNone(all) {
+		action= SetMods(modifiers=LevelThree,clearLocks);
+	};
+	interpret ISO_Level3_Latch+AnyOfOrNone(all) {
+		action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+	};
+	interpret ISO_Level3_Lock+AnyOfOrNone(all) {
+		action= LockMods(modifiers=LevelThree);
+	};
+	interpret ISO_Group_Latch+AnyOfOrNone(all) {
+		virtualModifier= AltGr;
+		useModMapMods=level1;
+		action= LatchGroup(group=2);
+	};
+	interpret ISO_Next_Group+AnyOfOrNone(all) {
+		virtualModifier= AltGr;
+		useModMapMods=level1;
+		action= LockGroup(group=+1);
+	};
+	interpret ISO_Prev_Group+AnyOfOrNone(all) {
+		virtualModifier= AltGr;
+		useModMapMods=level1;
+		action= LockGroup(group=-1);
+	};
+	interpret ISO_First_Group+AnyOfOrNone(all) {
+		action= LockGroup(group=1);
+	};
+	interpret ISO_Last_Group+AnyOfOrNone(all) {
+		action= LockGroup(group=2);
+	};
+	interpret KP_1+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=-1,y=+1);
+	};
+	interpret KP_End+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=-1,y=+1);
+	};
+	interpret KP_2+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+0,y=+1);
+	};
+	interpret KP_Down+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+0,y=+1);
+	};
+	interpret KP_3+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+1,y=+1);
+	};
+	interpret KP_Next+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+1,y=+1);
+	};
+	interpret KP_4+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=-1,y=+0);
+	};
+	interpret KP_Left+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=-1,y=+0);
+	};
+	interpret KP_6+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+1,y=+0);
+	};
+	interpret KP_Right+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+1,y=+0);
+	};
+	interpret KP_7+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=-1,y=-1);
+	};
+	interpret KP_Home+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=-1,y=-1);
+	};
+	interpret KP_8+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+0,y=-1);
+	};
+	interpret KP_Up+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+0,y=-1);
+	};
+	interpret KP_9+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+1,y=-1);
+	};
+	interpret KP_Prior+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+1,y=-1);
+	};
+	interpret KP_5+AnyOfOrNone(all) {
+		repeat= True;
+		action= PtrBtn(button=default);
+	};
+	interpret KP_Begin+AnyOfOrNone(all) {
+		repeat= True;
+		action= PtrBtn(button=default);
+	};
+	interpret KP_F2+AnyOfOrNone(all) {
+		repeat= True;
+		action= SetPtrDflt(affect=button,button=1);
+	};
+	interpret KP_Divide+AnyOfOrNone(all) {
+		repeat= True;
+		action= SetPtrDflt(affect=button,button=1);
+	};
+	interpret KP_F3+AnyOfOrNone(all) {
+		repeat= True;
+		action= SetPtrDflt(affect=button,button=2);
+	};
+	interpret KP_Multiply+AnyOfOrNone(all) {
+		repeat= True;
+		action= SetPtrDflt(affect=button,button=2);
+	};
+	interpret KP_F4+AnyOfOrNone(all) {
+		repeat= True;
+		action= SetPtrDflt(affect=button,button=3);
+	};
+	interpret KP_Subtract+AnyOfOrNone(all) {
+		repeat= True;
+		action= SetPtrDflt(affect=button,button=3);
+	};
+	interpret KP_Separator+AnyOfOrNone(all) {
+		repeat= True;
+		action= PtrBtn(button=default,count=2);
+	};
+	interpret KP_Add+AnyOfOrNone(all) {
+		repeat= True;
+		action= PtrBtn(button=default,count=2);
+	};
+	interpret KP_0+AnyOfOrNone(all) {
+		repeat= True;
+		action= LockPtrBtn(button=default,affect=lock);
+	};
+	interpret KP_Insert+AnyOfOrNone(all) {
+		repeat= True;
+		action= LockPtrBtn(button=default,affect=lock);
+	};
+	interpret KP_Decimal+AnyOfOrNone(all) {
+		repeat= True;
+		action= LockPtrBtn(button=default,affect=unlock);
+	};
+	interpret KP_Delete+AnyOfOrNone(all) {
+		repeat= True;
+		action= LockPtrBtn(button=default,affect=unlock);
+	};
+	interpret F25+AnyOfOrNone(all) {
+		repeat= True;
+		action= SetPtrDflt(affect=button,button=1);
+	};
+	interpret F26+AnyOfOrNone(all) {
+		repeat= True;
+		action= SetPtrDflt(affect=button,button=2);
+	};
+	interpret F27+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=-1,y=-1);
+	};
+	interpret F29+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+1,y=-1);
+	};
+	interpret F31+AnyOfOrNone(all) {
+		repeat= True;
+		action= PtrBtn(button=default);
+	};
+	interpret F33+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=-1,y=+1);
+	};
+	interpret F35+AnyOfOrNone(all) {
+		repeat= True;
+		action= MovePtr(x=+1,y=+1);
+	};
+	interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
+		action= PtrBtn(button=default);
+	};
+	interpret Pointer_Button1+AnyOfOrNone(all) {
+		action= PtrBtn(button=1);
+	};
+	interpret Pointer_Button2+AnyOfOrNone(all) {
+		action= PtrBtn(button=2);
+	};
+	interpret Pointer_Button3+AnyOfOrNone(all) {
+		action= PtrBtn(button=3);
+	};
+	interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
+		action= PtrBtn(button=default,count=2);
+	};
+	interpret Pointer_DblClick1+AnyOfOrNone(all) {
+		action= PtrBtn(button=1,count=2);
+	};
+	interpret Pointer_DblClick2+AnyOfOrNone(all) {
+		action= PtrBtn(button=2,count=2);
+	};
+	interpret Pointer_DblClick3+AnyOfOrNone(all) {
+		action= PtrBtn(button=3,count=2);
+	};
+	interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
+		action= LockPtrBtn(button=default);
+	};
+	interpret Pointer_Drag1+AnyOfOrNone(all) {
+		action= LockPtrBtn(button=1);
+	};
+	interpret Pointer_Drag2+AnyOfOrNone(all) {
+		action= LockPtrBtn(button=2);
+	};
+	interpret Pointer_Drag3+AnyOfOrNone(all) {
+		action= LockPtrBtn(button=3);
+	};
+	interpret Pointer_EnableKeys+AnyOfOrNone(all) {
+		action= LockControls(controls=MouseKeys);
+	};
+	interpret Pointer_Accelerate+AnyOfOrNone(all) {
+		action= LockControls(controls=MouseKeysAccel);
+	};
+	interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
+		action= SetPtrDflt(affect=button,button=+1);
+	};
+	interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
+		action= SetPtrDflt(affect=button,button=-1);
+	};
+	interpret AccessX_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=AccessXKeys);
+	};
+	interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=AccessXFeedback);
+	};
+	interpret RepeatKeys_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=RepeatKeys);
+	};
+	interpret SlowKeys_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=SlowKeys);
+	};
+	interpret BounceKeys_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=BounceKeys);
+	};
+	interpret StickyKeys_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=StickyKeys);
+	};
+	interpret MouseKeys_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=MouseKeys);
+	};
+	interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=MouseKeysAccel);
+	};
+	interpret Overlay1_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=none);
+	};
+	interpret Overlay2_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=none);
+	};
+	interpret AudibleBell_Enable+AnyOfOrNone(all) {
+		action= LockControls(controls=AudibleBell);
+	};
+	interpret Terminate_Server+AnyOfOrNone(all) {
+		action= Terminate();
+	};
+	interpret Alt_L+AnyOfOrNone(all) {
+		action= SetMods(modifiers=Alt,clearLocks);
+	};
+	interpret Alt_R+AnyOfOrNone(all) {
+		action= SetMods(modifiers=Alt,clearLocks);
+	};
+	interpret Meta_L+AnyOfOrNone(all) {
+		action= SetMods(modifiers=Meta,clearLocks);
+	};
+	interpret Meta_R+AnyOfOrNone(all) {
+		action= SetMods(modifiers=Meta,clearLocks);
+	};
+	interpret Super_L+AnyOfOrNone(all) {
+		action= SetMods(modifiers=Super,clearLocks);
+	};
+	interpret Super_R+AnyOfOrNone(all) {
+		action= SetMods(modifiers=Super,clearLocks);
+	};
+	interpret Hyper_L+AnyOfOrNone(all) {
+		action= SetMods(modifiers=Hyper,clearLocks);
+	};
+	interpret Hyper_R+AnyOfOrNone(all) {
+		action= SetMods(modifiers=Hyper,clearLocks);
+	};
+	interpret Shift_L+AnyOfOrNone(all) {
+		action= SetMods(modifiers=Shift);
+	};
+	interpret XF86Switch_VT_1+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=1,!same);
+	};
+	interpret XF86Switch_VT_2+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=2,!same);
+	};
+	interpret XF86Switch_VT_3+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=3,!same);
+	};
+	interpret XF86Switch_VT_4+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=4,!same);
+	};
+	interpret XF86Switch_VT_5+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=5,!same);
+	};
+	interpret XF86Switch_VT_6+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=6,!same);
+	};
+	interpret XF86Switch_VT_7+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=7,!same);
+	};
+	interpret XF86Switch_VT_8+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=8,!same);
+	};
+	interpret XF86Switch_VT_9+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=9,!same);
+	};
+	interpret XF86Switch_VT_10+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=10,!same);
+	};
+	interpret XF86Switch_VT_11+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=11,!same);
+	};
+	interpret XF86Switch_VT_12+AnyOfOrNone(all) {
+		repeat= True;
+		action= SwitchScreen(screen=12,!same);
+	};
+	interpret XF86LogGrabInfo+AnyOfOrNone(all) {
+		repeat= True;
+		action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);
+	};
+	interpret XF86LogWindowTree+AnyOfOrNone(all) {
+		repeat= True;
+		action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);
+	};
+	interpret XF86Next_VMode+AnyOfOrNone(all) {
+		repeat= True;
+		action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+	};
+	interpret XF86Prev_VMode+AnyOfOrNone(all) {
+		repeat= True;
+		action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+	};
+	interpret ISO_Level5_Shift+AnyOfOrNone(all) {
+		action= SetMods(modifiers=LevelFive,clearLocks);
+	};
+	interpret ISO_Level5_Latch+AnyOfOrNone(all) {
+		action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+	};
+	interpret ISO_Level5_Lock+AnyOfOrNone(all) {
+		action= LockMods(modifiers=NumLock);
+	};
+	interpret Caps_Lock+AnyOfOrNone(all) {
+		action= LockMods(modifiers=Lock);
+	};
+	interpret Any+Exactly(Lock) {
+		action= LockMods(modifiers=Lock);
+	};
+	interpret Any+AnyOf(all) {
+		action= SetMods(modifiers=modMapMods,clearLocks);
+	};
+	indicator "Caps Lock" {
+		whichModState= locked;
+		modifiers= Lock;
+	};
+	indicator "Num Lock" {
+		whichModState= locked;
+		modifiers= NumLock;
+	};
+	indicator "Scroll Lock" {
+		whichModState= locked;
+		modifiers= ScrollLock;
+	};
+	indicator "Shift Lock" {
+		whichModState= locked;
+		modifiers= Shift;
+	};
+	indicator "Group 2" {
+		groups= 0xfe;
+	};
+	indicator "Mouse Keys" {
+		controls= MouseKeys;
+	};
+};
+
+xkb_symbols "pc_us_ru_2_ca(multix)_3_de(neo)_4_inet(evdev)" {
+	name[group1]="English (US)";
+	name[group2]="Russian";
+	name[group3]="Canadian Multilingual";
+	name[group4]="German (Neo 2)";
+
+	key <ESC>                {	[          Escape ] };
+	key <AE01>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [               1,          exclam ],
+		symbols[Group2]= [               1,          exclam ],
+		symbols[Group3]= [               1,          exclam,       plusminus,        NoSymbol,     onesuperior,      exclamdown,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               1,          degree,     onesuperior,    onesubscript,     ordfeminine,        NoSymbol,         notsign,        NoSymbol ]
+	};
+	key <AE02>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [               2,              at ],
+		symbols[Group2]= [               2,        quotedbl ],
+		symbols[Group3]= [               2,              at,              at,        NoSymbol,     twosuperior,        NoSymbol,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               2,         section,     twosuperior,    twosubscript,       masculine,        NoSymbol,       logicalor,        NoSymbol ]
+	};
+	key <AE03>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [               3,      numbersign ],
+		symbols[Group2]= [               3,      numerosign ],
+		symbols[Group3]= [               3,      numbersign,        sterling,        NoSymbol,   threesuperior,        sterling,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               3,           U2113,   threesuperior,  threesubscript,      numerosign,        NoSymbol,      logicaland,        NoSymbol ]
+	};
+	key <AE04>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [               4,          dollar ],
+		symbols[Group2]= [               4,       semicolon ],
+		symbols[Group3]= [               4,          dollar,            cent,        NoSymbol,      onequarter,        currency,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               4,  guillemotright,           U203A,    femalesymbol,        NoSymbol,        NoSymbol,           U22A5,        NoSymbol ]
+	};
+	key <AE05>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [               5,         percent ],
+		symbols[Group2]= [               5,         percent ],
+		symbols[Group3]= [               5,         percent,        currency,        NoSymbol,         onehalf,    threeeighths,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               5,   guillemotleft,           U2039,      malesymbol,  periodcentered,        NoSymbol,           U2221,        NoSymbol ]
+	};
+	key <AE06>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [ { H, E, L, L, O },     asciicircum ],
+		symbols[Group2]= [               6,           colon ],
+		symbols[Group3]= [               6,        question,         notsign,        NoSymbol,   threequarters,     fiveeighths,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               6,          dollar,            cent,           U26A5,        sterling,        NoSymbol,           U2225,        NoSymbol ]
+	};
+	key <AE07>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [ { Y, E, S, space, T, H, I, S, space, I, S, space, D, O, G },       ampersand ],
+		symbols[Group2]= [               7,        question ],
+		symbols[Group3]= [               7,       ampersand,       braceleft,        NoSymbol,        NoSymbol,    seveneighths,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               7,        EuroSign,             yen,           U03F0,        currency,        NoSymbol,      rightarrow,        NoSymbol ]
+	};
+	key <AE08>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [               8,        asterisk ],
+		symbols[Group2]= [               8,        asterisk ],
+		symbols[Group3]= [               8,        asterisk,      braceright,        NoSymbol,        NoSymbol,       trademark,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               8, doublelowquotemark, singlelowquotemark,           U27E8,             Tab,    ISO_Left_Tab,           U221E,        NoSymbol ]
+	};
+	key <AE09>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [               9,       parenleft ],
+		symbols[Group2]= [               9,       parenleft ],
+		symbols[Group3]= [               9,       parenleft,     bracketleft,        NoSymbol,        NoSymbol,       plusminus,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               9, leftdoublequotemark, leftsinglequotemark,           U27E9,       KP_Divide,       KP_Divide,       variation,        NoSymbol ]
+	};
+	key <AE10>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [               0,      parenright ],
+		symbols[Group2]= [               0,      parenright ],
+		symbols[Group3]= [               0,      parenright,    bracketright,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               0, rightdoublequotemark, rightsinglequotemark,   zerosubscript,     KP_Multiply,     KP_Multiply,        emptyset,        NoSymbol ]
+	};
+	key <AE11>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [           minus,      underscore ],
+		symbols[Group2]= [           minus,      underscore ],
+		symbols[Group3]= [           minus,      underscore,         onehalf,        NoSymbol,        NoSymbol,    questiondown,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [           minus,          emdash,        NoSymbol,           U2011,     KP_Subtract,     KP_Subtract,          hyphen,        NoSymbol ]
+	};
+	key <AE12>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [           equal,            plus ],
+		symbols[Group2]= [           equal,            plus ],
+		symbols[Group3]= [           equal,            plus,         notsign,        NoSymbol,    dead_cedilla,     dead_ogonek,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [      dead_grave,    dead_cedilla,  dead_abovering, dead_abovereversedcomma,  dead_diaeresis,        NoSymbol,     dead_macron,        NoSymbol ]
+	};
+	key <BKSP>               {	[       BackSpace,       BackSpace ] };
+	key <TAB>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [             Tab,    ISO_Left_Tab ],
+		symbols[Group2]= [             Tab,    ISO_Left_Tab ],
+		symbols[Group3]= [             Tab,    ISO_Left_Tab ],
+		symbols[Group4]= [             Tab,    ISO_Left_Tab,       Multi_key, ISO_Level5_Lock,        NoSymbol,        NoSymbol,        NoSymbol, ISO_Level5_Lock ]
+	};
+	key <AD01>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               q,               Q ],
+		symbols[Group2]= [ Cyrillic_shorti, Cyrillic_SHORTI ],
+		symbols[Group3]= [               q,               Q,        NoSymbol,        NoSymbol,        NoSymbol,     Greek_OMEGA,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               x,               X,        ellipsis,        Greek_xi,           Prior,           Prior,        Greek_XI,        NoSymbol ]
+	};
+	key <AD02>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               w,               W ],
+		symbols[Group2]= [    Cyrillic_tse,    Cyrillic_TSE ],
+		symbols[Group3]= [               w,               W,        NoSymbol,        NoSymbol,         lstroke,         Lstroke,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               v,               V,      underscore,        NoSymbol,       BackSpace,       BackSpace,         radical,        NoSymbol ]
+	};
+	key <AD03>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               e,               E ],
+		symbols[Group2]= [      Cyrillic_u,      Cyrillic_U ],
+		symbols[Group3]= [               e,               E,        NoSymbol,        NoSymbol,              oe,              OE,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               l,               L,     bracketleft,     Greek_lamda,              Up,              Up,     Greek_LAMDA,        NoSymbol ]
+	};
+	key <AD04>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               r,               R ],
+		symbols[Group2]= [     Cyrillic_ka,     Cyrillic_KA ],
+		symbols[Group3]= [               r,               R,        NoSymbol,        NoSymbol,       paragraph,      registered,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               c,               C,    bracketright,       Greek_chi,          Delete,          Delete,           U2102,        NoSymbol ]
+	};
+	key <AD05>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               t,               T ],
+		symbols[Group2]= [     Cyrillic_ie,     Cyrillic_IE ],
+		symbols[Group3]= [               t,               T,        NoSymbol,        NoSymbol,          tslash,          Tslash,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               w,               W,     asciicircum,     Greek_omega,            Next,            Next,     Greek_OMEGA,        NoSymbol ]
+	};
+	key <AD06>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               y,               Y ],
+		symbols[Group2]= [     Cyrillic_en,     Cyrillic_EN ],
+		symbols[Group3]= [               y,               Y,        NoSymbol,        NoSymbol,       leftarrow,             yen,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               k,               K,          exclam,     Greek_kappa,      exclamdown,        NoSymbol,        multiply,        NoSymbol ]
+	};
+	key <AD07>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               u,               U ],
+		symbols[Group2]= [    Cyrillic_ghe,    Cyrillic_GHE ],
+		symbols[Group3]= [               u,               U,        NoSymbol,        NoSymbol,       downarrow,         uparrow,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               h,               H,            less,       Greek_psi,            KP_7,            KP_7,       Greek_PSI,        NoSymbol ]
+	};
+	key <AD08>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               i,               I ],
+		symbols[Group2]= [    Cyrillic_sha,    Cyrillic_SHA ],
+		symbols[Group3]= [               i,               I,        NoSymbol,        NoSymbol,      rightarrow,        idotless,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               g,               G,         greater,     Greek_gamma,            KP_8,            KP_8,     Greek_GAMMA,        NoSymbol ]
+	};
+	key <AD09>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               o,               O ],
+		symbols[Group2]= [  Cyrillic_shcha,  Cyrillic_SHCHA ],
+		symbols[Group3]= [               o,               O,         section,        NoSymbol,          oslash,          Oslash,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               f,               F,           equal,       Greek_phi,            KP_9,            KP_9,       Greek_PHI,        NoSymbol ]
+	};
+	key <AD10>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               p,               P ],
+		symbols[Group2]= [     Cyrillic_ze,     Cyrillic_ZE ],
+		symbols[Group3]= [               p,               P,       paragraph,        NoSymbol,           thorn,           THORN,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               q,               Q,       ampersand,           U03D5,          KP_Add,          KP_Add,           U211A,        NoSymbol ]
+	};
+	key <AD11>               {
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [     bracketleft,       braceleft ],
+		symbols[Group2]= [     Cyrillic_ha,     Cyrillic_HA ],
+		symbols[Group3]= [ dead_circumflex,  dead_diaeresis,      dead_grave,        NoSymbol,        NoSymbol,  dead_abovering,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [          ssharp,           U1E9E,           U017F, Greek_finalsmallsigma,           U2212,        NoSymbol,             jot,        NoSymbol ]
+	};
+	key <AD12>               {
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [    bracketright,      braceright ],
+		symbols[Group2]= [ Cyrillic_hardsign, Cyrillic_HARDSIGN ],
+		symbols[Group3]= [        ccedilla,        Ccedilla,      asciitilde,        NoSymbol,      dead_tilde,     dead_macron,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [      dead_acute,      dead_tilde,     dead_stroke, dead_abovecomma, dead_doubleacute,        NoSymbol,      dead_breve,        NoSymbol ]
+	};
+	key <RTRN>               {	[          Return ] };
+	key <LCTL>               {	[       Control_L ] };
+	key <AC01>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               a,               A ],
+		symbols[Group2]= [     Cyrillic_ef,     Cyrillic_EF ],
+		symbols[Group3]= [               a,               A,        NoSymbol,        NoSymbol,              ae,              AE,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               u,               U,       backslash,        NoSymbol,            Home,            Home,      includedin,        NoSymbol ]
+	};
+	key <AC02>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               s,               S ],
+		symbols[Group2]= [   Cyrillic_yeru,   Cyrillic_YERU ],
+		symbols[Group3]= [               s,               S,        NoSymbol,        NoSymbol,          ssharp,         section,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               i,               I,           slash,      Greek_iota,            Left,            Left,        integral,        NoSymbol ]
+	};
+	key <AC03>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               d,               D ],
+		symbols[Group2]= [     Cyrillic_ve,     Cyrillic_VE ],
+		symbols[Group3]= [               d,               D,        NoSymbol,        NoSymbol,             eth,             ETH,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               a,               A,       braceleft,     Greek_alpha,            Down,            Down,           U2200,        NoSymbol ]
+	};
+	key <AC04>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               f,               F ],
+		symbols[Group2]= [      Cyrillic_a,      Cyrillic_A ],
+		symbols[Group3]= [               f,               F,        NoSymbol,        NoSymbol,        NoSymbol,     ordfeminine,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               e,               E,      braceright,   Greek_epsilon,           Right,           Right,           U2203,        NoSymbol ]
+	};
+	key <AC05>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               g,               G ],
+		symbols[Group2]= [     Cyrillic_pe,     Cyrillic_PE ],
+		symbols[Group3]= [               g,               G,        NoSymbol,        NoSymbol,             eng,             ENG,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               o,               O,        asterisk,   Greek_omicron,             End,             End,       elementof,        NoSymbol ]
+	};
+	key <AC06>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               h,               H ],
+		symbols[Group2]= [     Cyrillic_er,     Cyrillic_ER ],
+		symbols[Group3]= [               h,               H,        NoSymbol,        NoSymbol,         hstroke,         Hstroke,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               s,               S,        question,     Greek_sigma,    questiondown,        NoSymbol,     Greek_SIGMA,        NoSymbol ]
+	};
+	key <AC07>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               j,               J ],
+		symbols[Group2]= [      Cyrillic_o,      Cyrillic_O ],
+		symbols[Group3]= [               j,               J,        NoSymbol,        NoSymbol,           U0133,           U0132,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               n,               N,       parenleft,        Greek_nu,            KP_4,            KP_4,           U2115,        NoSymbol ]
+	};
+	key <AC08>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               k,               K ],
+		symbols[Group2]= [     Cyrillic_el,     Cyrillic_EL ],
+		symbols[Group3]= [               k,               K,        NoSymbol,        NoSymbol,             kra,        NoSymbol,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               r,               R,      parenright,       Greek_rho,            KP_5,            KP_5,           U211D,        NoSymbol ]
+	};
+	key <AC09>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               l,               L ],
+		symbols[Group2]= [     Cyrillic_de,     Cyrillic_DE ],
+		symbols[Group3]= [               l,               L,        NoSymbol,        NoSymbol,           U0140,           U013F,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               t,               T,           minus,       Greek_tau,            KP_6,            KP_6, partialderivative,        NoSymbol ]
+	};
+	key <AC10>               {
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [       semicolon,           colon ],
+		symbols[Group2]= [    Cyrillic_zhe,    Cyrillic_ZHE ],
+		symbols[Group3]= [       semicolon,           colon,          degree,        NoSymbol,      dead_acute, dead_doubleacute,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               d,               D,           colon,     Greek_delta,    KP_Separator,           comma,     Greek_DELTA,        NoSymbol ]
+	};
+	key <AC11>               {
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [      apostrophe,        quotedbl ],
+		symbols[Group2]= [      Cyrillic_e,      Cyrillic_E ],
+		symbols[Group3]= [          egrave,          Egrave,       braceleft,        NoSymbol,        NoSymbol,      dead_caron,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               y,               Y,              at,   Greek_upsilon,          period,      KP_Decimal,           nabla,        NoSymbol ]
+	};
+	key <TLDE>               {
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [           grave,      asciitilde ],
+		symbols[Group2]= [     Cyrillic_io,     Cyrillic_IO ],
+		symbols[Group3]= [           slash,       backslash,             bar,        NoSymbol,        NoSymbol,          hyphen,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [ dead_circumflex,      dead_caron,           U21BB,           U02DE,   dead_abovedot, Pointer_EnableKeys,   dead_belowdot,        NoSymbol ]
+	};
+	key <LFSH>               {
+		type[group4]= "TWO_LEVEL",
+		symbols[Group1]= [         Shift_L ],
+		symbols[Group2]= [         Shift_L ],
+		symbols[Group3]= [         Shift_L ],
+		symbols[Group4]= [         Shift_L,       Caps_Lock ]
+	};
+	key <BKSL>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "ONE_LEVEL",
+		symbols[Group1]= [       backslash,             bar ],
+		symbols[Group2]= [       backslash,           slash ],
+		symbols[Group3]= [          agrave,          Agrave,      braceright,        NoSymbol,        NoSymbol,      dead_breve,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [ ISO_Level3_Shift ]
+	};
+	key <AB01>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "FOUR_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               z,               Z ],
+		symbols[Group2]= [     Cyrillic_ya,     Cyrillic_YA ],
+		symbols[Group3]= [               z,               Z,   guillemotleft,        NoSymbol ],
+		symbols[Group4]= [      udiaeresis,      Udiaeresis,      numbersign,        NoSymbol,          Escape,          Escape,           union,        NoSymbol ]
+	};
+	key <AB02>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "FOUR_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               x,               X ],
+		symbols[Group2]= [    Cyrillic_che,    Cyrillic_CHE ],
+		symbols[Group3]= [               x,               X,  guillemotright,        NoSymbol ],
+		symbols[Group4]= [      odiaeresis,      Odiaeresis,          dollar,           U03F5,             Tab,             Tab,    intersection,        NoSymbol ]
+	};
+	key <AB03>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               c,               C ],
+		symbols[Group2]= [     Cyrillic_es,     Cyrillic_ES ],
+		symbols[Group3]= [               c,               C,        NoSymbol,        NoSymbol,            cent,       copyright,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [      adiaeresis,      Adiaeresis,             bar,       Greek_eta,          Insert,          Insert,           U2135,        NoSymbol ]
+	};
+	key <AB04>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               v,               V ],
+		symbols[Group2]= [     Cyrillic_em,     Cyrillic_EM ],
+		symbols[Group3]= [               v,               V,        NoSymbol,        NoSymbol, leftdoublequotemark, leftsinglequotemark,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               p,               P,      asciitilde,        Greek_pi,          Return,          Return,        Greek_PI,        NoSymbol ]
+	};
+	key <AB05>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               b,               B ],
+		symbols[Group2]= [      Cyrillic_i,      Cyrillic_I ],
+		symbols[Group3]= [               b,               B,        NoSymbol,        NoSymbol, rightdoublequotemark, rightsinglequotemark,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               z,               Z,           grave,      Greek_zeta,            Undo,            Undo,           U2124,        NoSymbol ]
+	};
+	key <AB06>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               n,               N ],
+		symbols[Group2]= [     Cyrillic_te,     Cyrillic_TE ],
+		symbols[Group3]= [               n,               N,        NoSymbol,        NoSymbol,           U0149,           U266A,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               b,               B,            plus,      Greek_beta,           colon,        NoSymbol,           U21D0,        NoSymbol ]
+	};
+	key <AB07>               {
+		type[group1]= "ALPHABETIC",
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [               m,               M ],
+		symbols[Group2]= [ Cyrillic_softsign, Cyrillic_SOFTSIGN ],
+		symbols[Group3]= [               m,               M,              mu,        NoSymbol,              mu,       masculine,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               m,               M,         percent,        Greek_mu,            KP_1,            KP_1,        ifonlyif,        NoSymbol ]
+	};
+	key <AB08>               {
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [           comma,            less ],
+		symbols[Group2]= [     Cyrillic_be,     Cyrillic_BE ],
+		symbols[Group3]= [           comma,      apostrophe,            less,        NoSymbol,  Greek_horizbar,        multiply,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [           comma,          endash,        quotedbl,           U03F1,            KP_2,            KP_2,           U21D2,        NoSymbol ]
+	};
+	key <AB09>               {
+		type[group2]= "ALPHABETIC",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [          period,         greater ],
+		symbols[Group2]= [     Cyrillic_yu,     Cyrillic_YU ],
+		symbols[Group3]= [          period,        quotedbl,         greater,        NoSymbol,  periodcentered,        division,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [          period, enfilledcircbullet,      apostrophe,           U03D1,            KP_3,            KP_3,           U21A6,        NoSymbol ]
+	};
+	key <AB10>               {
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		symbols[Group1]= [           slash,        question ],
+		symbols[Group2]= [          period,           comma ],
+		symbols[Group3]= [          eacute,          Eacute,      dead_acute,        NoSymbol,        NoSymbol,   dead_abovedot,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [               j,               J,       semicolon,     Greek_theta,       semicolon,        NoSymbol,     Greek_THETA,        NoSymbol ]
+	};
+	key <RTSH>               {
+		type[group4]= "TWO_LEVEL",
+		symbols[Group1]= [         Shift_R ],
+		symbols[Group2]= [         Shift_R ],
+		symbols[Group3]= [         Shift_R ],
+		symbols[Group4]= [         Shift_R,       Caps_Lock ]
+	};
+	key <KPMU>               {
+		type[group1]= "CTRL+ALT",
+		type[group2]= "CTRL+ALT",
+		type[group3]= "CTRL+ALT",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
+		symbols[Group2]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
+		symbols[Group3]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
+		symbols[Group4]= [     KP_Multiply,     KP_Multiply,           U2219,           U2299,        multiply,        NoSymbol,           U2297,        NoSymbol ]
+	};
+	key <LALT>               {	[           Alt_L,          Meta_L ] };
+	key <SPCE>               {
+		type[group3]= "FOUR_LEVEL",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [           space ],
+		symbols[Group2]= [           space ],
+		symbols[Group3]= [           space,           space,    nobreakspace,        NoSymbol ],
+		symbols[Group4]= [           space,           space,           space,    nobreakspace,            KP_0,            KP_0,           U202F,        NoSymbol ]
+	};
+	key <CAPS>               {
+		type= "ONE_LEVEL",
+		symbols[Group1]= [       Caps_Lock ],
+		symbols[Group2]= [       Caps_Lock ],
+		symbols[Group3]= [       Caps_Lock ],
+		symbols[Group4]= [ ISO_Level3_Shift ]
+	};
+	key <FK01>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
+	};
+	key <FK02>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
+	};
+	key <FK03>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
+	};
+	key <FK04>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
+	};
+	key <FK05>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
+	};
+	key <FK06>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [              F6,              F6,              F6,              F6, XF86Switch_VT_6 ]
+	};
+	key <FK07>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [              F7,              F7,              F7,              F7, XF86Switch_VT_7 ]
+	};
+	key <FK08>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [              F8,              F8,              F8,              F8, XF86Switch_VT_8 ]
+	};
+	key <FK09>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [              F9,              F9,              F9,              F9, XF86Switch_VT_9 ]
+	};
+	key <FK10>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [             F10,             F10,             F10,             F10, XF86Switch_VT_10 ]
+	};
+	key <NMLK>               {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [        Num_Lock ],
+		symbols[Group2]= [        Num_Lock ],
+		symbols[Group3]= [        Num_Lock ],
+		symbols[Group4]= [             Tab,    ISO_Left_Tab,           equal,        approxeq,        notequal, Pointer_EnableKeys,       identical,        NoSymbol ]
+	};
+	key <SCLK>               {	[     Scroll_Lock ] };
+	key <KP7>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [         KP_Home,            KP_7 ],
+		symbols[Group2]= [         KP_Home,            KP_7 ],
+		symbols[Group3]= [         KP_Home,            KP_7 ],
+		symbols[Group4]= [            KP_7,           U2714,           U2195,           U226A,         KP_Home,         KP_Home,         upstile,        NoSymbol ]
+	};
+	key <KP8>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [           KP_Up,            KP_8 ],
+		symbols[Group2]= [           KP_Up,            KP_8 ],
+		symbols[Group3]= [           KP_Up,            KP_8 ],
+		symbols[Group4]= [            KP_8,           U2718,         uparrow,    intersection,           KP_Up,           KP_Up,           U22C2,        NoSymbol ]
+	};
+	key <KP9>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [        KP_Prior,            KP_9 ],
+		symbols[Group2]= [        KP_Prior,            KP_9 ],
+		symbols[Group3]= [        KP_Prior,            KP_9 ],
+		symbols[Group4]= [            KP_9,          dagger,           U20D7,           U226B,        KP_Prior,        KP_Prior,           U2309,        NoSymbol ]
+	};
+	key <KPSU>               {
+		type[group1]= "CTRL+ALT",
+		type[group2]= "CTRL+ALT",
+		type[group3]= "CTRL+ALT",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
+		symbols[Group2]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
+		symbols[Group3]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
+		symbols[Group4]= [     KP_Subtract,     KP_Subtract,           U2212,           U2296,           U2216,        NoSymbol,           U2238,        NoSymbol ]
+	};
+	key <KP4>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [         KP_Left,            KP_4 ],
+		symbols[Group2]= [         KP_Left,            KP_4 ],
+		symbols[Group3]= [         KP_Left,            KP_4 ],
+		symbols[Group4]= [            KP_4,            club,       leftarrow,      includedin,         KP_Left,         KP_Left,           U2286,        NoSymbol ]
+	};
+	key <KP5>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [        KP_Begin,            KP_5 ],
+		symbols[Group2]= [        KP_Begin,            KP_5 ],
+		symbols[Group3]= [        KP_Begin,            KP_5 ],
+		symbols[Group4]= [            KP_5,        EuroSign,           colon,           U22B6,        KP_Begin,        KP_Begin,           U22B7,        NoSymbol ]
+	};
+	key <KP6>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [        KP_Right,            KP_6 ],
+		symbols[Group2]= [        KP_Right,            KP_6 ],
+		symbols[Group3]= [        KP_Right,            KP_6 ],
+		symbols[Group4]= [            KP_6,           U2023,      rightarrow,        includes,        KP_Right,        KP_Right,           U2287,        NoSymbol ]
+	};
+	key <KPAD>               {
+		type[group1]= "CTRL+ALT",
+		type[group2]= "CTRL+ALT",
+		type[group3]= "CTRL+ALT",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
+		symbols[Group2]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
+		symbols[Group3]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
+		symbols[Group4]= [          KP_Add,          KP_Add,       plusminus,           U2295,           U2213,        NoSymbol,           U2214,        NoSymbol ]
+	};
+	key <KP1>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [          KP_End,            KP_1 ],
+		symbols[Group2]= [          KP_End,            KP_1 ],
+		symbols[Group3]= [          KP_End,            KP_1 ],
+		symbols[Group4]= [            KP_1,         diamond,           U2194,   lessthanequal,          KP_End,          KP_End,       downstile,        NoSymbol ]
+	};
+	key <KP2>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [         KP_Down,            KP_2 ],
+		symbols[Group2]= [         KP_Down,            KP_2 ],
+		symbols[Group3]= [         KP_Down,            KP_2 ],
+		symbols[Group4]= [            KP_2,           heart,       downarrow,           union,         KP_Down,         KP_Down,           U22C3,        NoSymbol ]
+	};
+	key <KP3>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [         KP_Next,            KP_3 ],
+		symbols[Group2]= [         KP_Next,            KP_3 ],
+		symbols[Group3]= [         KP_Next,            KP_3 ],
+		symbols[Group4]= [            KP_3,           U2660,           U21CC, greaterthanequal,         KP_Next,         KP_Next,           U230B,        NoSymbol ]
+	};
+	key <KP0>                {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [       KP_Insert,            KP_0 ],
+		symbols[Group2]= [       KP_Insert,            KP_0 ],
+		symbols[Group3]= [       KP_Insert,            KP_0 ],
+		symbols[Group4]= [            KP_0,           U2423,         percent,           U2030,       KP_Insert,       KP_Insert,           U25A1,        NoSymbol ]
+	};
+	key <KPDL>               {
+		type[group2]= "KEYPAD",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [       KP_Delete,      KP_Decimal ],
+		symbols[Group2]= [       KP_Delete,    KP_Separator ],
+		symbols[Group3]= [       KP_Delete,      KP_Decimal ],
+		symbols[Group4]= [    KP_Separator,          period,           comma,         minutes,       KP_Delete,       KP_Delete,         seconds,        NoSymbol ]
+	};
+	key <LVL3>               {	[ ISO_Level3_Shift ] };
+	key <LSGT>               {
+		type[group1]= "FOUR_LEVEL",
+		type[group3]= "EIGHT_LEVEL_SEMIALPHABETIC",
+		type[group4]= "ONE_LEVEL",
+		symbols[Group1]= [            less,         greater,             bar,       brokenbar ],
+		symbols[Group2]= [           slash,             bar ],
+		symbols[Group3]= [          ugrave,          Ugrave,          degree,        NoSymbol,        NoSymbol,       brokenbar,        NoSymbol,        NoSymbol ],
+		symbols[Group4]= [ ISO_Level5_Shift ]
+	};
+	key <FK11>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
+	};
+	key <FK12>               {
+		type= "CTRL+ALT",
+		symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
+	};
+	key <KATA>               {	[        Katakana ] };
+	key <HIRA>               {	[        Hiragana ] };
+	key <HENK>               {	[     Henkan_Mode ] };
+	key <HKTG>               {	[ Hiragana_Katakana ] };
+	key <MUHE>               {	[        Muhenkan ] };
+	key <KPEN>               {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [        KP_Enter ],
+		symbols[Group2]= [        KP_Enter ],
+		symbols[Group3]= [        KP_Enter ],
+		symbols[Group4]= [        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        NoSymbol ]
+	};
+	key <RCTL>               {
+		type= "ONE_LEVEL",
+		symbols[Group1]= [       Control_R ],
+		symbols[Group2]= [       Control_R ],
+		symbols[Group3]= [ ISO_Level5_Shift ]
+	};
+	key <KPDV>               {
+		type[group1]= "CTRL+ALT",
+		type[group2]= "CTRL+ALT",
+		type[group3]= "CTRL+ALT",
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
+		symbols[Group2]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
+		symbols[Group3]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
+		symbols[Group4]= [       KP_Divide,       KP_Divide,        division,           U2300,           U2215,        NoSymbol,           U2223,        NoSymbol ]
+	};
+	key <PRSC>               {
+		type= "PC_ALT_LEVEL2",
+		symbols[Group1]= [           Print,         Sys_Req ]
+	};
+	key <RALT>               {
+		type[group1]= "TWO_LEVEL",
+		type[group2]= "TWO_LEVEL",
+		type[group3]= "ONE_LEVEL",
+		type[group4]= "ONE_LEVEL",
+		symbols[Group1]= [           Alt_R,          Meta_R ],
+		symbols[Group2]= [           Alt_R,          Meta_R ],
+		symbols[Group3]= [ ISO_Level3_Shift ],
+		symbols[Group4]= [ ISO_Level5_Shift ]
+	};
+	key <LNFD>               {	[        Linefeed ] };
+	key <HOME>               {	[            Home ] };
+	key <UP>                 {	[              Up ] };
+	key <PGUP>               {	[           Prior ] };
+	key <LEFT>               {	[            Left ] };
+	key <RGHT>               {	[           Right ] };
+	key <END>                {	[             End ] };
+	key <DOWN>               {	[            Down ] };
+	key <PGDN>               {	[            Next ] };
+	key <INS>                {	[          Insert ] };
+	key <DELE>               {	[          Delete ] };
+	key <MUTE>               {	[   XF86AudioMute ] };
+	key <VOL->               {	[ XF86AudioLowerVolume ] };
+	key <VOL+>               {	[ XF86AudioRaiseVolume ] };
+	key <POWR>               {	[    XF86PowerOff ] };
+	key <KPEQ>               {
+		type[group4]= "EIGHT_LEVEL",
+		symbols[Group1]= [        KP_Equal ],
+		symbols[Group2]= [        KP_Equal ],
+		symbols[Group3]= [        KP_Equal ],
+		symbols[Group4]= [        KP_Equal,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol ]
+	};
+	key <I126>               {	[       plusminus ] };
+	key <PAUS>               {
+		type= "PC_CONTROL_LEVEL2",
+		symbols[Group1]= [           Pause,           Break ]
+	};
+	key <I128>               {	[     XF86LaunchA ] };
+	key <I129>               {	[      KP_Decimal,      KP_Decimal ] };
+	key <HNGL>               {	[          Hangul ] };
+	key <HJCV>               {	[    Hangul_Hanja ] };
+	key <LWIN>               {	[         Super_L ] };
+	key <RWIN>               {	[         Super_R ] };
+	key <COMP>               {	[            Menu ] };
+	key <STOP>               {	[          Cancel ] };
+	key <AGAI>               {	[            Redo ] };
+	key <PROP>               {	[        SunProps ] };
+	key <UNDO>               {	[            Undo ] };
+	key <FRNT>               {	[        SunFront ] };
+	key <COPY>               {	[        XF86Copy ] };
+	key <OPEN>               {	[         SunOpen ] };
+	key <PAST>               {	[       XF86Paste ] };
+	key <FIND>               {	[            Find ] };
+	key <CUT>                {	[         XF86Cut ] };
+	key <HELP>               {	[            Help ] };
+	key <I147>               {	[      XF86MenuKB ] };
+	key <I148>               {	[  XF86Calculator ] };
+	key <I150>               {	[       XF86Sleep ] };
+	key <I151>               {	[      XF86WakeUp ] };
+	key <I152>               {	[    XF86Explorer ] };
+	key <I153>               {	[        XF86Send ] };
+	key <I155>               {	[        XF86Xfer ] };
+	key <I156>               {	[     XF86Launch1 ] };
+	key <I157>               {	[     XF86Launch2 ] };
+	key <I158>               {	[         XF86WWW ] };
+	key <I159>               {	[         XF86DOS ] };
+	key <I160>               {	[ XF86ScreenSaver ] };
+	key <I162>               {	[ XF86RotateWindows ] };
+	key <I163>               {	[        XF86Mail ] };
+	key <I164>               {	[   XF86Favorites ] };
+	key <I165>               {	[  XF86MyComputer ] };
+	key <I166>               {	[        XF86Back ] };
+	key <I167>               {	[     XF86Forward ] };
+	key <I169>               {	[       XF86Eject ] };
+	key <I170>               {	[       XF86Eject,       XF86Eject ] };
+	key <I171>               {	[   XF86AudioNext ] };
+	key <I172>               {	[   XF86AudioPlay,  XF86AudioPause ] };
+	key <I173>               {	[   XF86AudioPrev ] };
+	key <I174>               {	[   XF86AudioStop,       XF86Eject ] };
+	key <I175>               {	[ XF86AudioRecord ] };
+	key <I176>               {	[ XF86AudioRewind ] };
+	key <I177>               {	[       XF86Phone ] };
+	key <I179>               {	[       XF86Tools ] };
+	key <I180>               {	[    XF86HomePage ] };
+	key <I181>               {	[      XF86Reload ] };
+	key <I182>               {	[       XF86Close ] };
+	key <I185>               {	[    XF86ScrollUp ] };
+	key <I186>               {	[  XF86ScrollDown ] };
+	key <I187>               {	[       parenleft ] };
+	key <I188>               {	[      parenright ] };
+	key <I189>               {	[         XF86New ] };
+	key <I190>               {	[            Redo ] };
+	key <FK13>               {	[       XF86Tools ] };
+	key <FK14>               {	[     XF86Launch5 ] };
+	key <FK15>               {	[     XF86Launch6 ] };
+	key <FK16>               {	[     XF86Launch7 ] };
+	key <FK17>               {	[     XF86Launch8 ] };
+	key <FK18>               {	[     XF86Launch9 ] };
+	key <FK21>               {	[ XF86TouchpadToggle ] };
+	key <FK22>               {	[  XF86TouchpadOn ] };
+	key <FK23>               {	[ XF86TouchpadOff ] };
+	key <MDSW>               {	[     Mode_switch ] };
+	key <ALT>                {	[        NoSymbol,           Alt_L ] };
+	key <META>               {	[        NoSymbol,          Meta_L ] };
+	key <SUPR>               {	[        NoSymbol,         Super_L ] };
+	key <HYPR>               {	[        NoSymbol,         Hyper_L ] };
+	key <I208>               {	[   XF86AudioPlay ] };
+	key <I209>               {	[  XF86AudioPause ] };
+	key <I210>               {	[     XF86Launch3 ] };
+	key <I211>               {	[     XF86Launch4 ] };
+	key <I212>               {	[     XF86LaunchB ] };
+	key <I213>               {	[     XF86Suspend ] };
+	key <I214>               {	[       XF86Close ] };
+	key <I215>               {	[   XF86AudioPlay ] };
+	key <I216>               {	[ XF86AudioForward ] };
+	key <I218>               {	[           Print ] };
+	key <I220>               {	[      XF86WebCam ] };
+	key <I223>               {	[        XF86Mail ] };
+	key <I224>               {	[   XF86Messenger ] };
+	key <I225>               {	[      XF86Search ] };
+	key <I226>               {	[          XF86Go ] };
+	key <I227>               {	[     XF86Finance ] };
+	key <I228>               {	[        XF86Game ] };
+	key <I229>               {	[        XF86Shop ] };
+	key <I231>               {	[          Cancel ] };
+	key <I232>               {	[ XF86MonBrightnessDown ] };
+	key <I233>               {	[ XF86MonBrightnessUp ] };
+	key <I234>               {	[  XF86AudioMedia ] };
+	key <I235>               {	[     XF86Display ] };
+	key <I236>               {	[ XF86KbdLightOnOff ] };
+	key <I237>               {	[ XF86KbdBrightnessDown ] };
+	key <I238>               {	[ XF86KbdBrightnessUp ] };
+	key <I239>               {	[        XF86Send ] };
+	key <I240>               {	[       XF86Reply ] };
+	key <I241>               {	[ XF86MailForward ] };
+	key <I242>               {	[        XF86Save ] };
+	key <I243>               {	[   XF86Documents ] };
+	key <I244>               {	[     XF86Battery ] };
+	key <I245>               {	[   XF86Bluetooth ] };
+	key <I246>               {	[        XF86WLAN ] };
+	modifier_map Shift { <LFSH>, <RTSH> };
+	modifier_map Lock { <CAPS> };
+	modifier_map Control { <LCTL> };
+	modifier_map Mod1 { <LALT>, <RALT>, <META> };
+	modifier_map Mod2 { <NMLK> };
+	modifier_map Mod3 { <RCTL> };
+	modifier_map Mod4 { <LWIN>, <RWIN>, <SUPR>, <HYPR> };
+	modifier_map Mod5 { <LVL3>, <MDSW> };
+};
+
+};
diff --git a/data/keymaps/unbound-vmod.xkb b/data/keymaps/unbound-vmod.xkb
new file mode 100644
--- /dev/null
+++ b/data/keymaps/unbound-vmod.xkb
@@ -0,0 +1,1533 @@
+xkb_keymap {
+xkb_keycodes "evdev+aliases(qwertz)" {
+    minimum = 8;
+    maximum = 255;
+     <ESC> = 9;
+    <AE01> = 10;
+    <AE02> = 11;
+    <AE03> = 12;
+    <AE04> = 13;
+    <AE05> = 14;
+    <AE06> = 15;
+    <AE07> = 16;
+    <AE08> = 17;
+    <AE09> = 18;
+    <AE10> = 19;
+    <AE11> = 20;
+    <AE12> = 21;
+    <BKSP> = 22;
+     <TAB> = 23;
+    <AD01> = 24;
+    <AD02> = 25;
+    <AD03> = 26;
+    <AD04> = 27;
+    <AD05> = 28;
+    <AD06> = 29;
+    <AD07> = 30;
+    <AD08> = 31;
+    <AD09> = 32;
+    <AD10> = 33;
+    <AD11> = 34;
+    <AD12> = 35;
+    <RTRN> = 36;
+    <LCTL> = 37;
+    <AC01> = 38;
+    <AC02> = 39;
+    <AC03> = 40;
+    <AC04> = 41;
+    <AC05> = 42;
+    <AC06> = 43;
+    <AC07> = 44;
+    <AC08> = 45;
+    <AC09> = 46;
+    <AC10> = 47;
+    <AC11> = 48;
+    <TLDE> = 49;
+    <LFSH> = 50;
+    <BKSL> = 51;
+    <AB01> = 52;
+    <AB02> = 53;
+    <AB03> = 54;
+    <AB04> = 55;
+    <AB05> = 56;
+    <AB06> = 57;
+    <AB07> = 58;
+    <AB08> = 59;
+    <AB09> = 60;
+    <AB10> = 61;
+    <RTSH> = 62;
+    <KPMU> = 63;
+    <LALT> = 64;
+    <SPCE> = 65;
+    <CAPS> = 66;
+    <FK01> = 67;
+    <FK02> = 68;
+    <FK03> = 69;
+    <FK04> = 70;
+    <FK05> = 71;
+    <FK06> = 72;
+    <FK07> = 73;
+    <FK08> = 74;
+    <FK09> = 75;
+    <FK10> = 76;
+    <NMLK> = 77;
+    <SCLK> = 78;
+     <KP7> = 79;
+     <KP8> = 80;
+     <KP9> = 81;
+    <KPSU> = 82;
+     <KP4> = 83;
+     <KP5> = 84;
+     <KP6> = 85;
+    <KPAD> = 86;
+     <KP1> = 87;
+     <KP2> = 88;
+     <KP3> = 89;
+     <KP0> = 90;
+    <KPDL> = 91;
+    <LVL3> = 92;
+    <LSGT> = 94;
+    <FK11> = 95;
+    <FK12> = 96;
+    <AB11> = 97;
+    <KATA> = 98;
+    <HIRA> = 99;
+    <HENK> = 100;
+    <HKTG> = 101;
+    <MUHE> = 102;
+    <JPCM> = 103;
+    <KPEN> = 104;
+    <RCTL> = 105;
+    <KPDV> = 106;
+    <PRSC> = 107;
+    <RALT> = 108;
+    <LNFD> = 109;
+    <HOME> = 110;
+      <UP> = 111;
+    <PGUP> = 112;
+    <LEFT> = 113;
+    <RGHT> = 114;
+     <END> = 115;
+    <DOWN> = 116;
+    <PGDN> = 117;
+     <INS> = 118;
+    <DELE> = 119;
+    <I120> = 120;
+    <MUTE> = 121;
+    <VOL-> = 122;
+    <VOL+> = 123;
+    <POWR> = 124;
+    <KPEQ> = 125;
+    <I126> = 126;
+    <PAUS> = 127;
+    <I128> = 128;
+    <I129> = 129;
+    <HNGL> = 130;
+    <HJCV> = 131;
+    <AE13> = 132;
+    <LWIN> = 133;
+    <RWIN> = 134;
+    <COMP> = 135;
+    <STOP> = 136;
+    <AGAI> = 137;
+    <PROP> = 138;
+    <UNDO> = 139;
+    <FRNT> = 140;
+    <COPY> = 141;
+    <OPEN> = 142;
+    <PAST> = 143;
+    <FIND> = 144;
+     <CUT> = 145;
+    <HELP> = 146;
+    <I147> = 147;
+    <I148> = 148;
+    <I149> = 149;
+    <I150> = 150;
+    <I151> = 151;
+    <I152> = 152;
+    <I153> = 153;
+    <I154> = 154;
+    <I155> = 155;
+    <I156> = 156;
+    <I157> = 157;
+    <I158> = 158;
+    <I159> = 159;
+    <I160> = 160;
+    <I161> = 161;
+    <I162> = 162;
+    <I163> = 163;
+    <I164> = 164;
+    <I165> = 165;
+    <I166> = 166;
+    <I167> = 167;
+    <I168> = 168;
+    <I169> = 169;
+    <I170> = 170;
+    <I171> = 171;
+    <I172> = 172;
+    <I173> = 173;
+    <I174> = 174;
+    <I175> = 175;
+    <I176> = 176;
+    <I177> = 177;
+    <I178> = 178;
+    <I179> = 179;
+    <I180> = 180;
+    <I181> = 181;
+    <I182> = 182;
+    <I183> = 183;
+    <I184> = 184;
+    <I185> = 185;
+    <I186> = 186;
+    <I187> = 187;
+    <I188> = 188;
+    <I189> = 189;
+    <I190> = 190;
+    <FK13> = 191;
+    <FK14> = 192;
+    <FK15> = 193;
+    <FK16> = 194;
+    <FK17> = 195;
+    <FK18> = 196;
+    <FK19> = 197;
+    <FK20> = 198;
+    <FK21> = 199;
+    <FK22> = 200;
+    <FK23> = 201;
+    <FK24> = 202;
+    <MDSW> = 203;
+     <ALT> = 204;
+    <META> = 205;
+    <SUPR> = 206;
+    <HYPR> = 207;
+    <I208> = 208;
+    <I209> = 209;
+    <I210> = 210;
+    <I211> = 211;
+    <I212> = 212;
+    <I213> = 213;
+    <I214> = 214;
+    <I215> = 215;
+    <I216> = 216;
+    <I217> = 217;
+    <I218> = 218;
+    <I219> = 219;
+    <I220> = 220;
+    <I221> = 221;
+    <I222> = 222;
+    <I223> = 223;
+    <I224> = 224;
+    <I225> = 225;
+    <I226> = 226;
+    <I227> = 227;
+    <I228> = 228;
+    <I229> = 229;
+    <I230> = 230;
+    <I231> = 231;
+    <I232> = 232;
+    <I233> = 233;
+    <I234> = 234;
+    <I235> = 235;
+    <I236> = 236;
+    <I237> = 237;
+    <I238> = 238;
+    <I239> = 239;
+    <I240> = 240;
+    <I241> = 241;
+    <I242> = 242;
+    <I243> = 243;
+    <I244> = 244;
+    <I245> = 245;
+    <I246> = 246;
+    <I247> = 247;
+    <I248> = 248;
+    <I249> = 249;
+    <I250> = 250;
+    <I251> = 251;
+    <I252> = 252;
+    <I253> = 253;
+    indicator 1 = "Caps Lock";
+    indicator 2 = "Num Lock";
+    indicator 3 = "Scroll Lock";
+    indicator 4 = "Compose";
+    indicator 5 = "Kana";
+    indicator 6 = "Sleep";
+    indicator 7 = "Suspend";
+    indicator 8 = "Mute";
+    indicator 9 = "Misc";
+    indicator 10 = "Mail";
+    indicator 11 = "Charging";
+    virtual indicator 12 = "Shift Lock";
+    virtual indicator 13 = "Group 2";
+    virtual indicator 14 = "Mouse Keys";
+    alias <AC12> = <BKSL>;
+    alias <MENU> = <COMP>;
+    alias <HZTG> = <TLDE>;
+    alias <LMTA> = <LWIN>;
+    alias <RMTA> = <RWIN>;
+    alias <ALGR> = <RALT>;
+    alias <KPPT> = <I129>;
+    alias <LatQ> = <AD01>;
+    alias <LatW> = <AD02>;
+    alias <LatE> = <AD03>;
+    alias <LatR> = <AD04>;
+    alias <LatT> = <AD05>;
+    alias <LatZ> = <AD06>;
+    alias <LatU> = <AD07>;
+    alias <LatI> = <AD08>;
+    alias <LatO> = <AD09>;
+    alias <LatP> = <AD10>;
+    alias <LatA> = <AC01>;
+    alias <LatS> = <AC02>;
+    alias <LatD> = <AC03>;
+    alias <LatF> = <AC04>;
+    alias <LatG> = <AC05>;
+    alias <LatH> = <AC06>;
+    alias <LatJ> = <AC07>;
+    alias <LatK> = <AC08>;
+    alias <LatL> = <AC09>;
+    alias <LatY> = <AB01>;
+    alias <LatX> = <AB02>;
+    alias <LatC> = <AB03>;
+    alias <LatV> = <AB04>;
+    alias <LatB> = <AB05>;
+    alias <LatN> = <AB06>;
+    alias <LatM> = <AB07>;
+};
+
+xkb_types "complete" {
+
+    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+    type "ONE_LEVEL" {
+        modifiers= none;
+        level_name[Level1]= "Any";
+    };
+    type "TWO_LEVEL" {
+        modifiers= Shift;
+        map[Shift]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+    };
+    type "ALPHABETIC" {
+        modifiers= Shift+Lock;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Caps";
+    };
+    type "KEYPAD" {
+        modifiers= Shift+NumLock;
+        map[Shift]= Level2;
+        map[NumLock]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Number";
+    };
+    type "SHIFT+ALT" {
+        modifiers= Shift+Alt;
+        map[Shift+Alt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift+Alt";
+    };
+    type "PC_CONTROL_LEVEL2" {
+        modifiers= Control;
+        map[Control]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Control";
+    };
+    type "PC_LCONTROL_LEVEL2" {
+        modifiers= LControl;
+        map[LControl]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "LControl";
+    };
+    type "PC_RCONTROL_LEVEL2" {
+        modifiers= RControl;
+        map[RControl]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "RControl";
+    };
+    type "PC_ALT_LEVEL2" {
+        modifiers= Alt;
+        map[Alt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Alt";
+    };
+    type "PC_LALT_LEVEL2" {
+        modifiers= LAlt;
+        map[LAlt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "LAlt";
+    };
+    type "PC_RALT_LEVEL2" {
+        modifiers= RAlt;
+        map[RAlt]= Level2;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "RAlt";
+    };
+    type "CTRL+ALT" {
+        modifiers= Shift+Control+Alt+LevelThree;
+        map[Shift]= Level2;
+        preserve[Shift]= Shift;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        preserve[Shift+LevelThree]= Shift;
+        map[Control+Alt]= Level5;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "Ctrl+Alt";
+    };
+    type "LOCAL_EIGHT_LEVEL" {
+        modifiers= Shift+Lock+Control+LevelThree;
+        map[Shift+Lock]= Level1;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+Lock+LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level4;
+        map[Control]= Level5;
+        map[Shift+Lock+Control]= Level5;
+        map[Shift+Control]= Level6;
+        map[Lock+Control]= Level6;
+        map[Control+LevelThree]= Level7;
+        map[Shift+Lock+Control+LevelThree]= Level7;
+        map[Shift+Control+LevelThree]= Level8;
+        map[Lock+Control+LevelThree]= Level8;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Level3";
+        level_name[Level4]= "Shift Level3";
+        level_name[Level5]= "Ctrl";
+        level_name[Level6]= "Shift Ctrl";
+        level_name[Level7]= "Level3 Ctrl";
+        level_name[Level8]= "Shift Level3 Ctrl";
+    };
+    type "THREE_LEVEL" {
+        modifiers= Shift+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Level3";
+    };
+    type "EIGHT_LEVEL" {
+        modifiers= Shift+LevelThree+LevelFive;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[LevelFive]= Level5;
+        map[Shift+LevelFive]= Level6;
+        map[LevelThree+LevelFive]= Level7;
+        map[Shift+LevelThree+LevelFive]= Level8;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "X";
+        level_name[Level6]= "X Shift";
+        level_name[Level7]= "X Alt Base";
+        level_name[Level8]= "X Shift Alt";
+    };
+    type "EIGHT_LEVEL_ALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree+LevelFive;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level4;
+        map[Shift+Lock+LevelThree]= Level3;
+        map[LevelFive]= Level5;
+        map[Shift+LevelFive]= Level6;
+        map[Lock+LevelFive]= Level6;
+        map[LevelThree+LevelFive]= Level7;
+        map[Shift+LevelThree+LevelFive]= Level8;
+        map[Lock+LevelThree+LevelFive]= Level8;
+        map[Shift+Lock+LevelThree+LevelFive]= Level7;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "X";
+        level_name[Level6]= "X Shift";
+        level_name[Level7]= "X Alt Base";
+        level_name[Level8]= "X Shift Alt";
+    };
+    type "EIGHT_LEVEL_SEMIALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree+LevelFive;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level3;
+        preserve[Lock+LevelThree]= Lock;
+        map[Shift+Lock+LevelThree]= Level4;
+        preserve[Shift+Lock+LevelThree]= Lock;
+        map[LevelFive]= Level5;
+        map[Shift+LevelFive]= Level6;
+        map[Lock+LevelFive]= Level6;
+        preserve[Lock+LevelFive]= Lock;
+        map[Shift+Lock+LevelFive]= Level6;
+        preserve[Shift+Lock+LevelFive]= Lock;
+        map[LevelThree+LevelFive]= Level7;
+        map[Shift+LevelThree+LevelFive]= Level8;
+        map[Lock+LevelThree+LevelFive]= Level7;
+        preserve[Lock+LevelThree+LevelFive]= Lock;
+        map[Shift+Lock+LevelThree+LevelFive]= Level8;
+        preserve[Shift+Lock+LevelThree+LevelFive]= Lock;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "X";
+        level_name[Level6]= "X Shift";
+        level_name[Level7]= "X Alt Base";
+        level_name[Level8]= "X Shift Alt";
+    };
+    type "FOUR_LEVEL" {
+        modifiers= Shift+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_ALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level4;
+        map[Shift+Lock+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_SEMIALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level3;
+        preserve[Lock+LevelThree]= Lock;
+        map[Shift+Lock+LevelThree]= Level4;
+        preserve[Shift+Lock+LevelThree]= Lock;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_MIXED_KEYPAD" {
+        modifiers= Shift+NumLock+LevelThree;
+        map[Shift+NumLock]= Level1;
+        map[NumLock]= Level2;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[NumLock+LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Shift+NumLock+LevelThree]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Number";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+    };
+    type "FOUR_LEVEL_X" {
+        modifiers= Shift+Control+Alt+LevelThree;
+        map[LevelThree]= Level2;
+        map[Shift+LevelThree]= Level3;
+        map[Control+Alt]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Alt Base";
+        level_name[Level3]= "Shift Alt";
+        level_name[Level4]= "Ctrl+Alt";
+    };
+    type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[Lock]= Level4;
+        preserve[Lock]= Lock;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock+LevelThree]= Level3;
+        preserve[Lock+LevelThree]= Lock;
+        map[Shift+Lock+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "AltGr Base";
+        level_name[Level4]= "Shift AltGr";
+    };
+    type "FOUR_LEVEL_PLUS_LOCK" {
+        modifiers= Shift+Lock+LevelThree;
+        map[Shift]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[Lock]= Level5;
+        map[Shift+Lock]= Level2;
+        map[Lock+LevelThree]= Level3;
+        map[Shift+Lock+LevelThree]= Level4;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Shift";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Shift Alt";
+        level_name[Level5]= "Lock";
+    };
+    type "FOUR_LEVEL_KEYPAD" {
+        modifiers= Shift+NumLock+LevelThree;
+        map[Shift]= Level2;
+        map[NumLock]= Level2;
+        map[LevelThree]= Level3;
+        map[Shift+LevelThree]= Level4;
+        map[NumLock+LevelThree]= Level4;
+        map[Shift+NumLock+LevelThree]= Level3;
+        level_name[Level1]= "Base";
+        level_name[Level2]= "Number";
+        level_name[Level3]= "Alt Base";
+        level_name[Level4]= "Alt Number";
+    };
+};
+
+xkb_compatibility "complete" {
+
+    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
+
+    interpret.useModMapMods= AnyLevel;
+    interpret.repeat= False;
+    interpret.locking= False;
+    interpret ISO_Level2_Latch+Exactly(Shift) {
+        useModMapMods=level1;
+        action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
+    };
+    interpret Shift_Lock+AnyOf(Shift+Lock) {
+        action= LockMods(modifiers=Shift);
+    };
+    interpret Num_Lock+AnyOf(all) {
+        virtualModifier= NumLock;
+        action= LockMods(modifiers=NumLock);
+    };
+    interpret ISO_Level3_Shift+AnyOf(all) {
+        virtualModifier= LevelThree;
+        useModMapMods=level1;
+        action= SetMods(modifiers=LevelThree,clearLocks);
+    };
+    interpret ISO_Level3_Latch+AnyOf(all) {
+        virtualModifier= LevelThree;
+        useModMapMods=level1;
+        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+    };
+    interpret ISO_Level3_Lock+AnyOf(all) {
+        virtualModifier= LevelThree;
+        useModMapMods=level1;
+        action= LockMods(modifiers=LevelThree);
+    };
+    interpret Alt_L+AnyOf(all) {
+        virtualModifier= Alt;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Alt_R+AnyOf(all) {
+        virtualModifier= Alt;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Meta_L+AnyOf(all) {
+        virtualModifier= Meta;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Meta_R+AnyOf(all) {
+        virtualModifier= Meta;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Super_L+AnyOf(all) {
+        virtualModifier= Super;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Super_R+AnyOf(all) {
+        virtualModifier= Super;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Hyper_L+AnyOf(all) {
+        virtualModifier= Hyper;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Hyper_R+AnyOf(all) {
+        virtualModifier= Hyper;
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    interpret Scroll_Lock+AnyOf(all) {
+        virtualModifier= ScrollLock;
+        action= LockMods(modifiers=modMapMods);
+    };
+    interpret ISO_Level5_Shift+AnyOf(all) {
+        virtualModifier= LevelFive;
+        useModMapMods=level1;
+        action= SetMods(modifiers=LevelFive,clearLocks);
+    };
+    interpret ISO_Level5_Latch+AnyOf(all) {
+        virtualModifier= LevelFive;
+        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+    };
+    interpret ISO_Level5_Lock+AnyOf(all) {
+        virtualModifier= LevelFive;
+        action= LockMods(modifiers=LevelFive);
+    };
+    interpret Mode_switch+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= SetGroup(group=+1);
+    };
+    interpret ISO_Level3_Shift+AnyOfOrNone(all) {
+        action= SetMods(modifiers=LevelThree,clearLocks);
+    };
+    interpret ISO_Level3_Latch+AnyOfOrNone(all) {
+        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
+    };
+    interpret ISO_Level3_Lock+AnyOfOrNone(all) {
+        action= LockMods(modifiers=LevelThree);
+    };
+    interpret ISO_Group_Latch+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= LatchGroup(group=2);
+    };
+    interpret ISO_Next_Group+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= LockGroup(group=+1);
+    };
+    interpret ISO_Prev_Group+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= LockGroup(group=-1);
+    };
+    interpret ISO_First_Group+AnyOfOrNone(all) {
+        action= LockGroup(group=1);
+    };
+    interpret ISO_Last_Group+AnyOfOrNone(all) {
+        action= LockGroup(group=2);
+    };
+    interpret KP_1+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+1);
+    };
+    interpret KP_End+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+1);
+    };
+    interpret KP_2+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=+1);
+    };
+    interpret KP_Down+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=+1);
+    };
+    interpret KP_3+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+1);
+    };
+    interpret KP_Next+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+1);
+    };
+    interpret KP_4+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+0);
+    };
+    interpret KP_Left+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+0);
+    };
+    interpret KP_6+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+0);
+    };
+    interpret KP_Right+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+0);
+    };
+    interpret KP_7+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=-1);
+    };
+    interpret KP_Home+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=-1);
+    };
+    interpret KP_8+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=-1);
+    };
+    interpret KP_Up+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+0,y=-1);
+    };
+    interpret KP_9+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=-1);
+    };
+    interpret KP_Prior+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=-1);
+    };
+    interpret KP_5+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default);
+    };
+    interpret KP_Begin+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default);
+    };
+    interpret KP_F2+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=1);
+    };
+    interpret KP_Divide+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=1);
+    };
+    interpret KP_F3+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=2);
+    };
+    interpret KP_Multiply+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=2);
+    };
+    interpret KP_F4+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=3);
+    };
+    interpret KP_Subtract+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=3);
+    };
+    interpret KP_Separator+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default,count=2);
+    };
+    interpret KP_Add+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default,count=2);
+    };
+    interpret KP_0+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=lock);
+    };
+    interpret KP_Insert+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=lock);
+    };
+    interpret KP_Decimal+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=unlock);
+    };
+    interpret KP_Delete+AnyOfOrNone(all) {
+        repeat= True;
+        action= LockPtrBtn(button=default,affect=unlock);
+    };
+    interpret F25+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=1);
+    };
+    interpret F26+AnyOfOrNone(all) {
+        repeat= True;
+        action= SetPtrDflt(affect=button,button=2);
+    };
+    interpret F27+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=-1);
+    };
+    interpret F29+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=-1);
+    };
+    interpret F31+AnyOfOrNone(all) {
+        repeat= True;
+        action= PtrBtn(button=default);
+    };
+    interpret F33+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=-1,y=+1);
+    };
+    interpret F35+AnyOfOrNone(all) {
+        repeat= True;
+        action= MovePtr(x=+1,y=+1);
+    };
+    interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
+        action= PtrBtn(button=default);
+    };
+    interpret Pointer_Button1+AnyOfOrNone(all) {
+        action= PtrBtn(button=1);
+    };
+    interpret Pointer_Button2+AnyOfOrNone(all) {
+        action= PtrBtn(button=2);
+    };
+    interpret Pointer_Button3+AnyOfOrNone(all) {
+        action= PtrBtn(button=3);
+    };
+    interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
+        action= PtrBtn(button=default,count=2);
+    };
+    interpret Pointer_DblClick1+AnyOfOrNone(all) {
+        action= PtrBtn(button=1,count=2);
+    };
+    interpret Pointer_DblClick2+AnyOfOrNone(all) {
+        action= PtrBtn(button=2,count=2);
+    };
+    interpret Pointer_DblClick3+AnyOfOrNone(all) {
+        action= PtrBtn(button=3,count=2);
+    };
+    interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=default,affect=both);
+    };
+    interpret Pointer_Drag1+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=1,affect=both);
+    };
+    interpret Pointer_Drag2+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=2,affect=both);
+    };
+    interpret Pointer_Drag3+AnyOfOrNone(all) {
+        action= LockPtrBtn(button=3,affect=both);
+    };
+    interpret Pointer_EnableKeys+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeys);
+    };
+    interpret Pointer_Accelerate+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeysAccel);
+    };
+    interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
+        action= SetPtrDflt(affect=button,button=+1);
+    };
+    interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
+        action= SetPtrDflt(affect=button,button=-1);
+    };
+    interpret AccessX_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=AccessXKeys);
+    };
+    interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=AccessXFeedback);
+    };
+    interpret RepeatKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=RepeatKeys);
+    };
+    interpret SlowKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=SlowKeys);
+    };
+    interpret BounceKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=BounceKeys);
+    };
+    interpret StickyKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=StickyKeys);
+    };
+    interpret MouseKeys_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeys);
+    };
+    interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=MouseKeysAccel);
+    };
+    interpret Overlay1_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=Overlay1);
+    };
+    interpret Overlay2_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=Overlay2);
+    };
+    interpret AudibleBell_Enable+AnyOfOrNone(all) {
+        action= LockControls(controls=AudibleBell);
+    };
+    interpret Terminate_Server+AnyOfOrNone(all) {
+        action= Terminate();
+    };
+    interpret Alt_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Alt,clearLocks);
+    };
+    interpret Alt_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Alt,clearLocks);
+    };
+    interpret Meta_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Meta,clearLocks);
+    };
+    interpret Meta_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Meta,clearLocks);
+    };
+    interpret Super_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Super,clearLocks);
+    };
+    interpret Super_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Super,clearLocks);
+    };
+    interpret Hyper_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Hyper,clearLocks);
+    };
+    interpret Hyper_R+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Hyper,clearLocks);
+    };
+    interpret Shift_L+AnyOfOrNone(all) {
+        action= SetMods(modifiers=Shift,clearLocks);
+    };
+    interpret XF86Switch_VT_1+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=1,!same);
+    };
+    interpret XF86Switch_VT_2+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=2,!same);
+    };
+    interpret XF86Switch_VT_3+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=3,!same);
+    };
+    interpret XF86Switch_VT_4+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=4,!same);
+    };
+    interpret XF86Switch_VT_5+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=5,!same);
+    };
+    interpret XF86Switch_VT_6+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=6,!same);
+    };
+    interpret XF86Switch_VT_7+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=7,!same);
+    };
+    interpret XF86Switch_VT_8+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=8,!same);
+    };
+    interpret XF86Switch_VT_9+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=9,!same);
+    };
+    interpret XF86Switch_VT_10+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=10,!same);
+    };
+    interpret XF86Switch_VT_11+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=11,!same);
+    };
+    interpret XF86Switch_VT_12+AnyOfOrNone(all) {
+        repeat= True;
+        action= SwitchScreen(screen=12,!same);
+    };
+    interpret XF86LogGrabInfo+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);
+    };
+    interpret XF86LogWindowTree+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);
+    };
+    interpret XF86Next_VMode+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+    };
+    interpret XF86Prev_VMode+AnyOfOrNone(all) {
+        repeat= True;
+        action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
+    };
+    interpret ISO_Level5_Shift+AnyOfOrNone(all) {
+        action= SetMods(modifiers=LevelFive,clearLocks);
+    };
+    interpret ISO_Level5_Latch+AnyOfOrNone(all) {
+        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
+    };
+    interpret ISO_Level5_Lock+AnyOfOrNone(all) {
+        action= LockMods(modifiers=LevelFive);
+    };
+    interpret Caps_Lock+AnyOfOrNone(all) {
+        action= LockMods(modifiers=Lock);
+    };
+    interpret Any+Exactly(Lock) {
+        action= LockMods(modifiers=Lock);
+    };
+    interpret Any+AnyOf(all) {
+        action= SetMods(modifiers=modMapMods,clearLocks);
+    };
+    group 2 = AltGr;
+    group 3 = AltGr;
+    group 4 = AltGr;
+    indicator "Caps Lock" {
+        !allowExplicit;
+        whichModState= locked;
+        modifiers= Lock;
+    };
+    indicator "Num Lock" {
+        !allowExplicit;
+        whichModState= locked;
+        modifiers= NumLock;
+    };
+    indicator "Scroll Lock" {
+        whichModState= locked;
+        modifiers= ScrollLock;
+    };
+    indicator "Shift Lock" {
+        !allowExplicit;
+        whichModState= locked;
+        modifiers= Shift;
+    };
+    indicator "Group 2" {
+        !allowExplicit;
+        groups= 0xfe;
+    };
+    indicator "Mouse Keys" {
+        indicatorDrivesKeyboard;
+        controls= mouseKeys;
+    };
+};
+
+xkb_symbols "pc+de+inet(evdev)+group(menu_toggle)+ctrl(nocaps)" {
+
+    name[group1]="German";
+
+    key  <ESC> {         [          Escape ] };
+    key <AE01> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               1,          exclam,     onesuperior,      exclamdown ]
+    };
+    key <AE02> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               2,        quotedbl,     twosuperior,       oneeighth ]
+    };
+    key <AE03> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               3,         section,   threesuperior,        sterling ]
+    };
+    key <AE04> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               4,          dollar,      onequarter,        currency ]
+    };
+    key <AE05> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               5,         percent,         onehalf,    threeeighths ]
+    };
+    key <AE06> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               6,       ampersand,         notsign,     fiveeighths ]
+    };
+    key <AE07> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               7,           slash,       braceleft,    seveneighths ]
+    };
+    key <AE08> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               8,       parenleft,     bracketleft,       trademark ]
+    };
+    key <AE09> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               9,      parenright,    bracketright,       plusminus ]
+    };
+    key <AE10> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [               0,           equal,      braceright,          degree ]
+    };
+    key <AE11> {
+        type= "FOUR_LEVEL_PLUS_LOCK",
+        symbols[Group1]= [          ssharp,        question,       backslash,    questiondown,           U1E9E ]
+    };
+    key <AE12> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [      dead_acute,      dead_grave,    dead_cedilla,     dead_ogonek ]
+    };
+    key <BKSP> {         [       BackSpace,       BackSpace ] };
+    key  <TAB> {         [             Tab,    ISO_Left_Tab ] };
+    key <AD01> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               q,               Q,              at,     Greek_OMEGA ]
+    };
+    key <AD02> {
+        type= "FOUR_LEVEL_ALPHABETIC",
+        symbols[Group1]= [               w,               W,         lstroke,         Lstroke ]
+    };
+    key <AD03> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               e,               E,        EuroSign,        EuroSign ]
+    };
+    key <AD04> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               r,               R,       paragraph,      registered ]
+    };
+    key <AD05> {
+        type= "FOUR_LEVEL_ALPHABETIC",
+        symbols[Group1]= [               t,               T,          tslash,          Tslash ]
+    };
+    key <AD06> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               z,               Z,       leftarrow,             yen ]
+    };
+    key <AD07> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               u,               U,       downarrow,         uparrow ]
+    };
+    key <AD08> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               i,               I,      rightarrow,        idotless ]
+    };
+    key <AD09> {
+        type= "FOUR_LEVEL_ALPHABETIC",
+        symbols[Group1]= [               o,               O,          oslash,          Oslash ]
+    };
+    key <AD10> {
+        type= "FOUR_LEVEL_ALPHABETIC",
+        symbols[Group1]= [               p,               P,           thorn,           THORN ]
+    };
+    key <AD11> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [      udiaeresis,      Udiaeresis,  dead_diaeresis,  dead_abovering ]
+    };
+    key <AD12> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [            plus,        asterisk,      asciitilde,          macron ]
+    };
+    key <RTRN> {         [          Return ] };
+    key <LCTL> {         [       Control_L ] };
+    key <AC01> {
+        type= "FOUR_LEVEL_ALPHABETIC",
+        symbols[Group1]= [               a,               A,              ae,              AE ]
+    };
+    key <AC02> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               s,               S,           U017F,           U1E9E ]
+    };
+    key <AC03> {
+        type= "FOUR_LEVEL_ALPHABETIC",
+        symbols[Group1]= [               d,               D,             eth,             ETH ]
+    };
+    key <AC04> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               f,               F,         dstroke,     ordfeminine ]
+    };
+    key <AC05> {
+        type= "FOUR_LEVEL_ALPHABETIC",
+        symbols[Group1]= [               g,               G,             eng,             ENG ]
+    };
+    key <AC06> {
+        type= "FOUR_LEVEL_ALPHABETIC",
+        symbols[Group1]= [               h,               H,         hstroke,         Hstroke ]
+    };
+    key <AC07> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               j,               J,   dead_belowdot,   dead_abovedot ]
+    };
+    key <AC08> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               k,               K,             kra,       ampersand ]
+    };
+    key <AC09> {
+        type= "FOUR_LEVEL_ALPHABETIC",
+        symbols[Group1]= [               l,               L,         lstroke,         Lstroke ]
+    };
+    key <AC10> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [      odiaeresis,      Odiaeresis, dead_doubleacute,   dead_belowdot ]
+    };
+    key <AC11> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [      adiaeresis,      Adiaeresis, dead_circumflex,      dead_caron ]
+    };
+    key <TLDE> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [ dead_circumflex,          degree,           U2032,           U2033 ]
+    };
+    key <LFSH> {         [         Shift_L ] };
+    key <BKSL> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [      numbersign,      apostrophe, rightsinglequotemark,      dead_breve ]
+    };
+    key <AB01> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               y,               Y,  guillemotright,           U203A ]
+    };
+    key <AB02> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               x,               X,   guillemotleft,           U2039 ]
+    };
+    key <AB03> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               c,               C,            cent,       copyright ]
+    };
+    key <AB04> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               v,               V, doublelowquotemark, singlelowquotemark ]
+    };
+    key <AB05> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               b,               B, leftdoublequotemark, leftsinglequotemark ]
+    };
+    key <AB06> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               n,               N, rightdoublequotemark, rightsinglequotemark ]
+    };
+    key <AB07> {
+        type= "FOUR_LEVEL_SEMIALPHABETIC",
+        symbols[Group1]= [               m,               M,              mu,       masculine ]
+    };
+    key <AB08> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [           comma,       semicolon,  periodcentered,        multiply ]
+    };
+    key <AB09> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [          period,           colon,           U2026,        division ]
+    };
+    key <AB10> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [           minus,      underscore,          endash,          emdash ]
+    };
+    key <RTSH> {         [         Shift_R ] };
+    key <KPMU> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ]
+    };
+    key <LALT> {         [           Alt_L,          Meta_L ] };
+    key <SPCE> {         [           space ] };
+    key <CAPS> {         [       Control_L,       Control_L ] };
+    key <FK01> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
+    };
+    key <FK02> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
+    };
+    key <FK03> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
+    };
+    key <FK04> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
+    };
+    key <FK05> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
+    };
+    key <FK06> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F6,              F6,              F6,              F6, XF86Switch_VT_6 ]
+    };
+    key <FK07> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F7,              F7,              F7,              F7, XF86Switch_VT_7 ]
+    };
+    key <FK08> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F8,              F8,              F8,              F8, XF86Switch_VT_8 ]
+    };
+    key <FK09> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [              F9,              F9,              F9,              F9, XF86Switch_VT_9 ]
+    };
+    key <FK10> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [             F10,             F10,             F10,             F10, XF86Switch_VT_10 ]
+    };
+    key <NMLK> {         [        Num_Lock ] };
+    key <SCLK> {         [     Scroll_Lock ] };
+    key  <KP7> {         [         KP_Home,            KP_7 ] };
+    key  <KP8> {         [           KP_Up,            KP_8 ] };
+    key  <KP9> {         [        KP_Prior,            KP_9 ] };
+    key <KPSU> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ]
+    };
+    key  <KP4> {         [         KP_Left,            KP_4 ] };
+    key  <KP5> {         [        KP_Begin,            KP_5 ] };
+    key  <KP6> {         [        KP_Right,            KP_6 ] };
+    key <KPAD> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ]
+    };
+    key  <KP1> {         [          KP_End,            KP_1 ] };
+    key  <KP2> {         [         KP_Down,            KP_2 ] };
+    key  <KP3> {         [         KP_Next,            KP_3 ] };
+    key  <KP0> {         [       KP_Insert,            KP_0 ] };
+    key <KPDL> {
+        type= "KEYPAD",
+        symbols[Group1]= [       KP_Delete,    KP_Separator ]
+    };
+    key <LVL3> {
+        type= "ONE_LEVEL",
+        symbols[Group1]= [ ISO_Level3_Shift ],
+        actions[Group1]= [ SetMods(modifiers=LevelThree) ]
+    };
+    key <LSGT> {
+        type= "FOUR_LEVEL",
+        symbols[Group1]= [            less,         greater,             bar,       brokenbar ]
+    };
+    key <FK11> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
+    };
+    key <FK12> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
+    };
+    key <KATA> {         [        Katakana ] };
+    key <HIRA> {         [        Hiragana ] };
+    key <HENK> {         [     Henkan_Mode ] };
+    key <HKTG> {         [ Hiragana_Katakana ] };
+    key <MUHE> {         [        Muhenkan ] };
+    key <KPEN> {         [        KP_Enter ] };
+    key <RCTL> {         [       Control_R ] };
+    key <KPDV> {
+        type= "CTRL+ALT",
+        symbols[Group1]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ]
+    };
+    key <PRSC> {
+        type= "PC_ALT_LEVEL2",
+        symbols[Group1]= [           Print,         Sys_Req ]
+    };
+    key <RALT> {
+        type= "ONE_LEVEL",
+        symbols[Group1]= [ ISO_Level3_Shift ]
+    };
+    key <LNFD> {         [        Linefeed ] };
+    key <HOME> {         [            Home ] };
+    key   <UP> {         [              Up ] };
+    key <PGUP> {         [           Prior ] };
+    key <LEFT> {         [            Left ] };
+    key <RGHT> {         [           Right ] };
+    key  <END> {         [             End ] };
+    key <DOWN> {         [            Down ] };
+    key <PGDN> {         [            Next ] };
+    key  <INS> {         [          Insert ] };
+    key <DELE> {         [          Delete ] };
+    key <MUTE> {         [   XF86AudioMute ] };
+    key <VOL-> {         [ XF86AudioLowerVolume ] };
+    key <VOL+> {         [ XF86AudioRaiseVolume ] };
+    key <POWR> {         [    XF86PowerOff ] };
+    key <KPEQ> {         [        KP_Equal ] };
+    key <I126> {         [       plusminus ] };
+    key <PAUS> {
+        type= "PC_CONTROL_LEVEL2",
+        symbols[Group1]= [           Pause,           Break ]
+    };
+    key <I128> {         [     XF86LaunchA ] };
+    key <I129> {         [      KP_Decimal,      KP_Decimal ] };
+    key <HNGL> {         [          Hangul ] };
+    key <HJCV> {         [    Hangul_Hanja ] };
+    key <LWIN> {         [         Super_L ] };
+    key <RWIN> {         [         Super_R ] };
+    key <COMP> {         [  ISO_Next_Group,            Menu ] };
+    key <STOP> {         [          Cancel ] };
+    key <AGAI> {         [            Redo ] };
+    key <PROP> {         [        SunProps ] };
+    key <UNDO> {         [            Undo ] };
+    key <FRNT> {         [        SunFront ] };
+    key <COPY> {         [        XF86Copy ] };
+    key <OPEN> {         [        XF86Open ] };
+    key <PAST> {         [       XF86Paste ] };
+    key <FIND> {         [            Find ] };
+    key  <CUT> {         [         XF86Cut ] };
+    key <HELP> {         [            Help ] };
+    key <I147> {         [      XF86MenuKB ] };
+    key <I148> {         [  XF86Calculator ] };
+    key <I150> {         [       XF86Sleep ] };
+    key <I151> {         [      XF86WakeUp ] };
+    key <I152> {         [    XF86Explorer ] };
+    key <I153> {         [        XF86Send ] };
+    key <I155> {         [        XF86Xfer ] };
+    key <I156> {         [     XF86Launch1 ] };
+    key <I157> {         [     XF86Launch2 ] };
+    key <I158> {         [         XF86WWW ] };
+    key <I159> {         [         XF86DOS ] };
+    key <I160> {         [ XF86ScreenSaver ] };
+    key <I162> {         [ XF86RotateWindows ] };
+    key <I163> {         [        XF86Mail ] };
+    key <I164> {         [   XF86Favorites ] };
+    key <I165> {         [  XF86MyComputer ] };
+    key <I166> {         [        XF86Back ] };
+    key <I167> {         [     XF86Forward ] };
+    key <I169> {         [       XF86Eject ] };
+    key <I170> {         [       XF86Eject,       XF86Eject ] };
+    key <I171> {         [   XF86AudioNext ] };
+    key <I172> {         [   XF86AudioPlay,  XF86AudioPause ] };
+    key <I173> {         [   XF86AudioPrev ] };
+    key <I174> {         [   XF86AudioStop,       XF86Eject ] };
+    key <I175> {         [ XF86AudioRecord ] };
+    key <I176> {         [ XF86AudioRewind ] };
+    key <I177> {         [       XF86Phone ] };
+    key <I179> {         [       XF86Tools ] };
+    key <I180> {         [    XF86HomePage ] };
+    key <I181> {         [      XF86Reload ] };
+    key <I182> {         [       XF86Close ] };
+    key <I185> {         [    XF86ScrollUp ] };
+    key <I186> {         [  XF86ScrollDown ] };
+    key <I187> {         [       parenleft ] };
+    key <I188> {         [      parenright ] };
+    key <I189> {         [         XF86New ] };
+    key <I190> {         [            Redo ] };
+    key <FK13> {         [       XF86Tools ] };
+    key <FK14> {         [     XF86Launch5 ] };
+    key <FK15> {         [     XF86Launch6 ] };
+    key <FK16> {         [     XF86Launch7 ] };
+    key <FK17> {         [     XF86Launch8 ] };
+    key <FK18> {         [     XF86Launch9 ] };
+    key <FK21> {         [ XF86TouchpadToggle ] };
+    key <FK22> {         [  XF86TouchpadOn ] };
+    key <FK23> {         [ XF86TouchpadOff ] };
+    key <MDSW> {         [     Mode_switch ] };
+    key  <ALT> {         [        NoSymbol,           Alt_L ] };
+    key <META> {         [        NoSymbol,          Meta_L ] };
+    key <SUPR> {         [        NoSymbol,         Super_L ] };
+    key <HYPR> {         [        NoSymbol,         Hyper_L ] };
+    key <I208> {         [   XF86AudioPlay ] };
+    key <I209> {         [  XF86AudioPause ] };
+    key <I210> {         [     XF86Launch3 ] };
+    key <I211> {         [     XF86Launch4 ] };
+    key <I212> {         [     XF86LaunchB ] };
+    key <I213> {         [     XF86Suspend ] };
+    key <I214> {         [       XF86Close ] };
+    key <I215> {         [   XF86AudioPlay ] };
+    key <I216> {         [ XF86AudioForward ] };
+    key <I218> {         [           Print ] };
+    key <I220> {         [      XF86WebCam ] };
+    key <I223> {         [        XF86Mail ] };
+    key <I224> {         [   XF86Messenger ] };
+    key <I225> {         [      XF86Search ] };
+    key <I226> {         [          XF86Go ] };
+    key <I227> {         [     XF86Finance ] };
+    key <I228> {         [        XF86Game ] };
+    key <I229> {         [        XF86Shop ] };
+    key <I231> {         [          Cancel ] };
+    key <I232> {         [ XF86MonBrightnessDown ] };
+    key <I233> {         [ XF86MonBrightnessUp ] };
+    key <I234> {         [  XF86AudioMedia ] };
+    key <I235> {         [     XF86Display ] };
+    key <I236> {         [ XF86KbdLightOnOff ] };
+    key <I237> {         [ XF86KbdBrightnessDown ] };
+    key <I238> {         [ XF86KbdBrightnessUp ] };
+    key <I239> {         [        XF86Send ] };
+    key <I240> {         [       XF86Reply ] };
+    key <I241> {         [ XF86MailForward ] };
+    key <I242> {         [        XF86Save ] };
+    key <I243> {         [   XF86Documents ] };
+    key <I244> {         [     XF86Battery ] };
+    key <I245> {         [   XF86Bluetooth ] };
+    key <I246> {         [        XF86WLAN ] };
+    modifier_map Control { <LCTL> };
+    modifier_map Shift { <LFSH> };
+    modifier_map Shift { <RTSH> };
+    modifier_map Mod1 { <LALT> };
+    modifier_map Control { <CAPS> };
+    modifier_map Mod2 { <NMLK> };
+    modifier_map Mod5 { <LVL3> };
+    modifier_map Control { <RCTL> };
+    modifier_map Mod4 { <LWIN> };
+    modifier_map Mod4 { <RWIN> };
+    modifier_map Mod5 { <MDSW> };
+    modifier_map Mod1 { <META> };
+    modifier_map Mod4 { <SUPR> };
+    modifier_map Mod4 { <HYPR> };
+};
+
+};
diff --git a/data/rules/base b/data/rules/base
new file mode 100644
--- /dev/null
+++ b/data/rules/base
@@ -0,0 +1,1197 @@
+// DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.sh FROM rules/*.part
+//
+//  Rules for resolving XKB components for use with XFree86
+//  Copyright 1996 by Joseph Moss
+//
+//  2002 Modifier: Ivan Pascal      The XFree86 Project
+//
+
+// If you want non-latin layouts implicitly include the en_US layout
+// uncomment lines below
+//! $nonlatin = am ara ben bd bg bt by cs deva ge gh gr guj guru il \
+//              in ir iku jp kan kh kr la lao lk mk mm mn mv mal ori pk \
+//              ru scc sy syr tel th tj tam ua uz
+
+// PC models
+! $pcmodels = pc101 pc102 pc104 pc105
+
+// Microsoft models (using MS geometry)
+! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose
+
+// Nokia devices and keyboards
+! $nokiamodels = nokiasu8w nokiarx44 nokiarx51
+
+// PC geometries - they have special geometry but symbols are mostly pc105
+! $pcgeometries = latitude
+
+// TypeMatrix geometries
+! $tmgeometries = tm2020 tm2030PS2 tm2030USB tm2030USB-102 tm2030USB-106
+
+// Layouts that provide further specializations for the OLPC
+! $olpclayouts = af am ara br ca es et fr it kh kz in mn np ru th tr us 
+
+! $macbooks = macbook78 macbook79
+! $maclaptop = ibook powerbook macbook78 macbook79
+! $applealu = applealu_ansi applealu_iso applealu_jis
+! $macs = macintosh macintosh_old ibook powerbook macbook78 macbook79
+
+! $macvendorlayouts = ch de dk fi fr gb is it latam nl no pt se us
+
+! $azerty = be fr
+! $qwertz = al cz de hr hu ro si sk 
+
+! $inetkbds = acer_c300 acer_ferrari4k acer_laptop \
+              airkey \
+              apple armada azonaRF2300 \
+              benqx brother \
+              btc5113rf btc9000 btc9000a btc9001ah btc5090 btc9019u \
+              cherryblue cherrybluea cherryblueb \
+              cherrycyboard cherrycmexpert \
+              chicony chicony0108 chicony0420 chicony9885 \
+              compalfl90 \
+              compaqeak8 compaqik7 compaqik13 compaqik18 \
+              creativedw7000 \
+              cymotionlinux \
+              dell dellm65 inspiron dellusbmm \
+              emachines ennyah_dkb1008 evdev \
+              genius geniuscomfy2 \
+              gyration honeywell_euroboard \
+              hp250x hp5xx hp500fa hpdv5 \
+              hpi6 hpxe3gc hpxe3gf hpxe4xxx hpxt1000 hpzt11xx htcdream \
+              ibm_spacesaver ipaq inspiron intel \
+              logiaccess logicda logicink \
+              logiex110 logiclx300 \
+              logiinkse logiinkseusb logiitc logiik \
+              logitech_base itouch logiultrax \
+              logitech_g15 \
+              logidinovo logidinovoedge \
+              microsoft4000 microsoft7000 microsoftinet microsoftprousb microsoftprooem microsoftprose \
+              microsoftoffice microsoftmult \
+              mx1998 mx2500 mx2750 \
+              oretec \
+              pc105 \
+              presario propeller \
+              qtronix \
+              rapidaccess rapidaccess2 thinkpad60 \
+              samsung4500 samsung4510 \
+              silvercrest \
+              sk1300 sk2500 sk6200 sk7100 \
+              sven sven303 symplon \
+              toshiba_s3000 trust trustda \
+              unitekkb1925 yahoo
+
+// all layouts with 3rd and 4th groups
+! $threelevellayouts = al az \
+              be br bt \
+              ca ch cs cz \
+              de dk \
+              ee es \
+              fi fo fr \
+              gb gr \
+              hu \
+              ie ir is it \
+              latam \
+              lk lt \
+              mn mt \
+              nl no \
+              pl pt \
+              ro \
+              se sk \
+              tr \
+              us \
+              vn \
+              za
+
+! $evdevkbds = ibm_spacesaver
+
+! $thinkpads = thinkpad thinkpad60 thinkpadz60
+
+! $sun = sun_type6_jp sun_type6_usb sun_type6_euro_usb \
+         sun_type6_jp_usb sun_type6_unix_usb sun_type7_jp_usb \
+         sun_type7_usb sun_type7_euro_usb sun_type7_unix_usb
+
+! $sun_jp = sun_type6_jp sun_type6_jp_usb sun_type7_jp_usb
+
+// Sun Type_6_7 keyboards with custom layouts
+! $sun_custom = ara be br ca ch cz de dk \
+                ee es fi fr gb gr it jp \
+                kr lt lv nl no pl pt ro \
+                ru se sk tr tw ua us
+
+! $sun_var =  sun_type6 sun_type6_suncompat sun_type6_de sun_type6_fr \
+              sun_type7 sun_type7_suncompat suncompat
+
+! $sun_compat = sun_type6 sun_type6_suncompat sun_type7_suncompat suncompat
+
+! $htcdreamlayouts = us it de
+
+! $dvoraklayouts = br ca de ee es fr gb no pl se us
+
+! model		=	keycodes
+  amiga		=	amiga(de)
+  ataritt	=	ataritt(de)
+  empty         =       empty
+ $sun_jp	=	sun(type6_jp_usb)
+ $sun		=	sun(type6_usb)
+  pc98		=	xfree98(pc98)
+ $applealu	=	macintosh(alukbd)
+  macintosh_hhk	=	macintosh(hhk)
+  macintosh_old	=	macintosh(old)
+ $macs   	=	macintosh
+  thinkpadz60	=	xfree86(thinkpadz60)
+  *		=	xfree86
+
+! layout[1]	=	keycodes
+  $azerty       =       +aliases(azerty)
+  $qwertz       =       +aliases(qwertz)
+  *             =       +aliases(qwerty)
+
+! layout	=	keycodes
+  $azerty       =       +aliases(azerty)
+  $qwertz       =       +aliases(qwertz)
+  *             =       +aliases(qwerty)
+
+! option	=	keycodes
+
+! model		layout	=	geometry
+  thinkpad     us              =       thinkpad(us)
+
+! model		=	geometry
+  microsoftelite	=	microsoft(elite)
+ $msmodels	=	microsoft(natural)
+  dell101	=	dell(dell101)
+  dellm65	=	dell(dellm65)
+  latitude	=	dell(latitude)
+  flexpro	=	keytronic(FlexPro)
+  hp6000	=	hp(omnibook)
+  hpmini110	=	hp(mini110)
+  hpdv5		=	hp(dv5)
+  omnikey101	=	northgate(omnikey101)
+  sanwaskbkg3	=	sanwa(sanwaskbkg3)
+ $pcmodels	=	pc(%m)
+ $pcgeometries	=	pc(%m)
+  everex	=	everex(STEPnote)
+  thinkpad	=	thinkpad(intl)
+  thinkpad60	=	thinkpad(60)
+  thinkpadz60	=	thinkpad(60)
+ $tmgeometries	=	typematrix(%m)
+  winbook	=	winbook(XP5)
+  pc98		=	nec(pc98)
+ $applealu	=	macintosh(%m)
+ $macbooks      =       macintosh(%m)
+ $macs		=	macintosh(macintosh)
+  hhk		=	hhk(basic)
+  kinesis	=	kinesis(model100)
+ $nokiamodels	=	nokia(%m)
+  sun_type6_jp          =   sun(type6jp)
+  sun_type6_usb         =   sun(type6)
+  sun_type6_euro_usb    =   sun(type6tuv)
+  sun_type6_jp_usb      =   sun(type6jp)
+  sun_type6_unix_usb    =   sun(type6unix)
+  sun_type7_jp_usb      =   sun(type6jp)
+  sun_type7_usb         =   sun(type7)
+  sun_type7_euro_usb    =   sun(type7tuv)
+  sun_type7_unix_usb    =   sun(type7unix)
+  *		=       pc(pc104)
+
+! model		layout		variant		=	symbols
+  *		ben		basic		=	pc+in(ben)
+  *		ben		probhat		=	pc+in(ben_probhat)
+  *		dev		basic		=	pc+in(deva)
+  *		dvorak		$dvoraklayouts		=	pc+%v(dvorak)
+  *		dvorak		basic		=	pc+us(dvorak)
+  *		dvorak		pl_basic		=	pc+pl(dvorak)
+  *		dvorak		pl		=	pc+pl(dvorak_quotes)
+  *		dvorak		pl_altquotes		=	pc+pl(dvorak_altquotes)
+  *		dzdwi		basic		=	pc+bt(basic)
+  *		fi		basic		=	pc+fi(classic)
+  *		ge		azerty_tskapo		=	pc+fr(geo)
+  *		guj		basic		=	pc+in(guj)
+  *		gur		basic		=	pc+in(guru)
+  *		ie		laptop		=	pc+ie(basic)
+  *		ie		CloGaelachLaptop		=	pc+ie(CloGaelach)
+  *		in		urd		=	pc+in(urd-phonetic)
+  *		iu		basic		=	pc+ca(ike)
+  *		lo		basic		=	pc+la(basic)
+  *		kan		basic		=	pc+in(kan)
+  *		mal		basic		=	pc+in(mal)
+  *		mal		mlplusnum		=	pc+in(mal)
+  *		ogham		basic		=	pc+ie(ogam)
+  *		ogham		laptop		=	pc+ie(ogam)
+  *		ogham		is434		=	pc+ie(ogam_is434)
+  *		ogham		is434laptop		=	pc+ie(ogam_is434)
+  *		ori		basic		=	pc+in(ori)
+  *		ro		de		=	pc+ro(winkeys)
+  *		ro		us		=	pc+ro(std)
+  *		ro		academic		=	pc+ro(std)
+  *		ro		std_comma		=	pc+ro(std)
+  *		ro		comma		=	pc+ro(basic)
+  *		ru		os		=	pc+ru(os_legacy)
+  *		pk		urd		=	pc+pk(urd-phonetic)
+  *		sapmi		basic		=	pc+no(smi)
+  *		sapmi		nodeadkeys		=	pc+no(smi_nodeadkeys)
+  *		sapmi		sefi		=	pc+fi(smi)
+  *		sin		phonetic-static		=	pc+in(sin_phonetic)
+  *		syr		basic		=	pc+sy(syc)
+  *		syr		phonetic		=	pc+sy(syc_phonetic)
+  *		tam		INSCRIPT		=	pc+in(tam)
+  *		tam		UNI		=	pc+in(tam_unicode)
+  *		tam		NUMERAL-KEYBOARD		=	pc+in(tam_keyboard_with_numerals)
+  *		tam		TAB		=	pc+in(tam_TAB)
+  *		tam		TSCII		=	pc+in(tam_TSCII)
+  *		tel		basic		=	pc+in(tel)
+  *		yu		basic		=	pc+srp(latin)
+  *		yu		unicode		=	pc+srp(latinunicode)
+  *		yu		yz		=	pc+srp(latinyz)
+  *		yu		unicodeyz		=	pc+srp(latinunicodeyz)
+  classmate	us		intl		=	pc+us(classmate-intl)
+  classmate	us		alt-intl	=	pc+us(classmate-alt-intl)
+  classmate	us		altgr-intl	=	pc+us(classmate-altgr-intl)
+  nokiarx51	cz		qwerty		=	nokia_vndr/rx-51(cz_qwerty)
+  *			$sun_custom	$sun_var	=	pc+sun_vndr/%l%(v)
+
+! model		layout				=	symbols
+  *		ar			=	pc+ara
+  *		ben			=	pc+in(ben)
+  *		bs			=	pc+ba
+  *		cs			=	pc+rs
+  *		cz_qwerty			=	pc+cz(qwerty)
+  *		dev			=	pc+in(deva)
+  *		dvorak			=	pc+us(dvorak)
+  *		dzdwi			=	pc+bt
+  *		el			=	pc+gr
+  *		en_US			=	pc+latin
+  *		guj			=	pc+in(guj)
+  *		gur			=	pc+in(guru)
+  *		iu			=	pc+ca(ike)
+  *		lo			=	pc+la
+  *		kan			=	pc+in(kan)
+  *		mi			=	pc+mao
+  *		ogham			=	pc+ie(ogam)
+  *		ori			=	pc+ie(ori)
+  *		sapmi			=	pc+no(smi)
+  *		sr			=	pc+srp
+  *		syr			=	pc+sy(syc)
+  *		tel			=	pc+in(tel)
+  *		tml			=	pc+in(tam)
+  *		yu			=	pc+srp
+  *		fr-latin9			=	pc+fr(latin9)
+  *		us_intl			=	pc+us(alt-intl)
+  *		ben(basic)			=	pc+in(ben)
+  *		ben(probhat)			=	pc+in(ben_probhat)
+  *		dev(basic)			=	pc+in(deva)
+  *		dvorak($dvoraklayouts)			=	pc+%v(dvorak)
+  *		dvorak(basic)			=	pc+us(dvorak)
+  *		dvorak(pl_basic)			=	pc+pl(dvorak)
+  *		dvorak(pl)			=	pc+pl(dvorak_quotes)
+  *		dvorak(pl_altquotes)			=	pc+pl(dvorak_altquotes)
+  *		dzdwi(basic)			=	pc+bt(basic)
+  *		fi(basic)			=	pc+fi(classic)
+  *		ge(azerty_tskapo)			=	pc+fr(geo)
+  *		guj(basic)			=	pc+in(guj)
+  *		gur(basic)			=	pc+in(guru)
+  *		ie(laptop)			=	pc+ie(basic)
+  *		ie(CloGaelachLaptop)			=	pc+ie(CloGaelach)
+  *		in(urd)			=	pc+in(urd-phonetic)
+  *		iu(basic)			=	pc+ca(ike)
+  *		lo(basic)			=	pc+la(basic)
+  *		kan(basic)			=	pc+in(kan)
+  *		mal(basic)			=	pc+in(mal)
+  *		mal(mlplusnum)			=	pc+in(mal)
+  *		ogham(basic)			=	pc+ie(ogam)
+  *		ogham(laptop)			=	pc+ie(ogam)
+  *		ogham(is434)			=	pc+ie(ogam_is434)
+  *		ogham(is434laptop)			=	pc+ie(ogam_is434)
+  *		ori(basic)			=	pc+in(ori)
+  *		ro(de)			=	pc+ro(winkeys)
+  *		ro(us)			=	pc+ro(std)
+  *		ro(academic)			=	pc+ro(std)
+  *		ro(std_comma)			=	pc+ro(std)
+  *		ro(comma)			=	pc+ro(basic)
+  *		ru(os)			=	pc+ru(os_legacy)
+  *		pk(urd)			=	pc+pk(urd-phonetic)
+  *		sapmi(basic)			=	pc+no(smi)
+  *		sapmi(nodeadkeys)			=	pc+no(smi_nodeadkeys)
+  *		sapmi(sefi)			=	pc+fi(smi)
+  *		sin(phonetic-static)			=	pc+in(sin_phonetic)
+  *		syr(basic)			=	pc+sy(syc)
+  *		syr(phonetic)			=	pc+sy(syc_phonetic)
+  *		tam(INSCRIPT)			=	pc+in(tam)
+  *		tam(UNI)			=	pc+in(tam_unicode)
+  *		tam(NUMERAL-KEYBOARD)			=	pc+in(tam_keyboard_with_numerals)
+  *		tam(TAB)			=	pc+in(tam_TAB)
+  *		tam(TSCII)			=	pc+in(tam_TSCII)
+  *		tel(basic)			=	pc+in(tel)
+  *		yu(basic)			=	pc+srp(latin)
+  *		yu(unicode)			=	pc+srp(latinunicode)
+  *		yu(yz)			=	pc+srp(latinyz)
+  *		yu(unicodeyz)			=	pc+srp(latinunicodeyz)
+  ataritt	$nonlatin		=	xfree68_vndr/ataritt(us)+%l%(v):2
+  ataritt	*			=	xfree68_vndr/ataritt(us)+%l%(v)
+  amiga		$nonlatin		=	xfree68_vndr/amiga(usa1)+%l%(v):2
+  amiga		*			=	xfree68_vndr/amiga(usa1)+%l%(v)
+  classmate	us			=	pc+%l(classmate)
+  empty         *                       =       empty(basic)
+  *             empty                   =       empty(basic)
+ $sun		$sun_custom		=	pc+sun_vndr/%l%(v)
+  pc98		nec_vndr/jp		=	nec_vndr/jp(pc98)
+  macintosh_old	us			=	macintosh_vndr/us(oldmac)
+  macintosh_old	en_US			=	macintosh_vndr/us(oldmac)
+  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l%(v)
+  macintosh_old	$nonlatin		=	macintosh_vndr/us(oldmac)+%l%(v):2
+  macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l%(v)
+  applealu_jis	jp			=	macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)+macintosh_vndr/jp(mac):2
+  applealu_jis	*			=	macintosh_vndr/apple(alukbd)+%l%(v)+macintosh_vndr/jp(mac):2
+ $applealu	$macvendorlayouts	=	macintosh_vndr/apple(alukbd)+macintosh_vndr/%l%(v)
+ $applealu	*			=	macintosh_vndr/apple(alukbd)+%l%(v)
+ $macs		en_US			=	pc+macintosh_vndr/us(extended)
+ $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l%(v)
+  nokiarx44	*			=	nokia_vndr/rx-44(%l)
+  nokiarx51	cz(qwerty)		=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty)
+  nokiarx51	*			=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l%_v)
+  nokiasu8w	*			=	nokia_vndr/su-8w(%l)
+  olpc		$olpclayouts		=	olpc+%l%(m)
+  olpc		*			=	olpc+%l%(v)
+  olpcm		$olpclayouts		=	olpc+%l%(m)
+  olpcm		*			=	olpc+%l%(v)
+ $thinkpads   	br			=	pc+br(thinkpad)
+  sl-c3x00	*			=	pc+sharp_vndr/sl-c3x00(basic)
+  ws003sh	*			=	pc+sharp_vndr/ws003sh(basic)
+  ws007sh	*			=	pc+sharp_vndr/ws007sh(basic)
+  ws011sh	*			=	pc+sharp_vndr/ws011sh(basic)
+  ws020sh	*			=	pc+sharp_vndr/ws020sh(basic)
+  htcdream	$htcdreamlayouts	=	%l(htcdream)
+  *	   	$nonlatin		=	pc+us+%l%(v):2
+  *		*			=	pc+%l%(v)
+
+! model		layout[1]			=	symbols
+  *		ar			=	pc+ara%(v[1])
+  *		ben			=	pc+in(ben)
+  *		bs			=	pc+ba%(v[1])
+  *		cs			=	pc+rs%(v[1])
+  *		cz_qwerty			=	pc+cz(qwerty)
+  *		dev			=	pc+in(deva)
+  *		dvorak			=	pc+us(dvorak)
+  *		dzdwi			=	pc+bt%(v[1])
+  *		el			=	pc+gr%(v[1])
+  *		en_US			=	pc+latin%(v[1])
+  *		guj			=	pc+in(guj)
+  *		gur			=	pc+in(guru)
+  *		iu			=	pc+ca(ike)
+  *		lo			=	pc+la%(v[1])
+  *		kan			=	pc+in(kan)
+  *		mi			=	pc+mao%(v[1])
+  *		ogham			=	pc+ie(ogam)
+  *		ori			=	pc+ie(ori)
+  *		sapmi			=	pc+no(smi)
+  *		sr			=	pc+srp%(v[1])
+  *		syr			=	pc+sy(syc)
+  *		tel			=	pc+in(tel)
+  *		tml			=	pc+in(tam)
+  *		yu			=	pc+srp%(v[1])
+  *		fr-latin9			=	pc+fr(latin9)
+  *		us_intl			=	pc+us(alt-intl)
+  *		ben(basic)			=	pc+in(ben)
+  *		ben(probhat)			=	pc+in(ben_probhat)
+  *		dev(basic)			=	pc+in(deva)
+  *		dvorak($dvoraklayouts)			=	pc+%v(dvorak)
+  *		dvorak(basic)			=	pc+us(dvorak)
+  *		dvorak(pl_basic)			=	pc+pl(dvorak)
+  *		dvorak(pl)			=	pc+pl(dvorak_quotes)
+  *		dvorak(pl_altquotes)			=	pc+pl(dvorak_altquotes)
+  *		dzdwi(basic)			=	pc+bt(basic)
+  *		fi(basic)			=	pc+fi(classic)
+  *		ge(azerty_tskapo)			=	pc+fr(geo)
+  *		guj(basic)			=	pc+in(guj)
+  *		gur(basic)			=	pc+in(guru)
+  *		ie(laptop)			=	pc+ie(basic)
+  *		ie(CloGaelachLaptop)			=	pc+ie(CloGaelach)
+  *		in(urd)			=	pc+in(urd-phonetic)
+  *		iu(basic)			=	pc+ca(ike)
+  *		lo(basic)			=	pc+la(basic)
+  *		kan(basic)			=	pc+in(kan)
+  *		mal(basic)			=	pc+in(mal)
+  *		mal(mlplusnum)			=	pc+in(mal)
+  *		ogham(basic)			=	pc+ie(ogam)
+  *		ogham(laptop)			=	pc+ie(ogam)
+  *		ogham(is434)			=	pc+ie(ogam_is434)
+  *		ogham(is434laptop)			=	pc+ie(ogam_is434)
+  *		ori(basic)			=	pc+in(ori)
+  *		ro(de)			=	pc+ro(winkeys)
+  *		ro(us)			=	pc+ro(std)
+  *		ro(academic)			=	pc+ro(std)
+  *		ro(std_comma)			=	pc+ro(std)
+  *		ro(comma)			=	pc+ro(basic)
+  *		ru(os)			=	pc+ru(os_legacy)
+  *		pk(urd)			=	pc+pk(urd-phonetic)
+  *		sapmi(basic)			=	pc+no(smi)
+  *		sapmi(nodeadkeys)			=	pc+no(smi_nodeadkeys)
+  *		sapmi(sefi)			=	pc+fi(smi)
+  *		sin(phonetic-static)			=	pc+in(sin_phonetic)
+  *		syr(basic)			=	pc+sy(syc)
+  *		syr(phonetic)			=	pc+sy(syc_phonetic)
+  *		tam(INSCRIPT)			=	pc+in(tam)
+  *		tam(UNI)			=	pc+in(tam_unicode)
+  *		tam(NUMERAL-KEYBOARD)			=	pc+in(tam_keyboard_with_numerals)
+  *		tam(TAB)			=	pc+in(tam_TAB)
+  *		tam(TSCII)			=	pc+in(tam_TSCII)
+  *		tel(basic)			=	pc+in(tel)
+  *		yu(basic)			=	pc+srp(latin)
+  *		yu(unicode)			=	pc+srp(latinunicode)
+  *		yu(yz)			=	pc+srp(latinyz)
+  *		yu(unicodeyz)			=	pc+srp(latinunicodeyz)
+  ataritt	*			=	xfree68_vndr/ataritt(us)+%l[1]%(v[1])
+  amiga		*			=	xfree68_vndr/amiga(usa1)+%l[1]%(v[1])
+ $sun		$sun_custom	=	pc+sun_vndr/%l[1]%(v[1])
+  macintosh_old	us			=	macintosh_vndr/us(oldmac)
+  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l[1]%(v[1])
+  macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l[1]%(v[1])
+  applealu_jis	us			=	macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)
+ $applealu	$macvendorlayouts	=	macintosh_vndr/apple(alukbd)+macintosh_vndr/%l[1]%(v[1])
+ $applealu	*			=	macintosh_vndr/apple(alukbd)+%l[1]%(v[1])
+ $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l[1]%(v[1])
+  nokiarx51	cz(qwerty)		=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty)
+  nokiarx51	*			=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l[1]%_v[1])
+ $thinkpads	br			=	pc+%l[1](thinkpad)
+  *		*			=	pc+%l[1]%(v[1])
+
+! model		layout[1]	variant[1]	=	symbols
+  *		ben		basic		=	pc+in(ben)
+  *		ben		probhat		=	pc+in(ben_probhat)
+  *		dev		basic		=	pc+in(deva)
+  *		dvorak		$dvoraklayouts		=	pc+%v(dvorak)
+  *		dvorak		basic		=	pc+us(dvorak)
+  *		dvorak		pl_basic		=	pc+pl(dvorak)
+  *		dvorak		pl		=	pc+pl(dvorak_quotes)
+  *		dvorak		pl_altquotes		=	pc+pl(dvorak_altquotes)
+  *		dzdwi		basic		=	pc+bt(basic)
+  *		fi		basic		=	pc+fi(classic)
+  *		ge		azerty_tskapo		=	pc+fr(geo)
+  *		guj		basic		=	pc+in(guj)
+  *		gur		basic		=	pc+in(guru)
+  *		ie		laptop		=	pc+ie(basic)
+  *		ie		CloGaelachLaptop		=	pc+ie(CloGaelach)
+  *		in		urd		=	pc+in(urd-phonetic)
+  *		iu		basic		=	pc+ca(ike)
+  *		lo		basic		=	pc+la(basic)
+  *		kan		basic		=	pc+in(kan)
+  *		mal		basic		=	pc+in(mal)
+  *		mal		mlplusnum		=	pc+in(mal)
+  *		ogham		basic		=	pc+ie(ogam)
+  *		ogham		laptop		=	pc+ie(ogam)
+  *		ogham		is434		=	pc+ie(ogam_is434)
+  *		ogham		is434laptop		=	pc+ie(ogam_is434)
+  *		ori		basic		=	pc+in(ori)
+  *		ro		de		=	pc+ro(winkeys)
+  *		ro		us		=	pc+ro(std)
+  *		ro		academic		=	pc+ro(std)
+  *		ro		std_comma		=	pc+ro(std)
+  *		ro		comma		=	pc+ro(basic)
+  *		ru		os		=	pc+ru(os_legacy)
+  *		pk		urd		=	pc+pk(urd-phonetic)
+  *		sapmi		basic		=	pc+no(smi)
+  *		sapmi		nodeadkeys		=	pc+no(smi_nodeadkeys)
+  *		sapmi		sefi		=	pc+fi(smi)
+  *		sin		phonetic-static		=	pc+in(sin_phonetic)
+  *		syr		basic		=	pc+sy(syc)
+  *		syr		phonetic		=	pc+sy(syc_phonetic)
+  *		tam		INSCRIPT		=	pc+in(tam)
+  *		tam		UNI		=	pc+in(tam_unicode)
+  *		tam		NUMERAL-KEYBOARD		=	pc+in(tam_keyboard_with_numerals)
+  *		tam		TAB		=	pc+in(tam_TAB)
+  *		tam		TSCII		=	pc+in(tam_TSCII)
+  *		tel		basic		=	pc+in(tel)
+  *		yu		basic		=	pc+srp(latin)
+  *		yu		unicode		=	pc+srp(latinunicode)
+  *		yu		yz		=	pc+srp(latinyz)
+  *		yu		unicodeyz		=	pc+srp(latinunicodeyz)
+
+! model		layout[2]	=	symbols
+  *		ar		=	+ara%(v[2]):2
+  *		ben		=	+in(ben):2
+  *		bs		=	+ba%(v[2]):2
+  *		cs		=	+rs%(v[2]):2
+  *		cz_qwerty		=	+cz(qwerty):2
+  *		dev		=	+in(deva):2
+  *		dvorak		=	+us(dvorak):2
+  *		dzdwi		=	+bt%(v[2]):2
+  *		el		=	+gr%(v[2]):2
+  *		en_US		=	+latin%(v[2]):2
+  *		guj		=	+in(guj):2
+  *		gur		=	+in(guru):2
+  *		iu		=	+ca(ike):2
+  *		lo		=	+la%(v[2]):2
+  *		kan		=	+in(kan):2
+  *		mi		=	+mao%(v[2]):2
+  *		ogham		=	+ie(ogam):2
+  *		ori		=	+ie(ori):2
+  *		sapmi		=	+no(smi):2
+  *		sr		=	+srp%(v[2]):2
+  *		syr		=	+sy(syc):2
+  *		tel		=	+in(tel):2
+  *		tml		=	+in(tam):2
+  *		yu		=	+srp%(v[2]):2
+  *		fr-latin9		=	+fr(latin9):2
+  *		us_intl		=	+us(alt-intl):2
+  *		ben(basic)	=	+in(ben):2
+  *		ben(probhat)	=	+in(ben_probhat):2
+  *		dev(basic)	=	+in(deva):2
+  *		dvorak($dvoraklayouts)	=	+%v(dvorak):2
+  *		dvorak(basic)	=	+us(dvorak):2
+  *		dvorak(pl_basic)	=	+pl(dvorak):2
+  *		dvorak(pl)	=	+pl(dvorak_quotes):2
+  *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):2
+  *		dzdwi(basic)	=	+bt(basic):2
+  *		fi(basic)	=	+fi(classic):2
+  *		ge(azerty_tskapo)	=	+fr(geo):2
+  *		guj(basic)	=	+in(guj):2
+  *		gur(basic)	=	+in(guru):2
+  *		ie(laptop)	=	+ie(basic):2
+  *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):2
+  *		in(urd)	=	+in(urd-phonetic):2
+  *		iu(basic)	=	+ca(ike):2
+  *		lo(basic)	=	+la(basic):2
+  *		kan(basic)	=	+in(kan):2
+  *		mal(basic)	=	+in(mal):2
+  *		mal(mlplusnum)	=	+in(mal):2
+  *		ogham(basic)	=	+ie(ogam):2
+  *		ogham(laptop)	=	+ie(ogam):2
+  *		ogham(is434)	=	+ie(ogam_is434):2
+  *		ogham(is434laptop)	=	+ie(ogam_is434):2
+  *		ori(basic)	=	+in(ori):2
+  *		ro(de)	=	+ro(winkeys):2
+  *		ro(us)	=	+ro(std):2
+  *		ro(academic)	=	+ro(std):2
+  *		ro(std_comma)	=	+ro(std):2
+  *		ro(comma)	=	+ro(basic):2
+  *		ru(os)	=	+ru(os_legacy):2
+  *		pk(urd)	=	+pk(urd-phonetic):2
+  *		sapmi(basic)	=	+no(smi):2
+  *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):2
+  *		sapmi(sefi)	=	+fi(smi):2
+  *		sin(phonetic-static)	=	+in(sin_phonetic):2
+  *		syr(basic)	=	+sy(syc):2
+  *		syr(phonetic)	=	+sy(syc_phonetic):2
+  *		tam(INSCRIPT)	=	+in(tam):2
+  *		tam(UNI)	=	+in(tam_unicode):2
+  *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):2
+  *		tam(TAB)	=	+in(tam_TAB):2
+  *		tam(TSCII)	=	+in(tam_TSCII):2
+  *		tel(basic)	=	+in(tel):2
+  *		yu(basic)	=	+srp(latin):2
+  *		yu(unicode)	=	+srp(latinunicode):2
+  *		yu(yz)	=	+srp(latinyz):2
+  *		yu(unicodeyz)	=	+srp(latinunicodeyz):2
+  nokiarx51	cz(qwerty)	=	+nokia_vndr/rx-51(cz_qwerty):2
+  nokiarx51	*		=	+nokia_vndr/rx-51(%l[2]%_v[2]):2
+ $sun	$sun_custom	=	+sun_vndr/%l[2]%(v[2]):2
+  *		*		=	+%l[2]%(v[2]):2
+
+! model		layout[3]	=	symbols
+  *		ar		=	+ara%(v[3]):3
+  *		ben		=	+in(ben):3
+  *		bs		=	+ba%(v[3]):3
+  *		cs		=	+rs%(v[3]):3
+  *		cz_qwerty		=	+cz(qwerty):3
+  *		dev		=	+in(deva):3
+  *		dvorak		=	+us(dvorak):3
+  *		dzdwi		=	+bt%(v[3]):3
+  *		el		=	+gr%(v[3]):3
+  *		en_US		=	+latin%(v[3]):3
+  *		guj		=	+in(guj):3
+  *		gur		=	+in(guru):3
+  *		iu		=	+ca(ike):3
+  *		lo		=	+la%(v[3]):3
+  *		kan		=	+in(kan):3
+  *		mi		=	+mao%(v[3]):3
+  *		ogham		=	+ie(ogam):3
+  *		ori		=	+ie(ori):3
+  *		sapmi		=	+no(smi):3
+  *		sr		=	+srp%(v[3]):3
+  *		syr		=	+sy(syc):3
+  *		tel		=	+in(tel):3
+  *		tml		=	+in(tam):3
+  *		yu		=	+srp%(v[3]):3
+  *		fr-latin9		=	+fr(latin9):3
+  *		us_intl		=	+us(alt-intl):3
+  *		ben(basic)	=	+in(ben):3
+  *		ben(probhat)	=	+in(ben_probhat):3
+  *		dev(basic)	=	+in(deva):3
+  *		dvorak($dvoraklayouts)	=	+%v(dvorak):3
+  *		dvorak(basic)	=	+us(dvorak):3
+  *		dvorak(pl_basic)	=	+pl(dvorak):3
+  *		dvorak(pl)	=	+pl(dvorak_quotes):3
+  *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):3
+  *		dzdwi(basic)	=	+bt(basic):3
+  *		fi(basic)	=	+fi(classic):3
+  *		ge(azerty_tskapo)	=	+fr(geo):3
+  *		guj(basic)	=	+in(guj):3
+  *		gur(basic)	=	+in(guru):3
+  *		ie(laptop)	=	+ie(basic):3
+  *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):3
+  *		in(urd)	=	+in(urd-phonetic):3
+  *		iu(basic)	=	+ca(ike):3
+  *		lo(basic)	=	+la(basic):3
+  *		kan(basic)	=	+in(kan):3
+  *		mal(basic)	=	+in(mal):3
+  *		mal(mlplusnum)	=	+in(mal):3
+  *		ogham(basic)	=	+ie(ogam):3
+  *		ogham(laptop)	=	+ie(ogam):3
+  *		ogham(is434)	=	+ie(ogam_is434):3
+  *		ogham(is434laptop)	=	+ie(ogam_is434):3
+  *		ori(basic)	=	+in(ori):3
+  *		ro(de)	=	+ro(winkeys):3
+  *		ro(us)	=	+ro(std):3
+  *		ro(academic)	=	+ro(std):3
+  *		ro(std_comma)	=	+ro(std):3
+  *		ro(comma)	=	+ro(basic):3
+  *		ru(os)	=	+ru(os_legacy):3
+  *		pk(urd)	=	+pk(urd-phonetic):3
+  *		sapmi(basic)	=	+no(smi):3
+  *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):3
+  *		sapmi(sefi)	=	+fi(smi):3
+  *		sin(phonetic-static)	=	+in(sin_phonetic):3
+  *		syr(basic)	=	+sy(syc):3
+  *		syr(phonetic)	=	+sy(syc_phonetic):3
+  *		tam(INSCRIPT)	=	+in(tam):3
+  *		tam(UNI)	=	+in(tam_unicode):3
+  *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):3
+  *		tam(TAB)	=	+in(tam_TAB):3
+  *		tam(TSCII)	=	+in(tam_TSCII):3
+  *		tel(basic)	=	+in(tel):3
+  *		yu(basic)	=	+srp(latin):3
+  *		yu(unicode)	=	+srp(latinunicode):3
+  *		yu(yz)	=	+srp(latinyz):3
+  *		yu(unicodeyz)	=	+srp(latinunicodeyz):3
+  nokiarx51	cz(qwerty)	=	+nokia_vndr/rx-51(cz_qwerty):3
+  nokiarx51	*		=	+nokia_vndr/rx-51(%l[3]%_v[3]):3
+ $sun	$sun_custom	=	+sun_vndr/%l[3]%(v[3]):3
+  *		*		=	+%l[3]%(v[3]):3
+
+! model		layout[4]	=	symbols
+  *		ar		=	+ara%(v[4]):4
+  *		ben		=	+in(ben):4
+  *		bs		=	+ba%(v[4]):4
+  *		cs		=	+rs%(v[4]):4
+  *		cz_qwerty		=	+cz(qwerty):4
+  *		dev		=	+in(deva):4
+  *		dvorak		=	+us(dvorak):4
+  *		dzdwi		=	+bt%(v[4]):4
+  *		el		=	+gr%(v[4]):4
+  *		en_US		=	+latin%(v[4]):4
+  *		guj		=	+in(guj):4
+  *		gur		=	+in(guru):4
+  *		iu		=	+ca(ike):4
+  *		lo		=	+la%(v[4]):4
+  *		kan		=	+in(kan):4
+  *		mi		=	+mao%(v[4]):4
+  *		ogham		=	+ie(ogam):4
+  *		ori		=	+ie(ori):4
+  *		sapmi		=	+no(smi):4
+  *		sr		=	+srp%(v[4]):4
+  *		syr		=	+sy(syc):4
+  *		tel		=	+in(tel):4
+  *		tml		=	+in(tam):4
+  *		yu		=	+srp%(v[4]):4
+  *		fr-latin9		=	+fr(latin9):4
+  *		us_intl		=	+us(alt-intl):4
+  *		ben(basic)	=	+in(ben):4
+  *		ben(probhat)	=	+in(ben_probhat):4
+  *		dev(basic)	=	+in(deva):4
+  *		dvorak($dvoraklayouts)	=	+%v(dvorak):4
+  *		dvorak(basic)	=	+us(dvorak):4
+  *		dvorak(pl_basic)	=	+pl(dvorak):4
+  *		dvorak(pl)	=	+pl(dvorak_quotes):4
+  *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):4
+  *		dzdwi(basic)	=	+bt(basic):4
+  *		fi(basic)	=	+fi(classic):4
+  *		ge(azerty_tskapo)	=	+fr(geo):4
+  *		guj(basic)	=	+in(guj):4
+  *		gur(basic)	=	+in(guru):4
+  *		ie(laptop)	=	+ie(basic):4
+  *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):4
+  *		in(urd)	=	+in(urd-phonetic):4
+  *		iu(basic)	=	+ca(ike):4
+  *		lo(basic)	=	+la(basic):4
+  *		kan(basic)	=	+in(kan):4
+  *		mal(basic)	=	+in(mal):4
+  *		mal(mlplusnum)	=	+in(mal):4
+  *		ogham(basic)	=	+ie(ogam):4
+  *		ogham(laptop)	=	+ie(ogam):4
+  *		ogham(is434)	=	+ie(ogam_is434):4
+  *		ogham(is434laptop)	=	+ie(ogam_is434):4
+  *		ori(basic)	=	+in(ori):4
+  *		ro(de)	=	+ro(winkeys):4
+  *		ro(us)	=	+ro(std):4
+  *		ro(academic)	=	+ro(std):4
+  *		ro(std_comma)	=	+ro(std):4
+  *		ro(comma)	=	+ro(basic):4
+  *		ru(os)	=	+ru(os_legacy):4
+  *		pk(urd)	=	+pk(urd-phonetic):4
+  *		sapmi(basic)	=	+no(smi):4
+  *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):4
+  *		sapmi(sefi)	=	+fi(smi):4
+  *		sin(phonetic-static)	=	+in(sin_phonetic):4
+  *		syr(basic)	=	+sy(syc):4
+  *		syr(phonetic)	=	+sy(syc_phonetic):4
+  *		tam(INSCRIPT)	=	+in(tam):4
+  *		tam(UNI)	=	+in(tam_unicode):4
+  *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):4
+  *		tam(TAB)	=	+in(tam_TAB):4
+  *		tam(TSCII)	=	+in(tam_TSCII):4
+  *		tel(basic)	=	+in(tel):4
+  *		yu(basic)	=	+srp(latin):4
+  *		yu(unicode)	=	+srp(latinunicode):4
+  *		yu(yz)	=	+srp(latinyz):4
+  *		yu(unicodeyz)	=	+srp(latinunicodeyz):4
+  nokiarx51	cz(qwerty)	=	+nokia_vndr/rx-51(cz_qwerty):4
+  nokiarx51	*		=	+nokia_vndr/rx-51(%l[4]%_v[4]):4
+ $sun	$sun_custom	=	+sun_vndr/%l[4]%(v[4]):4
+  *		*		=	+%l[4]%(v[4]):4
+
+! model		layout[2]	variant[2]	=	symbols
+  *		ben		basic	=	+in(ben):2
+  *		ben		probhat	=	+in(ben_probhat):2
+  *		dev		basic	=	+in(deva):2
+  *		dvorak		$dvoraklayouts	=	+%v(dvorak):2
+  *		dvorak		basic	=	+us(dvorak):2
+  *		dvorak		pl_basic	=	+pl(dvorak):2
+  *		dvorak		pl	=	+pl(dvorak_quotes):2
+  *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):2
+  *		dzdwi		basic	=	+bt(basic):2
+  *		fi		basic	=	+fi(classic):2
+  *		ge		azerty_tskapo	=	+fr(geo):2
+  *		guj		basic	=	+in(guj):2
+  *		gur		basic	=	+in(guru):2
+  *		ie		laptop	=	+ie(basic):2
+  *		ie		CloGaelachLaptop	=	+ie(CloGaelach):2
+  *		in		urd	=	+in(urd-phonetic):2
+  *		iu		basic	=	+ca(ike):2
+  *		lo		basic	=	+la(basic):2
+  *		kan		basic	=	+in(kan):2
+  *		mal		basic	=	+in(mal):2
+  *		mal		mlplusnum	=	+in(mal):2
+  *		ogham		basic	=	+ie(ogam):2
+  *		ogham		laptop	=	+ie(ogam):2
+  *		ogham		is434	=	+ie(ogam_is434):2
+  *		ogham		is434laptop	=	+ie(ogam_is434):2
+  *		ori		basic	=	+in(ori):2
+  *		ro		de	=	+ro(winkeys):2
+  *		ro		us	=	+ro(std):2
+  *		ro		academic	=	+ro(std):2
+  *		ro		std_comma	=	+ro(std):2
+  *		ro		comma	=	+ro(basic):2
+  *		ru		os	=	+ru(os_legacy):2
+  *		pk		urd	=	+pk(urd-phonetic):2
+  *		sapmi		basic	=	+no(smi):2
+  *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):2
+  *		sapmi		sefi	=	+fi(smi):2
+  *		sin		phonetic-static	=	+in(sin_phonetic):2
+  *		syr		basic	=	+sy(syc):2
+  *		syr		phonetic	=	+sy(syc_phonetic):2
+  *		tam		INSCRIPT	=	+in(tam):2
+  *		tam		UNI	=	+in(tam_unicode):2
+  *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):2
+  *		tam		TAB	=	+in(tam_TAB):2
+  *		tam		TSCII	=	+in(tam_TSCII):2
+  *		tel		basic	=	+in(tel):2
+  *		yu		basic	=	+srp(latin):2
+  *		yu		unicode	=	+srp(latinunicode):2
+  *		yu		yz	=	+srp(latinyz):2
+  *		yu		unicodeyz	=	+srp(latinunicodeyz):2
+
+! model		layout[3]	variant[3]	=	symbols
+  *		ben		basic	=	+in(ben):3
+  *		ben		probhat	=	+in(ben_probhat):3
+  *		dev		basic	=	+in(deva):3
+  *		dvorak		$dvoraklayouts	=	+%v(dvorak):3
+  *		dvorak		basic	=	+us(dvorak):3
+  *		dvorak		pl_basic	=	+pl(dvorak):3
+  *		dvorak		pl	=	+pl(dvorak_quotes):3
+  *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):3
+  *		dzdwi		basic	=	+bt(basic):3
+  *		fi		basic	=	+fi(classic):3
+  *		ge		azerty_tskapo	=	+fr(geo):3
+  *		guj		basic	=	+in(guj):3
+  *		gur		basic	=	+in(guru):3
+  *		ie		laptop	=	+ie(basic):3
+  *		ie		CloGaelachLaptop	=	+ie(CloGaelach):3
+  *		in		urd	=	+in(urd-phonetic):3
+  *		iu		basic	=	+ca(ike):3
+  *		lo		basic	=	+la(basic):3
+  *		kan		basic	=	+in(kan):3
+  *		mal		basic	=	+in(mal):3
+  *		mal		mlplusnum	=	+in(mal):3
+  *		ogham		basic	=	+ie(ogam):3
+  *		ogham		laptop	=	+ie(ogam):3
+  *		ogham		is434	=	+ie(ogam_is434):3
+  *		ogham		is434laptop	=	+ie(ogam_is434):3
+  *		ori		basic	=	+in(ori):3
+  *		ro		de	=	+ro(winkeys):3
+  *		ro		us	=	+ro(std):3
+  *		ro		academic	=	+ro(std):3
+  *		ro		std_comma	=	+ro(std):3
+  *		ro		comma	=	+ro(basic):3
+  *		ru		os	=	+ru(os_legacy):3
+  *		pk		urd	=	+pk(urd-phonetic):3
+  *		sapmi		basic	=	+no(smi):3
+  *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):3
+  *		sapmi		sefi	=	+fi(smi):3
+  *		sin		phonetic-static	=	+in(sin_phonetic):3
+  *		syr		basic	=	+sy(syc):3
+  *		syr		phonetic	=	+sy(syc_phonetic):3
+  *		tam		INSCRIPT	=	+in(tam):3
+  *		tam		UNI	=	+in(tam_unicode):3
+  *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):3
+  *		tam		TAB	=	+in(tam_TAB):3
+  *		tam		TSCII	=	+in(tam_TSCII):3
+  *		tel		basic	=	+in(tel):3
+  *		yu		basic	=	+srp(latin):3
+  *		yu		unicode	=	+srp(latinunicode):3
+  *		yu		yz	=	+srp(latinyz):3
+  *		yu		unicodeyz	=	+srp(latinunicodeyz):3
+
+! model		layout[4]	variant[4]	=	symbols
+  *		ben		basic	=	+in(ben):4
+  *		ben		probhat	=	+in(ben_probhat):4
+  *		dev		basic	=	+in(deva):4
+  *		dvorak		$dvoraklayouts	=	+%v(dvorak):4
+  *		dvorak		basic	=	+us(dvorak):4
+  *		dvorak		pl_basic	=	+pl(dvorak):4
+  *		dvorak		pl	=	+pl(dvorak_quotes):4
+  *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):4
+  *		dzdwi		basic	=	+bt(basic):4
+  *		fi		basic	=	+fi(classic):4
+  *		ge		azerty_tskapo	=	+fr(geo):4
+  *		guj		basic	=	+in(guj):4
+  *		gur		basic	=	+in(guru):4
+  *		ie		laptop	=	+ie(basic):4
+  *		ie		CloGaelachLaptop	=	+ie(CloGaelach):4
+  *		in		urd	=	+in(urd-phonetic):4
+  *		iu		basic	=	+ca(ike):4
+  *		lo		basic	=	+la(basic):4
+  *		kan		basic	=	+in(kan):4
+  *		mal		basic	=	+in(mal):4
+  *		mal		mlplusnum	=	+in(mal):4
+  *		ogham		basic	=	+ie(ogam):4
+  *		ogham		laptop	=	+ie(ogam):4
+  *		ogham		is434	=	+ie(ogam_is434):4
+  *		ogham		is434laptop	=	+ie(ogam_is434):4
+  *		ori		basic	=	+in(ori):4
+  *		ro		de	=	+ro(winkeys):4
+  *		ro		us	=	+ro(std):4
+  *		ro		academic	=	+ro(std):4
+  *		ro		std_comma	=	+ro(std):4
+  *		ro		comma	=	+ro(basic):4
+  *		ru		os	=	+ru(os_legacy):4
+  *		pk		urd	=	+pk(urd-phonetic):4
+  *		sapmi		basic	=	+no(smi):4
+  *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):4
+  *		sapmi		sefi	=	+fi(smi):4
+  *		sin		phonetic-static	=	+in(sin_phonetic):4
+  *		syr		basic	=	+sy(syc):4
+  *		syr		phonetic	=	+sy(syc_phonetic):4
+  *		tam		INSCRIPT	=	+in(tam):4
+  *		tam		UNI	=	+in(tam_unicode):4
+  *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):4
+  *		tam		TAB	=	+in(tam_TAB):4
+  *		tam		TSCII	=	+in(tam_TSCII):4
+  *		tel		basic	=	+in(tel):4
+  *		yu		basic	=	+srp(latin):4
+  *		yu		unicode	=	+srp(latinunicode):4
+  *		yu		yz	=	+srp(latinyz):4
+  *		yu		unicodeyz	=	+srp(latinunicodeyz):4
+
+! model		=	symbols
+  a4techKB21    =       +inet(media_nav_common)
+  a4techKBS8    =       +inet(media_nav_acpi_common)
+  a4_rfkb23     =       +inet(media_nav_acpi_common)
+  asus_laptop   =       +inet(media_common)
+  acer_tm_800   =       +inet(acer_laptop)
+  benqx730      =       +inet(benqx)
+  benqx800      =       +inet(benqx)
+  btc5126t      =       +inet(nav_acpi_common)
+  btc9116u      =       +inet(btc9019u)
+  btc6301urf    =       +inet(media_nav_acpi_common)
+  dellsk8125    =       +inet(dell)
+  dellsk8135    =       +inet(dell)
+  cherrybunlim  =       +inet(nav_common)
+  dexxa         =       +inet(media_nav_common)
+  dtk2000       =       +inet(media_nav_acpi_common)
+  fscaa1667g    =       +inet(media_nav_common)
+  geniuskb19e   =       +inet(media_nav_acpi_common)
+  geniuscomfy   =       +inet(media_nav_acpi_common)
+  geniuskkb2050hs =     +inet(dellusbmm)
+  hpnx9020      =       +inet(hpi6)
+  latitude      =       +inet(media_common)
+  logicd        =       +inet(logitech_base)
+  logicd_it     =       +inet(logitech_base)
+  logicd_nav    =       +inet(logitech_base)
+  logicd_opt    =       +inet(logitech_base)
+  logiultrax    =       +inet(logitech_base)
+  logiclx300    =       +inet(logiex110)
+  logii350      =       +inet(logiex110)
+  logimel       =       +inet(logiex110)
+  logicdit      =       +inet(logicd)
+  logicdo       =       +inet(logicd)
+  logicdp       =       +inet(logicd)
+  logicdpa      =       +inet(logicda)
+  logiciink     =       +inet(logicink)
+  ltcd          =       +inet(logicda)
+  microsoftccurve2k =   +inet(microsoftprooem)
+  microsoftpro  =       +inet(media_nav_acpi_common)
+  precision_m   =       +inet(media_nav_common)
+  scorpius      =       +inet(media_nav_acpi_common)
+  sp_inet       =       +inet(media_nav_acpi_common)
+  targa_v811    =       +inet(media_nav_acpi_common)
+  thinkpad      =       +inet(media_nav_common)
+  thinkpadz60   =       +inet(thinkpad60)
+  tm2030USB-102 =       +inet(media_nav_acpi_common)
+  tm2030USB-106 =       +inet(media_nav_acpi_common)
+  trust_slimline =      +inet(media_nav_acpi_common)
+  vsonku306     =       +inet(microsoftprooem)
+  $inetkbds     =       +inet(%m)
+  $maclaptop    =       +inet(apple)+level3(enter_switch)
+  $applealu     =       +inet(apple)
+  $macs	        =       +inet(apple)
+  sun_type7_jp_usb	=	+sun_vndr/solaris(defaults_type7jp)
+  $sun			=		+sun_vndr/solaris(defaults)
+
+! layout	variant		=	compat
+  de		neo			=	+caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock)
+  jp        $sun_compat =   complete+japan(kana_lock)
+
+! layout[1]	variant[1]	=	compat
+  de		neo			=	+caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock)
+  jp       $sun_compat =   complete+japan(kana_lock)
+
+! layout[2]	variant[2]	=	compat
+  de		neo			=	+caps(caps_lock):2+misc(assign_shift_left_action):2+level5(level5_lock):2
+  jp       $sun_compat  =   +complete+japan(kana_lock):2
+
+! layout[3]	variant[3]	=	compat
+  de		neo			=	+caps(caps_lock):3+misc(assign_shift_left_action):3+level5(level5_lock):3
+  jp       $sun_compat  =   +complete+japan(kana_lock):3
+
+! layout[4]	variant[4]	=	compat
+  de		neo			=	+caps(caps_lock):4+misc(assign_shift_left_action):4+level5(level5_lock):4
+  jp       $sun_compat  =   +complete+japan(kana_lock):4
+
+! model		layout		=	compat
+  pc98		nec_vndr/jp	=	pc98(basic)
+  *		jp		=	complete+japan
+  olpc          *               =       olpc
+  olpcm         *               =       olpc
+  *		*		=	complete
+
+! model		layout[1]	=	compat
+  *		*		=	complete
+
+! model		=	types
+  $macs		=	complete+numpad(mac)
+  $applealu	=	complete+numpad(mac)
+  $nokiamodels	=	complete+nokia
+  *		=	complete
+
+! layout	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle)
+  *			misc:typo 	= +typo(base)
+
+! layout[1]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):1
+  *			misc:typo 	= +typo(base):1
+
+! layout[2]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):2
+  *			misc:typo 	= +typo(base):2
+
+! layout[3]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):3
+  *			misc:typo 	= +typo(base):3
+
+! layout[4]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):4
+  *			misc:typo 	= +typo(base):4
+
+! option	=	symbols
+  grp:shift_toggle	=	+group(shifts_toggle)
+  altwin:menu		=	+altwin(menu)
+  altwin:meta_alt	=	+altwin(meta_alt)
+  altwin:alt_win	=	+altwin(alt_win)
+  altwin:ctrl_win	=	+altwin(ctrl_win)
+  altwin:ctrl_alt_win	=	+altwin(ctrl_alt_win)
+  altwin:meta_win	=	+altwin(meta_win)
+  altwin:left_meta_win	=	+altwin(left_meta_win)
+  altwin:hyper_win	=	+altwin(hyper_win)
+  altwin:alt_super_win	=	+altwin(alt_super_win)
+  altwin:swap_alt_win	=	+altwin(swap_alt_win)
+  grp:switch		=	+group(switch)
+  grp:lswitch		=	+group(lswitch)
+  grp:win_switch	=	+group(win_switch)
+  grp:lwin_switch	=	+group(lwin_switch)
+  grp:rwin_switch	=	+group(rwin_switch)
+  grp:toggle		=	+group(toggle)
+  grp:shifts_toggle	=	+group(shifts_toggle)
+  grp:ctrls_toggle	=	+group(ctrls_toggle)
+  grp:alts_toggle	=	+group(alts_toggle)
+  grp:caps_toggle	=	+capslock(grouplock)
+  grp:caps_switch       =       +capslock(groupshift)
+  grp:shift_caps_toggle	=	+group(shift_caps_toggle)
+  grp:shift_caps_switch	=	+group(shift_caps_switch)
+  grp:win_menu_switch	=	+group(win_menu_switch)
+  grp:alt_caps_toggle   =       +group(alt_caps_toggle)
+  grp:alt_space_toggle	=	+group(alt_space_toggle)
+  grp:menu_toggle	=	+group(menu_toggle)
+  grp:lwin_toggle	=	+group(lwin_toggle)
+  grp:rwin_toggle	=	+group(rwin_toggle)
+  grp:lshift_toggle	=	+group(lshift_toggle)
+  grp:rshift_toggle	=	+group(rshift_toggle)
+  grp:rctrl_switch	=	+group(rctrl_switch)
+  grp:lctrl_toggle	=	+group(lctrl_toggle)
+  grp:rctrl_toggle	=	+group(rctrl_toggle)
+  grp:lalt_toggle	=	+group(lalt_toggle)
+  grp:sclk_toggle	=	+group(sclk_toggle)
+  grp:lctrl_rctrl_switch	=	+group(lctrl_rctrl_switch)
+  grp:lctrl_lwin_rctrl_menu	=	+group(lctrl_lwin_rctrl_menu)
+  grp:lctrl_lalt_toggle	=	+group(lctrl_lalt_toggle)
+  grp:rctrl_ralt_toggle	=	+group(rctrl_ralt_toggle)
+  grp:ctrl_alt_toggle	=	+group(ctrl_alt_toggle)
+  grp:ctrl_alt_toggle_bidir	=	+group(ctrl_alt_toggle_bidir)
+  grp:lctrl_lshift_toggle	=	+group(lctrl_lshift_toggle)
+  grp:rctrl_rshift_toggle	=	+group(rctrl_rshift_toggle)
+  grp:ctrl_shift_toggle	=	+group(ctrl_shift_toggle)
+  grp:ctrl_shift_toggle_bidir	=	+group(ctrl_shift_toggle_bidir)
+  grp:lalt_lshift_toggle	=	+group(lalt_lshift_toggle)
+  grp:ralt_rshift_toggle	=	+group(ralt_rshift_toggle)
+  grp:alt_shift_toggle	=	+group(alt_shift_toggle)
+  grp:alt_shift_toggle_bidir	=	+group(alt_shift_toggle_bidir)
+  lv3:switch		=	+level3(switch)
+  lv3:ralt_switch	=	+level3(ralt_switch)
+  lv3:ralt_switch_multikey	=	+level3(ralt_switch_multikey)
+  lv3:ralt_alt		=	+level3(ralt_alt)
+  lv3:lalt_switch	=	+level3(lalt_switch)
+  lv3:alt_switch	=	+level3(alt_switch)
+  lv3:menu_switch	=	+level3(menu_switch)
+  lv3:win_switch	=	+level3(win_switch)
+  lv3:lwin_switch	=	+level3(lwin_switch)
+  lv3:rwin_switch	=	+level3(rwin_switch)
+  lv3:enter_switch	=	+level3(enter_switch)
+  caps:capslock		=	+capslock(capslock)
+  caps:numlock		=	+capslock(numlock)
+  caps:shiftlock	=	+capslock(shiftlock)
+  caps:swapescape	=	+capslock(swapescape)
+  caps:escape		=	+capslock(escape)
+  caps:backspace	=	+capslock(backspace)
+  caps:super		=	+capslock(super)
+  caps:hyper		=	+capslock(hyper)
+  caps:none		=	+capslock(none)
+  caps:ctrl_modifier	=	+capslock(ctrl_modifier)
+  ctrl:nocaps		=	+ctrl(nocaps)
+  ctrl:lctrl_meta	=	+ctrl(lctrl_meta)
+  ctrl:swapcaps		=	+ctrl(swapcaps)
+  ctrl:ac_ctrl		=	+ctrl(ac_ctrl)
+  ctrl:aa_ctrl		=	+ctrl(aa_ctrl)
+  ctrl:rctrl_ralt	=	+ctrl(rctrl_ralt)
+  ctrl:menu_rctrl	=	+ctrl(menu_rctrl)
+  ctrl:ralt_rctrl	=	+ctrl(ralt_rctrl)
+  compose:ralt		=	+compose(ralt)
+  compose:lwin		=	+compose(lwin)
+  compose:lwin-altgr	=	+compose(lwin-altgr)
+  compose:rwin		=	+compose(rwin)
+  compose:rwin-altgr	=	+compose(rwin-altgr)
+  compose:menu		=	+compose(menu)
+  compose:menu-altgr	=	+compose(menu-altgr)
+  compose:lctrl		=	+compose(lctrl)
+  compose:lctrl-altgr	=	+compose(lctrl-altgr)
+  compose:rctrl		=	+compose(rctrl)
+  compose:rctrl-altgr	=	+compose(rctrl-altgr)
+  compose:caps		=	+compose(caps)
+  compose:caps-altgr	=	+compose(caps-altgr)
+  compose:102		=	+compose(102)
+  compose:102-altgr	=	+compose(102-altgr)
+  compose:paus		=	+compose(paus)
+  compose:prsc		=	+compose(prsc)
+  compose:sclk		=	+compose(sclk)
+  srvrkeys:none		=	+srvr_ctrl(no_srvr_keys)
+  eurosign:e		=	+eurosign(e)
+  eurosign:2		=	+eurosign(2)
+  eurosign:4		=	+eurosign(4)
+  eurosign:5		=	+eurosign(5)
+  rupeesign:4           =       +rupeesign(4)
+  keypad:oss            =       +keypad(oss)
+  keypad:legacy         =	+keypad(legacy)
+  keypad:legacy_wang    =	+keypad(legacy_wang)
+  keypad:oss_wang       =	+keypad(oss_wang)
+  keypad:future         =	+keypad(future)
+  keypad:future_wang    =	+keypad(future_wang)
+  keypad:hex            =	+keypad(ops)+keypad(hex)
+  keypad:atm            =	+keypad(ops)+keypad(hex)+keypad(atm)  
+  nbsp:none             =	+nbsp(none)
+  nbsp:level2           =	+nbsp(level2)
+  nbsp:level3           =	+nbsp(level3)
+  nbsp:level3s          =	+nbsp(level3s)
+  nbsp:level3n          =	+nbsp(level3n)
+  nbsp:level4           =	+nbsp(level4)
+  nbsp:level4n          =	+nbsp(level4n)
+  nbsp:level4nl         =	+nbsp(level4nl)
+  japan:nicola_f_bs     =	+jp(nicola_f_bs)
+  japan:hztg_escape     =	+jp(hztg_escape)
+  kpdl:dot              =	+kpdl(dot)
+  kpdl:comma            =	+kpdl(comma)
+  kpdl:dotoss           =	+kpdl(dotoss)
+  kpdl:dotoss_latin9    =	+kpdl(dotoss_latin9)
+  kpdl:commaoss         =	+kpdl(commaoss)
+  kpdl:momayyezoss      =	+kpdl(momayyezoss)
+  kpdl:kposs            =	+kpdl(kposs)
+  kpdl:semi             =	+kpdl(semi)
+  shift:breaks_caps     =	+shift(breaks_caps)
+  esperanto:qwerty      =	+epo(qwerty)
+  esperanto:dvorak      =	+epo(dvorak)
+  terminate:ctrl_alt_bksp =	+terminate(ctrl_alt_bksp)
+  keypad:pointerkeys	=	+keypad(pointerkeys)
+  apple:alupckeys	=	+macintosh_vndr/apple(alupckeys)
+  shift:both_capslock                =       +shift(both_capslock)
+  shift:lshift_both_capslock         =       +shift(lshift_both_capslock)
+  shift:rshift_both_capslock         =       +shift(rshift_both_capslock)
+  shift:both_capslock_cancel         =       +shift(both_capslock_cancel)
+  shift:lshift_both_capslock_cancel  =       +shift(lshift_both_capslock_cancel)
+  shift:rshift_both_capslock_cancel  =       +shift(rshift_both_capslock_cancel)
+  shift:both_shiftlock               =       +shift(both_shiftlock)
+  shift:lshift_both_shiftlock        =       +shift(lshift_both_shiftlock)
+  shift:rshift_both_shiftlock        =       +shift(rshift_both_shiftlock)
+  solaris:sun_compat				 =		 +sun_vndr/solaris(sun_compat)
+  lv3:caps_switch                    =       +level3(caps_switch)
+  lv3:bksl_switch                    =       +level3(bksl_switch)
+  lv3:lsgt_switch                    =       +level3(lsgt_switch)
+  lv3:caps_switch_latch              =       +level3(caps_switch_latch)
+  lv3:bksl_switch_latch              =       +level3(bksl_switch_latch)
+  lv3:lsgt_switch_latch              =       +level3(lsgt_switch_latch)
+  lv5:lsgt_switch_lock            =       +level5(lsgt_switch_lock)
+  lv5:ralt_switch_lock            =       +level5(ralt_switch_lock)
+  lv5:lwin_switch_lock            =       +level5(lwin_switch_lock)
+  lv5:rwin_switch_lock            =       +level5(rwin_switch_lock)
+  lv5:lsgt_switch_lock_cancel     =       +level5(lsgt_switch_lock_cancel)
+  lv5:ralt_switch_lock_cancel     =       +level5(ralt_switch_lock_cancel)
+  lv5:lwin_switch_lock_cancel     =       +level5(lwin_switch_lock_cancel)
+  lv5:rwin_switch_lock_cancel     =       +level5(rwin_switch_lock_cancel)
+
+
+
+! option	=	compat
+  grp_led:num		=	+lednum(group_lock)
+  grp_led:caps		=	+ledcaps(group_lock)
+  grp_led:scroll	=	+ledscroll(group_lock)
+  japan:kana_lock	=	+japan(kana_lock)
+  caps:shiftlock	=	+ledcaps(shift_lock)
+  grab:break_actions    =       +xfree86(grab_break)
+
+
+! option	=	types
+  caps:internal			=	+caps(internal)
+  caps:internal_nocancel	=	+caps(internal_nocancel)
+  caps:shift			=	+caps(shift)
+  caps:shift_nocancel		=	+caps(shift_nocancel)
+  numpad:pc			=	+numpad(pc)
+  numpad:mac			=	+numpad(mac)
+  numpad:microsoft		=	+numpad(microsoft)
+  numpad:shift3       		=	+numpad(shift3)
diff --git a/data/rules/evdev b/data/rules/evdev
new file mode 100644
--- /dev/null
+++ b/data/rules/evdev
@@ -0,0 +1,1140 @@
+// DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.sh FROM rules/*.part
+//
+//  Rules for resolving XKB components for use with XFree86
+//  Copyright 1996 by Joseph Moss
+//
+//  2002 Modifier: Ivan Pascal      The XFree86 Project
+//
+
+// If you want non-latin layouts implicitly include the en_US layout
+// uncomment lines below
+//! $nonlatin = am ara ben bd bg bt by cs deva ge gh gr guj guru il \
+//              in ir iku jp kan kh kr la lao lk mk mm mn mv mal ori pk \
+//              ru scc sy syr tel th tj tam ua uz
+
+// PC models
+! $pcmodels = pc101 pc102 pc104 pc105
+
+// Microsoft models (using MS geometry)
+! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose
+
+// Nokia devices and keyboards
+! $nokiamodels = nokiasu8w nokiarx44 nokiarx51
+
+// PC geometries - they have special geometry but symbols are mostly pc105
+! $pcgeometries = latitude
+
+// TypeMatrix geometries
+! $tmgeometries = tm2020 tm2030PS2 tm2030USB tm2030USB-102 tm2030USB-106
+
+// Layouts that provide further specializations for the OLPC
+! $olpclayouts = af am ara br ca es et fr it kh kz in mn np ru th tr us 
+
+! $macbooks = macbook78 macbook79
+! $maclaptop = ibook powerbook macbook78 macbook79
+! $applealu = applealu_ansi applealu_iso applealu_jis
+! $macs = macintosh macintosh_old ibook powerbook macbook78 macbook79
+
+! $macvendorlayouts = ch de dk fi fr gb is it latam nl no pt se us
+
+! $azerty = be fr
+! $qwertz = al cz de hr hu ro si sk 
+
+! $inetkbds = acer_c300 acer_ferrari4k acer_laptop \
+              airkey \
+              apple armada azonaRF2300 \
+              benqx brother \
+              btc5113rf btc9000 btc9000a btc9001ah btc5090 btc9019u \
+              cherryblue cherrybluea cherryblueb \
+              cherrycyboard cherrycmexpert \
+              chicony chicony0108 chicony0420 chicony9885 \
+              compalfl90 \
+              compaqeak8 compaqik7 compaqik13 compaqik18 \
+              creativedw7000 \
+              cymotionlinux \
+              dell dellm65 inspiron dellusbmm \
+              emachines ennyah_dkb1008 evdev \
+              genius geniuscomfy2 \
+              gyration honeywell_euroboard \
+              hp250x hp5xx hp500fa hpdv5 \
+              hpi6 hpxe3gc hpxe3gf hpxe4xxx hpxt1000 hpzt11xx htcdream \
+              ibm_spacesaver ipaq inspiron intel \
+              logiaccess logicda logicink \
+              logiex110 logiclx300 \
+              logiinkse logiinkseusb logiitc logiik \
+              logitech_base itouch logiultrax \
+              logitech_g15 \
+              logidinovo logidinovoedge \
+              microsoft4000 microsoft7000 microsoftinet microsoftprousb microsoftprooem microsoftprose \
+              microsoftoffice microsoftmult \
+              mx1998 mx2500 mx2750 \
+              oretec \
+              pc105 \
+              presario propeller \
+              qtronix \
+              rapidaccess rapidaccess2 thinkpad60 \
+              samsung4500 samsung4510 \
+              silvercrest \
+              sk1300 sk2500 sk6200 sk7100 \
+              sven sven303 symplon \
+              toshiba_s3000 trust trustda \
+              unitekkb1925 yahoo
+
+// all layouts with 3rd and 4th groups
+! $threelevellayouts = al az \
+              be br bt \
+              ca ch cs cz \
+              de dk \
+              ee es \
+              fi fo fr \
+              gb gr \
+              hu \
+              ie ir is it \
+              latam \
+              lk lt \
+              mn mt \
+              nl no \
+              pl pt \
+              ro \
+              se sk \
+              tr \
+              us \
+              vn \
+              za
+
+! $evdevkbds = ibm_spacesaver
+
+! $thinkpads = thinkpad thinkpad60 thinkpadz60
+
+! $sun = sun_type6_jp sun_type6_usb sun_type6_euro_usb \
+         sun_type6_jp_usb sun_type6_unix_usb sun_type7_jp_usb \
+         sun_type7_usb sun_type7_euro_usb sun_type7_unix_usb
+
+! $sun_jp = sun_type6_jp sun_type6_jp_usb sun_type7_jp_usb
+
+// Sun Type_6_7 keyboards with custom layouts
+! $sun_custom = ara be br ca ch cz de dk \
+                ee es fi fr gb gr it jp \
+                kr lt lv nl no pl pt ro \
+                ru se sk tr tw ua us
+
+! $sun_var =  sun_type6 sun_type6_suncompat sun_type6_de sun_type6_fr \
+              sun_type7 sun_type7_suncompat suncompat
+
+! $sun_compat = sun_type6 sun_type6_suncompat sun_type7_suncompat suncompat
+
+! $htcdreamlayouts = us it de
+
+! $dvoraklayouts = br ca de ee es fr gb no pl se us
+
+! model		=	keycodes
+  pc98		=	evdev(pc98)
+  applealu_jis	=	evdev+macintosh(jisevdev)
+  olpc          =       evdev+olpc(olpc)
+  olpcm         =       evdev+olpc(olpcm)
+  *		=	evdev
+
+! layout[1]	=	keycodes
+  $azerty       =       +aliases(azerty)
+  $qwertz       =       +aliases(qwertz)
+  *             =       +aliases(qwerty)
+
+! layout	=	keycodes
+  $azerty       =       +aliases(azerty)
+  $qwertz       =       +aliases(qwertz)
+  *             =       +aliases(qwerty)
+
+! option	=	keycodes
+
+! model		layout	=	geometry
+  thinkpad     us              =       thinkpad(us)
+
+! model		=	geometry
+  microsoftelite	=	microsoft(elite)
+ $msmodels	=	microsoft(natural)
+  dell101	=	dell(dell101)
+  dellm65	=	dell(dellm65)
+  latitude	=	dell(latitude)
+  flexpro	=	keytronic(FlexPro)
+  hp6000	=	hp(omnibook)
+  hpmini110	=	hp(mini110)
+  hpdv5		=	hp(dv5)
+  omnikey101	=	northgate(omnikey101)
+  sanwaskbkg3	=	sanwa(sanwaskbkg3)
+ $pcmodels	=	pc(%m)
+ $pcgeometries	=	pc(%m)
+  everex	=	everex(STEPnote)
+  thinkpad	=	thinkpad(intl)
+  thinkpad60	=	thinkpad(60)
+  thinkpadz60	=	thinkpad(60)
+ $tmgeometries	=	typematrix(%m)
+  winbook	=	winbook(XP5)
+  pc98		=	nec(pc98)
+ $applealu	=	macintosh(%m)
+ $macbooks      =       macintosh(%m)
+ $macs		=	macintosh(macintosh)
+  hhk		=	hhk(basic)
+  kinesis	=	kinesis(model100)
+ $nokiamodels	=	nokia(%m)
+  sun_type6_jp          =   sun(type6jp)
+  sun_type6_usb         =   sun(type6)
+  sun_type6_euro_usb    =   sun(type6tuv)
+  sun_type6_jp_usb      =   sun(type6jp)
+  sun_type6_unix_usb    =   sun(type6unix)
+  sun_type7_jp_usb      =   sun(type6jp)
+  sun_type7_usb         =   sun(type7)
+  sun_type7_euro_usb    =   sun(type7tuv)
+  sun_type7_unix_usb    =   sun(type7unix)
+  *		=       pc(pc104)
+
+! model		layout		variant		=	symbols
+  *		ben		basic		=	pc+in(ben)
+  *		ben		probhat		=	pc+in(ben_probhat)
+  *		dev		basic		=	pc+in(deva)
+  *		dvorak		$dvoraklayouts		=	pc+%v(dvorak)
+  *		dvorak		basic		=	pc+us(dvorak)
+  *		dvorak		pl_basic		=	pc+pl(dvorak)
+  *		dvorak		pl		=	pc+pl(dvorak_quotes)
+  *		dvorak		pl_altquotes		=	pc+pl(dvorak_altquotes)
+  *		dzdwi		basic		=	pc+bt(basic)
+  *		fi		basic		=	pc+fi(classic)
+  *		ge		azerty_tskapo		=	pc+fr(geo)
+  *		guj		basic		=	pc+in(guj)
+  *		gur		basic		=	pc+in(guru)
+  *		ie		laptop		=	pc+ie(basic)
+  *		ie		CloGaelachLaptop		=	pc+ie(CloGaelach)
+  *		in		urd		=	pc+in(urd-phonetic)
+  *		iu		basic		=	pc+ca(ike)
+  *		lo		basic		=	pc+la(basic)
+  *		kan		basic		=	pc+in(kan)
+  *		mal		basic		=	pc+in(mal)
+  *		mal		mlplusnum		=	pc+in(mal)
+  *		ogham		basic		=	pc+ie(ogam)
+  *		ogham		laptop		=	pc+ie(ogam)
+  *		ogham		is434		=	pc+ie(ogam_is434)
+  *		ogham		is434laptop		=	pc+ie(ogam_is434)
+  *		ori		basic		=	pc+in(ori)
+  *		ro		de		=	pc+ro(winkeys)
+  *		ro		us		=	pc+ro(std)
+  *		ro		academic		=	pc+ro(std)
+  *		ro		std_comma		=	pc+ro(std)
+  *		ro		comma		=	pc+ro(basic)
+  *		ru		os		=	pc+ru(os_legacy)
+  *		pk		urd		=	pc+pk(urd-phonetic)
+  *		sapmi		basic		=	pc+no(smi)
+  *		sapmi		nodeadkeys		=	pc+no(smi_nodeadkeys)
+  *		sapmi		sefi		=	pc+fi(smi)
+  *		sin		phonetic-static		=	pc+in(sin_phonetic)
+  *		syr		basic		=	pc+sy(syc)
+  *		syr		phonetic		=	pc+sy(syc_phonetic)
+  *		tam		INSCRIPT		=	pc+in(tam)
+  *		tam		UNI		=	pc+in(tam_unicode)
+  *		tam		NUMERAL-KEYBOARD		=	pc+in(tam_keyboard_with_numerals)
+  *		tam		TAB		=	pc+in(tam_TAB)
+  *		tam		TSCII		=	pc+in(tam_TSCII)
+  *		tel		basic		=	pc+in(tel)
+  *		yu		basic		=	pc+srp(latin)
+  *		yu		unicode		=	pc+srp(latinunicode)
+  *		yu		yz		=	pc+srp(latinyz)
+  *		yu		unicodeyz		=	pc+srp(latinunicodeyz)
+  classmate	us		intl		=	pc+us(classmate-intl)
+  classmate	us		alt-intl	=	pc+us(classmate-alt-intl)
+  classmate	us		altgr-intl	=	pc+us(classmate-altgr-intl)
+  nokiarx51	cz		qwerty		=	nokia_vndr/rx-51(cz_qwerty)
+  *			$sun_custom	$sun_var	=	pc+sun_vndr/%l%(v)
+
+! model		layout				=	symbols
+  *		ar			=	pc+ara
+  *		ben			=	pc+in(ben)
+  *		bs			=	pc+ba
+  *		cs			=	pc+rs
+  *		cz_qwerty			=	pc+cz(qwerty)
+  *		dev			=	pc+in(deva)
+  *		dvorak			=	pc+us(dvorak)
+  *		dzdwi			=	pc+bt
+  *		el			=	pc+gr
+  *		en_US			=	pc+latin
+  *		guj			=	pc+in(guj)
+  *		gur			=	pc+in(guru)
+  *		iu			=	pc+ca(ike)
+  *		lo			=	pc+la
+  *		kan			=	pc+in(kan)
+  *		mi			=	pc+mao
+  *		ogham			=	pc+ie(ogam)
+  *		ori			=	pc+ie(ori)
+  *		sapmi			=	pc+no(smi)
+  *		sr			=	pc+srp
+  *		syr			=	pc+sy(syc)
+  *		tel			=	pc+in(tel)
+  *		tml			=	pc+in(tam)
+  *		yu			=	pc+srp
+  *		fr-latin9			=	pc+fr(latin9)
+  *		us_intl			=	pc+us(alt-intl)
+  *		ben(basic)			=	pc+in(ben)
+  *		ben(probhat)			=	pc+in(ben_probhat)
+  *		dev(basic)			=	pc+in(deva)
+  *		dvorak($dvoraklayouts)			=	pc+%v(dvorak)
+  *		dvorak(basic)			=	pc+us(dvorak)
+  *		dvorak(pl_basic)			=	pc+pl(dvorak)
+  *		dvorak(pl)			=	pc+pl(dvorak_quotes)
+  *		dvorak(pl_altquotes)			=	pc+pl(dvorak_altquotes)
+  *		dzdwi(basic)			=	pc+bt(basic)
+  *		fi(basic)			=	pc+fi(classic)
+  *		ge(azerty_tskapo)			=	pc+fr(geo)
+  *		guj(basic)			=	pc+in(guj)
+  *		gur(basic)			=	pc+in(guru)
+  *		ie(laptop)			=	pc+ie(basic)
+  *		ie(CloGaelachLaptop)			=	pc+ie(CloGaelach)
+  *		in(urd)			=	pc+in(urd-phonetic)
+  *		iu(basic)			=	pc+ca(ike)
+  *		lo(basic)			=	pc+la(basic)
+  *		kan(basic)			=	pc+in(kan)
+  *		mal(basic)			=	pc+in(mal)
+  *		mal(mlplusnum)			=	pc+in(mal)
+  *		ogham(basic)			=	pc+ie(ogam)
+  *		ogham(laptop)			=	pc+ie(ogam)
+  *		ogham(is434)			=	pc+ie(ogam_is434)
+  *		ogham(is434laptop)			=	pc+ie(ogam_is434)
+  *		ori(basic)			=	pc+in(ori)
+  *		ro(de)			=	pc+ro(winkeys)
+  *		ro(us)			=	pc+ro(std)
+  *		ro(academic)			=	pc+ro(std)
+  *		ro(std_comma)			=	pc+ro(std)
+  *		ro(comma)			=	pc+ro(basic)
+  *		ru(os)			=	pc+ru(os_legacy)
+  *		pk(urd)			=	pc+pk(urd-phonetic)
+  *		sapmi(basic)			=	pc+no(smi)
+  *		sapmi(nodeadkeys)			=	pc+no(smi_nodeadkeys)
+  *		sapmi(sefi)			=	pc+fi(smi)
+  *		sin(phonetic-static)			=	pc+in(sin_phonetic)
+  *		syr(basic)			=	pc+sy(syc)
+  *		syr(phonetic)			=	pc+sy(syc_phonetic)
+  *		tam(INSCRIPT)			=	pc+in(tam)
+  *		tam(UNI)			=	pc+in(tam_unicode)
+  *		tam(NUMERAL-KEYBOARD)			=	pc+in(tam_keyboard_with_numerals)
+  *		tam(TAB)			=	pc+in(tam_TAB)
+  *		tam(TSCII)			=	pc+in(tam_TSCII)
+  *		tel(basic)			=	pc+in(tel)
+  *		yu(basic)			=	pc+srp(latin)
+  *		yu(unicode)			=	pc+srp(latinunicode)
+  *		yu(yz)			=	pc+srp(latinyz)
+  *		yu(unicodeyz)			=	pc+srp(latinunicodeyz)
+  ataritt	$nonlatin		=	xfree68_vndr/ataritt(us)+%l%(v):2
+  ataritt	*			=	xfree68_vndr/ataritt(us)+%l%(v)
+  amiga		$nonlatin		=	xfree68_vndr/amiga(usa1)+%l%(v):2
+  amiga		*			=	xfree68_vndr/amiga(usa1)+%l%(v)
+  classmate	us			=	pc+%l(classmate)
+  empty         *                       =       empty(basic)
+  *             empty                   =       empty(basic)
+ $sun		$sun_custom		=	pc+sun_vndr/%l%(v)
+  pc98		nec_vndr/jp		=	nec_vndr/jp(pc98)
+  macintosh_old	us			=	macintosh_vndr/us(oldmac)
+  macintosh_old	en_US			=	macintosh_vndr/us(oldmac)
+  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l%(v)
+  macintosh_old	$nonlatin		=	macintosh_vndr/us(oldmac)+%l%(v):2
+  macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l%(v)
+  applealu_jis	jp			=	macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)+macintosh_vndr/jp(mac):2
+  applealu_jis	*			=	macintosh_vndr/apple(alukbd)+%l%(v)+macintosh_vndr/jp(mac):2
+ $applealu	$macvendorlayouts	=	macintosh_vndr/apple(alukbd)+macintosh_vndr/%l%(v)
+ $applealu	*			=	macintosh_vndr/apple(alukbd)+%l%(v)
+ $macs		en_US			=	pc+macintosh_vndr/us(extended)
+ $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l%(v)
+  nokiarx44	*			=	nokia_vndr/rx-44(%l)
+  nokiarx51	cz(qwerty)		=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty)
+  nokiarx51	*			=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l%_v)
+  nokiasu8w	*			=	nokia_vndr/su-8w(%l)
+  olpc		$olpclayouts		=	olpc+%l%(m)
+  olpc		*			=	olpc+%l%(v)
+  olpcm		$olpclayouts		=	olpc+%l%(m)
+  olpcm		*			=	olpc+%l%(v)
+ $thinkpads   	br			=	pc+br(thinkpad)
+  sl-c3x00	*			=	pc+sharp_vndr/sl-c3x00(basic)
+  ws003sh	*			=	pc+sharp_vndr/ws003sh(basic)
+  ws007sh	*			=	pc+sharp_vndr/ws007sh(basic)
+  ws011sh	*			=	pc+sharp_vndr/ws011sh(basic)
+  ws020sh	*			=	pc+sharp_vndr/ws020sh(basic)
+  htcdream	$htcdreamlayouts	=	%l(htcdream)
+  *	   	$nonlatin		=	pc+us+%l%(v):2
+  *		*			=	pc+%l%(v)
+
+! model		layout[1]			=	symbols
+  *		ar			=	pc+ara%(v[1])
+  *		ben			=	pc+in(ben)
+  *		bs			=	pc+ba%(v[1])
+  *		cs			=	pc+rs%(v[1])
+  *		cz_qwerty			=	pc+cz(qwerty)
+  *		dev			=	pc+in(deva)
+  *		dvorak			=	pc+us(dvorak)
+  *		dzdwi			=	pc+bt%(v[1])
+  *		el			=	pc+gr%(v[1])
+  *		en_US			=	pc+latin%(v[1])
+  *		guj			=	pc+in(guj)
+  *		gur			=	pc+in(guru)
+  *		iu			=	pc+ca(ike)
+  *		lo			=	pc+la%(v[1])
+  *		kan			=	pc+in(kan)
+  *		mi			=	pc+mao%(v[1])
+  *		ogham			=	pc+ie(ogam)
+  *		ori			=	pc+ie(ori)
+  *		sapmi			=	pc+no(smi)
+  *		sr			=	pc+srp%(v[1])
+  *		syr			=	pc+sy(syc)
+  *		tel			=	pc+in(tel)
+  *		tml			=	pc+in(tam)
+  *		yu			=	pc+srp%(v[1])
+  *		fr-latin9			=	pc+fr(latin9)
+  *		us_intl			=	pc+us(alt-intl)
+  *		ben(basic)			=	pc+in(ben)
+  *		ben(probhat)			=	pc+in(ben_probhat)
+  *		dev(basic)			=	pc+in(deva)
+  *		dvorak($dvoraklayouts)			=	pc+%v(dvorak)
+  *		dvorak(basic)			=	pc+us(dvorak)
+  *		dvorak(pl_basic)			=	pc+pl(dvorak)
+  *		dvorak(pl)			=	pc+pl(dvorak_quotes)
+  *		dvorak(pl_altquotes)			=	pc+pl(dvorak_altquotes)
+  *		dzdwi(basic)			=	pc+bt(basic)
+  *		fi(basic)			=	pc+fi(classic)
+  *		ge(azerty_tskapo)			=	pc+fr(geo)
+  *		guj(basic)			=	pc+in(guj)
+  *		gur(basic)			=	pc+in(guru)
+  *		ie(laptop)			=	pc+ie(basic)
+  *		ie(CloGaelachLaptop)			=	pc+ie(CloGaelach)
+  *		in(urd)			=	pc+in(urd-phonetic)
+  *		iu(basic)			=	pc+ca(ike)
+  *		lo(basic)			=	pc+la(basic)
+  *		kan(basic)			=	pc+in(kan)
+  *		mal(basic)			=	pc+in(mal)
+  *		mal(mlplusnum)			=	pc+in(mal)
+  *		ogham(basic)			=	pc+ie(ogam)
+  *		ogham(laptop)			=	pc+ie(ogam)
+  *		ogham(is434)			=	pc+ie(ogam_is434)
+  *		ogham(is434laptop)			=	pc+ie(ogam_is434)
+  *		ori(basic)			=	pc+in(ori)
+  *		ro(de)			=	pc+ro(winkeys)
+  *		ro(us)			=	pc+ro(std)
+  *		ro(academic)			=	pc+ro(std)
+  *		ro(std_comma)			=	pc+ro(std)
+  *		ro(comma)			=	pc+ro(basic)
+  *		ru(os)			=	pc+ru(os_legacy)
+  *		pk(urd)			=	pc+pk(urd-phonetic)
+  *		sapmi(basic)			=	pc+no(smi)
+  *		sapmi(nodeadkeys)			=	pc+no(smi_nodeadkeys)
+  *		sapmi(sefi)			=	pc+fi(smi)
+  *		sin(phonetic-static)			=	pc+in(sin_phonetic)
+  *		syr(basic)			=	pc+sy(syc)
+  *		syr(phonetic)			=	pc+sy(syc_phonetic)
+  *		tam(INSCRIPT)			=	pc+in(tam)
+  *		tam(UNI)			=	pc+in(tam_unicode)
+  *		tam(NUMERAL-KEYBOARD)			=	pc+in(tam_keyboard_with_numerals)
+  *		tam(TAB)			=	pc+in(tam_TAB)
+  *		tam(TSCII)			=	pc+in(tam_TSCII)
+  *		tel(basic)			=	pc+in(tel)
+  *		yu(basic)			=	pc+srp(latin)
+  *		yu(unicode)			=	pc+srp(latinunicode)
+  *		yu(yz)			=	pc+srp(latinyz)
+  *		yu(unicodeyz)			=	pc+srp(latinunicodeyz)
+  ataritt	*			=	xfree68_vndr/ataritt(us)+%l[1]%(v[1])
+  amiga		*			=	xfree68_vndr/amiga(usa1)+%l[1]%(v[1])
+ $sun		$sun_custom	=	pc+sun_vndr/%l[1]%(v[1])
+  macintosh_old	us			=	macintosh_vndr/us(oldmac)
+  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l[1]%(v[1])
+  macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l[1]%(v[1])
+  applealu_jis	us			=	macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)
+ $applealu	$macvendorlayouts	=	macintosh_vndr/apple(alukbd)+macintosh_vndr/%l[1]%(v[1])
+ $applealu	*			=	macintosh_vndr/apple(alukbd)+%l[1]%(v[1])
+ $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l[1]%(v[1])
+  nokiarx51	cz(qwerty)		=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty)
+  nokiarx51	*			=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l[1]%_v[1])
+ $thinkpads	br			=	pc+%l[1](thinkpad)
+  *		*			=	pc+%l[1]%(v[1])
+
+! model		layout[1]	variant[1]	=	symbols
+  *		ben		basic		=	pc+in(ben)
+  *		ben		probhat		=	pc+in(ben_probhat)
+  *		dev		basic		=	pc+in(deva)
+  *		dvorak		$dvoraklayouts		=	pc+%v(dvorak)
+  *		dvorak		basic		=	pc+us(dvorak)
+  *		dvorak		pl_basic		=	pc+pl(dvorak)
+  *		dvorak		pl		=	pc+pl(dvorak_quotes)
+  *		dvorak		pl_altquotes		=	pc+pl(dvorak_altquotes)
+  *		dzdwi		basic		=	pc+bt(basic)
+  *		fi		basic		=	pc+fi(classic)
+  *		ge		azerty_tskapo		=	pc+fr(geo)
+  *		guj		basic		=	pc+in(guj)
+  *		gur		basic		=	pc+in(guru)
+  *		ie		laptop		=	pc+ie(basic)
+  *		ie		CloGaelachLaptop		=	pc+ie(CloGaelach)
+  *		in		urd		=	pc+in(urd-phonetic)
+  *		iu		basic		=	pc+ca(ike)
+  *		lo		basic		=	pc+la(basic)
+  *		kan		basic		=	pc+in(kan)
+  *		mal		basic		=	pc+in(mal)
+  *		mal		mlplusnum		=	pc+in(mal)
+  *		ogham		basic		=	pc+ie(ogam)
+  *		ogham		laptop		=	pc+ie(ogam)
+  *		ogham		is434		=	pc+ie(ogam_is434)
+  *		ogham		is434laptop		=	pc+ie(ogam_is434)
+  *		ori		basic		=	pc+in(ori)
+  *		ro		de		=	pc+ro(winkeys)
+  *		ro		us		=	pc+ro(std)
+  *		ro		academic		=	pc+ro(std)
+  *		ro		std_comma		=	pc+ro(std)
+  *		ro		comma		=	pc+ro(basic)
+  *		ru		os		=	pc+ru(os_legacy)
+  *		pk		urd		=	pc+pk(urd-phonetic)
+  *		sapmi		basic		=	pc+no(smi)
+  *		sapmi		nodeadkeys		=	pc+no(smi_nodeadkeys)
+  *		sapmi		sefi		=	pc+fi(smi)
+  *		sin		phonetic-static		=	pc+in(sin_phonetic)
+  *		syr		basic		=	pc+sy(syc)
+  *		syr		phonetic		=	pc+sy(syc_phonetic)
+  *		tam		INSCRIPT		=	pc+in(tam)
+  *		tam		UNI		=	pc+in(tam_unicode)
+  *		tam		NUMERAL-KEYBOARD		=	pc+in(tam_keyboard_with_numerals)
+  *		tam		TAB		=	pc+in(tam_TAB)
+  *		tam		TSCII		=	pc+in(tam_TSCII)
+  *		tel		basic		=	pc+in(tel)
+  *		yu		basic		=	pc+srp(latin)
+  *		yu		unicode		=	pc+srp(latinunicode)
+  *		yu		yz		=	pc+srp(latinyz)
+  *		yu		unicodeyz		=	pc+srp(latinunicodeyz)
+
+! model		layout[2]	=	symbols
+  *		ar		=	+ara%(v[2]):2
+  *		ben		=	+in(ben):2
+  *		bs		=	+ba%(v[2]):2
+  *		cs		=	+rs%(v[2]):2
+  *		cz_qwerty		=	+cz(qwerty):2
+  *		dev		=	+in(deva):2
+  *		dvorak		=	+us(dvorak):2
+  *		dzdwi		=	+bt%(v[2]):2
+  *		el		=	+gr%(v[2]):2
+  *		en_US		=	+latin%(v[2]):2
+  *		guj		=	+in(guj):2
+  *		gur		=	+in(guru):2
+  *		iu		=	+ca(ike):2
+  *		lo		=	+la%(v[2]):2
+  *		kan		=	+in(kan):2
+  *		mi		=	+mao%(v[2]):2
+  *		ogham		=	+ie(ogam):2
+  *		ori		=	+ie(ori):2
+  *		sapmi		=	+no(smi):2
+  *		sr		=	+srp%(v[2]):2
+  *		syr		=	+sy(syc):2
+  *		tel		=	+in(tel):2
+  *		tml		=	+in(tam):2
+  *		yu		=	+srp%(v[2]):2
+  *		fr-latin9		=	+fr(latin9):2
+  *		us_intl		=	+us(alt-intl):2
+  *		ben(basic)	=	+in(ben):2
+  *		ben(probhat)	=	+in(ben_probhat):2
+  *		dev(basic)	=	+in(deva):2
+  *		dvorak($dvoraklayouts)	=	+%v(dvorak):2
+  *		dvorak(basic)	=	+us(dvorak):2
+  *		dvorak(pl_basic)	=	+pl(dvorak):2
+  *		dvorak(pl)	=	+pl(dvorak_quotes):2
+  *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):2
+  *		dzdwi(basic)	=	+bt(basic):2
+  *		fi(basic)	=	+fi(classic):2
+  *		ge(azerty_tskapo)	=	+fr(geo):2
+  *		guj(basic)	=	+in(guj):2
+  *		gur(basic)	=	+in(guru):2
+  *		ie(laptop)	=	+ie(basic):2
+  *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):2
+  *		in(urd)	=	+in(urd-phonetic):2
+  *		iu(basic)	=	+ca(ike):2
+  *		lo(basic)	=	+la(basic):2
+  *		kan(basic)	=	+in(kan):2
+  *		mal(basic)	=	+in(mal):2
+  *		mal(mlplusnum)	=	+in(mal):2
+  *		ogham(basic)	=	+ie(ogam):2
+  *		ogham(laptop)	=	+ie(ogam):2
+  *		ogham(is434)	=	+ie(ogam_is434):2
+  *		ogham(is434laptop)	=	+ie(ogam_is434):2
+  *		ori(basic)	=	+in(ori):2
+  *		ro(de)	=	+ro(winkeys):2
+  *		ro(us)	=	+ro(std):2
+  *		ro(academic)	=	+ro(std):2
+  *		ro(std_comma)	=	+ro(std):2
+  *		ro(comma)	=	+ro(basic):2
+  *		ru(os)	=	+ru(os_legacy):2
+  *		pk(urd)	=	+pk(urd-phonetic):2
+  *		sapmi(basic)	=	+no(smi):2
+  *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):2
+  *		sapmi(sefi)	=	+fi(smi):2
+  *		sin(phonetic-static)	=	+in(sin_phonetic):2
+  *		syr(basic)	=	+sy(syc):2
+  *		syr(phonetic)	=	+sy(syc_phonetic):2
+  *		tam(INSCRIPT)	=	+in(tam):2
+  *		tam(UNI)	=	+in(tam_unicode):2
+  *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):2
+  *		tam(TAB)	=	+in(tam_TAB):2
+  *		tam(TSCII)	=	+in(tam_TSCII):2
+  *		tel(basic)	=	+in(tel):2
+  *		yu(basic)	=	+srp(latin):2
+  *		yu(unicode)	=	+srp(latinunicode):2
+  *		yu(yz)	=	+srp(latinyz):2
+  *		yu(unicodeyz)	=	+srp(latinunicodeyz):2
+  nokiarx51	cz(qwerty)	=	+nokia_vndr/rx-51(cz_qwerty):2
+  nokiarx51	*		=	+nokia_vndr/rx-51(%l[2]%_v[2]):2
+ $sun	$sun_custom	=	+sun_vndr/%l[2]%(v[2]):2
+  *		*		=	+%l[2]%(v[2]):2
+
+! model		layout[3]	=	symbols
+  *		ar		=	+ara%(v[3]):3
+  *		ben		=	+in(ben):3
+  *		bs		=	+ba%(v[3]):3
+  *		cs		=	+rs%(v[3]):3
+  *		cz_qwerty		=	+cz(qwerty):3
+  *		dev		=	+in(deva):3
+  *		dvorak		=	+us(dvorak):3
+  *		dzdwi		=	+bt%(v[3]):3
+  *		el		=	+gr%(v[3]):3
+  *		en_US		=	+latin%(v[3]):3
+  *		guj		=	+in(guj):3
+  *		gur		=	+in(guru):3
+  *		iu		=	+ca(ike):3
+  *		lo		=	+la%(v[3]):3
+  *		kan		=	+in(kan):3
+  *		mi		=	+mao%(v[3]):3
+  *		ogham		=	+ie(ogam):3
+  *		ori		=	+ie(ori):3
+  *		sapmi		=	+no(smi):3
+  *		sr		=	+srp%(v[3]):3
+  *		syr		=	+sy(syc):3
+  *		tel		=	+in(tel):3
+  *		tml		=	+in(tam):3
+  *		yu		=	+srp%(v[3]):3
+  *		fr-latin9		=	+fr(latin9):3
+  *		us_intl		=	+us(alt-intl):3
+  *		ben(basic)	=	+in(ben):3
+  *		ben(probhat)	=	+in(ben_probhat):3
+  *		dev(basic)	=	+in(deva):3
+  *		dvorak($dvoraklayouts)	=	+%v(dvorak):3
+  *		dvorak(basic)	=	+us(dvorak):3
+  *		dvorak(pl_basic)	=	+pl(dvorak):3
+  *		dvorak(pl)	=	+pl(dvorak_quotes):3
+  *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):3
+  *		dzdwi(basic)	=	+bt(basic):3
+  *		fi(basic)	=	+fi(classic):3
+  *		ge(azerty_tskapo)	=	+fr(geo):3
+  *		guj(basic)	=	+in(guj):3
+  *		gur(basic)	=	+in(guru):3
+  *		ie(laptop)	=	+ie(basic):3
+  *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):3
+  *		in(urd)	=	+in(urd-phonetic):3
+  *		iu(basic)	=	+ca(ike):3
+  *		lo(basic)	=	+la(basic):3
+  *		kan(basic)	=	+in(kan):3
+  *		mal(basic)	=	+in(mal):3
+  *		mal(mlplusnum)	=	+in(mal):3
+  *		ogham(basic)	=	+ie(ogam):3
+  *		ogham(laptop)	=	+ie(ogam):3
+  *		ogham(is434)	=	+ie(ogam_is434):3
+  *		ogham(is434laptop)	=	+ie(ogam_is434):3
+  *		ori(basic)	=	+in(ori):3
+  *		ro(de)	=	+ro(winkeys):3
+  *		ro(us)	=	+ro(std):3
+  *		ro(academic)	=	+ro(std):3
+  *		ro(std_comma)	=	+ro(std):3
+  *		ro(comma)	=	+ro(basic):3
+  *		ru(os)	=	+ru(os_legacy):3
+  *		pk(urd)	=	+pk(urd-phonetic):3
+  *		sapmi(basic)	=	+no(smi):3
+  *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):3
+  *		sapmi(sefi)	=	+fi(smi):3
+  *		sin(phonetic-static)	=	+in(sin_phonetic):3
+  *		syr(basic)	=	+sy(syc):3
+  *		syr(phonetic)	=	+sy(syc_phonetic):3
+  *		tam(INSCRIPT)	=	+in(tam):3
+  *		tam(UNI)	=	+in(tam_unicode):3
+  *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):3
+  *		tam(TAB)	=	+in(tam_TAB):3
+  *		tam(TSCII)	=	+in(tam_TSCII):3
+  *		tel(basic)	=	+in(tel):3
+  *		yu(basic)	=	+srp(latin):3
+  *		yu(unicode)	=	+srp(latinunicode):3
+  *		yu(yz)	=	+srp(latinyz):3
+  *		yu(unicodeyz)	=	+srp(latinunicodeyz):3
+  nokiarx51	cz(qwerty)	=	+nokia_vndr/rx-51(cz_qwerty):3
+  nokiarx51	*		=	+nokia_vndr/rx-51(%l[3]%_v[3]):3
+ $sun	$sun_custom	=	+sun_vndr/%l[3]%(v[3]):3
+  *		*		=	+%l[3]%(v[3]):3
+
+! model		layout[4]	=	symbols
+  *		ar		=	+ara%(v[4]):4
+  *		ben		=	+in(ben):4
+  *		bs		=	+ba%(v[4]):4
+  *		cs		=	+rs%(v[4]):4
+  *		cz_qwerty		=	+cz(qwerty):4
+  *		dev		=	+in(deva):4
+  *		dvorak		=	+us(dvorak):4
+  *		dzdwi		=	+bt%(v[4]):4
+  *		el		=	+gr%(v[4]):4
+  *		en_US		=	+latin%(v[4]):4
+  *		guj		=	+in(guj):4
+  *		gur		=	+in(guru):4
+  *		iu		=	+ca(ike):4
+  *		lo		=	+la%(v[4]):4
+  *		kan		=	+in(kan):4
+  *		mi		=	+mao%(v[4]):4
+  *		ogham		=	+ie(ogam):4
+  *		ori		=	+ie(ori):4
+  *		sapmi		=	+no(smi):4
+  *		sr		=	+srp%(v[4]):4
+  *		syr		=	+sy(syc):4
+  *		tel		=	+in(tel):4
+  *		tml		=	+in(tam):4
+  *		yu		=	+srp%(v[4]):4
+  *		fr-latin9		=	+fr(latin9):4
+  *		us_intl		=	+us(alt-intl):4
+  *		ben(basic)	=	+in(ben):4
+  *		ben(probhat)	=	+in(ben_probhat):4
+  *		dev(basic)	=	+in(deva):4
+  *		dvorak($dvoraklayouts)	=	+%v(dvorak):4
+  *		dvorak(basic)	=	+us(dvorak):4
+  *		dvorak(pl_basic)	=	+pl(dvorak):4
+  *		dvorak(pl)	=	+pl(dvorak_quotes):4
+  *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):4
+  *		dzdwi(basic)	=	+bt(basic):4
+  *		fi(basic)	=	+fi(classic):4
+  *		ge(azerty_tskapo)	=	+fr(geo):4
+  *		guj(basic)	=	+in(guj):4
+  *		gur(basic)	=	+in(guru):4
+  *		ie(laptop)	=	+ie(basic):4
+  *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):4
+  *		in(urd)	=	+in(urd-phonetic):4
+  *		iu(basic)	=	+ca(ike):4
+  *		lo(basic)	=	+la(basic):4
+  *		kan(basic)	=	+in(kan):4
+  *		mal(basic)	=	+in(mal):4
+  *		mal(mlplusnum)	=	+in(mal):4
+  *		ogham(basic)	=	+ie(ogam):4
+  *		ogham(laptop)	=	+ie(ogam):4
+  *		ogham(is434)	=	+ie(ogam_is434):4
+  *		ogham(is434laptop)	=	+ie(ogam_is434):4
+  *		ori(basic)	=	+in(ori):4
+  *		ro(de)	=	+ro(winkeys):4
+  *		ro(us)	=	+ro(std):4
+  *		ro(academic)	=	+ro(std):4
+  *		ro(std_comma)	=	+ro(std):4
+  *		ro(comma)	=	+ro(basic):4
+  *		ru(os)	=	+ru(os_legacy):4
+  *		pk(urd)	=	+pk(urd-phonetic):4
+  *		sapmi(basic)	=	+no(smi):4
+  *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):4
+  *		sapmi(sefi)	=	+fi(smi):4
+  *		sin(phonetic-static)	=	+in(sin_phonetic):4
+  *		syr(basic)	=	+sy(syc):4
+  *		syr(phonetic)	=	+sy(syc_phonetic):4
+  *		tam(INSCRIPT)	=	+in(tam):4
+  *		tam(UNI)	=	+in(tam_unicode):4
+  *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):4
+  *		tam(TAB)	=	+in(tam_TAB):4
+  *		tam(TSCII)	=	+in(tam_TSCII):4
+  *		tel(basic)	=	+in(tel):4
+  *		yu(basic)	=	+srp(latin):4
+  *		yu(unicode)	=	+srp(latinunicode):4
+  *		yu(yz)	=	+srp(latinyz):4
+  *		yu(unicodeyz)	=	+srp(latinunicodeyz):4
+  nokiarx51	cz(qwerty)	=	+nokia_vndr/rx-51(cz_qwerty):4
+  nokiarx51	*		=	+nokia_vndr/rx-51(%l[4]%_v[4]):4
+ $sun	$sun_custom	=	+sun_vndr/%l[4]%(v[4]):4
+  *		*		=	+%l[4]%(v[4]):4
+
+! model		layout[2]	variant[2]	=	symbols
+  *		ben		basic	=	+in(ben):2
+  *		ben		probhat	=	+in(ben_probhat):2
+  *		dev		basic	=	+in(deva):2
+  *		dvorak		$dvoraklayouts	=	+%v(dvorak):2
+  *		dvorak		basic	=	+us(dvorak):2
+  *		dvorak		pl_basic	=	+pl(dvorak):2
+  *		dvorak		pl	=	+pl(dvorak_quotes):2
+  *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):2
+  *		dzdwi		basic	=	+bt(basic):2
+  *		fi		basic	=	+fi(classic):2
+  *		ge		azerty_tskapo	=	+fr(geo):2
+  *		guj		basic	=	+in(guj):2
+  *		gur		basic	=	+in(guru):2
+  *		ie		laptop	=	+ie(basic):2
+  *		ie		CloGaelachLaptop	=	+ie(CloGaelach):2
+  *		in		urd	=	+in(urd-phonetic):2
+  *		iu		basic	=	+ca(ike):2
+  *		lo		basic	=	+la(basic):2
+  *		kan		basic	=	+in(kan):2
+  *		mal		basic	=	+in(mal):2
+  *		mal		mlplusnum	=	+in(mal):2
+  *		ogham		basic	=	+ie(ogam):2
+  *		ogham		laptop	=	+ie(ogam):2
+  *		ogham		is434	=	+ie(ogam_is434):2
+  *		ogham		is434laptop	=	+ie(ogam_is434):2
+  *		ori		basic	=	+in(ori):2
+  *		ro		de	=	+ro(winkeys):2
+  *		ro		us	=	+ro(std):2
+  *		ro		academic	=	+ro(std):2
+  *		ro		std_comma	=	+ro(std):2
+  *		ro		comma	=	+ro(basic):2
+  *		ru		os	=	+ru(os_legacy):2
+  *		pk		urd	=	+pk(urd-phonetic):2
+  *		sapmi		basic	=	+no(smi):2
+  *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):2
+  *		sapmi		sefi	=	+fi(smi):2
+  *		sin		phonetic-static	=	+in(sin_phonetic):2
+  *		syr		basic	=	+sy(syc):2
+  *		syr		phonetic	=	+sy(syc_phonetic):2
+  *		tam		INSCRIPT	=	+in(tam):2
+  *		tam		UNI	=	+in(tam_unicode):2
+  *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):2
+  *		tam		TAB	=	+in(tam_TAB):2
+  *		tam		TSCII	=	+in(tam_TSCII):2
+  *		tel		basic	=	+in(tel):2
+  *		yu		basic	=	+srp(latin):2
+  *		yu		unicode	=	+srp(latinunicode):2
+  *		yu		yz	=	+srp(latinyz):2
+  *		yu		unicodeyz	=	+srp(latinunicodeyz):2
+
+! model		layout[3]	variant[3]	=	symbols
+  *		ben		basic	=	+in(ben):3
+  *		ben		probhat	=	+in(ben_probhat):3
+  *		dev		basic	=	+in(deva):3
+  *		dvorak		$dvoraklayouts	=	+%v(dvorak):3
+  *		dvorak		basic	=	+us(dvorak):3
+  *		dvorak		pl_basic	=	+pl(dvorak):3
+  *		dvorak		pl	=	+pl(dvorak_quotes):3
+  *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):3
+  *		dzdwi		basic	=	+bt(basic):3
+  *		fi		basic	=	+fi(classic):3
+  *		ge		azerty_tskapo	=	+fr(geo):3
+  *		guj		basic	=	+in(guj):3
+  *		gur		basic	=	+in(guru):3
+  *		ie		laptop	=	+ie(basic):3
+  *		ie		CloGaelachLaptop	=	+ie(CloGaelach):3
+  *		in		urd	=	+in(urd-phonetic):3
+  *		iu		basic	=	+ca(ike):3
+  *		lo		basic	=	+la(basic):3
+  *		kan		basic	=	+in(kan):3
+  *		mal		basic	=	+in(mal):3
+  *		mal		mlplusnum	=	+in(mal):3
+  *		ogham		basic	=	+ie(ogam):3
+  *		ogham		laptop	=	+ie(ogam):3
+  *		ogham		is434	=	+ie(ogam_is434):3
+  *		ogham		is434laptop	=	+ie(ogam_is434):3
+  *		ori		basic	=	+in(ori):3
+  *		ro		de	=	+ro(winkeys):3
+  *		ro		us	=	+ro(std):3
+  *		ro		academic	=	+ro(std):3
+  *		ro		std_comma	=	+ro(std):3
+  *		ro		comma	=	+ro(basic):3
+  *		ru		os	=	+ru(os_legacy):3
+  *		pk		urd	=	+pk(urd-phonetic):3
+  *		sapmi		basic	=	+no(smi):3
+  *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):3
+  *		sapmi		sefi	=	+fi(smi):3
+  *		sin		phonetic-static	=	+in(sin_phonetic):3
+  *		syr		basic	=	+sy(syc):3
+  *		syr		phonetic	=	+sy(syc_phonetic):3
+  *		tam		INSCRIPT	=	+in(tam):3
+  *		tam		UNI	=	+in(tam_unicode):3
+  *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):3
+  *		tam		TAB	=	+in(tam_TAB):3
+  *		tam		TSCII	=	+in(tam_TSCII):3
+  *		tel		basic	=	+in(tel):3
+  *		yu		basic	=	+srp(latin):3
+  *		yu		unicode	=	+srp(latinunicode):3
+  *		yu		yz	=	+srp(latinyz):3
+  *		yu		unicodeyz	=	+srp(latinunicodeyz):3
+
+! model		layout[4]	variant[4]	=	symbols
+  *		ben		basic	=	+in(ben):4
+  *		ben		probhat	=	+in(ben_probhat):4
+  *		dev		basic	=	+in(deva):4
+  *		dvorak		$dvoraklayouts	=	+%v(dvorak):4
+  *		dvorak		basic	=	+us(dvorak):4
+  *		dvorak		pl_basic	=	+pl(dvorak):4
+  *		dvorak		pl	=	+pl(dvorak_quotes):4
+  *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):4
+  *		dzdwi		basic	=	+bt(basic):4
+  *		fi		basic	=	+fi(classic):4
+  *		ge		azerty_tskapo	=	+fr(geo):4
+  *		guj		basic	=	+in(guj):4
+  *		gur		basic	=	+in(guru):4
+  *		ie		laptop	=	+ie(basic):4
+  *		ie		CloGaelachLaptop	=	+ie(CloGaelach):4
+  *		in		urd	=	+in(urd-phonetic):4
+  *		iu		basic	=	+ca(ike):4
+  *		lo		basic	=	+la(basic):4
+  *		kan		basic	=	+in(kan):4
+  *		mal		basic	=	+in(mal):4
+  *		mal		mlplusnum	=	+in(mal):4
+  *		ogham		basic	=	+ie(ogam):4
+  *		ogham		laptop	=	+ie(ogam):4
+  *		ogham		is434	=	+ie(ogam_is434):4
+  *		ogham		is434laptop	=	+ie(ogam_is434):4
+  *		ori		basic	=	+in(ori):4
+  *		ro		de	=	+ro(winkeys):4
+  *		ro		us	=	+ro(std):4
+  *		ro		academic	=	+ro(std):4
+  *		ro		std_comma	=	+ro(std):4
+  *		ro		comma	=	+ro(basic):4
+  *		ru		os	=	+ru(os_legacy):4
+  *		pk		urd	=	+pk(urd-phonetic):4
+  *		sapmi		basic	=	+no(smi):4
+  *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):4
+  *		sapmi		sefi	=	+fi(smi):4
+  *		sin		phonetic-static	=	+in(sin_phonetic):4
+  *		syr		basic	=	+sy(syc):4
+  *		syr		phonetic	=	+sy(syc_phonetic):4
+  *		tam		INSCRIPT	=	+in(tam):4
+  *		tam		UNI	=	+in(tam_unicode):4
+  *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):4
+  *		tam		TAB	=	+in(tam_TAB):4
+  *		tam		TSCII	=	+in(tam_TSCII):4
+  *		tel		basic	=	+in(tel):4
+  *		yu		basic	=	+srp(latin):4
+  *		yu		unicode	=	+srp(latinunicode):4
+  *		yu		yz	=	+srp(latinyz):4
+  *		yu		unicodeyz	=	+srp(latinunicodeyz):4
+
+! model		=	symbols
+  $evdevkbds    =   +inet(evdev)+inet(%m)
+  applealu_jis  =   +inet(evdev)+macintosh_vndr/jp(alujiskeys)
+  *             =   +inet(evdev)
+
+! layout	variant		=	compat
+  de		neo			=	+caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock)
+  jp        $sun_compat =   complete+japan(kana_lock)
+
+! layout[1]	variant[1]	=	compat
+  de		neo			=	+caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock)
+  jp       $sun_compat =   complete+japan(kana_lock)
+
+! layout[2]	variant[2]	=	compat
+  de		neo			=	+caps(caps_lock):2+misc(assign_shift_left_action):2+level5(level5_lock):2
+  jp       $sun_compat  =   +complete+japan(kana_lock):2
+
+! layout[3]	variant[3]	=	compat
+  de		neo			=	+caps(caps_lock):3+misc(assign_shift_left_action):3+level5(level5_lock):3
+  jp       $sun_compat  =   +complete+japan(kana_lock):3
+
+! layout[4]	variant[4]	=	compat
+  de		neo			=	+caps(caps_lock):4+misc(assign_shift_left_action):4+level5(level5_lock):4
+  jp       $sun_compat  =   +complete+japan(kana_lock):4
+
+! model		layout		=	compat
+  pc98		nec_vndr/jp	=	pc98(basic)
+  *		jp		=	complete+japan
+  olpc          *               =       olpc
+  olpcm         *               =       olpc
+  *		*		=	complete
+
+! model		layout[1]	=	compat
+  *		*		=	complete
+
+! model		=	types
+  $macs		=	complete+numpad(mac)
+  $applealu	=	complete+numpad(mac)
+  $nokiamodels	=	complete+nokia
+  *		=	complete
+
+! layout	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle)
+  *			misc:typo 	= +typo(base)
+
+! layout[1]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):1
+  *			misc:typo 	= +typo(base):1
+
+! layout[2]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):2
+  *			misc:typo 	= +typo(base):2
+
+! layout[3]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):3
+  *			misc:typo 	= +typo(base):3
+
+! layout[4]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):4
+  *			misc:typo 	= +typo(base):4
+
+! option	=	symbols
+  grp:shift_toggle	=	+group(shifts_toggle)
+  altwin:menu		=	+altwin(menu)
+  altwin:meta_alt	=	+altwin(meta_alt)
+  altwin:alt_win	=	+altwin(alt_win)
+  altwin:ctrl_win	=	+altwin(ctrl_win)
+  altwin:ctrl_alt_win	=	+altwin(ctrl_alt_win)
+  altwin:meta_win	=	+altwin(meta_win)
+  altwin:left_meta_win	=	+altwin(left_meta_win)
+  altwin:hyper_win	=	+altwin(hyper_win)
+  altwin:alt_super_win	=	+altwin(alt_super_win)
+  altwin:swap_alt_win	=	+altwin(swap_alt_win)
+  grp:switch		=	+group(switch)
+  grp:lswitch		=	+group(lswitch)
+  grp:win_switch	=	+group(win_switch)
+  grp:lwin_switch	=	+group(lwin_switch)
+  grp:rwin_switch	=	+group(rwin_switch)
+  grp:toggle		=	+group(toggle)
+  grp:shifts_toggle	=	+group(shifts_toggle)
+  grp:ctrls_toggle	=	+group(ctrls_toggle)
+  grp:alts_toggle	=	+group(alts_toggle)
+  grp:caps_toggle	=	+capslock(grouplock)
+  grp:caps_switch       =       +capslock(groupshift)
+  grp:shift_caps_toggle	=	+group(shift_caps_toggle)
+  grp:shift_caps_switch	=	+group(shift_caps_switch)
+  grp:win_menu_switch	=	+group(win_menu_switch)
+  grp:alt_caps_toggle   =       +group(alt_caps_toggle)
+  grp:alt_space_toggle	=	+group(alt_space_toggle)
+  grp:menu_toggle	=	+group(menu_toggle)
+  grp:lwin_toggle	=	+group(lwin_toggle)
+  grp:rwin_toggle	=	+group(rwin_toggle)
+  grp:lshift_toggle	=	+group(lshift_toggle)
+  grp:rshift_toggle	=	+group(rshift_toggle)
+  grp:rctrl_switch	=	+group(rctrl_switch)
+  grp:lctrl_toggle	=	+group(lctrl_toggle)
+  grp:rctrl_toggle	=	+group(rctrl_toggle)
+  grp:lalt_toggle	=	+group(lalt_toggle)
+  grp:sclk_toggle	=	+group(sclk_toggle)
+  grp:lctrl_rctrl_switch	=	+group(lctrl_rctrl_switch)
+  grp:lctrl_lwin_rctrl_menu	=	+group(lctrl_lwin_rctrl_menu)
+  grp:lctrl_lalt_toggle	=	+group(lctrl_lalt_toggle)
+  grp:rctrl_ralt_toggle	=	+group(rctrl_ralt_toggle)
+  grp:ctrl_alt_toggle	=	+group(ctrl_alt_toggle)
+  grp:ctrl_alt_toggle_bidir	=	+group(ctrl_alt_toggle_bidir)
+  grp:lctrl_lshift_toggle	=	+group(lctrl_lshift_toggle)
+  grp:rctrl_rshift_toggle	=	+group(rctrl_rshift_toggle)
+  grp:ctrl_shift_toggle	=	+group(ctrl_shift_toggle)
+  grp:ctrl_shift_toggle_bidir	=	+group(ctrl_shift_toggle_bidir)
+  grp:lalt_lshift_toggle	=	+group(lalt_lshift_toggle)
+  grp:ralt_rshift_toggle	=	+group(ralt_rshift_toggle)
+  grp:alt_shift_toggle	=	+group(alt_shift_toggle)
+  grp:alt_shift_toggle_bidir	=	+group(alt_shift_toggle_bidir)
+  lv3:switch		=	+level3(switch)
+  lv3:ralt_switch	=	+level3(ralt_switch)
+  lv3:ralt_switch_multikey	=	+level3(ralt_switch_multikey)
+  lv3:ralt_alt		=	+level3(ralt_alt)
+  lv3:lalt_switch	=	+level3(lalt_switch)
+  lv3:alt_switch	=	+level3(alt_switch)
+  lv3:menu_switch	=	+level3(menu_switch)
+  lv3:win_switch	=	+level3(win_switch)
+  lv3:lwin_switch	=	+level3(lwin_switch)
+  lv3:rwin_switch	=	+level3(rwin_switch)
+  lv3:enter_switch	=	+level3(enter_switch)
+  caps:capslock		=	+capslock(capslock)
+  caps:numlock		=	+capslock(numlock)
+  caps:shiftlock	=	+capslock(shiftlock)
+  caps:swapescape	=	+capslock(swapescape)
+  caps:escape		=	+capslock(escape)
+  caps:backspace	=	+capslock(backspace)
+  caps:super		=	+capslock(super)
+  caps:hyper		=	+capslock(hyper)
+  caps:none		=	+capslock(none)
+  caps:ctrl_modifier	=	+capslock(ctrl_modifier)
+  ctrl:nocaps		=	+ctrl(nocaps)
+  ctrl:lctrl_meta	=	+ctrl(lctrl_meta)
+  ctrl:swapcaps		=	+ctrl(swapcaps)
+  ctrl:ac_ctrl		=	+ctrl(ac_ctrl)
+  ctrl:aa_ctrl		=	+ctrl(aa_ctrl)
+  ctrl:rctrl_ralt	=	+ctrl(rctrl_ralt)
+  ctrl:menu_rctrl	=	+ctrl(menu_rctrl)
+  ctrl:ralt_rctrl	=	+ctrl(ralt_rctrl)
+  compose:ralt		=	+compose(ralt)
+  compose:lwin		=	+compose(lwin)
+  compose:lwin-altgr	=	+compose(lwin-altgr)
+  compose:rwin		=	+compose(rwin)
+  compose:rwin-altgr	=	+compose(rwin-altgr)
+  compose:menu		=	+compose(menu)
+  compose:menu-altgr	=	+compose(menu-altgr)
+  compose:lctrl		=	+compose(lctrl)
+  compose:lctrl-altgr	=	+compose(lctrl-altgr)
+  compose:rctrl		=	+compose(rctrl)
+  compose:rctrl-altgr	=	+compose(rctrl-altgr)
+  compose:caps		=	+compose(caps)
+  compose:caps-altgr	=	+compose(caps-altgr)
+  compose:102		=	+compose(102)
+  compose:102-altgr	=	+compose(102-altgr)
+  compose:paus		=	+compose(paus)
+  compose:prsc		=	+compose(prsc)
+  compose:sclk		=	+compose(sclk)
+  srvrkeys:none		=	+srvr_ctrl(no_srvr_keys)
+  eurosign:e		=	+eurosign(e)
+  eurosign:2		=	+eurosign(2)
+  eurosign:4		=	+eurosign(4)
+  eurosign:5		=	+eurosign(5)
+  rupeesign:4           =       +rupeesign(4)
+  keypad:oss            =       +keypad(oss)
+  keypad:legacy         =	+keypad(legacy)
+  keypad:legacy_wang    =	+keypad(legacy_wang)
+  keypad:oss_wang       =	+keypad(oss_wang)
+  keypad:future         =	+keypad(future)
+  keypad:future_wang    =	+keypad(future_wang)
+  keypad:hex            =	+keypad(ops)+keypad(hex)
+  keypad:atm            =	+keypad(ops)+keypad(hex)+keypad(atm)  
+  nbsp:none             =	+nbsp(none)
+  nbsp:level2           =	+nbsp(level2)
+  nbsp:level3           =	+nbsp(level3)
+  nbsp:level3s          =	+nbsp(level3s)
+  nbsp:level3n          =	+nbsp(level3n)
+  nbsp:level4           =	+nbsp(level4)
+  nbsp:level4n          =	+nbsp(level4n)
+  nbsp:level4nl         =	+nbsp(level4nl)
+  japan:nicola_f_bs     =	+jp(nicola_f_bs)
+  japan:hztg_escape     =	+jp(hztg_escape)
+  kpdl:dot              =	+kpdl(dot)
+  kpdl:comma            =	+kpdl(comma)
+  kpdl:dotoss           =	+kpdl(dotoss)
+  kpdl:dotoss_latin9    =	+kpdl(dotoss_latin9)
+  kpdl:commaoss         =	+kpdl(commaoss)
+  kpdl:momayyezoss      =	+kpdl(momayyezoss)
+  kpdl:kposs            =	+kpdl(kposs)
+  kpdl:semi             =	+kpdl(semi)
+  shift:breaks_caps     =	+shift(breaks_caps)
+  esperanto:qwerty      =	+epo(qwerty)
+  esperanto:dvorak      =	+epo(dvorak)
+  terminate:ctrl_alt_bksp =	+terminate(ctrl_alt_bksp)
+  keypad:pointerkeys	=	+keypad(pointerkeys)
+  apple:alupckeys	=	+macintosh_vndr/apple(alupckeys)
+  shift:both_capslock                =       +shift(both_capslock)
+  shift:lshift_both_capslock         =       +shift(lshift_both_capslock)
+  shift:rshift_both_capslock         =       +shift(rshift_both_capslock)
+  shift:both_capslock_cancel         =       +shift(both_capslock_cancel)
+  shift:lshift_both_capslock_cancel  =       +shift(lshift_both_capslock_cancel)
+  shift:rshift_both_capslock_cancel  =       +shift(rshift_both_capslock_cancel)
+  shift:both_shiftlock               =       +shift(both_shiftlock)
+  shift:lshift_both_shiftlock        =       +shift(lshift_both_shiftlock)
+  shift:rshift_both_shiftlock        =       +shift(rshift_both_shiftlock)
+  solaris:sun_compat				 =		 +sun_vndr/solaris(sun_compat)
+  lv3:caps_switch                    =       +level3(caps_switch)
+  lv3:bksl_switch                    =       +level3(bksl_switch)
+  lv3:lsgt_switch                    =       +level3(lsgt_switch)
+  lv3:caps_switch_latch              =       +level3(caps_switch_latch)
+  lv3:bksl_switch_latch              =       +level3(bksl_switch_latch)
+  lv3:lsgt_switch_latch              =       +level3(lsgt_switch_latch)
+  lv5:lsgt_switch_lock            =       +level5(lsgt_switch_lock)
+  lv5:ralt_switch_lock            =       +level5(ralt_switch_lock)
+  lv5:lwin_switch_lock            =       +level5(lwin_switch_lock)
+  lv5:rwin_switch_lock            =       +level5(rwin_switch_lock)
+  lv5:lsgt_switch_lock_cancel     =       +level5(lsgt_switch_lock_cancel)
+  lv5:ralt_switch_lock_cancel     =       +level5(ralt_switch_lock_cancel)
+  lv5:lwin_switch_lock_cancel     =       +level5(lwin_switch_lock_cancel)
+  lv5:rwin_switch_lock_cancel     =       +level5(rwin_switch_lock_cancel)
+
+
+
+! option	=	compat
+  grp_led:num		=	+lednum(group_lock)
+  grp_led:caps		=	+ledcaps(group_lock)
+  grp_led:scroll	=	+ledscroll(group_lock)
+  japan:kana_lock	=	+japan(kana_lock)
+  caps:shiftlock	=	+ledcaps(shift_lock)
+  grab:break_actions    =       +xfree86(grab_break)
+
+
+! option	=	types
+  caps:internal			=	+caps(internal)
+  caps:internal_nocancel	=	+caps(internal_nocancel)
+  caps:shift			=	+caps(shift)
+  caps:shift_nocancel		=	+caps(shift_nocancel)
+  numpad:pc			=	+numpad(pc)
+  numpad:mac			=	+numpad(mac)
+  numpad:microsoft		=	+numpad(microsoft)
+  numpad:shift3       		=	+numpad(shift3)
diff --git a/data/rules/evdev-xkbcommon b/data/rules/evdev-xkbcommon
new file mode 100644
--- /dev/null
+++ b/data/rules/evdev-xkbcommon
@@ -0,0 +1,1092 @@
+// DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.sh FROM rules/*.part
+//
+//  Rules for resolving XKB components for use with XFree86
+//  Copyright 1996 by Joseph Moss
+//
+//  2002 Modifier: Ivan Pascal      The XFree86 Project
+//
+
+// If you want non-latin layouts implicitly include the en_US layout
+// uncomment lines below
+//! $nonlatin = am ara ben bd bg bt by cs deva ge gh gr guj guru il \
+//              in ir iku jp kan kh kr la lao lk mk mm mn mv mal ori pk \
+//              ru scc sy syr tel th tj tam ua uz
+
+// PC models
+! $pcmodels = pc101 pc102 pc104 pc105
+
+// Microsoft models (using MS geometry)
+! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose
+
+// Nokia devices and keyboards
+! $nokiamodels = nokiasu8w nokiarx44 nokiarx51
+
+// PC geometries - they have special geometry but symbols are mostly pc105
+! $pcgeometries = latitude
+
+// TypeMatrix geometries
+! $tmgeometries = tm2020 tm2030PS2 tm2030USB tm2030USB-102 tm2030USB-106
+
+// Layouts that provide further specializations for the OLPC
+! $olpclayouts = af am ara br ca es et fr it kh kz in mn np ru th tr us 
+
+! $macbooks = macbook78 macbook79
+! $maclaptop = ibook powerbook macbook78 macbook79
+! $applealu = applealu_ansi applealu_iso applealu_jis
+! $macs = macintosh macintosh_old ibook powerbook macbook78 macbook79
+
+! $macvendorlayouts = ch de dk fi fr gb is it latam nl no pt se us
+
+! $azerty = be fr
+! $qwertz = al cz de hr hu ro si sk 
+
+! $inetkbds = acer_c300 acer_ferrari4k acer_laptop \
+              airkey \
+              apple armada azonaRF2300 \
+              benqx brother \
+              btc5113rf btc9000 btc9000a btc9001ah btc5090 btc9019u \
+              cherryblue cherrybluea cherryblueb \
+              cherrycyboard cherrycmexpert \
+              chicony chicony0108 chicony0420 chicony9885 \
+              compalfl90 \
+              compaqeak8 compaqik7 compaqik13 compaqik18 \
+              creativedw7000 \
+              cymotionlinux \
+              dell dellm65 inspiron dellusbmm \
+              emachines ennyah_dkb1008 evdev \
+              genius geniuscomfy2 \
+              gyration honeywell_euroboard \
+              hp250x hp5xx hp500fa hpdv5 \
+              hpi6 hpxe3gc hpxe3gf hpxe4xxx hpxt1000 hpzt11xx htcdream \
+              ibm_spacesaver ipaq inspiron intel \
+              logiaccess logicda logicink \
+              logiex110 logiclx300 \
+              logiinkse logiinkseusb logiitc logiik \
+              logitech_base itouch logiultrax \
+              logitech_g15 \
+              logidinovo logidinovoedge \
+              microsoft4000 microsoft7000 microsoftinet microsoftprousb microsoftprooem microsoftprose \
+              microsoftoffice microsoftmult \
+              mx1998 mx2500 mx2750 \
+              oretec \
+              pc105 \
+              presario propeller \
+              qtronix \
+              rapidaccess rapidaccess2 thinkpad60 \
+              samsung4500 samsung4510 \
+              silvercrest \
+              sk1300 sk2500 sk6200 sk7100 \
+              sven sven303 symplon \
+              toshiba_s3000 trust trustda \
+              unitekkb1925 yahoo
+
+// all layouts with 3rd and 4th groups
+! $threelevellayouts = al az \
+              be br bt \
+              ca ch cs cz \
+              de dk \
+              ee es \
+              fi fo fr \
+              gb gr \
+              hu \
+              ie ir is it \
+              latam \
+              lk lt \
+              mn mt \
+              nl no \
+              pl pt \
+              ro \
+              se sk \
+              tr \
+              us \
+              vn \
+              za
+
+! $evdevkbds = ibm_spacesaver
+
+! $thinkpads = thinkpad thinkpad60 thinkpadz60
+
+! $sun_t6_custom = ara be br ca ch cz de dk \
+                   ee es fi fr gb gr it kr \
+                   lt lv nl no pl pt ro ru \
+                   se sk tr tw ua
+
+! $htcdreamlayouts = us it de
+
+! $dvoraklayouts = br ca de ee es fr gb no pl se us
+
+! model		=	keycodes
+  *		=	evdev-xkbcommon
+
+! layout[1]	=	keycodes
+  $azerty       =       +aliases-xkbcommon(azerty)
+  $qwertz       =       +aliases-xkbcommon(qwertz)
+  *             =       +aliases-xkbcommon(qwerty)
+
+! layout	=	keycodes
+  $azerty       =       +aliases-xkbcommon(azerty)
+  $qwertz       =       +aliases-xkbcommon(qwertz)
+  *             =       +aliases-xkbcommon(qwerty)
+
+! model		layout	=	geometry
+  thinkpad     us              =       thinkpad(us)
+
+! model		=	geometry
+  microsoftelite	=	microsoft(elite)
+ $msmodels	=	microsoft(natural)
+  dell101	=	dell(dell101)
+  dellm65	=	dell(dellm65)
+  latitude	=	dell(latitude)
+  flexpro	=	keytronic(FlexPro)
+  hp6000	=	hp(omnibook)
+  hpmini110	=	hp(mini110)
+  hpdv5		=	hp(dv5)
+  omnikey101	=	northgate(omnikey101)
+  sanwaskbkg3	=	sanwa(sanwaskbkg3)
+ $pcmodels	=	pc(%m)
+ $pcgeometries	=	pc(%m)
+  everex	=	everex(STEPnote)
+  thinkpad	=	thinkpad(intl)
+  thinkpad60	=	thinkpad(60)
+  thinkpadz60	=	thinkpad(60)
+ $tmgeometries	=	typematrix(%m)
+  winbook	=	winbook(XP5)
+  pc98		=	nec(pc98)
+ $applealu	=	macintosh(%m)
+ $macbooks      =       macintosh(%m)
+ $macs		=	macintosh(macintosh)
+  hhk		=	hhk(basic)
+  kinesis	=	kinesis(model100)
+ $nokiamodels	=	nokia(%m)
+  *		=       pc(pc104)
+
+! model		layout		variant		=	symbols
+  *		ben		basic		=	pc+in(ben)
+  *		ben		probhat		=	pc+in(ben_probhat)
+  *		dev		basic		=	pc+in(deva)
+  *		dvorak		$dvoraklayouts		=	pc+%v(dvorak)
+  *		dvorak		basic		=	pc+us(dvorak)
+  *		dvorak		pl_basic		=	pc+pl(dvorak)
+  *		dvorak		pl		=	pc+pl(dvorak_quotes)
+  *		dvorak		pl_altquotes		=	pc+pl(dvorak_altquotes)
+  *		dzdwi		basic		=	pc+bt(basic)
+  *		fi		basic		=	pc+fi(classic)
+  *		ge		azerty_tskapo		=	pc+fr(geo)
+  *		guj		basic		=	pc+in(guj)
+  *		gur		basic		=	pc+in(guru)
+  *		ie		laptop		=	pc+ie(basic)
+  *		ie		CloGaelachLaptop		=	pc+ie(CloGaelach)
+  *		in		urd		=	pc+in(urd-phonetic)
+  *		iu		basic		=	pc+ca(ike)
+  *		lo		basic		=	pc+la(basic)
+  *		kan		basic		=	pc+in(kan)
+  *		mal		basic		=	pc+in(mal)
+  *		mal		mlplusnum		=	pc+in(mal)
+  *		ogham		basic		=	pc+ie(ogam)
+  *		ogham		laptop		=	pc+ie(ogam)
+  *		ogham		is434		=	pc+ie(ogam_is434)
+  *		ogham		is434laptop		=	pc+ie(ogam_is434)
+  *		ori		basic		=	pc+in(ori)
+  *		ro		de		=	pc+ro(winkeys)
+  *		ro		us		=	pc+ro(std)
+  *		ro		academic		=	pc+ro(std)
+  *		ro		std_comma		=	pc+ro(std)
+  *		ro		comma		=	pc+ro(basic)
+  *		ru		os		=	pc+ru(os_legacy)
+  *		pk		urd		=	pc+pk(urd-phonetic)
+  *		sapmi		basic		=	pc+no(smi)
+  *		sapmi		nodeadkeys		=	pc+no(smi_nodeadkeys)
+  *		sapmi		sefi		=	pc+fi(smi)
+  *		sin		phonetic-static		=	pc+in(sin_phonetic)
+  *		syr		basic		=	pc+sy(syc)
+  *		syr		phonetic		=	pc+sy(syc_phonetic)
+  *		tam		INSCRIPT		=	pc+in(tam)
+  *		tam		UNI		=	pc+in(tam_unicode)
+  *		tam		NUMERAL-KEYBOARD		=	pc+in(tam_keyboard_with_numerals)
+  *		tam		TAB		=	pc+in(tam_TAB)
+  *		tam		TSCII		=	pc+in(tam_TSCII)
+  *		tel		basic		=	pc+in(tel)
+  *		yu		basic		=	pc+srp(latin)
+  *		yu		unicode		=	pc+srp(latinunicode)
+  *		yu		yz		=	pc+srp(latinyz)
+  *		yu		unicodeyz		=	pc+srp(latinunicodeyz)
+  classmate	us		intl		=	pc+us(classmate-intl)
+  classmate	us		alt-intl	=	pc+us(classmate-alt-intl)
+  classmate	us		altgr-intl	=	pc+us(classmate-altgr-intl)
+  nokiarx51	cz		qwerty		=	nokia_vndr/rx-51(cz_qwerty)
+
+! model		layout				=	symbols
+  *		ar			=	pc+ara
+  *		ben			=	pc+in(ben)
+  *		bs			=	pc+ba
+  *		cs			=	pc+rs
+  *		cz_qwerty			=	pc+cz(qwerty)
+  *		dev			=	pc+in(deva)
+  *		dvorak			=	pc+us(dvorak)
+  *		dzdwi			=	pc+bt
+  *		el			=	pc+gr
+  *		en_US			=	pc+latin
+  *		guj			=	pc+in(guj)
+  *		gur			=	pc+in(guru)
+  *		iu			=	pc+ca(ike)
+  *		lo			=	pc+la
+  *		kan			=	pc+in(kan)
+  *		mi			=	pc+mao
+  *		ml			=	pc+in(mal)
+  *		ogham			=	pc+ie(ogam)
+  *		ori			=	pc+ie(ori)
+  *		sapmi			=	pc+no(smi)
+  *		sr			=	pc+srp
+  *		syr			=	pc+sy(syc)
+  *		tel			=	pc+in(tel)
+  *		tml			=	pc+in(tam)
+  *		yu			=	pc+srp
+  *		fr-latin9			=	pc+fr(latin9)
+  *		us_intl			=	pc+us(alt-intl)
+  *		ben(basic)			=	pc+in(ben)
+  *		ben(probhat)			=	pc+in(ben_probhat)
+  *		dev(basic)			=	pc+in(deva)
+  *		dvorak($dvoraklayouts)			=	pc+%v(dvorak)
+  *		dvorak(basic)			=	pc+us(dvorak)
+  *		dvorak(pl_basic)			=	pc+pl(dvorak)
+  *		dvorak(pl)			=	pc+pl(dvorak_quotes)
+  *		dvorak(pl_altquotes)			=	pc+pl(dvorak_altquotes)
+  *		dzdwi(basic)			=	pc+bt(basic)
+  *		fi(basic)			=	pc+fi(classic)
+  *		ge(azerty_tskapo)			=	pc+fr(geo)
+  *		guj(basic)			=	pc+in(guj)
+  *		gur(basic)			=	pc+in(guru)
+  *		ie(laptop)			=	pc+ie(basic)
+  *		ie(CloGaelachLaptop)			=	pc+ie(CloGaelach)
+  *		in(urd)			=	pc+in(urd-phonetic)
+  *		iu(basic)			=	pc+ca(ike)
+  *		lo(basic)			=	pc+la(basic)
+  *		kan(basic)			=	pc+in(kan)
+  *		mal(basic)			=	pc+in(mal)
+  *		mal(mlplusnum)			=	pc+in(mal)
+  *		ogham(basic)			=	pc+ie(ogam)
+  *		ogham(laptop)			=	pc+ie(ogam)
+  *		ogham(is434)			=	pc+ie(ogam_is434)
+  *		ogham(is434laptop)			=	pc+ie(ogam_is434)
+  *		ori(basic)			=	pc+in(ori)
+  *		ro(de)			=	pc+ro(winkeys)
+  *		ro(us)			=	pc+ro(std)
+  *		ro(academic)			=	pc+ro(std)
+  *		ro(std_comma)			=	pc+ro(std)
+  *		ro(comma)			=	pc+ro(basic)
+  *		ru(os)			=	pc+ru(os_legacy)
+  *		pk(urd)			=	pc+pk(urd-phonetic)
+  *		sapmi(basic)			=	pc+no(smi)
+  *		sapmi(nodeadkeys)			=	pc+no(smi_nodeadkeys)
+  *		sapmi(sefi)			=	pc+fi(smi)
+  *		sin(phonetic-static)			=	pc+in(sin_phonetic)
+  *		syr(basic)			=	pc+sy(syc)
+  *		syr(phonetic)			=	pc+sy(syc_phonetic)
+  *		tam(INSCRIPT)			=	pc+in(tam)
+  *		tam(UNI)			=	pc+in(tam_unicode)
+  *		tam(NUMERAL-KEYBOARD)			=	pc+in(tam_keyboard_with_numerals)
+  *		tam(TAB)			=	pc+in(tam_TAB)
+  *		tam(TSCII)			=	pc+in(tam_TSCII)
+  *		tel(basic)			=	pc+in(tel)
+  *		yu(basic)			=	pc+srp(latin)
+  *		yu(unicode)			=	pc+srp(latinunicode)
+  *		yu(yz)			=	pc+srp(latinyz)
+  *		yu(unicodeyz)			=	pc+srp(latinunicodeyz)
+  ataritt	$nonlatin		=	xfree68_vndr/ataritt(us)+%l%(v):2
+  ataritt	*			=	xfree68_vndr/ataritt(us)+%l%(v)
+  amiga		$nonlatin		=	xfree68_vndr/amiga(usa1)+%l%(v):2
+  amiga		*			=	xfree68_vndr/amiga(usa1)+%l%(v)
+  classmate	us			=	pc+%l(classmate)
+  empty         *                       =       empty(basic)
+  *             empty                   =       empty(basic)
+  sun4		$nonlatin		=	latin+sun_vndr/us(type4)+%l%(v):2
+  sun4		*			=	latin+sun_vndr/us(type4)+%l%(v)
+  sun5		$nonlatin		=	latin+sun_vndr/us(type5)+%l%(v):2
+  sun5		*			=	latin+sun_vndr/us(type5)+%l%(v)
+  sun6		us			=	pc+sun_vndr/us(type6)
+  sun6		en_US			=	pc+sun_vndr/us(type6)+iso9995-3(basic)
+  sun6		$sun_t6_custom		=	pc+sun_vndr/us(type6)+sun_vndr/%l%(v)
+  sun6		*			=	pc+sun_vndr/us(type6)+%l%(v)
+  sun6euro	us			=	pc+sun_vndr/us(type6)
+  sun6euro	en_US			=	pc+sun_vndr/us(type6)+iso9995-3(basic)
+  sun6euro	$sun_t6_custom		=	pc+sun_vndr/us(type6)+sun_vndr/%l%(v)
+  sun6euro	*			=	pc+sun_vndr/us(type6)+%l%(v)
+  pc98		nec_vndr/jp		=	nec_vndr/jp(pc98)
+  macintosh_old	us			=	macintosh_vndr/us(oldmac)
+  macintosh_old	en_US			=	macintosh_vndr/us(oldmac)
+  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l%(v)
+  macintosh_old	$nonlatin		=	macintosh_vndr/us(oldmac)+%l%(v):2
+  macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l%(v)
+  applealu_jis	jp			=	macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)+macintosh_vndr/jp(mac):2
+  applealu_jis	*			=	macintosh_vndr/apple(alukbd)+%l%(v)+macintosh_vndr/jp(mac):2
+ $applealu	$macvendorlayouts	=	macintosh_vndr/apple(alukbd)+macintosh_vndr/%l%(v)
+ $applealu	*			=	macintosh_vndr/apple(alukbd)+%l%(v)
+ $macs		en_US			=	pc+macintosh_vndr/us(extended)
+ $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l%(v)
+  nokiarx44	*			=	nokia_vndr/rx-44(%l)
+  nokiarx51	cz(qwerty)		=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty)
+  nokiarx51	*			=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l%_v)
+  nokiasu8w	*			=	nokia_vndr/su-8w(%l)
+  olpc		$olpclayouts		=	olpc+%l%(m)
+  olpc		*			=	olpc+%l%(v)
+ $thinkpads   	br			=	pc+br(thinkpad)
+  htcdream	$htcdreamlayouts	=	%l(htcdream)
+  *	   	$nonlatin		=	pc+us+%l%(v):2
+  *		*			=	pc+%l%(v)
+
+! model		layout[1]			=	symbols
+  *		ar			=	pc+ara%(v[1])
+  *		ben			=	pc+in(ben)
+  *		bs			=	pc+ba%(v[1])
+  *		cs			=	pc+rs%(v[1])
+  *		cz_qwerty			=	pc+cz(qwerty)
+  *		dev			=	pc+in(deva)
+  *		dvorak			=	pc+us(dvorak)
+  *		dzdwi			=	pc+bt%(v[1])
+  *		el			=	pc+gr%(v[1])
+  *		en_US			=	pc+latin%(v[1])
+  *		guj			=	pc+in(guj)
+  *		gur			=	pc+in(guru)
+  *		iu			=	pc+ca(ike)
+  *		lo			=	pc+la%(v[1])
+  *		kan			=	pc+in(kan)
+  *		mi			=	pc+mao%(v[1])
+  *		ml			=	pc+in(mal)
+  *		ogham			=	pc+ie(ogam)
+  *		ori			=	pc+ie(ori)
+  *		sapmi			=	pc+no(smi)
+  *		sr			=	pc+srp%(v[1])
+  *		syr			=	pc+sy(syc)
+  *		tel			=	pc+in(tel)
+  *		tml			=	pc+in(tam)
+  *		yu			=	pc+srp%(v[1])
+  *		fr-latin9			=	pc+fr(latin9)
+  *		us_intl			=	pc+us(alt-intl)
+  *		ben(basic)			=	pc+in(ben)
+  *		ben(probhat)			=	pc+in(ben_probhat)
+  *		dev(basic)			=	pc+in(deva)
+  *		dvorak($dvoraklayouts)			=	pc+%v(dvorak)
+  *		dvorak(basic)			=	pc+us(dvorak)
+  *		dvorak(pl_basic)			=	pc+pl(dvorak)
+  *		dvorak(pl)			=	pc+pl(dvorak_quotes)
+  *		dvorak(pl_altquotes)			=	pc+pl(dvorak_altquotes)
+  *		dzdwi(basic)			=	pc+bt(basic)
+  *		fi(basic)			=	pc+fi(classic)
+  *		ge(azerty_tskapo)			=	pc+fr(geo)
+  *		guj(basic)			=	pc+in(guj)
+  *		gur(basic)			=	pc+in(guru)
+  *		ie(laptop)			=	pc+ie(basic)
+  *		ie(CloGaelachLaptop)			=	pc+ie(CloGaelach)
+  *		in(urd)			=	pc+in(urd-phonetic)
+  *		iu(basic)			=	pc+ca(ike)
+  *		lo(basic)			=	pc+la(basic)
+  *		kan(basic)			=	pc+in(kan)
+  *		mal(basic)			=	pc+in(mal)
+  *		mal(mlplusnum)			=	pc+in(mal)
+  *		ogham(basic)			=	pc+ie(ogam)
+  *		ogham(laptop)			=	pc+ie(ogam)
+  *		ogham(is434)			=	pc+ie(ogam_is434)
+  *		ogham(is434laptop)			=	pc+ie(ogam_is434)
+  *		ori(basic)			=	pc+in(ori)
+  *		ro(de)			=	pc+ro(winkeys)
+  *		ro(us)			=	pc+ro(std)
+  *		ro(academic)			=	pc+ro(std)
+  *		ro(std_comma)			=	pc+ro(std)
+  *		ro(comma)			=	pc+ro(basic)
+  *		ru(os)			=	pc+ru(os_legacy)
+  *		pk(urd)			=	pc+pk(urd-phonetic)
+  *		sapmi(basic)			=	pc+no(smi)
+  *		sapmi(nodeadkeys)			=	pc+no(smi_nodeadkeys)
+  *		sapmi(sefi)			=	pc+fi(smi)
+  *		sin(phonetic-static)			=	pc+in(sin_phonetic)
+  *		syr(basic)			=	pc+sy(syc)
+  *		syr(phonetic)			=	pc+sy(syc_phonetic)
+  *		tam(INSCRIPT)			=	pc+in(tam)
+  *		tam(UNI)			=	pc+in(tam_unicode)
+  *		tam(NUMERAL-KEYBOARD)			=	pc+in(tam_keyboard_with_numerals)
+  *		tam(TAB)			=	pc+in(tam_TAB)
+  *		tam(TSCII)			=	pc+in(tam_TSCII)
+  *		tel(basic)			=	pc+in(tel)
+  *		yu(basic)			=	pc+srp(latin)
+  *		yu(unicode)			=	pc+srp(latinunicode)
+  *		yu(yz)			=	pc+srp(latinyz)
+  *		yu(unicodeyz)			=	pc+srp(latinunicodeyz)
+  ataritt	*			=	xfree68_vndr/ataritt(us)+%l[1]%(v[1])
+  amiga		*			=	xfree68_vndr/amiga(usa1)+%l[1]%(v[1])
+  sun4		*			=	latin+sun_vndr/us(type4)+%l[1]%(v[1])
+  sun5		*			=	latin+sun_vndr/us(type5)+%l[1]%(v[1])
+  macintosh_old	us			=	macintosh_vndr/us(oldmac)
+  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l[1]%(v[1])
+  macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l[1]%(v[1])
+  applealu_jis	us			=	macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)
+ $applealu	$macvendorlayouts	=	macintosh_vndr/apple(alukbd)+macintosh_vndr/%l[1]%(v[1])
+ $applealu	*			=	macintosh_vndr/apple(alukbd)+%l[1]%(v[1])
+ $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l[1]%(v[1])
+  nokiarx51	cz(qwerty)		=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty)
+  nokiarx51	*			=	nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l[1]%_v[1])
+ $thinkpads	br			=	pc+%l[1](thinkpad)
+  *		*			=	pc+%l[1]%(v[1])
+
+! model		layout[1]	variant[1]	=	symbols
+  *		ben		basic		=	pc+in(ben)
+  *		ben		probhat		=	pc+in(ben_probhat)
+  *		dev		basic		=	pc+in(deva)
+  *		dvorak		$dvoraklayouts		=	pc+%v(dvorak)
+  *		dvorak		basic		=	pc+us(dvorak)
+  *		dvorak		pl_basic		=	pc+pl(dvorak)
+  *		dvorak		pl		=	pc+pl(dvorak_quotes)
+  *		dvorak		pl_altquotes		=	pc+pl(dvorak_altquotes)
+  *		dzdwi		basic		=	pc+bt(basic)
+  *		fi		basic		=	pc+fi(classic)
+  *		ge		azerty_tskapo		=	pc+fr(geo)
+  *		guj		basic		=	pc+in(guj)
+  *		gur		basic		=	pc+in(guru)
+  *		ie		laptop		=	pc+ie(basic)
+  *		ie		CloGaelachLaptop		=	pc+ie(CloGaelach)
+  *		in		urd		=	pc+in(urd-phonetic)
+  *		iu		basic		=	pc+ca(ike)
+  *		lo		basic		=	pc+la(basic)
+  *		kan		basic		=	pc+in(kan)
+  *		mal		basic		=	pc+in(mal)
+  *		mal		mlplusnum		=	pc+in(mal)
+  *		ogham		basic		=	pc+ie(ogam)
+  *		ogham		laptop		=	pc+ie(ogam)
+  *		ogham		is434		=	pc+ie(ogam_is434)
+  *		ogham		is434laptop		=	pc+ie(ogam_is434)
+  *		ori		basic		=	pc+in(ori)
+  *		ro		de		=	pc+ro(winkeys)
+  *		ro		us		=	pc+ro(std)
+  *		ro		academic		=	pc+ro(std)
+  *		ro		std_comma		=	pc+ro(std)
+  *		ro		comma		=	pc+ro(basic)
+  *		ru		os		=	pc+ru(os_legacy)
+  *		pk		urd		=	pc+pk(urd-phonetic)
+  *		sapmi		basic		=	pc+no(smi)
+  *		sapmi		nodeadkeys		=	pc+no(smi_nodeadkeys)
+  *		sapmi		sefi		=	pc+fi(smi)
+  *		sin		phonetic-static		=	pc+in(sin_phonetic)
+  *		syr		basic		=	pc+sy(syc)
+  *		syr		phonetic		=	pc+sy(syc_phonetic)
+  *		tam		INSCRIPT		=	pc+in(tam)
+  *		tam		UNI		=	pc+in(tam_unicode)
+  *		tam		NUMERAL-KEYBOARD		=	pc+in(tam_keyboard_with_numerals)
+  *		tam		TAB		=	pc+in(tam_TAB)
+  *		tam		TSCII		=	pc+in(tam_TSCII)
+  *		tel		basic		=	pc+in(tel)
+  *		yu		basic		=	pc+srp(latin)
+  *		yu		unicode		=	pc+srp(latinunicode)
+  *		yu		yz		=	pc+srp(latinyz)
+  *		yu		unicodeyz		=	pc+srp(latinunicodeyz)
+
+! model		layout[2]	=	symbols
+  *		ar		=	+ara%(v[2]):2
+  *		ben		=	+in(ben):2
+  *		bs		=	+ba%(v[2]):2
+  *		cs		=	+rs%(v[2]):2
+  *		cz_qwerty		=	+cz(qwerty):2
+  *		dev		=	+in(deva):2
+  *		dvorak		=	+us(dvorak):2
+  *		dzdwi		=	+bt%(v[2]):2
+  *		el		=	+gr%(v[2]):2
+  *		en_US		=	+latin%(v[2]):2
+  *		guj		=	+in(guj):2
+  *		gur		=	+in(guru):2
+  *		iu		=	+ca(ike):2
+  *		lo		=	+la%(v[2]):2
+  *		kan		=	+in(kan):2
+  *		mi		=	+mao%(v[2]):2
+  *		ml		=	+in(mal):2
+  *		ogham		=	+ie(ogam):2
+  *		ori		=	+ie(ori):2
+  *		sapmi		=	+no(smi):2
+  *		sr		=	+srp%(v[2]):2
+  *		syr		=	+sy(syc):2
+  *		tel		=	+in(tel):2
+  *		tml		=	+in(tam):2
+  *		yu		=	+srp%(v[2]):2
+  *		fr-latin9		=	+fr(latin9):2
+  *		us_intl		=	+us(alt-intl):2
+  *		ben(basic)	=	+in(ben):2
+  *		ben(probhat)	=	+in(ben_probhat):2
+  *		dev(basic)	=	+in(deva):2
+  *		dvorak($dvoraklayouts)	=	+%v(dvorak):2
+  *		dvorak(basic)	=	+us(dvorak):2
+  *		dvorak(pl_basic)	=	+pl(dvorak):2
+  *		dvorak(pl)	=	+pl(dvorak_quotes):2
+  *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):2
+  *		dzdwi(basic)	=	+bt(basic):2
+  *		fi(basic)	=	+fi(classic):2
+  *		ge(azerty_tskapo)	=	+fr(geo):2
+  *		guj(basic)	=	+in(guj):2
+  *		gur(basic)	=	+in(guru):2
+  *		ie(laptop)	=	+ie(basic):2
+  *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):2
+  *		in(urd)	=	+in(urd-phonetic):2
+  *		iu(basic)	=	+ca(ike):2
+  *		lo(basic)	=	+la(basic):2
+  *		kan(basic)	=	+in(kan):2
+  *		mal(basic)	=	+in(mal):2
+  *		mal(mlplusnum)	=	+in(mal):2
+  *		ogham(basic)	=	+ie(ogam):2
+  *		ogham(laptop)	=	+ie(ogam):2
+  *		ogham(is434)	=	+ie(ogam_is434):2
+  *		ogham(is434laptop)	=	+ie(ogam_is434):2
+  *		ori(basic)	=	+in(ori):2
+  *		ro(de)	=	+ro(winkeys):2
+  *		ro(us)	=	+ro(std):2
+  *		ro(academic)	=	+ro(std):2
+  *		ro(std_comma)	=	+ro(std):2
+  *		ro(comma)	=	+ro(basic):2
+  *		ru(os)	=	+ru(os_legacy):2
+  *		pk(urd)	=	+pk(urd-phonetic):2
+  *		sapmi(basic)	=	+no(smi):2
+  *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):2
+  *		sapmi(sefi)	=	+fi(smi):2
+  *		sin(phonetic-static)	=	+in(sin_phonetic):2
+  *		syr(basic)	=	+sy(syc):2
+  *		syr(phonetic)	=	+sy(syc_phonetic):2
+  *		tam(INSCRIPT)	=	+in(tam):2
+  *		tam(UNI)	=	+in(tam_unicode):2
+  *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):2
+  *		tam(TAB)	=	+in(tam_TAB):2
+  *		tam(TSCII)	=	+in(tam_TSCII):2
+  *		tel(basic)	=	+in(tel):2
+  *		yu(basic)	=	+srp(latin):2
+  *		yu(unicode)	=	+srp(latinunicode):2
+  *		yu(yz)	=	+srp(latinyz):2
+  *		yu(unicodeyz)	=	+srp(latinunicodeyz):2
+  nokiarx51	cz(qwerty)	=	+nokia_vndr/rx-51(cz_qwerty):2
+  nokiarx51	*		=	+nokia_vndr/rx-51(%l[2]%_v[2]):2
+  *		*		=	+%l[2]%(v[2]):2
+
+! model		layout[3]	=	symbols
+  *		ar		=	+ara%(v[3]):3
+  *		ben		=	+in(ben):3
+  *		bs		=	+ba%(v[3]):3
+  *		cs		=	+rs%(v[3]):3
+  *		cz_qwerty		=	+cz(qwerty):3
+  *		dev		=	+in(deva):3
+  *		dvorak		=	+us(dvorak):3
+  *		dzdwi		=	+bt%(v[3]):3
+  *		el		=	+gr%(v[3]):3
+  *		en_US		=	+latin%(v[3]):3
+  *		guj		=	+in(guj):3
+  *		gur		=	+in(guru):3
+  *		iu		=	+ca(ike):3
+  *		lo		=	+la%(v[3]):3
+  *		kan		=	+in(kan):3
+  *		mi		=	+mao%(v[3]):3
+  *		ml		=	+in(mal):3
+  *		ogham		=	+ie(ogam):3
+  *		ori		=	+ie(ori):3
+  *		sapmi		=	+no(smi):3
+  *		sr		=	+srp%(v[3]):3
+  *		syr		=	+sy(syc):3
+  *		tel		=	+in(tel):3
+  *		tml		=	+in(tam):3
+  *		yu		=	+srp%(v[3]):3
+  *		fr-latin9		=	+fr(latin9):3
+  *		us_intl		=	+us(alt-intl):3
+  *		ben(basic)	=	+in(ben):3
+  *		ben(probhat)	=	+in(ben_probhat):3
+  *		dev(basic)	=	+in(deva):3
+  *		dvorak($dvoraklayouts)	=	+%v(dvorak):3
+  *		dvorak(basic)	=	+us(dvorak):3
+  *		dvorak(pl_basic)	=	+pl(dvorak):3
+  *		dvorak(pl)	=	+pl(dvorak_quotes):3
+  *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):3
+  *		dzdwi(basic)	=	+bt(basic):3
+  *		fi(basic)	=	+fi(classic):3
+  *		ge(azerty_tskapo)	=	+fr(geo):3
+  *		guj(basic)	=	+in(guj):3
+  *		gur(basic)	=	+in(guru):3
+  *		ie(laptop)	=	+ie(basic):3
+  *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):3
+  *		in(urd)	=	+in(urd-phonetic):3
+  *		iu(basic)	=	+ca(ike):3
+  *		lo(basic)	=	+la(basic):3
+  *		kan(basic)	=	+in(kan):3
+  *		mal(basic)	=	+in(mal):3
+  *		mal(mlplusnum)	=	+in(mal):3
+  *		ogham(basic)	=	+ie(ogam):3
+  *		ogham(laptop)	=	+ie(ogam):3
+  *		ogham(is434)	=	+ie(ogam_is434):3
+  *		ogham(is434laptop)	=	+ie(ogam_is434):3
+  *		ori(basic)	=	+in(ori):3
+  *		ro(de)	=	+ro(winkeys):3
+  *		ro(us)	=	+ro(std):3
+  *		ro(academic)	=	+ro(std):3
+  *		ro(std_comma)	=	+ro(std):3
+  *		ro(comma)	=	+ro(basic):3
+  *		ru(os)	=	+ru(os_legacy):3
+  *		pk(urd)	=	+pk(urd-phonetic):3
+  *		sapmi(basic)	=	+no(smi):3
+  *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):3
+  *		sapmi(sefi)	=	+fi(smi):3
+  *		sin(phonetic-static)	=	+in(sin_phonetic):3
+  *		syr(basic)	=	+sy(syc):3
+  *		syr(phonetic)	=	+sy(syc_phonetic):3
+  *		tam(INSCRIPT)	=	+in(tam):3
+  *		tam(UNI)	=	+in(tam_unicode):3
+  *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):3
+  *		tam(TAB)	=	+in(tam_TAB):3
+  *		tam(TSCII)	=	+in(tam_TSCII):3
+  *		tel(basic)	=	+in(tel):3
+  *		yu(basic)	=	+srp(latin):3
+  *		yu(unicode)	=	+srp(latinunicode):3
+  *		yu(yz)	=	+srp(latinyz):3
+  *		yu(unicodeyz)	=	+srp(latinunicodeyz):3
+  nokiarx51	cz(qwerty)	=	+nokia_vndr/rx-51(cz_qwerty):3
+  nokiarx51	*		=	+nokia_vndr/rx-51(%l[3]%_v[3]):3
+  *		*		=	+%l[3]%(v[3]):3
+
+! model		layout[4]	=	symbols
+  *		ar		=	+ara%(v[4]):4
+  *		ben		=	+in(ben):4
+  *		bs		=	+ba%(v[4]):4
+  *		cs		=	+rs%(v[4]):4
+  *		cz_qwerty		=	+cz(qwerty):4
+  *		dev		=	+in(deva):4
+  *		dvorak		=	+us(dvorak):4
+  *		dzdwi		=	+bt%(v[4]):4
+  *		el		=	+gr%(v[4]):4
+  *		en_US		=	+latin%(v[4]):4
+  *		guj		=	+in(guj):4
+  *		gur		=	+in(guru):4
+  *		iu		=	+ca(ike):4
+  *		lo		=	+la%(v[4]):4
+  *		kan		=	+in(kan):4
+  *		mi		=	+mao%(v[4]):4
+  *		ml		=	+in(mal):4
+  *		ogham		=	+ie(ogam):4
+  *		ori		=	+ie(ori):4
+  *		sapmi		=	+no(smi):4
+  *		sr		=	+srp%(v[4]):4
+  *		syr		=	+sy(syc):4
+  *		tel		=	+in(tel):4
+  *		tml		=	+in(tam):4
+  *		yu		=	+srp%(v[4]):4
+  *		fr-latin9		=	+fr(latin9):4
+  *		us_intl		=	+us(alt-intl):4
+  *		ben(basic)	=	+in(ben):4
+  *		ben(probhat)	=	+in(ben_probhat):4
+  *		dev(basic)	=	+in(deva):4
+  *		dvorak($dvoraklayouts)	=	+%v(dvorak):4
+  *		dvorak(basic)	=	+us(dvorak):4
+  *		dvorak(pl_basic)	=	+pl(dvorak):4
+  *		dvorak(pl)	=	+pl(dvorak_quotes):4
+  *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):4
+  *		dzdwi(basic)	=	+bt(basic):4
+  *		fi(basic)	=	+fi(classic):4
+  *		ge(azerty_tskapo)	=	+fr(geo):4
+  *		guj(basic)	=	+in(guj):4
+  *		gur(basic)	=	+in(guru):4
+  *		ie(laptop)	=	+ie(basic):4
+  *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):4
+  *		in(urd)	=	+in(urd-phonetic):4
+  *		iu(basic)	=	+ca(ike):4
+  *		lo(basic)	=	+la(basic):4
+  *		kan(basic)	=	+in(kan):4
+  *		mal(basic)	=	+in(mal):4
+  *		mal(mlplusnum)	=	+in(mal):4
+  *		ogham(basic)	=	+ie(ogam):4
+  *		ogham(laptop)	=	+ie(ogam):4
+  *		ogham(is434)	=	+ie(ogam_is434):4
+  *		ogham(is434laptop)	=	+ie(ogam_is434):4
+  *		ori(basic)	=	+in(ori):4
+  *		ro(de)	=	+ro(winkeys):4
+  *		ro(us)	=	+ro(std):4
+  *		ro(academic)	=	+ro(std):4
+  *		ro(std_comma)	=	+ro(std):4
+  *		ro(comma)	=	+ro(basic):4
+  *		ru(os)	=	+ru(os_legacy):4
+  *		pk(urd)	=	+pk(urd-phonetic):4
+  *		sapmi(basic)	=	+no(smi):4
+  *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):4
+  *		sapmi(sefi)	=	+fi(smi):4
+  *		sin(phonetic-static)	=	+in(sin_phonetic):4
+  *		syr(basic)	=	+sy(syc):4
+  *		syr(phonetic)	=	+sy(syc_phonetic):4
+  *		tam(INSCRIPT)	=	+in(tam):4
+  *		tam(UNI)	=	+in(tam_unicode):4
+  *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):4
+  *		tam(TAB)	=	+in(tam_TAB):4
+  *		tam(TSCII)	=	+in(tam_TSCII):4
+  *		tel(basic)	=	+in(tel):4
+  *		yu(basic)	=	+srp(latin):4
+  *		yu(unicode)	=	+srp(latinunicode):4
+  *		yu(yz)	=	+srp(latinyz):4
+  *		yu(unicodeyz)	=	+srp(latinunicodeyz):4
+  nokiarx51	cz(qwerty)	=	+nokia_vndr/rx-51(cz_qwerty):4
+  nokiarx51	*		=	+nokia_vndr/rx-51(%l[4]%_v[4]):4
+  *		*		=	+%l[4]%(v[4]):4
+
+! model		layout[2]	variant[2]	=	symbols
+  *		ben		basic	=	+in(ben):2
+  *		ben		probhat	=	+in(ben_probhat):2
+  *		dev		basic	=	+in(deva):2
+  *		dvorak		$dvoraklayouts	=	+%v(dvorak):2
+  *		dvorak		basic	=	+us(dvorak):2
+  *		dvorak		pl_basic	=	+pl(dvorak):2
+  *		dvorak		pl	=	+pl(dvorak_quotes):2
+  *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):2
+  *		dzdwi		basic	=	+bt(basic):2
+  *		fi		basic	=	+fi(classic):2
+  *		ge		azerty_tskapo	=	+fr(geo):2
+  *		guj		basic	=	+in(guj):2
+  *		gur		basic	=	+in(guru):2
+  *		ie		laptop	=	+ie(basic):2
+  *		ie		CloGaelachLaptop	=	+ie(CloGaelach):2
+  *		in		urd	=	+in(urd-phonetic):2
+  *		iu		basic	=	+ca(ike):2
+  *		lo		basic	=	+la(basic):2
+  *		kan		basic	=	+in(kan):2
+  *		mal		basic	=	+in(mal):2
+  *		mal		mlplusnum	=	+in(mal):2
+  *		ogham		basic	=	+ie(ogam):2
+  *		ogham		laptop	=	+ie(ogam):2
+  *		ogham		is434	=	+ie(ogam_is434):2
+  *		ogham		is434laptop	=	+ie(ogam_is434):2
+  *		ori		basic	=	+in(ori):2
+  *		ro		de	=	+ro(winkeys):2
+  *		ro		us	=	+ro(std):2
+  *		ro		academic	=	+ro(std):2
+  *		ro		std_comma	=	+ro(std):2
+  *		ro		comma	=	+ro(basic):2
+  *		ru		os	=	+ru(os_legacy):2
+  *		pk		urd	=	+pk(urd-phonetic):2
+  *		sapmi		basic	=	+no(smi):2
+  *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):2
+  *		sapmi		sefi	=	+fi(smi):2
+  *		sin		phonetic-static	=	+in(sin_phonetic):2
+  *		syr		basic	=	+sy(syc):2
+  *		syr		phonetic	=	+sy(syc_phonetic):2
+  *		tam		INSCRIPT	=	+in(tam):2
+  *		tam		UNI	=	+in(tam_unicode):2
+  *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):2
+  *		tam		TAB	=	+in(tam_TAB):2
+  *		tam		TSCII	=	+in(tam_TSCII):2
+  *		tel		basic	=	+in(tel):2
+  *		yu		basic	=	+srp(latin):2
+  *		yu		unicode	=	+srp(latinunicode):2
+  *		yu		yz	=	+srp(latinyz):2
+  *		yu		unicodeyz	=	+srp(latinunicodeyz):2
+
+! model		layout[3]	variant[3]	=	symbols
+  *		ben		basic	=	+in(ben):3
+  *		ben		probhat	=	+in(ben_probhat):3
+  *		dev		basic	=	+in(deva):3
+  *		dvorak		$dvoraklayouts	=	+%v(dvorak):3
+  *		dvorak		basic	=	+us(dvorak):3
+  *		dvorak		pl_basic	=	+pl(dvorak):3
+  *		dvorak		pl	=	+pl(dvorak_quotes):3
+  *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):3
+  *		dzdwi		basic	=	+bt(basic):3
+  *		fi		basic	=	+fi(classic):3
+  *		ge		azerty_tskapo	=	+fr(geo):3
+  *		guj		basic	=	+in(guj):3
+  *		gur		basic	=	+in(guru):3
+  *		ie		laptop	=	+ie(basic):3
+  *		ie		CloGaelachLaptop	=	+ie(CloGaelach):3
+  *		in		urd	=	+in(urd-phonetic):3
+  *		iu		basic	=	+ca(ike):3
+  *		lo		basic	=	+la(basic):3
+  *		kan		basic	=	+in(kan):3
+  *		mal		basic	=	+in(mal):3
+  *		mal		mlplusnum	=	+in(mal):3
+  *		ogham		basic	=	+ie(ogam):3
+  *		ogham		laptop	=	+ie(ogam):3
+  *		ogham		is434	=	+ie(ogam_is434):3
+  *		ogham		is434laptop	=	+ie(ogam_is434):3
+  *		ori		basic	=	+in(ori):3
+  *		ro		de	=	+ro(winkeys):3
+  *		ro		us	=	+ro(std):3
+  *		ro		academic	=	+ro(std):3
+  *		ro		std_comma	=	+ro(std):3
+  *		ro		comma	=	+ro(basic):3
+  *		ru		os	=	+ru(os_legacy):3
+  *		pk		urd	=	+pk(urd-phonetic):3
+  *		sapmi		basic	=	+no(smi):3
+  *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):3
+  *		sapmi		sefi	=	+fi(smi):3
+  *		sin		phonetic-static	=	+in(sin_phonetic):3
+  *		syr		basic	=	+sy(syc):3
+  *		syr		phonetic	=	+sy(syc_phonetic):3
+  *		tam		INSCRIPT	=	+in(tam):3
+  *		tam		UNI	=	+in(tam_unicode):3
+  *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):3
+  *		tam		TAB	=	+in(tam_TAB):3
+  *		tam		TSCII	=	+in(tam_TSCII):3
+  *		tel		basic	=	+in(tel):3
+  *		yu		basic	=	+srp(latin):3
+  *		yu		unicode	=	+srp(latinunicode):3
+  *		yu		yz	=	+srp(latinyz):3
+  *		yu		unicodeyz	=	+srp(latinunicodeyz):3
+
+! model		layout[4]	variant[4]	=	symbols
+  *		ben		basic	=	+in(ben):4
+  *		ben		probhat	=	+in(ben_probhat):4
+  *		dev		basic	=	+in(deva):4
+  *		dvorak		$dvoraklayouts	=	+%v(dvorak):4
+  *		dvorak		basic	=	+us(dvorak):4
+  *		dvorak		pl_basic	=	+pl(dvorak):4
+  *		dvorak		pl	=	+pl(dvorak_quotes):4
+  *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):4
+  *		dzdwi		basic	=	+bt(basic):4
+  *		fi		basic	=	+fi(classic):4
+  *		ge		azerty_tskapo	=	+fr(geo):4
+  *		guj		basic	=	+in(guj):4
+  *		gur		basic	=	+in(guru):4
+  *		ie		laptop	=	+ie(basic):4
+  *		ie		CloGaelachLaptop	=	+ie(CloGaelach):4
+  *		in		urd	=	+in(urd-phonetic):4
+  *		iu		basic	=	+ca(ike):4
+  *		lo		basic	=	+la(basic):4
+  *		kan		basic	=	+in(kan):4
+  *		mal		basic	=	+in(mal):4
+  *		mal		mlplusnum	=	+in(mal):4
+  *		ogham		basic	=	+ie(ogam):4
+  *		ogham		laptop	=	+ie(ogam):4
+  *		ogham		is434	=	+ie(ogam_is434):4
+  *		ogham		is434laptop	=	+ie(ogam_is434):4
+  *		ori		basic	=	+in(ori):4
+  *		ro		de	=	+ro(winkeys):4
+  *		ro		us	=	+ro(std):4
+  *		ro		academic	=	+ro(std):4
+  *		ro		std_comma	=	+ro(std):4
+  *		ro		comma	=	+ro(basic):4
+  *		ru		os	=	+ru(os_legacy):4
+  *		pk		urd	=	+pk(urd-phonetic):4
+  *		sapmi		basic	=	+no(smi):4
+  *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):4
+  *		sapmi		sefi	=	+fi(smi):4
+  *		sin		phonetic-static	=	+in(sin_phonetic):4
+  *		syr		basic	=	+sy(syc):4
+  *		syr		phonetic	=	+sy(syc_phonetic):4
+  *		tam		INSCRIPT	=	+in(tam):4
+  *		tam		UNI	=	+in(tam_unicode):4
+  *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):4
+  *		tam		TAB	=	+in(tam_TAB):4
+  *		tam		TSCII	=	+in(tam_TSCII):4
+  *		tel		basic	=	+in(tel):4
+  *		yu		basic	=	+srp(latin):4
+  *		yu		unicode	=	+srp(latinunicode):4
+  *		yu		yz	=	+srp(latinyz):4
+  *		yu		unicodeyz	=	+srp(latinunicodeyz):4
+
+! model		=	symbols
+  $evdevkbds    =   +inet(evdev)+inet(%m)
+  applealu_jis  =   +inet(evdev)+macintosh_vndr/jp(alujiskeys)
+  *             =   +inet(evdev)
+
+! layout	variant		=	compat
+  de		neo			=	+caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock)
+
+! layout[1]	variant[1]	=	compat
+  de		neo			=	+caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock)
+
+! layout[2]	variant[2]	=	compat
+  de		neo			=	+caps(caps_lock):2+misc(assign_shift_left_action):2+level5(level5_lock):2
+
+! layout[3]	variant[3]	=	compat
+  de		neo			=	+caps(caps_lock):3+misc(assign_shift_left_action):3+level5(level5_lock):3
+
+! layout[4]	variant[4]	=	compat
+  de		neo			=	+caps(caps_lock):4+misc(assign_shift_left_action):4+level5(level5_lock):4
+
+! model		layout		=	compat
+  pc98		nec_vndr/jp	=	pc98(basic)
+  *		jp		=	complete+japan
+  olpc         *               =       olpc
+  *		*		=	complete
+
+! model		layout[1]	=	compat
+  *		*		=	complete
+
+! model		=	types
+  $macs		=	complete+numpad(mac)
+  $applealu	=	complete+numpad(mac)
+  $nokiamodels	=	complete+nokia
+  *		=	complete
+
+! layout	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle)
+  *			misc:typo 	= +typo(base)
+
+! layout[1]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):1
+  *			misc:typo 	= +typo(base):1
+
+! layout[2]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):2
+  *			misc:typo 	= +typo(base):2
+
+! layout[3]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):3
+  *			misc:typo 	= +typo(base):3
+
+! layout[4]	option	=	symbols
+  $threelevellayouts	grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):4
+  *			misc:typo 	= +typo(base):4
+
+! option	=	symbols
+  grp:shift_toggle	=	+group(shifts_toggle)
+  altwin:menu		=	+altwin(menu)
+  altwin:meta_alt	=	+altwin(meta_alt)
+  altwin:ctrl_win	=	+altwin(ctrl_win)
+  altwin:ctrl_alt_win	=	+altwin(ctrl_alt_win)
+  altwin:meta_win	=	+altwin(meta_win)
+  altwin:left_meta_win	=	+altwin(left_meta_win)
+  altwin:hyper_win	=	+altwin(hyper_win)
+  altwin:alt_super_win	=	+altwin(alt_super_win)
+  altwin:swap_lalt_lwin	=	+altwin(swap_lalt_lwin)
+  grp:switch		=	+group(switch)
+  grp:lswitch		=	+group(lswitch)
+  grp:win_switch	=	+group(win_switch)
+  grp:lwin_switch	=	+group(lwin_switch)
+  grp:rwin_switch	=	+group(rwin_switch)
+  grp:toggle		=	+group(toggle)
+  grp:shifts_toggle	=	+group(shifts_toggle)
+  grp:ctrls_toggle	=	+group(ctrls_toggle)
+  grp:alts_toggle	=	+group(alts_toggle)
+  grp:caps_toggle	=	+capslock(grouplock)
+  grp:caps_switch       =       +capslock(groupshift)
+  grp:shift_caps_toggle	=	+group(shift_caps_toggle)
+  grp:shift_caps_switch	=	+group(shift_caps_switch)
+  grp:win_menu_switch	=	+group(win_menu_switch)
+  grp:alt_caps_toggle   =       +group(alt_caps_toggle)
+  grp:alt_space_toggle	=	+group(alt_space_toggle)
+  grp:menu_toggle	=	+group(menu_toggle)
+  grp:lwin_toggle	=	+group(lwin_toggle)
+  grp:rwin_toggle	=	+group(rwin_toggle)
+  grp:lshift_toggle	=	+group(lshift_toggle)
+  grp:rshift_toggle	=	+group(rshift_toggle)
+  grp:rctrl_switch	=	+group(rctrl_switch)
+  grp:lctrl_toggle	=	+group(lctrl_toggle)
+  grp:rctrl_toggle	=	+group(rctrl_toggle)
+  grp:lalt_toggle	=	+group(lalt_toggle)
+  grp:sclk_toggle	=	+group(sclk_toggle)
+  grp:lctrl_rctrl_switch	=	+group(lctrl_rctrl_switch)
+  grp:lctrl_lwin_rctrl_menu	=	+group(lctrl_lwin_rctrl_menu)
+  grp:lctrl_lalt_toggle	=	+group(lctrl_lalt_toggle)
+  grp:rctrl_ralt_toggle	=	+group(rctrl_ralt_toggle)
+  grp:ctrl_alt_toggle	=	+group(ctrl_alt_toggle)
+  grp:ctrl_alt_toggle_bidir	=	+group(ctrl_alt_toggle_bidir)
+  grp:lctrl_lshift_toggle	=	+group(lctrl_lshift_toggle)
+  grp:rctrl_rshift_toggle	=	+group(rctrl_rshift_toggle)
+  grp:ctrl_shift_toggle	=	+group(ctrl_shift_toggle)
+  grp:ctrl_shift_toggle_bidir	=	+group(ctrl_shift_toggle_bidir)
+  grp:lalt_lshift_toggle	=	+group(lalt_lshift_toggle)
+  grp:ralt_rshift_toggle	=	+group(ralt_rshift_toggle)
+  grp:alt_shift_toggle	=	+group(alt_shift_toggle)
+  grp:alt_shift_toggle_bidir	=	+group(alt_shift_toggle_bidir)
+  lv3:switch		=	+level3(switch)
+  lv3:ralt_switch	=	+level3(ralt_switch)
+  lv3:ralt_switch_multikey	=	+level3(ralt_switch_multikey)
+  lv3:ralt_alt		=	+level3(ralt_alt)
+  lv3:lalt_switch	=	+level3(lalt_switch)
+  lv3:alt_switch	=	+level3(alt_switch)
+  lv3:menu_switch	=	+level3(menu_switch)
+  lv3:win_switch	=	+level3(win_switch)
+  lv3:lwin_switch	=	+level3(lwin_switch)
+  lv3:rwin_switch	=	+level3(rwin_switch)
+  lv3:enter_switch	=	+level3(enter_switch)
+  caps:capslock		=	+capslock(capslock)
+  caps:numlock		=	+capslock(numlock)
+  caps:shiftlock	=	+capslock(shiftlock)
+  caps:swapescape	=	+capslock(swapescape)
+  caps:escape		=	+capslock(escape)
+  caps:backspace	=	+capslock(backspace)
+  caps:super		=	+capslock(super)
+  caps:hyper		=	+capslock(hyper)
+  caps:none		=	+capslock(none)
+  caps:ctrl_modifier	=	+capslock(ctrl_modifier)
+  ctrl:nocaps		=	+ctrl(nocaps)
+  ctrl:lctrl_meta	=	+ctrl(lctrl_meta)
+  ctrl:swapcaps		=	+ctrl(swapcaps)
+  ctrl:ac_ctrl		=	+ctrl(ac_ctrl)
+  ctrl:aa_ctrl		=	+ctrl(aa_ctrl)
+  ctrl:rctrl_ralt	=	+ctrl(rctrl_ralt)
+  ctrl:menu_rctrl	=	+ctrl(menu_rctrl)
+  ctrl:ralt_rctrl	=	+ctrl(ralt_rctrl)
+  compose:ralt		=	+compose(ralt)
+  compose:lwin		=	+compose(lwin)
+  compose:rwin		=	+compose(rwin)
+  compose:menu		=	+compose(menu)
+  compose:lctrl		=	+compose(lctrl)
+  compose:rctrl		=	+compose(rctrl)
+  compose:caps		=	+compose(caps)
+  compose:102		=	+compose(102)
+  compose:paus		=	+compose(paus)
+  compose:prsc		=	+compose(prsc)
+  compose:sclk		=	+compose(sclk)
+  srvrkeys:none		=	+srvr_ctrl(no_srvr_keys)
+  eurosign:e		=	+eurosign(e)
+  eurosign:2		=	+eurosign(2)
+  eurosign:4		=	+eurosign(4)
+  eurosign:5		=	+eurosign(5)
+  rupeesign:4           =       +rupeesign(4)
+  keypad:oss            =       +keypad(oss)
+  keypad:legacy         =	+keypad(legacy)
+  keypad:legacy_wang    =	+keypad(legacy_wang)
+  keypad:oss_wang       =	+keypad(oss_wang)
+  keypad:future         =	+keypad(future)
+  keypad:future_wang    =	+keypad(future_wang)
+  keypad:hex            =	+keypad(ops)+keypad(hex)
+  keypad:atm            =	+keypad(ops)+keypad(hex)+keypad(atm)  
+  nbsp:none             =	+nbsp(none)
+  nbsp:level2           =	+nbsp(level2)
+  nbsp:level3           =	+nbsp(level3)
+  nbsp:level3s          =	+nbsp(level3s)
+  nbsp:level3n          =	+nbsp(level3n)
+  nbsp:level4           =	+nbsp(level4)
+  nbsp:level4n          =	+nbsp(level4n)
+  nbsp:level4nl         =	+nbsp(level4nl)
+  japan:nicola_f_bs     =	+jp(nicola_f_bs)
+  japan:hztg_escape     =	+jp(hztg_escape)
+  kpdl:dot              =	+kpdl(dot)
+  kpdl:comma            =	+kpdl(comma)
+  kpdl:dotoss           =	+kpdl(dotoss)
+  kpdl:dotoss_latin9    =	+kpdl(dotoss_latin9)
+  kpdl:commaoss         =	+kpdl(commaoss)
+  kpdl:momayyezoss      =	+kpdl(momayyezoss)
+  kpdl:kposs            =	+kpdl(kposs)
+  kpdl:semi             =	+kpdl(semi)
+  shift:breaks_caps     =	+shift(breaks_caps)
+  esperanto:qwerty      =	+epo(qwerty)
+  esperanto:dvorak      =	+epo(dvorak)
+  terminate:ctrl_alt_bksp =	+terminate(ctrl_alt_bksp)
+  keypad:pointerkeys	=	+keypad(pointerkeys)
+  apple:alupckeys	=	+macintosh_vndr/apple(alupckeys)
+  shift:both_capslock                =       +shift(both_capslock)
+  shift:lshift_both_capslock         =       +shift(lshift_both_capslock)
+  shift:rshift_both_capslock         =       +shift(rshift_both_capslock)
+  shift:both_capslock_cancel         =       +shift(both_capslock_cancel)
+  shift:lshift_both_capslock_cancel  =       +shift(lshift_both_capslock_cancel)
+  shift:rshift_both_capslock_cancel  =       +shift(rshift_both_capslock_cancel)
+  shift:both_shiftlock               =       +shift(both_shiftlock)
+  shift:lshift_both_shiftlock        =       +shift(lshift_both_shiftlock)
+  shift:rshift_both_shiftlock        =       +shift(rshift_both_shiftlock)
+  lv3:caps_switch                    =       +level3(caps_switch)
+  lv3:bksl_switch                    =       +level3(bksl_switch)
+  lv3:lsgt_switch                    =       +level3(lsgt_switch)
+  lv3:caps_switch_latch              =       +level3(caps_switch_latch)
+  lv3:bksl_switch_latch              =       +level3(bksl_switch_latch)
+  lv3:lsgt_switch_latch              =       +level3(lsgt_switch_latch)
+  lv5:lsgt_switch_lock            =       +level5(lsgt_switch_lock)
+  lv5:ralt_switch_lock            =       +level5(ralt_switch_lock)
+  lv5:lwin_switch_lock            =       +level5(lwin_switch_lock)
+  lv5:rwin_switch_lock            =       +level5(rwin_switch_lock)
+  lv5:lsgt_switch_lock_cancel     =       +level5(lsgt_switch_lock_cancel)
+  lv5:ralt_switch_lock_cancel     =       +level5(ralt_switch_lock_cancel)
+  lv5:lwin_switch_lock_cancel     =       +level5(lwin_switch_lock_cancel)
+  lv5:rwin_switch_lock_cancel     =       +level5(rwin_switch_lock_cancel)
+
+
+
+! option	=	compat
+  grp_led:num		=	+lednum(group_lock)
+  grp_led:caps		=	+ledcaps(group_lock)
+  grp_led:scroll	=	+ledscroll(group_lock)
+  caps:shiftlock	=	+ledcaps(shift_lock)
+  grab:break_actions    =       +xfree86(grab_break)
diff --git a/data/rules/groups b/data/rules/groups
new file mode 100644
--- /dev/null
+++ b/data/rules/groups
@@ -0,0 +1,20 @@
+! $model_group = pc101       pc102    \
+                 pc104\
+                 pc105\
+                 pc106
+! $layout_group = ar br cr              us
+! $variant_group =
+
+! model         = keycodes
+  $model_group  = something(%m)
+  *             = default_keycodes
+
+! layout        variant = symbols
+  $layout_group *       = my_symbols+%(v)
+  *             *       = default_symbols
+
+! model         = types
+  *             = default_types
+
+! model         = compat
+  *             = default_compat
diff --git a/data/rules/index b/data/rules/index
new file mode 100644
--- /dev/null
+++ b/data/rules/index
@@ -0,0 +1,28 @@
+! $layouts = al az br cn us
+
+! layout        option          =       symbols
+  $layouts      some:opt        =       +extra
+
+! layout[1]     option          =       symbols
+  $layouts      some:opt        =       +extra:1
+
+! layout[2]     option          =       symbols
+  $layouts      some:opt        =       +extra:2
+
+! layout[3]     option          =       symbols
+  $layouts      some:opt        =       +extra:3
+
+! layout[4]     option          =       symbols
+  $layouts      some:opt        =       +extra:4
+
+! model         = symbols
+  *             = default_symbols
+
+! model         = keycodes
+  *             = default_keycodes
+
+! model         = types
+  *             = default_types
+
+! model         = compat
+  *             = default_compat
diff --git a/data/rules/multiple-options b/data/rules/multiple-options
new file mode 100644
--- /dev/null
+++ b/data/rules/multiple-options
@@ -0,0 +1,27 @@
+! model         = keycodes
+  my_model      = my_keycodes
+  *             = default_keycodes
+
+! layout        variant    = symbols
+  my_layout     my_variant = my_symbols+extra_variant
+
+! layout        = symbols
+  my_layout     = my_symbols
+  *             = default_symbols
+
+! model         = types
+  my_model      = my_types
+  *             = default_types
+
+! model         = compat
+  my_model      = my_compat
+  *             = default_compat
+
+! option        = compat
+  option111     = +substring
+  option1       = +some:compat
+  option11      = +group(bla)
+
+! option        = symbols
+  option3       = +compose(foo)+keypad(bar)
+  colon:opt     = +altwin(menu)
diff --git a/data/rules/simple b/data/rules/simple
new file mode 100644
--- /dev/null
+++ b/data/rules/simple
@@ -0,0 +1,21 @@
+! model         = keycodes
+  my_model      = my_keycodes
+  *             = default_keycodes
+
+! layout        variant    = symbols
+  my_layout     my_variant = my_symbols+extra_variant
+
+! layout        = symbols
+  my_layout     = my_symbols
+  *             = default_symbols
+
+! model         = types
+  my_model      = my_types
+  *             = default_types
+
+! model         = compat
+  my_model      = my_compat
+  *             = default_compat
+
+! option        = compat
+  my_option     = |some:compat
diff --git a/data/symbols/altwin b/data/symbols/altwin
new file mode 100644
--- /dev/null
+++ b/data/symbols/altwin
@@ -0,0 +1,100 @@
+partial modifier_keys 
+xkb_symbols "meta_alt" {
+    key <LALT> {	[ 	Alt_L,	Meta_L		]	};
+    key <RALT> { type[Group1] = "TWO_LEVEL",
+                 symbols[Group1] = [ Alt_R, Meta_R ] };
+    modifier_map Mod1	{ Alt_L, Alt_R, Meta_L, Meta_R };
+//  modifier_map Mod4	{};
+};
+
+// Alt is mapped to the Win-keys (and the usual Alt keys).
+partial modifier_keys 
+xkb_symbols "alt_win" {
+    key <LWIN> {	[ 	Alt_L   		]	};
+    key <RWIN> {	[ 	Alt_R           	]	};
+    modifier_map Mod1 { <LWIN>, <RWIN> };
+};
+
+// Control is mapped to the Win-keys (and the usual Ctrl keys).
+partial modifier_keys 
+xkb_symbols "ctrl_win" {
+    key <LWIN> {	[ 	Control_L		]	};
+    key <RWIN> {	[ 	Control_R		]	};
+    modifier_map Control { <LWIN>, <RWIN> };
+};
+
+// Ctrl is mapped to the Alt-keys, Alt is mapped to the Win-keys,  Win is mapped to the Ctrl-keys.
+partial modifier_keys 
+xkb_symbols "ctrl_alt_win" {
+    key <LALT> {	[ 	Control_L, Control_L		]	};
+    key <RALT> { type[Group1] = "TWO_LEVEL",
+                 symbols[Group1] = [ Control_R, Control_R ] };
+    key <LWIN> {	[	Alt_L, Meta_L    	]	};
+    key <RWIN> {	[	Alt_R, Meta_R		]	};
+    modifier_map Control { <RALT>, <LALT> };
+    modifier_map  Mod1 { <LWIN>, <RWIN> };
+};
+
+
+partial modifier_keys 
+xkb_symbols "meta_win" {
+    key <LALT> {	[ 	Alt_L,	Alt_L		]	};
+    key <RALT> { type[Group1] = "TWO_LEVEL",
+                 symbols[Group1] = [ Alt_R, Alt_R ] };
+    key <LWIN> {	[ 	Meta_L			]	};
+    key <RWIN> {	[ 	Meta_R			]	};
+    modifier_map Mod1	{ Alt_L, Alt_R };
+    modifier_map Mod4	{ <META>, Meta_L, Meta_R };
+};
+
+partial modifier_keys 
+xkb_symbols "left_meta_win" {
+    key <LALT> {	[ 	Alt_L,	Alt_L		]	};
+    key <LWIN> {	[ 	Meta_L			]	};
+    modifier_map Mod1	{ Alt_L };
+    modifier_map Mod4	{ <META>, Meta_L };
+};
+
+partial modifier_keys 
+xkb_symbols "hyper_win" {
+    key <LWIN> {	[ 	Hyper_L			]	};
+    key <RWIN> {	[ 	Hyper_R			]	};
+    modifier_map Mod4	{ Hyper_L, Hyper_R };
+};
+
+// Use Menu for the menu key
+partial modifier_keys 
+xkb_symbols "menu" {
+    key <MENU> {	[ 	Menu		]	};
+};
+
+// Layout for Tux key caps with additional right Alt key
+partial modifier_keys 
+xkb_symbols "alt_super_win" {
+    key <LALT> {        [       Alt_L,  Meta_L          ]       };
+    key <RWIN> {        [       Alt_R,  Meta_R          ]       };
+    key <LWIN> {        [       Super_L                 ]       };
+    key <MENU> {        [       Super_R                 ]       };
+    modifier_map Mod1   { Alt_L, Alt_R, Meta_L, Meta_R };
+    modifier_map Mod4   { Super_L, Super_R };
+};
+
+partial modifier_keys 
+xkb_symbols "swap_alt_win" {
+    include "altwin(swap_lalt_lwin)"
+    include "altwin(swap_ralt_rwin)"
+};
+
+partial hidden modifier_keys 
+xkb_symbols "swap_lalt_lwin" {
+    key <LALT> { type[Group1] = "ONE_LEVEL",
+                 symbols[Group1] = [ Super_L ] };
+    key <LWIN> {	[	Alt_L,	Meta_L		]	};
+};
+
+partial hidden modifier_keys 
+xkb_symbols "swap_ralt_rwin" {
+    key <RALT> { type[Group1] = "ONE_LEVEL",
+                 symbols[Group1] = [ Super_R ] };
+    key <RWIN> {	[	Alt_R,	Meta_R		]	};
+};
diff --git a/data/symbols/ca b/data/symbols/ca
new file mode 100644
--- /dev/null
+++ b/data/symbols/ca
@@ -0,0 +1,535 @@
+default partial
+xkb_symbols "fr" {
+    name[Group1] = "French (Canada)";
+
+    key <TLDE>	{ [ numbersign,       bar,     backslash ]	};
+    key <AE01>	{ [         1,     exclam,     plusminus ]	};
+    key <AE02>	{ [         2,   quotedbl,            at ]	};
+    key <AE03>	{ [         3,      slash,      sterling ]	};
+    key <AE04>	{ [         4,     dollar,          cent ]	};
+    key <AE05>	{ [         5,    percent,      currency ] 	};
+    key <AE06>	{ [         6,   question,       notsign ]	};
+    key <AE07>	{ [         7,  ampersand,     brokenbar ]	};
+    key <AE08>	{ [         8,   asterisk,   twosuperior ]	};
+    key <AE09>	{ [         9,  parenleft, threesuperior ]	};
+    key <AE10>	{ [         0, parenright,    onequarter ]	};
+    key <AE11>	{ [     minus, underscore,       onehalf ]	};
+    key <AE12>	{ [     equal,       plus, threequarters ]	};
+
+    key <AD01>	{ [         q,          Q ]	};
+    key <AD02>	{ [         w,          W ]	};
+    key <AD03>	{ [         e,          E ]	};
+    key <AD04>	{ [         r,          R ]	};
+    key <AD05>	{ [         t,          T ]	};
+    key <AD06>	{ [         y,          Y ]	};
+    key <AD07>	{ [         u,          U ]	};
+    key <AD08>	{ [         i,          I ]	};
+    key <AD09>	{ [         o,          O,   section ]	};
+    key <AD10>	{ [         p,          P, paragraph ]	};
+    key <AD11>	{ [dead_circumflex, dead_circumflex, bracketleft  ]	};
+    key <AD12>	{ [   dead_cedilla,  dead_diaeresis, bracketright ]	};
+
+    key <AC01>	{ [         a,          A ]	};
+    key <AC02>	{ [         s,          S ]	};
+    key <AC03>	{ [         d,          D ]	};
+    key <AC04>	{ [         f,          F ]	};
+    key <AC05>	{ [         g,          G ]	};
+    key <AC06>	{ [         h,          H ]	};
+    key <AC07>	{ [         j,          J ]	};
+    key <AC08>	{ [         k,          K ]	};
+    key <AC09>	{ [         l,          L ]	};
+    key <AC10>	{ [ semicolon,      colon, asciitilde ]	};
+    key <AC11>	{ [dead_grave, dead_grave,  braceleft ]	};
+    key <BKSL>	{ [      less,    greater, braceright ]	};
+
+    key <LSGT>	{ [guillemotleft, guillemotright, degree]	};
+    key <AB01>	{ [         z,          Z ]	};
+    key <AB02>	{ [         x,          X ]	};
+    key <AB03>	{ [         c,          C ]	};
+    key <AB04>	{ [         v,          V ]	};
+    key <AB05>	{ [         b,          B ]	};
+    key <AB06>	{ [         n,          N ]	};
+    key <AB07>	{ [         m,          M,           mu ]	};
+    key <AB08>	{ [     comma, apostrophe,       macron ]	};
+    key <AB09>	{ [    period,     period,       hyphen ]	};
+    key <AB10>	{ [    eacute,     Eacute,   dead_acute ]	};
+
+    key <SPCE>	{ [     space,      space, nobreakspace ]	};
+
+    include "level3(ralt_switch)"
+};
+
+xkb_symbols "fr-dvorak" {
+    name[Group1] = "French (Canada, Dvorak)";
+
+    key <TLDE>  { [ numbersign,       bar,     backslash ]  };
+    key <AE01>  { [         1,     exclam,     plusminus ]  };
+    key <AE02>  { [         2,   quotedbl,            at ]  };
+    key <AE03>  { [         3,      slash,      sterling ]  };
+    key <AE04>  { [         4,     dollar,          cent ]  };
+    key <AE05>  { [         5,    percent,      currency ]  };
+    key <AE06>  { [         6,   question,       notsign ]  };
+    key <AE07>  { [         7,  ampersand,     brokenbar ]  };
+    key <AE08>  { [         8,   asterisk,   twosuperior ]  };
+    key <AE09>  { [         9,  parenleft, threesuperior ]  };
+    key <AE10>  { [         0, parenright,    onequarter ]  };
+    key <AE11>  { [dead_circumflex, dead_circumflex, bracketleft  ] };
+    key <AE12>  { [   dead_cedilla,  dead_diaeresis, bracketright ] };
+
+    key <AD01>  { [dead_grave, dead_grave,  braceleft ] };
+    key <AD02>  { [     comma, apostrophe,       macron ]   };
+    key <AD03>  { [    period,     period,       hyphen ]   };
+    key <AD04>  { [         p,          P, paragraph ]  };
+    key <AD05>  { [         y,          Y ] };
+    key <AD06>  { [         f,          F ] };
+    key <AD07>  { [         g,          G ] };
+    key <AD08>  { [         c,          C ] };
+    key <AD09>  { [         r,          R ] };
+    key <AD10>  { [         l,          L ] };
+    key <AD11>  { [    eacute,     Eacute,   dead_acute ]   };
+    key <AD12>  { [     equal,       plus, threequarters ]  };
+
+    key <AC01>  { [         a,          A ] };
+    key <AC02>  { [         o,          O,   section ]  };
+    key <AC03>  { [         e,          E ] };
+    key <AC04>  { [         u,          U ] };
+    key <AC05>  { [         i,          I ] };
+    key <AC06>  { [         d,          D ] };
+    key <AC07>  { [         h,          H ] };
+    key <AC08>  { [         t,          T ] };
+    key <AC09>  { [         n,          N ] };
+    key <AC10>  { [         s,          S ] };
+    key <AC11>  { [     minus, underscore,       onehalf ]  };
+    key <BKSL>  { [      less,    greater, braceright ] };
+
+    key <LSGT>  { [guillemotleft, guillemotright, degree]   };
+    key <AB01>  { [ semicolon,      colon, asciitilde ] };
+    key <AB02>  { [         q,          Q ] };
+    key <AB03>  { [         j,          J ] };
+    key <AB04>  { [         k,          K ] };
+    key <AB05>  { [         x,          X ] };
+    key <AB06>  { [         b,          B ] };
+    key <AB07>  { [         m,          M,           mu ]   };
+    key <AB08>  { [         w,          W ] };
+    key <AB09>  { [         v,          V ] };
+    key <AB10>  { [         z,          Z ] };
+
+    key <SPCE>  { [     space,      space, nobreakspace ]   };
+
+    include "level3(ralt_switch)"
+};
+
+partial
+xkb_symbols "fr-legacy" {
+
+    name[Group1] = "French (Canada, legacy)";
+
+    include "ca(fr)"
+
+    key <TLDE>	{ [    degree,     degree,       notsign ]	};
+    key <AE01>	{ [         1,     exclam,   onesuperior ]	};
+
+    key <AE03>	{ [         3, numbersign, threesuperior ]	};
+    key <AE04>	{ [         4,     dollar,    onequarter ]	};
+    key <AE05>	{ [         5,    percent,       onehalf ] 	};
+    key <AE06>	{ [         6,   question, threequarters ]	};
+    key <AE07>	{ [         7,  ampersand,     braceleft ]	};
+    key <AE08>	{ [         8,   asterisk,   bracketleft ]	};
+    key <AE09>	{ [         9,  parenleft,  bracketright,   plusminus ]	};
+    key <AE10>	{ [         0, parenright,    braceright ]	};
+    key <AE11>	{ [     minus, underscore,           bar, questiondown]	};
+    key <AE12>	{ [     equal,       plus,  dead_cedilla ]	};
+
+    key <AD04>	{ [         r,          R,     paragraph,  registered ]	};
+    key <AD06>	{ [         y,          Y,           yen ]	};
+    key <AD09>	{ [         o,          O,        oslash,      Ooblique ] };
+    key <AD10>	{ [         p,          P,         thorn,       THORN ]	};
+    key <AD11>	{ [dead_circumflex, dead_circumflex,           degree ]	};
+    key <AD12>	{ [  ccedilla,   Ccedilla, dead_tilde, dead_diaeresis ]	};
+
+    key <AC01>	{ [         a,          A,            ae,          AE ]	};
+    key <AC02>	{ [         s,          S,        ssharp,     section ]	};
+    key <AC03>	{ [         d,          D,           eth,         ETH ]	};
+    key <AC04>	{ [         f,          F,   ordfeminine ]	};
+    key <AC10>	{ [ semicolon,      colon,    dead_acute,  dead_acute ]	};
+    key <AC11>	{ [    egrave,     Egrave ]	};
+    key <BKSL>	{ [    agrave,     Agrave,    dead_grave ]	};
+
+    key <LSGT>	{ [    ugrave,     Ugrave,     backslash,         bar ]	};
+    key <AB01>	{ [         z,          Z, guillemotleft  ]	};
+    key <AB02>	{ [         x,          X, guillemotright ]	};
+    key <AB03>	{ [         c,          C,          cent,   copyright ]	};
+    key <AB07>	{ [         m,          M,            mu,   masculine ]	};
+    key <AB08>	{ [     comma, apostrophe,         less ]	};
+    key <AB09>	{ [    period,     period,      greater ]	};
+    key <AB10>	{ [    eacute,     Eacute,        slash ]	};
+};
+
+partial
+xkb_symbols "multi" {
+
+    name[Group1] = "Canadian Multilingual (first part)";
+
+    include "ca(fr)"
+
+    key <TLDE>	{ [     slash,  backslash,           bar ]	};
+    key <AE01>	{ [         1,     exclam ]	};
+    key <AE02>	{ [         2,         at ]	};
+    key <AE03>	{ [         3, numbersign ]	};
+    key <AE04>	{ [         4,     dollar ]	};
+    key <AE05>	{ [         5,    percent ] 	};
+    key <AE06>	{ [         6,   question ]	};
+    key <AE07>	{ [         7,  ampersand,    braceleft ]	};
+    key <AE08>	{ [         8,   asterisk,   braceright ]	};
+    key <AE09>	{ [         9,  parenleft,  bracketleft ]	};
+    key <AE10>	{ [         0, parenright, bracketright ]	};
+    key <AE11>	{ [     minus, underscore ]	};
+    key <AE12>	{ [     equal,       plus,      notsign ]	};
+
+    key <AD09>	{ [         o,          O ]	};
+    key <AD10>	{ [         p,          P ]	};
+    key <AD11>	{ [dead_circumflex, dead_diaeresis, dead_grave  ]	};
+    key <AD12>	{ [  ccedilla,   Ccedilla,   asciitilde ]	};
+
+    key <AC10>	{ [ semicolon,      colon,     degree ]	};
+    key <AC11>	{ [    egrave,     Egrave ]	};
+    key <BKSL>	{ [    agrave,     Agrave ]	};
+
+    key <LSGT>	{ [    ugrave,     Ugrave ] 	};
+    key <AB01>	{ [         z,          Z, guillemotleft  ]	};
+    key <AB02>	{ [         x,          X, guillemotright ]	};
+    key <AB08>	{ [     comma, apostrophe,           less ]	};
+    key <AB09>	{ [    period,   quotedbl,        greater ]	};
+    key <AB10>	{ [    eacute,     Eacute ]	};
+};
+
+partial
+xkb_symbols "multi-2gr" {
+
+    name[Group1] = "Canadian Multilingual (second part)";
+
+    key <TLDE>	{ [    NoSymbol,      hyphen ]	};
+    key <AE01>	{ [   onesuperior,  exclamdown ]	};
+    key <AE02>	{ [   twosuperior,  NoSymbol ]	};
+    key <AE03>	{ [ threesuperior,    sterling ]	};
+    key <AE04>	{ [    onequarter,    currency ]	};
+    key <AE05>	{ [       onehalf,threeeighths ]	};
+    key <AE06>	{ [ threequarters, fiveeighths ]	};
+    key <AE07>	{ [    NoSymbol,seveneighths ]	};
+    key <AE08>	{ [    NoSymbol,   trademark ]	};
+    key <AE09>	{ [    NoSymbol,   plusminus ]	};
+
+    key <AE11>	{ [    NoSymbol, questiondown]	};
+    key <AE12>	{ [  dead_cedilla, dead_ogonek ]	};
+
+    key <AD01>	{ [ NoSymbol,    Greek_OMEGA ]	};
+    key <AD02>	{ [    lstroke,        Lstroke ]	};
+    key <AD03>	{ [         oe,             OE ]	};
+    key <AD04>	{ [  paragraph,     registered ]	};
+    key <AD05>	{ [     tslash,         Tslash ]	};
+    key <AD06>	{ [  leftarrow,            yen ]	};
+    key <AD07>	{ [  downarrow,        uparrow ]	};
+    key <AD08>	{ [ rightarrow,       idotless ]	};
+    key <AD09>	{ [     oslash,       Ooblique ]	};
+    key <AD10>	{ [      thorn,          THORN ]	};
+    key <AD11>	{ [ NoSymbol, dead_abovering ]	};
+    key <AD12>	{ [ dead_tilde,    dead_macron ]	};
+
+    key <AC01>	{ [         ae,          AE ]	};
+    key <AC02>	{ [     ssharp,     section ]	};
+    key <AC03>	{ [        eth,         ETH ]	};
+    key <AC04>	{ [ NoSymbol, ordfeminine ]	};
+    key <AC05>	{ [        eng,         ENG ]	};
+    key <AC06>	{ [    hstroke,     Hstroke ]	};
+    key <AC07>	{ [      U0133,       U0132 ]	};
+    key <AC08>	{ [        kra,  NoSymbol ]	};
+    key <AC09>	{ [      U0140,       U013F ]	};
+    key <AC10>	{ [ dead_acute, dead_doubleacute ]	};
+    key <AC11>	{ [ NoSymbol,  dead_caron ]	};
+    key <BKSL>	{ [ NoSymbol,  dead_breve ]	};
+
+
+    key <LSGT>	{ [ NoSymbol,   brokenbar ]	};
+
+    key <AB03>	{ [       cent,   copyright ]	};
+    key <AB04>	{ [  leftdoublequotemark,  leftsinglequotemark ]	};
+    key <AB05>	{ [ rightdoublequotemark, rightsinglequotemark ]	};
+    key <AB06>	{ [      U0149,       U266A ]	};
+    key <AB07>	{ [         mu,   masculine ]	};
+    key <AB08>	{ [ Greek_horizbar, multiply ]	};
+    key <AB09>	{ [ periodcentered, division ]	};
+    key <AB10>	{ [ NoSymbol, dead_abovedot ]	};
+
+};
+
+// based on
+// Inuktitut keyboard for X11
+// written by Pablo Saratxaga <pablo@mandrakesoft.com>
+
+alphanumeric_keys 
+xkb_symbols "ike" {
+
+    name[Group1]= "Inuktitut";
+
+    key	<AE01> { [ 0x01001595, 1		]	};
+    key	<AE02> { [ 0x01001449, 2		]	};
+    key	<AE03> { [ 0x01001550, 3		]	};
+    key	<AE04> { [ 0x01001483, 4		]	};
+    key	<AE05> { [ 0x01001466, 5		]	};
+    key	<AE06> { [ 0x01001585, 6		]	};
+    key	<AE07> { [ 0x010014bb, 7		]	};
+    key	<AE08> { [ 0x010014d0, 8		]	};
+    key	<AE09> { [ 0x010014ea, 9		]	};
+    key	<AE10> { [ 0x0100153e, 0		]	};
+    key	<AE11> { [ minus,	  underscore	]	};
+    key	<AE12> { [ 0x0100155d, equal		]	};
+
+	key <AD01> { [ 0x0100158f, 0x0100148b	]	};
+	key <AD02> { [ 0x01001403, 0x01001431	]	};
+	key <AD03> { [ 0x0100157f, 0x01001546	]	};
+	key <AD04> { [ 0x0100146d, 0x01001596	]	};
+	key <AD05> { [ 0x0100144e, 0x01001671	]	};
+	key <AD06> { [ 0x010014ef, 0x01001673	]	};
+	key <AD07> { [ 0x010014a5, 0x01001675	]	};
+	key <AD08> { [ 0x010014c2, 0x010015a4	]	};
+	key <AD09> { [ 0x010014d5, 0x010015a0	]	};
+	key <AD10> { [ 0x01001528, 0x010015a6	]	};
+	key <AD11> { [ 0x010014a1, 0x01001505	]	};
+	key <AD12> { [ dead_abovedot, 0x0100141e]	};
+
+	key <AC01> { [ 0x01001591, 0x0100148d	]	};
+	key <AC02> { [ 0x01001405, 0x01001433	]	};
+	key <AC03> { [ 0x01001581, 0x01001548	]	};
+	key <AC04> { [ 0x0100146f, 0x01001555	]	};
+	key <AC05> { [ 0x01001450, parenleft 	]	};
+	key <AC06> { [ 0x010014f1, parenright	]	};
+	key <AC07> { [ 0x010014a7, 0x0100152a	]	};
+	key <AC08> { [ 0x010014c4, 0x01001557	]	};
+	key <AC09> { [ 0x010014d7, 0x010015a2	]	};
+	key <AC10> { [ semicolon,  colon     	]	};
+	key <AC11> { [ apostrophe, quotedbl     ]	};
+
+	key <AB01> { [ 0x01001593, 0x01001490	]	};
+	key <AB02> { [ 0x0100140a, 0x01001438	]	};
+	key <AB03> { [ 0x01001583, 0x0100154b	]	};
+	key <AB04> { [ 0x01001472, question  	]	};
+	key <AB05> { [ 0x01001455, 0x0100157c	]	};
+	key <AB06> { [ 0x010014f4, 0x010014c7	]	};
+	key <AB07> { [ 0x010014aa, 0x010014da	]	};
+	key <AB08> { [ comma,      less      	]	};
+	key <AB09> { [ period,     greater   	]	};
+	key <AB10> { [ 0x0100152d, 0x01001559	]	};
+
+    key	<TLDE> { [ 0x0100157b, 0x01001575	]	};
+    key	<LSGT> { [ 0x01001579, 0x01001577	]	};
+    key	<BKSL> { [ backslash,  bar		]	};
+
+// End alphanumeric section
+};
+
+partial
+xkb_symbols "multix" {
+
+    name[Group1] = "Canadian Multilingual";
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <TLDE>	{ [     slash,  backslash,            bar, NoSymbol,
+    		   NoSymbol,     hyphen ]	};
+    key <AE01>	{ [         1,     exclam,      plusminus, NoSymbol,
+    		  onesuperior, exclamdown ]	};
+    key <AE02>	{ [         2,         at,             at, NoSymbol,
+    		  twosuperior, NoSymbol ]	};
+    key <AE03>	{ [         3, numbersign,       sterling, NoSymbol,
+    		threesuperior,   sterling ]	};
+    key <AE04>	{ [         4,     dollar,           cent, NoSymbol,
+    		   onequarter,   currency ]	};
+    key <AE05>	{ [         5,    percent,       currency, NoSymbol,
+    		      onehalf, threeeighths ]	};
+    key <AE06>	{ [         6,   question,        notsign, NoSymbol,
+    		threequarters, fiveeighths ]	};
+    key <AE07>	{ [         7,  ampersand,      braceleft, NoSymbol,
+    		   NoSymbol, seveneighths ]	};
+    key <AE08>	{ [         8,   asterisk,     braceright, NoSymbol,
+    		   NoSymbol,  trademark ]	};
+    key <AE09>	{ [         9,  parenleft,    bracketleft, NoSymbol,
+    		   NoSymbol,  plusminus ]	};
+    key <AE10>	{ [         0, parenright,   bracketright, NoSymbol ] };
+    key <AE11>	{ [     minus, underscore,        onehalf, NoSymbol,
+    		   NoSymbol, questiondown]	};
+    key <AE12>	{ [     equal,       plus,        notsign, NoSymbol,
+    		dead_cedilla, dead_ogonek ]	};
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AD01>	{ [         q,           Q,     NoSymbol, NoSymbol,
+		   NoSymbol, Greek_OMEGA ]	};
+    key <AD02>	{ [         w,           W,     NoSymbol, NoSymbol,
+   		      lstroke,     Lstroke ]	};
+    key <AD03>	{ [         e,           E,     NoSymbol, NoSymbol,
+    			   oe,          OE ]	};
+    key <AD04>	{ [         r,           R,     NoSymbol, NoSymbol,
+    		    paragraph,  registered ]	};
+    key <AD05>	{ [         t,           T,     NoSymbol, NoSymbol,
+		       tslash,      Tslash ]	};
+    key <AD06>	{ [         y,           Y,     NoSymbol, NoSymbol,
+		    leftarrow,         yen ]	};
+    key <AD07>	{ [         u,           U,     NoSymbol, NoSymbol,
+    		    downarrow,     uparrow ]	};
+    key <AD08>	{ [         i,           I,     NoSymbol, NoSymbol,
+    		   rightarrow,    idotless ]	};
+    key <AD09>	{ [         o,           O,        section, NoSymbol,
+		       oslash,    Ooblique ]	};
+    key <AD10>	{ [         p,           P,      paragraph, NoSymbol,
+		        thorn,       THORN ]	};
+
+    key.type[group1]="EIGHT_LEVEL";
+    key <AD11>	{ [dead_circumflex, dead_diaeresis, dead_grave, NoSymbol,
+    			NoSymbol, dead_abovering ]	};
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AD12>	{ [  ccedilla,   Ccedilla,     asciitilde, NoSymbol,
+		   dead_tilde,    dead_macron ]	};
+
+    key <AC01>	{ [         a,          A,     NoSymbol, NoSymbol,
+    			   ae,         AE ]	};
+    key <AC02>	{ [         s,          S,     NoSymbol, NoSymbol,
+    		       ssharp,    section ]	};
+    key <AC03>	{ [         d,          D,     NoSymbol, NoSymbol,
+    			  eth,        ETH ]	};
+    key <AC04>	{ [         f,          F,     NoSymbol, NoSymbol,
+    		   NoSymbol, ordfeminine ]	};
+    key <AC05>	{ [         g,          G,     NoSymbol, NoSymbol,
+    			  eng,        ENG ]	};
+    key <AC06>	{ [         h,          H,     NoSymbol, NoSymbol,
+    		      hstroke,    Hstroke ]	};
+    key <AC07>	{ [         j,          J,     NoSymbol, NoSymbol,
+    			U0133,      U0132 ]	};
+    key <AC08>	{ [         k,          K,     NoSymbol, NoSymbol,
+    			  kra, NoSymbol ]	};
+    key <AC09>	{ [         l,          L,     NoSymbol, NoSymbol,
+    			U0140,      U013F ]	};
+
+    key.type[group1]="EIGHT_LEVEL";
+    key <AC10>	{ [ semicolon,          colon,         degree, NoSymbol,
+    		   dead_acute, dead_doubleacute ]	};
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AC11>	{ [    egrave,         Egrave,      braceleft, NoSymbol,
+    		   NoSymbol,  dead_caron ]	};
+    key <BKSL>	{ [    agrave,         Agrave,     braceright, NoSymbol,
+    		   NoSymbol,  dead_breve ]	};
+
+    key <LSGT>	{ [    ugrave,     Ugrave,         degree, NoSymbol,
+    		   NoSymbol,   brokenbar ]	};
+
+    key.type[group1]="FOUR_LEVEL_SEMIALPHABETIC";
+    key <AB01>	{ [         z,          Z,  guillemotleft, NoSymbol ]	};
+    key <AB02>	{ [         x,          X, guillemotright, NoSymbol ]	};
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AB03>	{ [         c,          C,     NoSymbol, NoSymbol,
+    			 cent,   copyright ]	};
+    key <AB04>	{ [         v,          V,     NoSymbol, NoSymbol,
+    	  leftdoublequotemark,  leftsinglequotemark ]	};
+    key <AB05>	{ [         b,          B,     NoSymbol, NoSymbol,
+    	 rightdoublequotemark, rightsinglequotemark ]	};
+    key <AB06>	{ [         n,          N,     NoSymbol, NoSymbol,
+    			U0149,       U266A ]	};
+    key <AB07>	{ [         m,          M,             mu, NoSymbol,
+    			   mu,   masculine ]	};
+    key <AB08>	{ [     comma, apostrophe,           less, NoSymbol,
+    	       Greek_horizbar, multiply ]	};
+    key <AB09>	{ [    period,   quotedbl,        greater, NoSymbol,
+    	       periodcentered, division ]	};
+    key <AB10>	{ [    eacute,     Eacute,     dead_acute, NoSymbol,
+    		   NoSymbol, dead_abovedot ]	};
+
+    include "nbsp(level3s)"
+
+    modifier_map Control{ Control_L };
+
+    include "level3(ralt_switch)"
+    include "level5(rctrl_switch)"
+};
+
+// OLPC Section
+xkb_symbols "olpc" {
+
+    include "ca(fr)"
+    
+    key <AE02>	{ [          2,    quotedbl,          ograve,        Ograve ] };
+    key <AE03>	{ [          3,    slash,          at,        VoidSymbol ] };
+    
+    key <AD03>	{ [          e,    E,          EuroSign, VoidSymbol]	};
+        
+    key <AB09>	{ [  period,         period,         0x1002010 ]	};
+    
+    key <I219>  { [  guillemotleft,  guillemotright, degree, VoidSymbol ] };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "eng" {
+    name[Group1] = "English (Canada)";
+    include "us(basic)"
+};
+
+// EXTRAS:
+
+partial alphanumeric_keys 
+xkb_symbols "kut" {
+
+    //Ejective U0313  and compose accents are from shs layout
+    include "ca(shs)"
+
+    name[Group1]= "Kutenai";
+
+    // Alphanumeric section
+
+    // Alveolar Click
+    key <AD05> {	[ t,	T,U01C2	,U01C2	]	};
+
+    //Cent sign
+    key <AB03> {	[ c,	C,U00A2,U00A2	]	};
+
+    //Mid dot
+    key <AB09> {	[ period,     greater,U00B7   	]	};
+
+    //Glottal stop
+    key <AB10> {	[ slash,	question, U0294	]	};
+
+    //COMBINING COMMA ABOVE RIGHT
+    key <AC11> {	[ apostrophe,	quotedbl, U0315,U0315	]	};
+
+    //MODIFIER LETTER RIGHT HALF RING
+    key <AC10> {	[ semicolon,	colon,U02BE,U02BE	]	};
+};
+
+// Secwepemctsin keyboard for X11
+// written by Neskie Manuel <neskiem@gmail.com>
+
+partial alphanumeric_keys  
+xkb_symbols "shs" {
+
+    include "us"
+
+    name[Group1]= "Secwepemctsin";
+
+    //Using Dead key to get COMBINING COMMA ABOVE for ejectives on
+    //q, l, t, s, m, g, k, p, w, y, r
+    //XCompose key is used for the other accute and grave.
+
+    key <AB08>	{ [ comma, less, U0313    ]	};
+    key <AC01>	{ [ a, A, aacute, Aacute  ]	};
+    key <AD03>	{ [ e, E, eacute, Eacute  ]	};
+    key <AD07>	{ [ u, U, uacute, Uacute  ]	};
+    key <AD08>	{ [ i, I, iacute, Iacute  ]	};
+    key <AD09>	{ [ o, O, oacute, Oacute  ]	};
+
+    include "level3(ralt_switch)"
+    include "compose(rctrl)"
+};
+
+
+partial alphanumeric_keys
+	xkb_symbols "sun_type6" {
+	include "sun_vndr/ca(sun_type6)"
+};
diff --git a/data/symbols/capslock b/data/symbols/capslock
new file mode 100644
--- /dev/null
+++ b/data/symbols/capslock
@@ -0,0 +1,74 @@
+default partial hidden modifier_keys
+xkb_symbols "capslock" {
+    replace key <CAPS> {	[	Caps_Lock		]	};
+    modifier_map Lock { Caps_Lock };
+};
+
+partial hidden modifier_keys
+xkb_symbols "shiftlock" {
+    replace key <CAPS> {	[	Shift_Lock		]	};
+    modifier_map Shift { Shift_Lock };
+};
+
+partial hidden modifier_keys
+xkb_symbols "grouplock" {
+    replace key <CAPS> {	[	ISO_Next_Group,	Caps_Lock	]	};
+};
+
+partial hidden modifier_keys
+xkb_symbols "swapescape" {
+    key <CAPS> {        [       Escape  ]       };
+    key <ESC>  {        [     Caps_Lock    ]       };
+};
+
+partial hidden modifier_keys
+xkb_symbols "groupshift" {
+    key <CAPS> {
+       type[Group1]="PC_ALT_LEVEL2",
+       [       Mode_switch,    Caps_Lock       ]
+    };
+};
+
+partial hidden modifier_keys
+xkb_symbols "escape" {
+    key <CAPS> {        [       Escape  ]       };
+};
+
+partial hidden modifier_keys
+xkb_symbols "backspace" {
+    key <CAPS> {        [       BackSpace  ]       };
+};
+
+partial hidden modifier_keys
+xkb_symbols "super" {
+    key <CAPS> {        [       Super_L  ]       };
+    modifier_map Mod4   { <CAPS> };
+};
+
+partial hidden modifier_keys
+xkb_symbols "hyper" {
+    key <CAPS> {        [       Hyper_L  ]       };
+    modifier_map Mod4   { <CAPS> };
+};
+
+partial hidden modifier_keys
+xkb_symbols "none" {
+    key <CAPS> {        [       VoidSymbol  ]       };
+};
+
+partial hidden modifier_keys
+xkb_symbols "numlock" {
+    key <CAPS> {        [       Num_Lock  ]       };
+};
+
+// This changes the modifier behavior of the <CAPS> key.
+// The keysym will be reset to Caps_Lock
+partial hidden modifier_keys
+xkb_symbols "ctrl_modifier" {
+    replace key <CAPS> {
+        type[Group1] = "ONE_LEVEL",
+        symbols[Group1] = [ Caps_Lock ],
+        actions[Group1] = [ SetMods(modifiers=Control) ]    
+    };
+    modifier_map Control { <CAPS> };
+};
diff --git a/data/symbols/ch b/data/symbols/ch
new file mode 100644
--- /dev/null
+++ b/data/symbols/ch
@@ -0,0 +1,225 @@
+partial default alphanumeric_keys 
+xkb_symbols "basic" {
+
+    include "latin"
+
+    // Alphanumeric section
+    name[Group1]= "German (Switzerland)";
+    key <TLDE> { [    section,     degree                           ] };
+    key <AE01> { [          1,       plus,          bar, exclamdown ] };
+    key <AE02> { [          2,   quotedbl,           at, oneeighth  ] };
+    key <AE03> { [          3,   asterisk,   numbersign             ] };
+    key <AE04> { [          4,   ccedilla                           ] };
+    key <AE05> { [          5,    percent                           ] };
+    key <AE06> { [          6,  ampersand,      notsign             ] };
+    key <AE07> { [          7,      slash,          bar             ] };
+    key <AE08> { [          8,  parenleft,         cent             ] };
+    key <AE09> { [          9, parenright                           ] };
+    key <AE10> { [          0,      equal                           ] };
+    key <AE11> { [ apostrophe,   question,   dead_acute             ] };
+    key <AE12> { [ dead_circumflex, dead_grave, dead_tilde          ] };
+
+    key <AD03> { [          e,          E,     EuroSign             ] };
+    key <AD06> { [          z,          Z                           ] };
+    key <AD11> { [ udiaeresis,     egrave,  bracketleft             ] };
+    key <AD12> { [ dead_diaeresis, exclam, bracketright             ] };
+
+    key <AC10> { [ odiaeresis,     eacute                           ] };
+    key <AC11> { [ adiaeresis,     agrave,    braceleft             ] };
+    key <BKSL> { [     dollar,   sterling,   braceright             ] };
+
+    key <LSGT> { [       less,    greater,    backslash, brokenbar  ] };
+    key <AB01> { [          y,          Y                           ] };
+    key <AB08> { [      comma,  semicolon                           ] };
+    key <AB09> { [     period,      colon                           ] };
+    key <AB10> { [      minus, underscore                           ] };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys 
+xkb_symbols "legacy" {
+    include "ch(basic)"
+
+    name[Group1]= "German (Switzerland, legacy)";
+    key <AE07> { [          7,      slash,    brokenbar             ] };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "de" {
+    include "ch(basic)"
+};
+
+partial alphanumeric_keys 
+xkb_symbols "de_Sundeadkeys" {
+    // modify the basic Swiss German layout to use Sun dead keys
+    include "ch(basic)"
+    key <AE11> { [      apostrophe,    question,  dead_acute   ] };
+    key <AE12> { [    dead_circumflex, dead_grave,  dead_tilde   ] };
+    key <AD12> { [ dead_diaeresis,      exclam, bracketright   ] };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "de_sundeadkeys" {
+    include "ch(de_Sundeadkeys)"
+    name[Group1]= "German (Switzerland, Sun dead keys)";
+};
+
+partial alphanumeric_keys 
+xkb_symbols "de_nodeadkeys" {
+    // modify the basic Swiss German layout not to have any dead keys
+    include "ch(basic)"
+    name[Group1]= "German (Switzerland, eliminate dead keys)";
+    key <AE11> { [  apostrophe, question,        acute  ] };
+    key <AE12> { [ asciicircum,    grave,   asciitilde  ] };
+    key <AD12> { [   diaeresis,   exclam, bracketright  ] };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "fr" {
+
+    // Describes the differences between a very simple US/ASCII
+    // keyboard and a very simple Swiss/French keybaord
+
+    include "ch(basic)"
+    name[Group1]= "French (Switzerland)";
+
+    override key <AD11> {
+	[ egrave,	udiaeresis,	bracketleft	]
+    };
+    override key <AC10> {
+	[ eacute,	odiaeresis	]
+    };
+    override key <AC11> {
+	[ agrave,	adiaeresis,	braceleft	]
+    };
+};
+
+partial alphanumeric_keys
+xkb_symbols "fr_Sundeadkeys" {
+    // modify the basic Swiss French layout to use Sun dead keys
+    include "ch(fr)"
+    key <AE11> { [      apostrophe,    question,  dead_acute   ] };
+    key <AE12> { [    dead_circumflex, dead_grave,  dead_tilde   ] };
+    key <AD12> { [ dead_diaeresis,      exclam, bracketright   ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "fr_sundeadkeys" {
+    include "ch(fr_Sundeadkeys)"
+    name[Group1]= "French (Switzerland, Sun dead keys)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "fr_nodeadkeys" {
+    // modify the basic Swiss French layout not to have any dead keys
+    include "ch(fr)"
+    name[Group1]= "French (Switzerland, eliminate dead keys)";
+    key <AE11> { [  apostrophe, question,        acute  ] };
+    key <AE12> { [ asciicircum,    grave,   asciitilde  ] };
+    key <AD12> { [   diaeresis,   exclam, bracketright  ] };
+};
+
+// Copied from macintosh_vndr/ch
+// 03.01.2003
+// Andreas Tobler <a.tobler@schweiz.ch>
+// modified for Swiss German Apple Extended Keyboard II
+
+partial alphanumeric_keys
+xkb_symbols "de_mac" {
+    
+    name[Group1]= "German (Switzerland, Macintosh)";
+
+    // Alphanumeric section
+
+    key <AE01> { [	1,	plus, 	plusminus,	infinity		]	};
+    key <AE02> { [	2,	quotedbl, leftdoublequotemark, rightdoublequotemark 	]	};
+    key <AE03> { [	3,	asterisk, 	numbersign,	leftcaret	]	};
+					// not displayed here
+    key <AE04> { [	4,	ccedilla, 	Ccedilla,	slash		]	};
+    key <AE05> { [	5,	percent, 	bracketleft			]	};
+    key <AE06> { [	6,	ampersand, 	bracketright			]	};
+    key <AE07> { [	7,	slash, 	bar,		backslash		]	};
+    key <AE08> { [	8,	parenleft, 	braceleft,	Ograve		]	};
+    key <AE09> { [	9,	parenright, 	braceright,	Ocircumflex	]	};
+    key <AE10> { [	0,	equal, 	notequal,	Uacute			]	};
+    key <AE11> { [	apostrophe,	question, 	questiondown, 	NoSymbol		]	};
+    key <AE12> { [	dead_circumflex,dead_grave, 	dead_acute,	asciicircum		]	};
+    key <AD01> { [	q,	Q, 	oe,		OE			]	};
+    key <AD02> { [	w,	W, 	Greek_SIGMA,	Aacute			]	};
+    key <AD03> { [ 	e,	E, 	EuroSign,	Ediaeresis		]	};
+    key <AD04> { [ 	r,	R, 	registered,	Egrave			]	};
+    key <AD05> { [ 	t,	T, 	dagger,		Icircumflex		]	}; 
+    key <AD06> { [	z,	Z, 	Greek_OMEGA,	Iacute			]	};
+    key <AD07> { [ 	u,	U, 	degree,		Ugrave			]	};
+    key <AD08> { [ 	i,	I, 	exclamdown,	idotless		]	};
+    key <AD09> { [ 	o,	O, 	oslash,		Ooblique		]	};
+    key <AD10> { [ 	p,	P, 	Greek_pi,	Greek_PI		]	};
+    key <AD11> { [	udiaeresis,	egrave, 	section,	ydiaeresis		]	};
+    key <AD12> { [	dead_diaeresis,	exclam, 	grave,		apostrophe		]	};
+    key <AC01> { [ 	a,	A, 	aring,		Aring			]	};
+    key <AC02> { [ 	s,	S, 	ssharp, 	NoSymbol		]	}; 
+					// ligature fl
+    key <AC03> { [ 	d,	D, 	Greek_sigma,	NoSymbol		]	};
+			// partialderivative is not available here att
+    key <AC04> { [ 	f,	F, 	function,	doubledagger		]	};
+    key <AC05> { [ 	g,	G, 	at,		comma			]	};
+    key <AC06> { [ 	h,	H, 	ordfeminine,	periodcentered		]	};
+    key <AC07> { [ 	j,	J,  	masculine,	eth	 		]	};
+    key <AC08> { [ 	k,	K, 	Greek_DELTA,	macron			]	};
+    key <AC09> { [ 	l,	L, 	notsign,	caret			]	};
+    key <AC10> { [	odiaeresis,	eacute, 	cent,		breve	]	};
+    key <AC11> { [	adiaeresis,	agrave, 	ae,		AE	]	};
+    key <AB01> { [	y,	Y, 	yen,		Ydiaeresis		]	};
+    key <AB02> { [ 	x,	X, 	similarequal,	trademark		]	};
+    key <AB03> { [ 	c,	C, 	copyright,	NoSymbol		]	};
+    key <AB04> { [ 	v,	V, 	radical,	diamond			]	};
+    key <AB05> { [ 	b,	B, 	integral,	NoSymbol		]	};  
+    key <AB06> { [ 	n,	N, 	dead_tilde, 	enopencircbullet	]       };
+					// to be fixed att
+    key <AB07> { [ 	m,	M, 	mu,		dead_abovering		]       };
+					// not sure att
+    key <AB08> { [	comma,	semicolon, 	guillemotleft,	guillemotright	]	};
+    key <AB09> { [	period,	colon, 	ellipsis,	division		]	};
+    key <AB10> { [	minus,	underscore, 	hyphen,		emdash		]	};
+    key <TLDE> { [	section,	degree,   	NoSymbol, 	NoSymbol		]	};
+			// ligature fi	// per mille
+    key <SPCE> { [	space, 	nobreakspace,	nobreakspace		]	};
+    key <LSGT> { [	less,	greater, 	lessthanequal,	greaterthanequal	]  	};
+    key <BKSL> { [	dollar,	sterling, 	paragraph,	enfilledcircbullet	]	};
+
+    include "kpdl(comma)"
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys 
+xkb_symbols "fr_mac" {
+
+    // Describes the differences between a very simple US/ASCII
+    // keyboard and a very simple Swiss/French keybaord
+
+    include "ch(de_mac)"
+    name[Group1]= "French (Switzerland, Macintosh)";
+
+    override key <AD11> {
+	[ egrave,	udiaeresis,  bracketleft	]
+    };
+    override key <AC10> {
+	[ eacute,	odiaeresis	]
+    };
+    override key <AC11> {
+	[ agrave,	adiaeresis,   braceleft		]
+    };
+};
+
+// EXTRAS:
+
+partial alphanumeric_keys
+	xkb_symbols "sun_type6_de" {
+	include "sun_vndr/ch(sun_type6_de)"
+};
+
+partial alphanumeric_keys
+	xkb_symbols "sun_type6_fr" {
+	include "sun_vndr/ch(sun_type6_fr)"
+};
diff --git a/data/symbols/compose b/data/symbols/compose
new file mode 100644
--- /dev/null
+++ b/data/symbols/compose
@@ -0,0 +1,89 @@
+partial modifier_keys
+xkb_symbols "ralt" {
+    key <RALT>	{ type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lwin" {
+    key <LWIN>	{ type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lwin-altgr" {
+    key <LWIN>	{ type[Group1]="FOUR_LEVEL", [ Super_L, Super_L, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rwin" {
+    key <RWIN>	{ type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rwin-altgr" {
+    key <RWIN>	{ type[Group1]="FOUR_LEVEL", [ Super_R, Super_R, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "menu" {
+    key <MENU>	{ type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "menu-altgr" {
+    key <MENU>	{ type[Group1]="FOUR_LEVEL", [ Menu, Menu, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rctrl" {
+    key <RCTL> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rctrl-altgr" {
+    key <RCTL> { type[Group1]="FOUR_LEVEL", [ Control_R, Control_R, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lctrl" {
+    key <LCTL> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lctrl-altgr" {
+    key <LCTL> { type[Group1]="FOUR_LEVEL", [ Control_L, Control_L, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "caps" {
+    key <CAPS> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "caps-altgr" {
+    key <CAPS> { type[Group1]="FOUR_LEVEL", [ Caps_Lock, Caps_Lock, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "102" {
+    key <LSGT> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "102-altgr" {
+    key <LSGT> { type[Group1]="FOUR_LEVEL", [ less, greater, Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "paus" {
+    key <PAUS> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "prsc" {
+    key <PRSC> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "sclk" {
+    key <SCLK> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
diff --git a/data/symbols/ctrl b/data/symbols/ctrl
new file mode 100644
--- /dev/null
+++ b/data/symbols/ctrl
@@ -0,0 +1,57 @@
+// eliminate the caps lock key completely (replace with control)
+partial modifier_keys 
+xkb_symbols "nocaps" {
+    replace key <CAPS>	{  [ Control_L, Control_L ] };
+    modifier_map  Control { <CAPS>, <LCTL> };
+};
+
+// replace left control with Meta
+xkb_symbols "lctrl_meta" {
+    replace key <LCTL>	{  [ Meta_L ] };
+};
+
+// swap the caps lock key with the left control key
+partial modifier_keys 
+xkb_symbols "swapcaps" {
+    replace key <CAPS>	{  [ Control_L ] };
+    replace key <LCTL>	{  [ Caps_Lock ] };
+};
+
+// moves the control key to the middle row and the caps lock
+// to the bottom row.  Only works if the geometry or keycodes
+// file has defined appropriate aliases for the keys in question.
+partial modifier_keys 
+xkb_symbols "ac_ctrl" {
+    replace key <AC00>	{  [ Control_L ] };
+    replace key <AA00>	{  [ Caps_Lock ] };
+};
+
+// Moves the control key to the bottom row and the caps lock
+// to the middle row.  Only works if the geometry or keycodes
+// file has defined appropriate aliases for the keys in question.
+partial modifier_keys 
+xkb_symbols "aa_ctrl" {
+    replace key <AA00>	{  [ Control_L ] };
+    replace key <AC00>	{  [ Caps_Lock ] };
+};
+
+// Right Ctrl works as Right Alt
+partial modifier_keys 
+xkb_symbols "rctrl_ralt" {
+    key <RCTL>	{  symbols[Group1]= [ Alt_R ] };
+};
+
+// Menu works as Right Ctrl
+partial modifier_keys
+xkb_symbols "menu_rctrl" {
+  replace key <MENU> { [ Control_R, Control_R ] };
+  modifier_map Control { Control_L, <MENU> };
+};
+
+// right alt functions as another ctrl key
+partial modifier_keys 
+xkb_symbols "ralt_rctrl" {
+    replace key <RALT> { type[Group1]    = "TWO_LEVEL",
+                         symbols[Group1] = [ Control_R, Control_R ] };
+    modifier_map Control { <RALT> }; 
+};
diff --git a/data/symbols/cz b/data/symbols/cz
new file mode 100644
--- /dev/null
+++ b/data/symbols/cz
@@ -0,0 +1,184 @@
+partial default alphanumeric_keys 
+xkb_symbols "basic" {
+     
+     // This layout conforms to a new cz compromise standard designed 
+     // to satisfy most unix, windows and mac users.
+     // 2001 by Kamil Toman <ktoman@email.cz>
+
+    include "latin"
+
+    name[Group1]= "Czech";
+
+    key <TLDE>	{ [ semicolon, dead_abovering,    grave,   asciitilde ]	};
+    key <AE01>	{ [      plus,          1,       exclam,   dead_tilde ]	};
+    key <AE02>	{ [    ecaron,          2,           at,   dead_caron ]	};
+    key <AE03>	{ [    scaron,          3,   numbersign, dead_circumflex ] };
+    key <AE04>	{ [    ccaron,          4,       dollar,   dead_breve ]	};
+    key <AE05>	{ [    rcaron,          5,      percent, dead_abovering ] };
+    key <AE06>	{ [    zcaron,          6,  asciicircum,  dead_ogonek ]	};
+    key <AE07>	{ [    yacute,          7,    ampersand,   dead_grave ]	};
+    key <AE08>	{ [    aacute,          8,     asterisk, dead_abovedot]	};
+    key <AE09>	{ [    iacute,          9,    braceleft,   dead_acute ]	};
+    key <AE10>	{ [    eacute,          0,   braceright, dead_doubleacute ] };
+    key <AE11>	{ [     equal,    percent,     NoSymbol, dead_diaeresis ] };
+    key <AE12>	{ [dead_acute, dead_caron,  dead_macron, dead_cedilla ]	};
+
+    key <AD01>	{ [         q,          Q,    backslash,     NoSymbol ]	};
+    key <AD02>	{ [         w,          W,          bar,     Nosymbol ]	};
+    key <AD03>	{ [         e,          E,     EuroSign,     NoSymbol ]	};
+    key <AD04>	{ [         r,          R,     NoSymbol,     NoSymbol ]	};
+    key <AD05>	{ [         t,          T,     NoSymbol,     NoSymbol ]	};
+    key <AD06>	{ [         z,          Z,     NoSymbol,     NoSymbol ]	};
+    key <AD07>	{ [         u,          U,     NoSymbol,     NoSymbol ]	};
+    key <AD08>	{ [         i,          I,     NoSymbol,     NoSymbol ]	};
+    key <AD09>	{ [         o,          O,     NoSymbol,     NoSymbol ]	};
+    key <AD10>	{ [         p,          P,     NoSymbol,     NoSymbol ]	};
+
+    key <AD11>	{ [    uacute,      slash,  bracketleft,     division ]	};
+    key <AD12>	{ [parenright,  parenleft, bracketright,     multiply ]	};
+
+    key <AC01>	{ [         a,          A,   asciitilde,     NoSymbol ]	};
+    key <AC02>	{ [         s,          S,      dstroke,     NoSymbol ]	};
+    key <AC03>	{ [         d,          D,      Dstroke,     NoSymbol ]	};
+    key <AC04>	{ [         f,          F,  bracketleft,     NoSymbol ]	};
+    key <AC05>	{ [         g,          G, bracketright,     NoSymbol ]	};
+    key <AC06>	{ [         h,          H,        grave,     NoSymbol ]	};
+    key <AC07>	{ [         j,          J,   apostrophe,     NoSymbol ]	};
+    key <AC08>	{ [         k,          K,      lstroke,     NoSymbol ]	};
+    key <AC09>	{ [         l,          L,      Lstroke,     NoSymbol ]	};
+                  
+    key <AC10>	{ [     uring,   quotedbl,       dollar,     NoSymbol ]	};
+    key <AC11>	{ [   section,     exclam,   apostrophe,       ssharp ]	};
+    key <AC12>	{ [  EuroSign, dead_diaeresis, NoSymbol,     NoSymbol ]	};
+    key <BKSL>	{ [dead_diaeresis, apostrophe, backslash,         bar ]	};
+
+    key <LSGT>	{ [ backslash,        bar,        slash,     NoSymbol ]	};
+    key <AB01>	{ [         y,          Y,       degree,     NoSymbol ]	};
+    key <AB02>	{ [         x,          X,   numbersign,     Nosymbol ]	};
+    key <AB03>	{ [         c,          C,    ampersand,     NoSymbol ]	};
+    key <AB04>	{ [         v,          V,           at,     NoSymbol ]	};
+    key <AB05>	{ [         b,          B,    braceleft,     NoSymbol ]	};
+    key <AB06>	{ [         n,          N,   braceright,     NoSymbol ]	};
+    key <AB07>	{ [         m,          M,  asciicircum,     NoSymbol ]	};
+    key <AB08>	{ [     comma,   question,         less,     NoSymbol ]	};
+    key <AB09>	{ [    period,      colon,      greater,     NoSymbol ]	};
+    key <AB10>	{ [     minus, underscore,     asterisk,     NoSymbol ]	};
+
+    key <SPCE>	{ [     space,      space,        space,       space ]	};
+
+    include "level3(ralt_switch)"
+};
+
+// Use <BKSL> instead of <LSGT> (useful for keyboard without <LSGT> key)
+xkb_symbols "bksl" {
+    include "cz(basic)"
+    name[Group1]= "Czech (with <\|> key)";
+
+    key <BKSL>	{ [ backslash,        bar,        slash,     NoSymbol ]	};
+};
+
+partial alphanumeric_keys 
+xkb_symbols "qwerty" {
+ 
+    // This layout represent actual keyboard layout. It complies with symbols
+    // printed on keys.
+    // -----------------------------------------------------------------------
+    // This layout was created in 2011 by Lukáš Mojžíš <lmojzis@grenames.cz>
+    
+    include "cz(basic)"
+    name[Group1]= "Czech (qwerty)";
+
+    key <AB01>	{ [         z,          Z,       degree,         NoSymbol ] };
+    key <AC10>	{ [     uring,   quotedbl,    semicolon,            colon ] };
+    key <AC11>	{ [   section,     exclam,   apostrophe,           ssharp ] };
+    key <AD06>	{ [         y,          Y,     NoSymbol,         NoSymbol ] };
+    key <AD11>	{ [    uacute,      slash,  bracketleft,        braceleft ] };
+    key <AD12>	{ [parenright,  parenleft, bracketright,       braceright ] };
+    key <AE09>	{ [    iacute,          9,    parenleft,       dead_acute ] };
+    key <AE10>	{ [    eacute,          0,   parenright, dead_doubleacute ] };
+};
+
+// Use <BKSL> instead of <LSGT> (useful for keyboard without <LSGT> key)
+xkb_symbols "qwerty_bksl" {
+    include "cz(qwerty)"
+
+    name[Group1]= "Czech (qwerty, extended Backslash)";
+
+    key <BKSL>	{ [ backslash,        bar,        slash,     NoSymbol ]	};
+};
+
+partial alphanumeric_keys alternate_group
+xkb_symbols "ucw" {
+
+    // This layout is usually used as the second group, it contains
+    // accented characters only, no 'latin' set.
+    // 2008 by Milan Vancura <mvancura@suse.cz>
+
+    name[Group1]= "Czech (UCW layout, accented letters only)";
+
+    key <AB01> { [zcaron,      Zcaron      ] };
+    key <AB02> { [ssharp                   ] };
+    key <AB03> { [ccaron,      Ccaron      ] };
+    key <AB04> { [ccedilla,    Ccedilla    ] };
+    key <AB05> { [ntilde,      Ntilde      ] };
+    key <AB06> { [ncaron,      Ncaron      ] };
+    key <AB07> { [lacute,      Lacute      ] };
+
+    key <AC01> { [aacute,      Aacute      ] };
+    key <AC02> { [scaron,      Scaron      ] };
+    key <AC03> { [dcaron,      Dcaron      ] };
+    key <AC04> { [ediaeresis,  Ediaeresis  ] };
+    key <AC05> { [racute,      Racute      ] };
+    key <AC06> { [uacute,      Uacute      ] };
+    key <AC07> { [udiaeresis,  Udiaeresis  ] };
+    key <AC08> { [ocircumflex, Ocircumflex ] };
+    key <AC09> { [lcaron,      Lcaron      ] };
+
+    key <AD01> { [adiaeresis,  Adiaeresis  ] };
+    key <AD02> { [ecaron,      Ecaron      ] };
+    key <AD03> { [eacute,      Eacute      ] };
+    key <AD04> { [rcaron,      Rcaron      ] };
+    key <AD05> { [tcaron,      Tcaron      ] };
+    key <AD06> { [yacute,      Yacute      ] };
+    key <AD07> { [uring,       Uring       ] };
+    key <AD08> { [iacute,      Iacute      ] };
+    key <AD09> { [oacute,      Oacute      ] };
+    key <AD10> { [odiaeresis,  Odiaeresis  ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "dvorak-ucw" {
+
+    // US Dvorak layout extend with UCW - AltGr produces accented characters
+
+    include "us(dvorak)"
+
+    name[Group1]= "Czech (US Dvorak with CZ UCW support)";
+
+    key <AB03> { [ j, J, eacute, Eacute ] };
+    key <AB04> { [ k, K, uacute, Uacute ] };
+    key <AB10> { [ z, Z, zcaron, Zcaron ] };
+
+    key <AC01> { [ a, A, aacute, Aacute ] };
+    key <AC02> { [ o, O, oacute, Oacute ] };
+    key <AC03> { [ e, E, ecaron, Ecaron ] };
+    key <AC04> { [ u, U, uring,  Uring  ] };
+    key <AC05> { [ i, I, iacute, Iacute ] };
+    key <AC06> { [ d, D, dcaron, Dcaron ] };
+    key <AC08> { [ t, T, tcaron, Tcaron ] };
+    key <AC09> { [ n, N, ncaron, Ncaron ] };
+    key <AC10> { [ s, S, scaron, Scaron ] };
+
+    key <AD05> { [ y, Y, yacute, Yacute ] };
+    key <AD08> { [ c, C, ccaron, Ccaron ] };
+    key <AD09> { [ r, R, rcaron, Rcaron ] };
+
+    include "level3(ralt_switch)"
+};
+
+// EXTRAS:
+
+partial alphanumeric_keys
+	xkb_symbols "sun_type6" {
+	include "sun_vndr/cz(sun_type6)"
+};
diff --git a/data/symbols/de b/data/symbols/de
new file mode 100644
--- /dev/null
+++ b/data/symbols/de
@@ -0,0 +1,735 @@
+// based on a keyboard map from an 'xkb/symbols/de' file
+
+default
+xkb_symbols "basic" {
+
+    include "latin(type4)"
+
+    name[Group1]="German";
+
+    key <AE02>	{ [         2,   quotedbl,  twosuperior,    oneeighth ]	};
+    key <AE03>	{ [         3,    section, threesuperior,    sterling ]	};
+    key <AE04>	{ [         4,     dollar,   onequarter,     currency ]	};
+
+    key <AE11> {type[Group1]="FOUR_LEVEL_PLUS_LOCK",  symbols[Group1]=
+                  [ssharp, question, backslash, questiondown, 0x1001E9E ]};
+// The unicode capital letter sharp s U+1E9E is transformed to "SS"
+// to match the rules for capitalizing sharp s in german.
+// If the capital sharp s is needed, delete the line
+// starting with <U1E9C> from /usr/share/X11/locale/iso8859-15/Compose.
+// If both doubled S and capital sharp s are needed, use  0x1001E9E
+// for capital sharp s and some free unicode codepoint like 0x1001E9C
+// for doubled S. Don`t forget to change this in the Compose file, too.
+
+    key <AE12>	{ [dead_acute, dead_grave, dead_cedilla,  dead_ogonek ]	};
+
+    key <AD03>	{ [         e,          E,     EuroSign,     EuroSign ]	};
+    key <AD06>	{ [         z,          Z,    leftarrow,          yen ]	};
+    key <AD11>	{ [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
+    key <AD12>	{ [      plus,   asterisk,   asciitilde,  macron ]	};
+
+    key <AC02>  { [         s,          S,                U017F,     U1E9E    ] };
+    key <AC07>  { [         j,          J,        dead_belowdot, dead_abovedot   ] };
+    key <AC10>	{ [odiaeresis, Odiaeresis, dead_doubleacute, dead_belowdot ] };
+    key <AC11>	{ [adiaeresis, Adiaeresis, dead_circumflex, dead_caron ] };
+    key <TLDE>	{ [dead_circumflex, degree,	U2032,    U2033	] };
+
+    key <BKSL>	{ [numbersign, apostrophe, rightsinglequotemark,   dead_breve ]	};
+    key <AB01>	{ [         y,          Y,       guillemotright,    U203A 	] };
+    key <AB02>	{ [         x,          X,        guillemotleft,    U2039 	] };
+    key <AB04>	{ [         v,          V,   doublelowquotemark, singlelowquotemark ]	};
+    key <AB05>	{ [         b,          B,  leftdoublequotemark, leftsinglequotemark ] };
+    key <AB06>	{ [         n,          N, rightdoublequotemark, rightsinglequotemark ]	};    
+    key <AB08>  { [     comma,  semicolon,       periodcentered,     multiply	] };
+    key <AB09>	{ [    period,      colon,                U2026,     division 	] };
+    key <AB10>	{ [     minus, underscore,               endash,     emdash	] };
+
+    include "kpdl(comma)"
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "legacy" {
+    // previous standard German layout with tilde as dead key
+
+    include "de(basic)"
+    name[Group1]="German (legacy)";
+
+    key <AD12>	{ [      plus,   asterisk,   dead_tilde,  dead_macron ]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+    // modify the basic German layout to not have any dead keys
+
+    include "de(basic)"
+    name[Group1]="German (eliminate dead keys)";
+
+    key <TLDE>	{ [asciicircum,    degree,      notsign,      notsign ]	};
+    key <AE12>	{ [     acute,      grave,      cedilla,      cedilla ]	};
+    key <AD11>	{ [udiaeresis, Udiaeresis,    diaeresis,    diaeresis ]	};
+    key <AD12>	{ [      plus,   asterisk,   asciitilde,       macron ]	};
+    key <AC10>	{ [odiaeresis, Odiaeresis,  doubleacute,  doubleacute ]	};
+    key <AC11>	{ [adiaeresis, Adiaeresis,  asciicircum,  asciicircum ]	};
+    key <BKSL>	{ [numbersign, apostrophe,        grave,        grave ]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "deadgraveacute" {
+    // modify the basic German layout to have only acute and grave
+    // as dead keys (tilde and circumflex are needed as spacing characters
+    // in many programming languages)
+
+    include "de(basic)"
+    name[Group1]="German (dead grave acute)";
+
+    key <TLDE>	{ [asciicircum,    degree,      notsign,      notsign ]	};
+    key <AD12>	{ [      plus,   asterisk,   asciitilde,  dead_macron ]	};
+    key <BKSL>	{ [numbersign, apostrophe,        grave,        grave ]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "deadacute" {
+    // modify the basic German layout to have only acute as
+    // dead keys (ASCII grave, tilde and circumflex are needed as
+    // spacing characters in many programming languages and text formatters)
+
+    include "de(deadgraveacute)"
+
+    name[Group1]="German (dead acute)";
+
+    key <AE12>	{ [dead_acute,      grave, dead_cedilla,  dead_ogonek ]	};
+    key <BKSL>	{ [numbersign, apostrophe,   dead_grave,   dead_grave ]	};
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "T3" {
+    include "latin(type4)"
+
+    name[Group1]="German (T3)";
+
+    key.type[Group1] = "EIGHT_LEVEL";
+    key <TLDE> { [ dead_circumflex,          degree,        multiply,        NoSymbol,           U204A,            hyphen,             bar,        NoSymbol ] };
+    key <AE01> { [               1,          exclam, rightsinglequotemark,   NoSymbol,     onesuperior,        exclamdown,           U02B9,        NoSymbol ] };
+    key <AE02> { [               2,        quotedbl,     twosuperior,        NoSymbol,     twosuperior,          currency,           U02BA,        NoSymbol ] };
+    key <AE03> { [               3,         section,   threesuperior,        NoSymbol,   threesuperior,          sterling,           U02BF,        NoSymbol ] };
+    key <AE04> { [               4,          dollar,          emdash,        NoSymbol,      onequarter,            0x20AC,           U02BE,        NoSymbol ] };
+    key <AE05> { [               5,         percent,      exclamdown,        NoSymbol,         onehalf,           uparrow,           U02C1,        NoSymbol ] };
+    key <AE06> { [               6,       ampersand,    questiondown,        NoSymbol,   threequarters,         downarrow,           U02C0,        NoSymbol ] };
+    key <AE07> { [               7,           slash,       braceleft,        NoSymbol,       oneeighth,         leftarrow,       braceleft,        NoSymbol ] };
+    key <AE08> { [               8,       parenleft,     bracketleft,        NoSymbol,    threeeighths,        rightarrow,      braceright,        NoSymbol ] };
+    key <AE09> { [               9,      parenright,    bracketright,        NoSymbol,     fiveeighths,         plusminus,     bracketleft,        NoSymbol ] };
+    key <AE10> { [               0,           equal,      braceright,        NoSymbol,    seveneighths,         trademark,    bracketright,        NoSymbol ] };
+    key <AE11> { [          ssharp,        question,       backslash,        NoSymbol,       backslash,      questiondown,           U02BB,        NoSymbol ] };
+    key <AE12> { [      dead_acute,      dead_grave,   dead_abovedot,        NoSymbol,    dead_cedilla,       dead_ogonek,         notsign,        NoSymbol ] };
+
+    key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC";
+    key <AD01> { [               q,               Q,              at,        NoSymbol,           U0242,           U0241,           U030D,        NoSymbol ] };
+    key <AD02> { [               w,               W,      dead_caron,        NoSymbol,           U02B7,           U2126,   dead_abovedot,        NoSymbol ] };
+    key <AD03> { [               e,               E,        EuroSign,        NoSymbol,              oe,              OE,      dead_breve,        NoSymbol ] };
+    key <AD04> { [               r,               R,  dead_diaeresis,        NoSymbol,       paragraph,      registered, dead_circumflex,        NoSymbol ] };
+    key <AD05> { [               t,               T,     dead_macron,        NoSymbol,           UA78C,           UA78B,  dead_diaeresis,        NoSymbol ] };
+    key <AD06> { [               z,               Z, dead_doubleacute,       NoSymbol,           U027C,             yen, dead_invertedbreve,     NoSymbol ] };
+    key <AD07> { [               u,               U,      dead_breve,        NoSymbol,           U0223,           U0222,      dead_caron,        NoSymbol ] };
+    key <AD08> { [               i,               I,      dead_tilde,        NoSymbol,        idotless,           U214D, dead_abovecomma,        NoSymbol ] };
+    key <AD09> { [               o,               O,  dead_abovering,        NoSymbol,          oslash,          Oslash,       dead_horn,        NoSymbol ] };
+    key <AD10> { [               p,               P,       dead_hook,        NoSymbol,           thorn,           THORN,       dead_hook,        NoSymbol ] };
+    key <AD11> { [      udiaeresis,      Udiaeresis,       dead_horn,        NoSymbol,           U017F,  dead_abovering,      dead_grave,        NoSymbol ] };
+    key.type[Group1] = "EIGHT_LEVEL";
+    key <AD12> { [            plus,        asterisk,      asciitilde,        NoSymbol,      dead_tilde,     dead_macron,              at,        NoSymbol ] };
+
+    key.type[Group1] = "ONE_LEVEL";
+    key <CAPS>  { [ Caps_Lock	]	};
+    key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC";
+    key <AC01> { [               a,               A,   lessthanequal,        NoSymbol,              ae,              AE,           U0329,        NoSymbol ] };
+    key <AC02> { [               s,               S, greaterthanequal,       NoSymbol,          ssharp,         section,   dead_belowdot,        NoSymbol ] };
+    key <AC03> { [               d,               D,           U2300,        NoSymbol,             eth,             ETH, dead_belowbreve,        NoSymbol ] };
+    key <AC04> { [               f,               F,         minutes,        NoSymbol,           U0294,     ordfeminine, dead_belowcircumflex,   NoSymbol ] };
+    key <AC05> { [               g,               G,         seconds,        NoSymbol,             eng,             ENG, dead_belowmacron,       NoSymbol ] };
+    key <AC06> { [               h,               H,           U1E9E,        NoSymbol,           U0272,           U019D,           U0332,        NoSymbol ] };
+    key <AC07> { [               j,               J,    dead_cedilla,        NoSymbol,           U0133,           U0132,  dead_belowring,        NoSymbol ] };
+    key <AC08> { [               k,               K, dead_belowcomma,        NoSymbol,             kra, dead_belowcomma,           U0335,        NoSymbol ] };
+    key <AC09> { [               l,               L,     dead_ogonek,        NoSymbol,         lstroke,         Lstroke,           U0338,        NoSymbol ] };
+    key <AC10> { [      odiaeresis,      Odiaeresis,   dead_belowdot,        NoSymbol,      dead_acute, dead_doubleacute,         degree,        NoSymbol ] };
+    key <AC11> { [      adiaeresis,      Adiaeresis,     dead_stroke,        NoSymbol,           U019B,           U1E9E,         minutes,        NoSymbol ] };
+    key.type[Group1] = "EIGHT_LEVEL";
+    key <BKSL> { [      numbersign,      apostrophe,      registered,        NoSymbol,           schwa,           SCHWA,         seconds,        NoSymbol ] };
+
+    key <LSGT> { [            less,         greater,             bar,        NoSymbol,           U0149,       brokenbar,           U266A,        NoSymbol ] };
+    key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC";
+    key <AB01> { [               y,               Y,           U203A,        NoSymbol,           U0292,           U01B7,   guillemotleft,        NoSymbol ] };
+    key <AB02> { [               x,               X,  guillemotright,        NoSymbol, doublelowquotemark, singlelowquotemark, guillemotright,   NoSymbol ] };
+    key <AB03> { [               c,               C,       copyright,        NoSymbol,            cent,       copyright,  Greek_horizbar,        NoSymbol ] };
+    key <AB04> { [               v,               V,   guillemotleft,        NoSymbol, leftdoublequotemark, leftsinglequotemark,   U2039,        NoSymbol ] };
+    key <AB05> { [               b,               B,           U2039,        NoSymbol, rightdoublequotemark, rightsinglequotemark, U203A,        NoSymbol ] };
+    key <AB06> { [               n,               N,          endash,        NoSymbol,           U019E,           U0220,          endash,        NoSymbol ] };
+    key <AB07> { [               m,               M,        Greek_mu,        NoSymbol,              mu,       masculine,          emdash,        NoSymbol ] };
+    key.type[Group1] = "EIGHT_LEVEL";
+    key <AB08> { [           comma,       semicolon,           U02BB,        NoSymbol,        ellipsis,        multiply,          dollar,        NoSymbol ] };
+    key <AB09> { [          period,           colon,           U200C,        NoSymbol,  periodcentered,        division,      numbersign,        NoSymbol ] };
+    key <AB10> { [           minus,      underscore,          hyphen,        NoSymbol,           U0140,           U013F,           U2011,        NoSymbol ] };
+
+    key <SPCE> { [           space,           space,    nobreakspace,        NoSymbol,           U202F,           U200C,    nobreakspace,        NoSymbol ] };
+
+    include "kpdl(comma)"
+
+    // We do not support the correct level selection mechanism yet, this is
+    //just for testing:
+    include "level5(rctrl_switch)"
+    include "level3(ralt_switch)"
+ };
+
+partial alphanumeric_keys
+xkb_symbols "ro" {
+    // add romanian-specific letters to the basic German layout.
+    // Romanian symbols are accessible with combination of <AltGr> and
+    // 'a', 's', 't', 'i', 'ä (&auml)' (+<Shift> for capital letters).
+    // To view romanian-specific symbols, add "export LC_CTYPE=ro_RO"
+    // or "export LC_CTYPE=de_DE.utf8" to your .profile.
+
+    include "de(basic)"
+
+    name[Group1]="Romanian (Germany)";
+
+    key <AD05> { [         t,    T,           tcedilla,     Tcedilla    ] };
+    key <AD08> { [         i,    I,        icircumflex,  Icircumflex    ] };
+    key <AC01> { [         a,    A,        acircumflex,  Acircumflex    ] };
+    key <AC02> { [         s,    S,           scedilla,     Scedilla    ] };
+    key <AC11> { [ adiaeresis,   Adiaeresis,    abreve,       Abreve    ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "ro_nodeadkeys" {
+    // add romanian-specific letters to the German nodeadkeys layout.
+    // Read the comment for de_ro !
+
+    include "de(nodeadkeys)"
+    name[Group1]="Romanian (Germany, eliminate dead keys)";
+
+    key <AD05> { [         t,    T,           tcedilla,     Tcedilla    ] };
+    key <AD08> { [         i,    I,        icircumflex,  Icircumflex    ] };
+    key <AC01> { [         a,    A,        acircumflex,  Acircumflex    ] };
+    key <AC02> { [         s,    S,           scedilla,     Scedilla    ] };
+    key <AC11> { [ adiaeresis,   Adiaeresis, abreve,       Abreve       ] };
+};
+
+// German Dvorak keymap by Thorsten Staerk (www.staerk.de/thorsten)
+// Have acute and grave as dead keys, tilde and circumflex alive as they are needed 
+// in many programming languages.
+// to use this keymap, use a 105-key-keyboard and the command setxkbmap -model pc105 -layout dvorak -variant de
+// source: http://www-lehre.informatik.uni-osnabrueck.de/~rfreund/dvorak.php
+partial alphanumeric_keys 
+xkb_symbols "dvorak" {
+    include "us(dvorak)"
+
+    name[Group1]="German (Dvorak)";
+
+    key <TLDE> { [ asciicircum, degree ] };
+
+    key <AE01> { [ 1, exclam, onesuperior ] };
+    key <AE02> { [ 2, quotedbl, twosuperior ] };
+    key <AE03> { [ 3, section, threesuperior ] };
+    key <AE04> { [ 4, dollar, bar ] };
+    key <AE05> { [ 5, percent, bar ] };
+    key <AE06> { [ 6, ampersand, brokenbar ] };
+    key <AE07> { [ 7, slash, braceleft ] };
+    key <AE08> { [ 8, parenleft, bracketleft ] };
+    key <AE09> { [ 9, parenright, bracketright ] };
+    key <AE10> { [ 0, equal, braceright ] };
+    key <AE11> { [ plus, asterisk, asciitilde ] };
+    key <AE12> { [ less, greater, dead_grave ] };
+
+    key <AD01> { [ udiaeresis, Udiaeresis, at ] };
+    key <AD02> { [ comma, semicolon, dead_diaeresis ] };
+    key <AD03> { [ period, colon ] };
+    key <AD08> { [ c, C, copyright, Cacute ] };
+    key <AD09> { [ t, T, trademark ] };
+    key <AD10> { [ z, Z, zabovedot, Zabovedot ] };
+    key <AD11> { [ question, ssharp ] };
+    key <AD12> { [ slash, backslash, dead_acute ] };
+
+    key <AC01> { [ a, A, at, aogonek ] };
+    key <AC02> { [ o, O, oacute, Oacute ] };
+    key <AC03> { [ e, E, EuroSign, eogonek ] };
+    key <AC04> { [ i, I ] };
+    key <AC05> { [ u, U ] };
+    key <AC06> { [ h, H ] };
+    key <AC07> { [ d, D ] };
+    key <AC08> { [ r, R, registered ] };
+    key <AC09> { [ n, N, nacute, Nacute ] };
+    key <AC10> { [ s, S, sacute, Sacute] };
+    key <AC11> { [ l, L, lstroke, Lstroke ] };
+
+    key <AB01> { [ odiaeresis, Odiaeresis ] };
+    key <AB02> { [ q, Q, at ] };
+    key <AB07> { [ m, M, mu ] };
+    key <AB10> { [ numbersign, apostrophe ] };
+
+    key <BKSL> { [ minus, underscore, hyphen, diaeresis] };
+
+    key <LSGT> { [ adiaeresis, Adiaeresis, bar ] };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "Sundeadkeys" {
+
+    // For naming consistency
+
+    include "de(basic)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "sundeadkeys" {
+
+    // For naming consistency
+
+    include "de(Sundeadkeys)"
+
+    name[Group1]="German (Sun dead keys)";
+};
+
+
+// German Neo-Layout Version 2
+// adopted 2004 by Hanno Behrens <Hanno.Behrens@gmx.de>
+// inspired by Dvorak/de-ergo  http://www.goebel-consult.de/de-ergo/
+//
+// Authors: 
+//      Stephan Hilb <stephan at ehilb dot de>
+//      <lucky at zankt dot net>
+//      Benjamin Kellermann <Benjamin dot Kellermann at gmx dot Germany>
+//      Erik Streb <mail at erikstreb dot de>
+//        and many other contributors
+//
+//      http://www.neo-layout.org
+//
+// $Revision$, $Date$
+
+partial alphanumeric_keys modifier_keys keypad_keys
+xkb_symbols "neo_base" {
+
+    // Levels in Neo jargon
+    // --------------------------------------------------------------
+    // Ebene 1: normal
+    // Ebene 2: Shift
+    // Ebene 3: Mod3
+    // Ebene 4: Mod4 (for marking something use Shift + Mod4)
+    // Ebene 5: Shift + Mod3
+    // Ebene 6: Mod3 + Mod4
+    // Compose (not a level): Mod3 + Tab
+    // Feststelltaste (Capslock): Shift + Shift
+    // Mod4-Lock: Mod4 + Mod4
+    // Mod4-Lock: Shift + Mod3 + Tab
+
+    // Legend
+    // ===============
+    // Levels in Xkbmap jargon to be found here in the definitions. 
+    // These are the levels used, and Xorg's translations:
+    // --------------------------------------------------------------
+    // Xorg:       Level1                   Level2                   Level3                   Level4                   Level5                   Level6                   Level7                   Level8                   
+    // Neo:        Ebene1                   Ebene2                   Ebene3                   Ebene5                   Ebene4                   Pseudo-Ebene             Ebene6                   ???                      
+    // Keys (Neo): None                     Shift                    Mod3                     Mod3 + Shift             Mod4                     Mod4 + Shift             Mod3 + Mod4              Mod3 + Mod4 + Shift      
+
+
+    // Alphanumeric-keys
+    // ===============
+    key.type[Group1] = "EIGHT_LEVEL";
+
+    // Tab as Multi_key (Compose)
+    // --------------------------------------------------------------
+    key  <TAB> { [ Tab,                     ISO_Left_Tab,            Multi_key,               ISO_Level5_Lock,         NoSymbol,                NoSymbol,                NoSymbol,                ISO_Level5_Lock          ] };
+
+
+    // Number row
+    // --------------------------------------------------------------
+    key <TLDE> { [ dead_circumflex,         dead_caron,              U21BB,                   U02DE,                   dead_abovedot,           Pointer_EnableKeys,      dead_belowdot,           NoSymbol                 ] };
+
+    key <AE01> { [ 1,                       degree,                  onesuperior,             onesubscript,            ordfeminine,             NoSymbol,                notsign,                 NoSymbol                 ] };
+    key <AE02> { [ 2,                       section,                 twosuperior,             twosubscript,            masculine,               NoSymbol,                logicalor,               NoSymbol                 ] };
+    key <AE03> { [ 3,                       U2113,                   threesuperior,           threesubscript,          numerosign,              NoSymbol,                logicaland,              NoSymbol                 ] };
+    key <AE04> { [ 4,                       guillemotright,          U203A,                   femalesymbol,            NoSymbol,                NoSymbol,                U22A5,                   NoSymbol                 ] };
+    key <AE05> { [ 5,                       guillemotleft,           U2039,                   malesymbol,              periodcentered,          NoSymbol,                U2221,                   NoSymbol                 ] };
+    key <AE06> { [ 6,                       dollar,                  cent,                    U26A5,                   sterling,                NoSymbol,                U2225,                   NoSymbol                 ] };
+
+    key <AE07> { [ 7,                       EuroSign,                yen,                     U03F0,                   currency,                NoSymbol,                rightarrow,              NoSymbol                 ] };
+    key <AE08> { [ 8,                       doublelowquotemark,      singlelowquotemark,      U27E8,                   Tab,                     ISO_Left_Tab,            U221E,                   NoSymbol                 ] };
+    key <AE09> { [ 9,                       leftdoublequotemark,     leftsinglequotemark,     U27E9,                   KP_Divide,               KP_Divide,               variation,               NoSymbol                 ] };
+    key <AE10> { [ 0,                       rightdoublequotemark,    rightsinglequotemark,    zerosubscript,           KP_Multiply,             KP_Multiply,             emptyset,                NoSymbol                 ] };
+
+    key <AE11> { [ minus,                   emdash,                  NoSymbol,                U2011,                   KP_Subtract,             KP_Subtract,             hyphen,                  NoSymbol                 ] };
+    key <AE12> { [ dead_grave,              dead_cedilla,            dead_abovering,          dead_dasia,              dead_diaeresis,          NoSymbol,                dead_macron,             NoSymbol                 ] };
+
+    // Top row
+    // --------------------------------------------------------------
+    key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AD01> { [ x,                       X,                       ellipsis,                Greek_xi,                Prior,                   Prior,                   Greek_XI,                NoSymbol                 ] };
+    key <AD02> { [ v,                       V,                       underscore,              NoSymbol,                BackSpace,               BackSpace,               radical,                 NoSymbol                 ] };
+    key <AD03> { [ l,                       L,                       bracketleft,             Greek_lambda,            Up,                      Up,                      Greek_LAMBDA,            NoSymbol                 ] };
+    key <AD04> { [ c,                       C,                       bracketright,            Greek_chi,               Delete,                  Delete,                  U2102,                   NoSymbol                 ] };
+    key <AD05> { [ w,                       W,                       asciicircum,             Greek_omega,             Next,                    Next,                    Greek_OMEGA,             NoSymbol                 ] };
+
+    key <AD06> { [ k,                       K,                       exclam,                  Greek_kappa,             exclamdown,              NoSymbol,                multiply,                NoSymbol                 ] };
+    key <AD07> { [ h,                       H,                       less,                    Greek_psi,               KP_7,                    KP_7,                    Greek_PSI,               NoSymbol                 ] };
+    key <AD08> { [ g,                       G,                       greater,                 Greek_gamma,             KP_8,                    KP_8,                    Greek_GAMMA,             NoSymbol                 ] };
+    key <AD09> { [ f,                       F,                       equal,                   Greek_phi,               KP_9,                    KP_9,                    Greek_PHI,               NoSymbol                 ] };
+    key <AD10> { [ q,                       Q,                       ampersand,               U03D5,                   KP_Add,                  KP_Add,                  U211A,                   NoSymbol                 ] };
+
+    key <AD11> { [ ssharp,                  U1E9E,                   U017F,                   Greek_finalsmallsigma,   U2212,                   NoSymbol,                jot,                     NoSymbol                 ] };
+
+    key.type[Group1] = "EIGHT_LEVEL";
+    key <AD12> { [ dead_acute,              dead_tilde,              dead_stroke,             dead_psili,              dead_doubleacute,        NoSymbol,                dead_breve,              NoSymbol                 ] };
+
+    // Middle row
+    // --------------------------------------------------------------
+    key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AC01> { [ u,                       U,                       backslash,               NoSymbol,                Home,                    Home,                    includedin,              NoSymbol                 ] };
+    key <AC02> { [ i,                       I,                       slash,                   Greek_iota,              Left,                    Left,                    integral,                NoSymbol                 ] };
+    key <AC03> { [ a,                       A,                       braceleft,               Greek_alpha,             Down,                    Down,                    U2200,                   NoSymbol                 ] };
+    key <AC04> { [ e,                       E,                       braceright,              Greek_epsilon,           Right,                   Right,                   U2203,                   NoSymbol                 ] };
+    key <AC05> { [ o,                       O,                       asterisk,                Greek_omicron,           End,                     End,                     elementof,               NoSymbol                 ] };
+
+    key <AC06> { [ s,                       S,                       question,                Greek_sigma,             questiondown,            NoSymbol,                Greek_SIGMA,             NoSymbol                 ] };
+    key <AC07> { [ n,                       N,                       parenleft,               Greek_nu,                KP_4,                    KP_4,                    U2115,                   NoSymbol                 ] };
+    key <AC08> { [ r,                       R,                       parenright,              Greek_rho,               KP_5,                    KP_5,                    U211D,                   NoSymbol                 ] };
+    key <AC09> { [ t,                       T,                       minus,                   Greek_tau,               KP_6,                    KP_6,                    partialderivative,       NoSymbol                 ] };
+    key <AC10> { [ d,                       D,                       colon,                   Greek_delta,             KP_Separator,            comma,                   Greek_DELTA,             NoSymbol                 ] };
+
+    key <AC11> { [ y,                       Y,                       at,                      Greek_upsilon,           period,                  KP_Decimal,              nabla,                   NoSymbol                 ] };
+
+    // Bottom row
+    // --------------------------------------------------------------
+    key <AB01> { [ udiaeresis,              Udiaeresis,              numbersign,              NoSymbol,                Escape,                  Escape,                  union,                   NoSymbol                 ] };
+    key <AB02> { [ odiaeresis,              Odiaeresis,              dollar,                  U03F5,                   Tab,                     Tab,                     intersection,            NoSymbol                 ] };
+    key <AB03> { [ adiaeresis,              Adiaeresis,              bar,                     Greek_eta,               Insert,                  Insert,                  U2135,                   NoSymbol                 ] };
+    key <AB04> { [ p,                       P,                       asciitilde,              Greek_pi,                Return,                  Return,                  Greek_PI,                NoSymbol                 ] };
+    key <AB05> { [ z,                       Z,                       grave,                   Greek_zeta,              Undo,                    Redo,                    U2124,                   NoSymbol                 ] };
+
+    key <AB06> { [ b,                       B,                       plus,                    Greek_beta,              colon,                   NoSymbol,                U21D0,                   NoSymbol                 ] };
+    key <AB07> { [ m,                       M,                       percent,                 Greek_mu,                KP_1,                    KP_1,                    ifonlyif,                NoSymbol                 ] };
+    key.type[Group1] = "EIGHT_LEVEL";
+    key <AB08> { [ comma,                   endash,                  quotedbl,                U03F1,                   KP_2,                    KP_2,                    U21D2,                   NoSymbol                 ] };
+    key <AB09> { [ period,                  enfilledcircbullet,      apostrophe,              U03D1,                   KP_3,                    KP_3,                    U21A6,                   NoSymbol                 ] };
+    key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AB10> { [ j,                       J,                       semicolon,               Greek_theta,             semicolon,               NoSymbol,                Greek_THETA,             NoSymbol                 ] };
+    key.type[Group1] = "EIGHT_LEVEL";
+
+    // Space key
+    // --------------------------------------------------------------
+    key <SPCE> { [ space,                   space,                   space,                   nobreakspace,            KP_0,                    KP_0,                    U202F,                   NoSymbol                 ] };
+
+
+    // Keypad-keys
+    // ===============
+
+    // The former Numlock key:
+    key <NMLK> { [ Tab,                     ISO_Left_Tab,            equal,                   approxeq,                notequal,                Pointer_EnableKeys,      identical,               NoSymbol                 ] };
+
+    // Topmost row
+    // --------------------------------------------------------------
+    key <KPDV> { [ KP_Divide,               KP_Divide,               division,                U2300,                   U2215,                   NoSymbol,                U2223,                   NoSymbol                 ] };
+    key <KPMU> { [ KP_Multiply,             KP_Multiply,             U22C5,                   U2299,                   multiply,                NoSymbol,                U2297,                   NoSymbol                 ] };
+    key <KPSU> { [ KP_Subtract,             KP_Subtract,             U2212,                   U2296,                   U2216,                   NoSymbol,                U2238,                   NoSymbol                 ] };
+
+    // Top row
+    // --------------------------------------------------------------
+    key  <KP7> { [ KP_7,                    U2714,                   U2195,                   U226A,                   KP_Home,                 KP_Home,                 upstile,                 NoSymbol                 ] };
+    key  <KP8> { [ KP_8,                    U2718,                   uparrow,                 intersection,            KP_Up,                   KP_Up,                   U22C2,                   NoSymbol                 ] };
+    key  <KP9> { [ KP_9,                    dagger,                  U20D7,                   U226B,                   KP_Prior,                KP_Prior,                U2309,                   NoSymbol                 ] };
+    key <KPAD> { [ KP_Add,                  KP_Add,                  plusminus,               U2295,                   U2213,                   NoSymbol,                U2214,                   NoSymbol                 ] };
+
+    // Middle row
+    // --------------------------------------------------------------
+    key  <KP4> { [ KP_4,                    club,                    leftarrow,               includedin,              KP_Left,                 KP_Left,                 U2286,                   NoSymbol                 ] };
+    key  <KP5> { [ KP_5,                    EuroSign,                colon,                   U22B6,                   KP_Begin,                KP_Begin,                U22B7,                   NoSymbol                 ] };
+    key  <KP6> { [ KP_6,                    U2023,                   rightarrow,              includes,                KP_Right,                KP_Right,                U2287,                   NoSymbol                 ] };
+
+    // Bottom row
+    // --------------------------------------------------------------
+    key  <KP1> { [ KP_1,                    diamond,                 U2194,                   lessthanequal,           KP_End,                  KP_End,                  downstile,               NoSymbol                 ] };
+    key  <KP2> { [ KP_2,                    heart,                   downarrow,               union,                   KP_Down,                 KP_Down,                 U22C3,                   NoSymbol                 ] };
+    key  <KP3> { [ KP_3,                    U2660,                   U21CC,                   greaterthanequal,        KP_Next,                 KP_Next,                 U230B,                   NoSymbol                 ] };
+    key <KPEN> { [ KP_Enter,                KP_Enter,                KP_Enter,                KP_Enter,                KP_Enter,                KP_Enter,                KP_Enter,                NoSymbol                 ] };
+    key <KPEQ> { [ KP_Equal,                NoSymbol,                NoSymbol,                NoSymbol,                NoSymbol,                NoSymbol,                NoSymbol,                NoSymbol                 ] };
+
+    // Bottommost row
+    // --------------------------------------------------------------
+    key  <KP0> { [ KP_0,                    U2423,                   percent,                 U2030,                   KP_Insert,               KP_Insert,               U25A1,                   NoSymbol                 ] };
+    key <KPDL> { [ KP_Separator,            period,                  comma,                   minutes,                 KP_Delete,               KP_Delete,               seconds,                 NoSymbol                 ] };
+};
+
+partial alphanumeric_keys modifier_keys keypad_keys
+xkb_symbols "neo" {
+
+    include "de(neo_base)"
+
+    name[Group1]= "German (Neo 2)";
+
+    include "shift(both_capslock)"
+    include "level3(caps_switch)"
+    include "level3(bksl_switch)"
+    include "level5(lsgt_switch)"
+    include "level5(ralt_switch)"
+};
+
+// Copied from macintosh_vndr/de
+// olh@suse.de   very close to MacOS map
+
+partial alphanumeric_keys 
+xkb_symbols "mac" {
+
+    include "de"
+    name[Group1]= "German (Macintosh)";
+
+    // Alphanumeric section
+    key <AE01>	{ [         1,     exclam,   exclamdown,           at ]	};
+    key <AE05>	{ [         5,    percent,  bracketleft       ]	};
+    key <AE06>	{ [         6,  ampersand, bracketright       ]	};
+    key <AE07>	{ [         7,      slash,          bar,    backslash ]	};
+    key <AE08>	{ [         8,  parenleft,    braceleft,   asciitilde ]	};
+    key <AE09>	{ [         9, parenright,   braceright       ]	};
+    key <AD01>	{ [         q,          Q, guillemotleft, guillemotright ]	};
+    key <AD04>	{ [         r,          R,   registered       ]	};
+    key <AD07>	{ [         u,          U,    diaeresis,       Aacute ]	};
+    key <AD08>	{ [         i,          I,        slash,  Ucircumflex ]	};
+    key <AD11>	{ [ udiaeresis, Udiaeresis, periodcentered,    degree ]	};
+    key <AD12>	{ [      plus,   asterisk,   asciitilde       ]	}; 
+    key <AC01>	{ [         a,          A,        aring,        Aring ]	};
+    key <AC05>	{ [         g,          G,    copyright       ]	};
+    key <AC06>	{ [         h,          H,  ordfeminine       ]	};
+    key <AC09>	{ [         l,          L,           at       ]	};
+    key <AC10>	{ [ odiaeresis, Odiaeresis,  dead_acute       ]	};
+    key <AB06>	{ [         n,          N,   asciitilde       ]	};
+
+};
+
+partial alphanumeric_keys 
+xkb_symbols "mac_nodeadkeys" {
+    // modify the standard German mac layout to not have any dead keys
+    include "de(mac)"
+    name[Group1]= "German (Macintosh, eliminate dead keys)";
+    key <AE04>	{ [         4,     dollar,   onequarter,     currency ]	};
+
+    key <TLDE>	{ [ asciicircum,    degree,     notsign       ]	};
+    key <AE12>	{ [      acute,      grave,     cedilla       ]	};
+    key <AD11>	{ [ udiaeresis, Udiaeresis,   diaeresis       ]	};
+    key <AD12>	{ [       plus,   asterisk,  asciitilde,       macron ]	};
+    key <AC10>	{ [ odiaeresis, Odiaeresis,       acute       ]	};
+    key <AC11>	{ [ adiaeresis, Adiaeresis, asciicircum       ]	};
+
+    key <BKSL>	{ [ numbersign, apostrophe,       grave       ]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "dsb"
+{
+	name[Group1] = "Lower Sorbian";
+	include "latin(basic)"
+	include "level3(ralt_switch)"
+	include "kpdl(comma)"
+	key <AB01> { [              z,              Z,         zcaron,         Zcaron ] };
+	key <AB02> { [              x,              X,         zacute,         Zacute ] };
+	key <AB03> { [              c,              C,         cacute,         Cacute ] };
+	key <AB04> { [              v,              V,         ccaron,         Ccaron ] };
+	key <AB06> { [              n,              N,         nacute,         Nacute ] };
+	key <AC02> { [              s,              S,         sacute,         Sacute ] };
+	key <AC03> { [              d,              D,         scaron,         Scaron ] };
+	key <AC04> { [              f,              F                                 ] };
+	key <AD01> { [              q,              Q                                 ] };
+	key <AD02> { [              w,              W                                 ] };
+	key <AD03> { [              e,              E,         ecaron,         Ecaron ] };
+	key <AD04> { [              r,              R,         racute,         Racute ] };
+	key <AD05> { [              t,              T,          U20B5,       EuroSign ] };
+	key <AD09> { [              o,              O,         oacute,         Oacute ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "dsb_qwertz"
+{
+	name[Group1] = "Lower Sorbian (qwertz)";
+	include "latin(basic)"
+	include "level3(ralt_switch)"
+	include "kpdl(comma)"
+	key <AB01> { [              y,              Y                                 ] };
+	key <AB02> { [              x,              X                                 ] };
+	key <AB03> { [              c,              C,         cacute,         Cacute ] };
+	key <AB04> { [              v,              V,         ccaron,         Ccaron ] };
+	key <AB06> { [              n,              N,         nacute,         Nacute ] };
+	key <AC02> { [              s,              S,         sacute,         Sacute ] };
+	key <AC03> { [              d,              D,         scaron,         Scaron ] };
+	key <AC04> { [              f,              F                                 ] };
+	key <AD01> { [              q,              Q                                 ] };
+	key <AD02> { [              w,              W                                 ] };
+	key <AD03> { [              e,              E,         ecaron,         Ecaron ] };
+	key <AD04> { [              r,              R,         racute,         Racute ] };
+	key <AD05> { [              t,              T,          U20B5,       EuroSign ] };
+	key <AD06> { [              z,              Z,         zcaron,         Zcaron ] };
+	key <AD07> { [              u,              U,         zacute,         Zacute ] };
+	key <AD09> { [              o,              O,         oacute,         Oacute ] };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "qwerty" {
+ 
+    // This layout should work exactly as a de with the exception 
+    // of 'Z' and 'Y' keys, which are in the qwerty style (ie. swapped).
+    // 2008 by Matej Košík <kosik@fiit.stuba.sk>
+    
+    include "de(basic)"
+
+    name[Group1] = "German (qwerty)";
+
+    key <AB01>	{ [         z,          Z,     leftarrow,         yen ]	};
+    key <AD06>	{ [         y,          Y, guillemotleft,        less ]	};
+};
+
+// layout for Russian letters on an german keyboard
+// based on US-RU layout by Ivan Popov <pin@konvalo.org> 2005-07-17
+// adopted for german layout by Alexey Fisher <bug-track@fisher-privat.net> 2010-08-19
+
+partial alphanumeric_keys
+xkb_symbols "ru" {
+
+    include "de(basic)"
+ 
+    name[Group1]= "Russian (Germany, phonetic)";
+
+key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+
+    key <LatA> { [        Cyrillic_a,        Cyrillic_A ] };
+    key <LatB> { [       Cyrillic_be,       Cyrillic_BE ] };
+    key <LatW> { [       Cyrillic_ve,       Cyrillic_VE ] };
+    key <LatG> { [      Cyrillic_ghe,      Cyrillic_GHE ] };
+    key <LatD> { [       Cyrillic_de,       Cyrillic_DE ] };
+    key <LatE> { [       Cyrillic_ie,       Cyrillic_IE ] };
+    key <TLDE> { [       Cyrillic_io,       Cyrillic_IO, asciitilde ] };
+    key <LatX> { [      Cyrillic_zhe,      Cyrillic_ZHE ] };
+    key <LatZ> { [       Cyrillic_ze,       Cyrillic_ZE ] };
+    key <LatI> { [        Cyrillic_i,        Cyrillic_I ] };
+    key <LatJ> { [   Cyrillic_shorti,   Cyrillic_SHORTI ] };
+    key <LatK> { [       Cyrillic_ka,       Cyrillic_KA ] };
+    key <LatL> { [       Cyrillic_el,       Cyrillic_EL ] };
+    key <LatM> { [       Cyrillic_em,       Cyrillic_EM ] };
+    key <LatN> { [       Cyrillic_en,       Cyrillic_EN ] };
+    key <LatO> { [        Cyrillic_o,        Cyrillic_O ] };
+    key <LatP> { [       Cyrillic_pe,       Cyrillic_PE ] };
+    key <LatR> { [       Cyrillic_er,       Cyrillic_ER ] };
+    key <LatS> { [       Cyrillic_es,       Cyrillic_ES ] };
+    key <LatT> { [       Cyrillic_te,       Cyrillic_TE ] };
+    key <LatU> { [        Cyrillic_u,        Cyrillic_U ] };
+    key <LatF> { [       Cyrillic_ef,       Cyrillic_EF ] };
+    key <LatH> { [       Cyrillic_ha,       Cyrillic_HA ] };
+    key <LatC> { [      Cyrillic_tse,      Cyrillic_TSE ] };
+    key <AC10> { [      Cyrillic_che,      Cyrillic_CHE ] };
+    key <AD11> { [      Cyrillic_sha,      Cyrillic_SHA ] };
+    key <AD12> { [    Cyrillic_shcha,    Cyrillic_SHCHA, plus, asterisk ] };
+    key <AE12> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
+    key <LatY> { [     Cyrillic_yeru,     Cyrillic_YERU ] };
+    key <LatV> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
+    key <AC11> { [        Cyrillic_e,        Cyrillic_E ] };
+    key <BKSL> { [       Cyrillic_yu,       Cyrillic_YU, numbersign, apostrophe ] };
+    key <LatQ> { [       Cyrillic_ya,       Cyrillic_YA ] };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "htcdream" {
+        include "inet(htcdream)"
+
+        name[Group1]= "German";
+
+        //second row
+        key <AD01> { [ q, Q, Tab, Tab ] };
+        key <AD02> { [ w, W, grave, grave ] };
+        key <AD03> { [ e, E, EuroSign, EuroSign ] };
+        key <AD04> { [ r, R, underscore, underscore ] };
+        key <AD05> { [ t, T, sterling, sterling] };
+        key <AD06> { [ z, Z, division, division ] };
+        key <AD07> { [ u, U, udiaeresis, udiaeresis ] };
+        key <AD08> { [ i, I, minus, minus ] };
+        key <AD09> { [ o, O, odiaeresis, odiaeresis ] };
+        key <AD10> { [ p, P, equal, equal ] };
+
+        //third row
+        key <AC01> { [ a, A, adiaeresis, adiaeresis ] };
+        key <AC02> { [ s, S, ssharp, ssharp] };
+        key <AC03> { [ d ,D, backslash, backslash ] };
+        key <AC04> { [ f, F, braceleft, braceleft ] };
+        key <AC05> { [ g, G, braceright, braceright ] };
+        key <AC06> { [ h, H, multiply, multiply ] };
+        key <AC07> { [ j, J, colon, colon ] };
+        key <AC08> { [ k, K, plus, plus ] };
+        key <AC09> { [ l, L, apostrophe, apostrophe ] };
+
+        //forth row
+        key <AB01> { [ y, Y, bar, bar ] };
+        key <AB02> { [ x, X, bracketleft, bracketleft ] };
+        key <AB03> { [ c, C, bracketright, bracketright ] };
+        key <AB04> { [ v, V, less, less ] };
+        key <AB05> { [ b, B, greater, greater ] };
+        key <AB06> { [ n, N, semicolon, semicolon ] };
+        key <AB07> { [ m, M, quotedbl, quotedbl ] };
+        key <AB08> { [ comma, comma, question, question ] };
+
+        //fifth row
+        key <FK15> { [ at, at, asciitilde, asciitilde ] };
+
+        include "level3(alt_switch)"
+};
+
+// EXTRAS:
+
+partial alphanumeric_keys
+xkb_symbols "us" {
+    include "us"
+
+    name[Group1]="German (US keyboard with German letters)";
+
+    key <AC01> { [           a,          A, adiaeresis, Adiaeresis ] };
+    key <AC02> { [           s,          S,     ssharp,     ssharp ] };
+    key <AC10> { [   semicolon,      colon, odiaeresis, Odiaeresis ] };
+    key <AC11> { [  apostrophe,   quotedbl, adiaeresis, Adiaeresis ] };
+    key <AD03> { [           e,          E,   EuroSign,   EuroSign ] };
+    key <AD07> { [           u,          U, udiaeresis, Udiaeresis ] };
+    key <AD09> { [           o,          O, odiaeresis, Odiaeresis ] };
+    key <AD11> { [ bracketleft,  braceleft, udiaeresis, Udiaeresis ] };
+    key <AE03> { [           3, numbersign,    section,    section ] };
+    key <AE11> { [       minus, underscore,     ssharp,   question ] };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "hu" {
+
+    // modify the basic German layout to not have any dead keys and add Hungarian letters
+
+    include "de(basic)"
+    name[Group1]="German (with Hungarian letters and no dead keys)";
+
+    key <AB01> { [         y,          Y, guillemotleft,        less ] };
+    key <AC10> { [odiaeresis, Odiaeresis,        eacute,      Eacute ] };
+    key <AC11> { [adiaeresis, Adiaeresis,        aacute,       Aacute] };
+    key <AD03> { [         e,          E,      EuroSign,    EuroSign ] };
+    key <AD06> { [         z,          Z,     leftarrow,         yen ] };
+    key <AD07> { [         u,          U,        uacute,      Uacute ] };
+    key <AD08> { [         i,          I,        iacute,      Iacute ] };
+    key <AD09> { [         o,          O,  odoubleacute,Odoubleacute ] };
+    key <AD11> { [udiaeresis, Udiaeresis,  udoubleacute,Udoubleacute ] };
+    key <AD12> { [      plus,   asterisk,    asciitilde,      macron ] };
+    key <AE12> { [     acute,      grave,        oacute,      Oacute ] };
+    key <BKSL> { [numbersign, apostrophe,         grave,       grave ] };
+    key <TLDE> { [asciicircum,    degree,       notsign,     notsign ] };
+    
+    
+};
+
+partial alphanumeric_keys
+	xkb_symbols "sun_type6" {
+	include "sun_vndr/de(sun_type6)"
+};
diff --git a/data/symbols/empty b/data/symbols/empty
new file mode 100644
--- /dev/null
+++ b/data/symbols/empty
@@ -0,0 +1,4 @@
+default partial alphanumeric_keys modifier_keys
+xkb_symbols "basic" {
+    name[Group1]= "Empty";
+};
diff --git a/data/symbols/eurosign b/data/symbols/eurosign
new file mode 100644
--- /dev/null
+++ b/data/symbols/eurosign
@@ -0,0 +1,23 @@
+// Most keyboards have the EuroSign engraved on the E key
+partial
+xkb_symbols "e" {
+    key <AD03>	{ [  NoSymbol,   NoSymbol,   EuroSign,	NoSymbol ]	};
+};
+
+// Many Apple keyboards have the EuroSign engraved on the 2 key
+partial
+xkb_symbols "2" {
+    key <AE02>	{ [  NoSymbol,   NoSymbol,   EuroSign,	NoSymbol ]	};
+};
+
+// Some keyboards have the EuroSign engraved on the 4 key
+partial
+xkb_symbols "4" {
+    key <AE04>	{ [  NoSymbol,   NoSymbol,   EuroSign,	NoSymbol ]	};
+};
+
+// Many keyboards have the EuroSign engraved on the 5 key
+partial
+xkb_symbols "5" {
+    key <AE05>	{ [  NoSymbol,   NoSymbol,   EuroSign,	NoSymbol ]	};
+};
diff --git a/data/symbols/group b/data/symbols/group
new file mode 100644
--- /dev/null
+++ b/data/symbols/group
@@ -0,0 +1,457 @@
+// using the group(switch) map, the right alt key temporarily chooses 
+// the second keyboard group (until it is released).
+//
+partial modifier_keys 
+xkb_symbols "switch" {
+    key <RALT>	{ 	
+	symbols[Group1]= [	Mode_switch, Multi_key 	],
+	virtualMods= AltGr
+    };
+};
+
+// using the group(lswitch) map, the left alt key temporarily chooses
+// the second keyboard group (until it is released).
+//
+partial modifier_keys 
+xkb_symbols "lswitch" {
+    key <LALT>	{ 	
+	symbols[Group1]= [	Mode_switch, Multi_key 	],
+	virtualMods= AltGr
+    };
+};
+
+
+// using the group(win_switch) map, both Windows'logo keys temporarily
+// choose the second keyboard group (until release).  If you use this
+// map, you would declare you keyboard as pc101 or pc102 instead of
+// pc104 or pc105.
+partial modifier_keys
+xkb_symbols "win_switch" {
+    include "group(lwin_switch)"
+    include "group(rwin_switch)"
+};
+
+// using the group(lwin_switch) map, the left Windows' logo key
+// temporarily chooses the second keyboard group (until it is
+// released).  If you use this map, you would declare you keyboard as
+// pc101 or pc102 instead of pc104 or pc105.
+partial modifier_keys
+xkb_symbols "lwin_switch" {
+  key <LWIN> {
+    symbols[Group1] = [ Mode_switch, Multi_key ],
+    virtualMods= AltGr
+    };
+};
+
+// using the group(rwin_switch) map, the right Windows' logo key
+// temporarily chooses the second keyboard group (until it is
+// released).  If you use this map, you would declare you keyboard as
+// pc101 or pc102 instead of pc104 or pc105.
+partial modifier_keys
+xkb_symbols "rwin_switch" {
+  key <RWIN> {
+    symbols[Group1] = [ Mode_switch, Multi_key ],
+    virtualMods= AltGr
+    };
+};
+
+// Right Ctrl key temporary chooses the second keyboard group.
+// Needed mainly for Canadian keyboard
+partial modifier_keys
+xkb_symbols "rctrl_switch" {
+    key <RCTL>  {
+        symbols[Group1]= [ Mode_switch ]
+    };
+};
+
+// using the group(toggle) map, pressing the right alt key switches to
+// the next sequential group (until the next explicit group change).
+partial modifier_keys 
+xkb_symbols "toggle" {
+    virtual_modifiers AltGr;
+    key <RALT>	{	
+	symbols[Group1]= [	ISO_Next_Group	],
+	virtualMods= AltGr
+    };
+};
+
+// using the group(shifts_toggle) map, pressing both shift keys together
+// locks the next or previous sequential keyboard group 
+// (depending on which shift is pressed first - right or left, 
+// correspongingly)
+partial modifier_keys 
+xkb_symbols "shifts_toggle" {
+    key <LFSH>	{	[	Shift_L,	ISO_Prev_Group ]	};
+    key <RTSH>	{	[	Shift_R,	ISO_Next_Group ]	};
+};
+
+// using the group(shift_caps_toggle) map, pressing:
+//     Shift+Caps Lock toggles group
+partial modifier_keys
+xkb_symbols "shift_caps_toggle" {
+    key	<CAPS> {	[  Caps_Lock,		ISO_Next_Group	]	};
+};
+
+// using the group(shift_caps_switch) map, pressing:
+// Caps Lock selects the first group
+// Shift+Caps Lock selects the last group
+partial modifier_keys
+xkb_symbols "shift_caps_switch" {
+    key <CAPS> { [ ISO_First_Group, ISO_Last_Group ] };
+};
+
+// using the group(win_menu_switch) map, pressing:
+// LWIN selects the first group
+// RWIN or MENU selects the last group
+partial modifier_keys
+xkb_symbols "win_menu_switch" {
+    virtual_modifiers AltGr;
+    key <LWIN> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_First_Group ]
+    };
+    key <MENU> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_Last_Group ]
+    };
+    key <RWIN> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_Last_Group ]
+    };
+};
+
+// using the group(lctrl_rctrl_switch) map, pressing:
+// Left Control selects the first group
+// Right Control selects the last group
+partial modifier_keys
+xkb_symbols "lctrl_rctrl_switch" {
+    virtual_modifiers AltGr;
+    key <LCTL> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_First_Group ]
+    };
+    key <RCTL> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_Last_Group ]
+    };
+};
+
+
+//
+// CTRL-SHIFT toggle section
+//
+partial modifier_keys 
+xkb_symbols "lctrl_lshift_toggle" {
+    key <LFSH> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ Shift_L, ISO_Next_Group ]
+    };
+    key <LCTL> { [ Control_L, ISO_Next_Group ] };
+};
+
+partial modifier_keys 
+xkb_symbols "lctrl_lshift_toggle_rev" {
+    key <LFSH> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ Shift_L, ISO_Prev_Group ]
+    };
+    key <LCTL> { [ Control_L, ISO_Prev_Group ] };
+};
+
+partial modifier_keys
+xkb_symbols "rctrl_rshift_toggle" {
+    key <RTSH> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ Shift_R, ISO_Next_Group ]
+    };
+    key <RCTL> { [ Control_R, ISO_Next_Group ] };
+};
+
+partial modifier_keys 
+xkb_symbols "ctrl_shift_toggle" {
+    include "group(lctrl_lshift_toggle)"
+    include "group(rctrl_rshift_toggle)"
+};
+
+partial modifier_keys 
+xkb_symbols "ctrl_shift_toggle_bidir" {
+    include "group(lctrl_lshift_toggle_rev)"
+    include "group(rctrl_rshift_toggle)"
+};
+
+
+//
+// CTRL-ALT toggle section
+//
+partial modifier_keys
+xkb_symbols "lctrl_lalt_toggle" {
+    virtual_modifiers Alt;
+    key <LALT> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+        virtualMods= Alt
+    };
+    key <LCTL> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Control_L,   ISO_Next_Group ]
+    };
+};
+
+partial modifier_keys
+xkb_symbols "lctrl_lalt_toggle_rev" {
+    virtual_modifiers Alt;
+    key <LALT> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ NoSymbol,    ISO_Prev_Group ],
+        virtualMods= Alt
+    };
+    key <LCTL> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Control_L,   ISO_Prev_Group ]
+    };
+};
+
+partial modifier_keys
+xkb_symbols "rctrl_ralt_toggle" {
+    virtual_modifiers Alt;
+    key <RALT> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+        virtualMods= Alt
+    };
+    key <RCTL> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Control_R,   ISO_Next_Group ]
+    };
+};
+
+partial modifier_keys 
+xkb_symbols "ctrl_alt_toggle" {
+    include "group(lctrl_lalt_toggle)"
+    include "group(rctrl_ralt_toggle)"
+};
+
+partial modifier_keys 
+xkb_symbols "ctrl_alt_toggle_bidir" {
+    include "group(lctrl_lalt_toggle_rev)"
+    include "group(rctrl_ralt_toggle)"
+};
+
+
+//
+// ALT-SHIFT toggle section
+//
+partial modifier_keys
+xkb_symbols "lalt_lshift_toggle" {
+    virtual_modifiers Alt;
+    key <LALT> {
+        symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+        virtualMods= Alt
+    };
+    key <LFSH> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Shift_L,     ISO_Next_Group ]
+    };
+};
+
+partial modifier_keys
+xkb_symbols "lalt_lshift_toggle_rev" {
+    virtual_modifiers Alt;
+    key <LALT> {
+        symbols[Group1]= [ NoSymbol,    ISO_Prev_Group ],
+        virtualMods= Alt
+    };
+    key <LFSH> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Shift_L,     ISO_Prev_Group ]
+    };
+};
+
+partial modifier_keys
+xkb_symbols "ralt_rshift_toggle" {
+    virtual_modifiers Alt;
+    key <RALT> {
+        symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+        virtualMods= Alt
+    };
+    key <RTSH> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Shift_R,     ISO_Next_Group ]
+    };
+};
+
+partial modifier_keys 
+xkb_symbols "alt_shift_toggle" {
+    include "group(lalt_lshift_toggle)"
+    include "group(ralt_rshift_toggle)"
+};
+
+partial modifier_keys 
+xkb_symbols "alt_shift_toggle_bidir" {
+    include "group(lalt_lshift_toggle_rev)"
+    include "group(ralt_rshift_toggle)"
+};
+
+
+// using the group(menu_toggle) map, pressing:
+//     Menu key toggles groups
+//     Shift+Menu acts as Menu
+partial modifier_keys
+xkb_symbols "menu_toggle" {
+    key	<MENU> {	[  ISO_Next_Group,	 Menu	]	};
+};
+
+// using the group(lwin_toggle) map, pressing the left Windows' logo key
+// toggles groups.  If you use this map, you would declare you keyboard
+// as pc101 or pc102 instead of pc104 or pc105.
+partial modifier_keys
+xkb_symbols "lwin_toggle" {
+  virtual_modifiers AltGr;
+  key <LWIN> {
+    virtualMods= AltGr,
+    symbols[Group1] = [ ISO_Next_Group ]
+    };
+};
+
+// using the group(rwin_toggle) map, pressing the right Windows' logo key
+// toggles groups.  If you use this map, you would declare you keyboard
+// as pc101 or pc102 instead of pc104 or pc105.
+partial modifier_keys
+xkb_symbols "rwin_toggle" {
+  virtual_modifiers AltGr;
+  key <RWIN> {
+    virtualMods= AltGr,
+    symbols[Group1] = [ ISO_Next_Group ]
+    };
+};
+
+// Both Ctrls pressed together toggle group
+partial modifier_keys
+xkb_symbols "ctrls_toggle" {
+  virtual_modifiers LControl, RControl;
+    key <LCTL> {
+	type[Group1]="PC_RCONTROL_LEVEL2",
+	symbols[Group1]= [ NoSymbol,	ISO_Prev_Group ],
+	virtualMods= LControl
+    };
+    key <RCTL> {
+	type[Group1]="PC_LCONTROL_LEVEL2",
+	symbols[Group1]= [ NoSymbol,	ISO_Next_Group ],
+	virtualMods= RControl
+    };
+};
+
+// Both Alts pressed together toggle group
+partial modifier_keys
+xkb_symbols "alts_toggle" {
+  virtual_modifiers LAlt, RAlt;
+    key <LALT> {
+	type[Group1]="PC_RALT_LEVEL2",
+	symbols[Group1]= [ NoSymbol,	ISO_Prev_Group ],
+	virtualMods= LAlt
+    };
+    key <RALT> {
+	type[Group1]="PC_LALT_LEVEL2",
+	symbols[Group1]= [ NoSymbol,	ISO_Next_Group ],
+	virtualMods= RAlt
+    };
+};
+
+// Left Shift key toggles group
+partial modifier_keys
+xkb_symbols "lshift_toggle" {
+  virtual_modifiers AltGr;
+    key <LFSH>	{	
+	symbols[Group1]= [	ISO_Next_Group	],
+	virtualMods= AltGr
+    };
+};
+
+// Right Shift key toggles group
+partial modifier_keys
+xkb_symbols "rshift_toggle" {
+  virtual_modifiers AltGr;
+    key <RTSH>	{	
+	symbols[Group1]= [	ISO_Next_Group	],
+	virtualMods= AltGr
+    };
+};
+
+// Left Alt key toggles group
+partial modifier_keys
+xkb_symbols "lalt_toggle" {
+  virtual_modifiers AltGr;
+    key <LALT>	{	
+	symbols[Group1]= [	ISO_Next_Group	],
+	virtualMods= AltGr
+    };
+};
+
+// Left Ctrl key toggles group
+partial modifier_keys
+xkb_symbols "lctrl_toggle" {
+  virtual_modifiers AltGr;
+    key <LCTL>	{	
+	symbols[Group1]= [	ISO_Next_Group	],
+	virtualMods= AltGr
+    };
+};
+
+// Right Ctrl key toggles group
+partial modifier_keys
+xkb_symbols "rctrl_toggle" {
+  virtual_modifiers AltGr;
+    key <RCTL>	{	
+	symbols[Group1]= [	ISO_Next_Group	],
+	virtualMods= AltGr
+    };
+};
+
+// using the group(alt_caps_toggle) map, pressing:
+//     Alt+Caps Lock toggles group
+//     Caps Lock toggles caps lock
+partial modifier_keys
+xkb_symbols "alt_caps_toggle" {
+    key        <CAPS> {
+       type="PC_ALT_LEVEL2",
+       symbols[Group1]= [  Caps_Lock,  ISO_Next_Group]
+    };
+};
+
+partial hidden modifier_keys
+xkb_symbols "olpc" {
+  key <I219>  { [ ISO_Next_Group, ISO_Prev_Group ] };
+};
+
+partial modifier_keys
+xkb_symbols "alt_space_toggle" {
+    key <SPCE> {
+    type[Group1]="PC_ALT_LEVEL2",
+    symbols[Group1]= [ space,   ISO_Next_Group ]
+    };
+};
+
+// using the group(sclk_toggle) map, pressing the Scroll Lock key
+// toggles groups.
+partial modifier_keys
+xkb_symbols "sclk_toggle" {
+  virtual_modifiers AltGr;
+  key <SCLK> {
+    virtualMods= AltGr,
+    symbols[Group1] = [ ISO_Next_Group ]
+    };
+};
+
+// Control_L+Win_L locks the first group (presumably Lat).
+// Control_R+Menu locks the second group (presumably Rus).
+partial modifier_keys
+xkb_symbols "lctrl_lwin_rctrl_menu" {
+    key <LWIN> {
+        type[ Group1 ]    = "PC_CONTROL_LEVEL2",
+        symbols[ Group1 ] = [ Super_L,    ISO_First_Group ]
+    };
+    key <MENU> {
+        type[ Group1 ]    = "PC_CONTROL_LEVEL2",
+        symbols[ Group1 ] = [ Menu,       ISO_Last_Group ]
+    };
+}; // lctrl_lwin_rctrl_menu
diff --git a/data/symbols/il b/data/symbols/il
new file mode 100644
--- /dev/null
+++ b/data/symbols/il
@@ -0,0 +1,327 @@
+// based on a keyboard map from an 'xkb/symbols/il' file
+
+// This is a partial implemetation of the Israeli standard SI-1452
+// It does not implement changes to the English layout ("Alt-English"), 
+// as I believe that it is not the job of this layout to modify the English
+// layout.
+partial default alphanumeric_keys 
+xkb_symbols "basic" {
+    // uses the kbd layout in use in Israel.
+
+    name[Group1]= "Hebrew";
+
+    key <AD01> { [ slash,	Q		]	};
+    key <AD02> { [ apostrophe,	W		]	};
+    key <AD04> { [ hebrew_resh,	R		]	};
+    key <AD05> { [ hebrew_aleph,T		]       };
+    key <AD06> { [ hebrew_tet,	Y		]       };
+    key <AD07> { [ hebrew_waw,	U		]       };
+    key <AD08> { [ hebrew_finalnun,	I	]       };
+    key <AD09> { [ hebrew_finalmem,	O	]       };
+    key <AD10> { [ hebrew_pe,	P		]	};
+
+    key <AC02> { [ hebrew_dalet,S		]       };
+    key <AC03> { [ hebrew_gimel,D		]       };
+    key <AC04> { [ hebrew_kaph,	F		]	};
+    key <AC05> { [ hebrew_ayin,	G		]       };
+    key <AC06> { [ hebrew_yod,	H		]       };
+    key <AC07> { [ hebrew_chet,	J		]	};
+    key <AC08> { [ hebrew_lamed, K		]	};
+    key <AC09> { [ hebrew_finalkaph,	L	]       };
+    key <AC10> { [ hebrew_finalpe,	colon	]       };
+    key <AC11> { [ comma,	quotedbl	]	};
+
+    key <AB01> { [ hebrew_zain,	Z		]       };
+    key <AB02> { [ hebrew_samech, X		]       };
+    key <AB03> { [ hebrew_bet,	C		]       };
+    key <AB04> { [ hebrew_he,	V		]       };
+    key <AB05> { [ hebrew_nun,	B		]       };
+    key <AB06> { [ hebrew_mem,	N		]	};
+    key <AB07> { [ hebrew_zade,	M		]	};
+    // Mirrored:
+    key <AB08> { [ hebrew_taw,	greater		]	};
+    key <AB09> { [ hebrew_finalzade,	less	]	};
+
+    key.type[Group1] = "THREE_LEVEL";
+    
+    key <TLDE> { [ semicolon,	asciitilde,0x10005b0	]}; // Sheva
+    key <AB10> { [ period,	question,  0x10005c3	]}; // Sof Pasuq
+    key <AD03> { [ hebrew_qoph,	E,	EuroSign	]};
+    key <AC01> { [ hebrew_shin,	A,	0x10020AA	]};
+  
+    // The following may get overriden by the iso9995-3(basic101) symbols.
+    // therefore they are included here. 
+    // Including them isn't a great idea (for instance: what if group 1 uses
+    // UK keyboard mapping, and maps shift-3 to sterling? This mapping won't
+    // preserve that, and I'm not sure that this is a good feature.
+    key <AE01> { [     1, exclam      , 0x10005b1	]}; // H. Segol
+    key <AE02> { [     2, at          , 0x10005b2	]}; // H. Patah
+    key <AE03> { [     3, numbersign  , 0x10005b3	]}; // H.  Qamats
+    key <AE04> { [     4, dollar      , 0x10005b4	]}; // Hiriq
+    key <AE05> { [     5, percent     , 0x10005b5	]}; // Tsere
+    key <AE06> { [     6, asciicircum , 0x10005b6	]}; // Segol
+    key <AE07> { [     7, ampersand   , 0x10005b7	]}; // Patah
+    key <AE08> { [     8, asterisk    , 0x10005b8	]}; // Qamats
+    // Mirrored: 
+    key <AE09> { [     9, parenright   , 0x10005c2	]}; // Sin dot
+    key <AE10> { [     0, parenleft  , 0x10005c1	]}; // Shin dot
+    key <AE11> { [ minus, underscore  , 0x10005b9	]}; // Holam
+    key <AE12> { [ equal, plus        , 0x10005bc	]}; // Dagesh/Shuruq
+  
+    // Mirrored: 
+    key <AD11> { [ bracketright, braceright, 0x10005bf	]}; // Rafe
+    key <AD12> { [ bracketleft,  braceleft,  0x10005bd	]}; // Meteg
+                                      
+    key <BKSL> { [ backslash,    bar,  0x10005bb	]}; // Qubuts    
+
+    include "level3(ralt_switch)"
+};
+
+
+// nikud patter based on Dekel Tsur's Hebrew mapping for LyX
+partial alphanumeric_keys 
+xkb_symbols "lyx" {
+    name[Group1]= "Hebrew (lyx)";
+
+    key <TLDE> { [ semicolon,	asciitilde	]	};
+    // On some key (e.g. AD01, right below) there is not yet mapping for the
+    // second shift level. Since I could not figure a simple way to map this
+    // to "emit nothing", it is currently mapped to the same letter of the
+    // first shift level (avoiding mapping may risk it be used by a character
+    // from a different group).
+    key <AD01> { [ slash,	slash		]       };
+    key <AD02> { [ apostrophe,	apostrophe	]       };
+    key <AD03> { [ hebrew_qoph,	0x10005b8	]	}; // Qamats
+    key <AD04> { [ hebrew_resh,	0x10005bc	]       }; // Dagesh/Shuruq
+    key <AD05> { [ hebrew_aleph,	0x100200e	]       }; // LRM
+    key <AD06> { [ hebrew_tet,	0x100200f	]       }; // RLM
+    key <AD07> { [ hebrew_waw,	0x10005b9	]       }; // Holam
+    key <AD08> { [ hebrew_finalnun,hebrew_finalnun]      };
+    key <AD09> { [ hebrew_finalmem,hebrew_finalmem]      };
+    key <AD10> { [ hebrew_pe,	0x10005b7	]	}; // Patah
+
+    key <AC01> { [ hebrew_shin,	0x10005b0	]	}; // Sheva
+    key <AC02> { [ hebrew_dalet,	0x10005bc	]       }; // Dagesh/Shuruq
+    key <AC03> { [ hebrew_gimel,	hebrew_gimel	]       };
+    key <AC04> { [ hebrew_kaph,	hebrew_kaph	]	}; 
+    key <AC05> { [ hebrew_ayin,	0x10005c2	]       }; // Sin dot
+    key <AC06> { [ hebrew_yod,	0x10005c1	]       }; // Shin dot
+    key <AC07> { [ hebrew_chet,	0x10005b4	]	}; // Hiriq
+    key <AC08> { [ hebrew_lamed, 0x10020aa	]	}; // NIS
+    key <AC09> { [ hebrew_finalkaph,hebrew_finalkaph]    };
+    key <AC10> { [ hebrew_finalpe,	colon	]       };
+    key <AC11> { [ comma,	quotedbl	]	};
+
+    key <AB01> { [ hebrew_zain,	hebrew_zain	]       };
+    key <AB02> { [ hebrew_samech,0x10005b6	]       }; // Segol
+    key <AB03> { [ hebrew_bet,	0x10005bb	]       }; // Qubuts
+    key <AB04> { [ hebrew_he,	0x10005b1	]       }; // H. Segol
+    key <AB05> { [ hebrew_nun,	0x10005b2	]	}; // H. Patah
+    key <AB06> { [ hebrew_mem,	0x10005b3	]       }; // H.  Qamats
+    key <AB07> { [ hebrew_zade,	0x10005b5	]	}; // Tsere
+    key <AB08> { [ hebrew_taw,	greater		]	};
+    key <AB09> { [ hebrew_finalzade,	less	]	};
+    key <AB10> { [ period,	question	]	};
+
+    // Note the parens mirroring below:
+    key <AD11> { [ bracketright,	braceright	]       };
+    key <AD12> { [ bracketleft,	braceleft	]       };
+    key <AE01> { [ 1, exclam      ]};
+    key <AE02> { [ 2, at          ]};
+    key <AE03> { [ 3, numbersign  ]};
+    key <AE04> { [ 4, dollar      ]};
+    key <AE05> { [ 5, percent     ]};
+    key <AE06> { [ 6, asciicircum ]};
+    key <AE07> { [ 7, ampersand   ]};
+    key <AE08> { [ 8, asterisk    ]};
+    key <AE09> { [ 9, parenright  ]};
+    key <AE10> { [ 0, parenleft	  ]};
+    
+    key <AE11> { [ minus     ,	0x10005be	]	}; // H. Hiphen
+    key <AE12> { [ equal     ,	plus		]	};
+};
+
+
+partial alphanumeric_keys 
+xkb_symbols "phonetic" {
+
+    // uses the phonetic layout from old Slackware 'il.map' file
+
+    name[Group1]= "Hebrew (phonetic)";
+
+    key <AE12> {        [     equal,    plus, hebrew_doublelowline, hebrew_doublelowline ]};
+
+    key <LatQ> {	[ hebrew_qoph, hebrew_qoph	]	};
+    key <LatW> {	[ hebrew_waw, hebrew_waw	]	};
+    key <LatE> {	[ hebrew_aleph, hebrew_aleph	]       };
+    key <LatR> {	[ hebrew_resh, hebrew_resh	]	};
+    key <LatT> {	[ hebrew_taw, hebrew_tet	]       };
+    key <LatY> {	[ hebrew_ayin, hebrew_ayin	]       };
+    key <LatU> {	[ hebrew_waw, hebrew_waw	]       };
+    key <LatI> {	[ hebrew_yod, hebrew_yod	]       };
+    key <LatO> {	[ hebrew_samech, hebrew_samech	]       };
+    key <LatP> {	[ hebrew_pe, hebrew_finalpe	]	};
+
+    key <LatA> {	[ hebrew_aleph, hebrew_aleph	]	};
+    key <LatS> {	[ hebrew_shin, hebrew_shin	]       };
+    key <LatD> {	[ hebrew_dalet, hebrew_dalet	]       };
+    key <LatF> {	[ hebrew_pe, hebrew_finalpe	]	};
+    key <LatG> {	[ hebrew_gimel, hebrew_gimel	]       };
+    key <LatH> {	[ hebrew_he, hebrew_he		]       };
+    key <LatJ> {	[ hebrew_yod, hebrew_yod	]	};
+    key <LatK> {	[ hebrew_kaph, hebrew_finalkaph	]	};
+    key <LatL> {	[ hebrew_lamed, hebrew_lamed	]       };
+
+    key <LatZ> {	[ hebrew_zain, hebrew_zain	]       };
+    key <LatX> {	[ hebrew_chet, hebrew_chet	]       };
+    key <LatC> {	[ hebrew_zade, hebrew_finalzade	]       };
+    key <LatV> {	[ hebrew_waw, hebrew_waw	]       };
+    key <LatB> {	[ hebrew_bet, hebrew_bet	]       };
+    key <LatN> {	[ hebrew_nun, hebrew_finalnun	]	};
+    key <LatM> {	[ hebrew_mem, hebrew_finalmem	]	};
+};
+
+// The 'Biblical Hebrew' keyboard layout as defined by Tiro for use with the
+// 'SBL Hebrew' font was added 2006.11.13 by Sebastian J. Bronner
+// <waschtl@sbronner.com>.  Its primary features (as compared to the lyx layout)
+// are that the consonants are in the Israeli standard positions, that a great
+// multitude of glyphs can be input directly from the keyboard, and that it is
+// the closest thing to a standard layout a theologian can hope for.
+// Documentation (including printable keyboard tables), SBL Hebrew font, and
+// keyboard layout for Windows are available at
+// http://www.sbl-site.org/Resources/Resources_BiblicalFonts.aspx.
+//
+// It is of interest that the 'basic' layout defined first in this file (as
+// ships with x.org disagrees in the non-consonant characters that the Tiro-
+// layout claims to be the Israeli standard.  Tiros apparent diligence in the
+// PDF-documentation accompanying the keyboard-layout-files lead me to put
+// greater stock in their claim than in this file.  Therefore, the 'biblical'
+// layout below does not include 'il(basic)' but redoes the _whole_ thing from
+// scratch.
+
+partial alphanumeric_keys 
+xkb_symbols "biblical" {
+	name[Group1]= "Hebrew (Biblical, Tiro)";
+	key.type = "FOUR_LEVEL_SEMIALPHABETIC";
+
+	key <TLDE> { [ U05C3, U05AE, semicolon, asciitilde ] };
+	key <AE01> { [ 1,     U05A9, VoidSymbol, exclam ] };
+	key <AE02> { [ 2,     U0599, VoidSymbol, at ] };
+	key <AE03> { [ 3,     U0592, VoidSymbol, numbersign ] };
+	key <AE04> { [ 4,     U05AF, NewSheqelSign, dollar ] };
+	key <AE05> { [ 5,     VoidSymbol, U200D, percent ] };
+	key <AE06> { [ 6,     U05B9, U200C, asciicircum ] };
+	key <AE07> { [ 7,     U05BF, U034F, ampersand ] };
+	key <AE08> { [ 8,     U05C2, U200E, asterisk ] };
+	key <AE09> { [ 9,     U05C1, U200F, parenright ] };
+	key <AE10> { [ 0,     U059D, U25CC, parenleft ] };
+	key <AE11> { [ U05BE, U05A0, minus, underscore ] };
+	key <AE12> { [ equal, U05BC, VoidSymbol, plus ] };
+
+	key <AD01> { [ U0307, U05C4, U0308, slash ] };
+	key <AD02> { [ U05F3, U05AC, U05F4, apostrophe ] };
+	key <AD03> { [ hebrew_qoph, U05AB, U20AC ] };
+	key <AD04> { [ hebrew_resh, U059F ] };
+	key <AD05> { [ hebrew_aleph, U0593 ] };
+	key <AD06> { [ hebrew_tet, U059E ] };
+	key <AD07> { [ hebrew_waw, U059C, U05F0 ] };
+	key <AD08> { [ hebrew_finalnun, U05A1 ] };
+	key <AD09> { [ hebrew_finalmem, U0595 ] };
+	key <AD10> { [ hebrew_pe, U0594 ] };
+	key <AD11> { [ bracketright, U0597, VoidSymbol, braceright ] };
+	key <AD12> { [ bracketleft, U0598, VoidSymbol, braceleft ] };
+	key <BKSL> { [ U05C0, U05A8, backslash, bar ] };
+
+	key <AC01> { [ hebrew_shin, U05BD ] };
+	key <AC02> { [ hebrew_dalet, U05B0 ] };
+	key <AC03> { [ hebrew_gimel, U05BB ] };
+	key <AC04> { [ hebrew_kaph, U05B4 ] };
+	key <AC05> { [ hebrew_ayin, U05B1 ] };
+	key <AC06> { [ hebrew_yod, U05B6, U05F2 ] };
+	key <AC07> { [ hebrew_chet, U05B5, U05F1 ] };
+	key <AC08> { [ hebrew_lamed, U05B3 ] };
+	key <AC09> { [ hebrew_finalkaph, U05B8, U05C7 ] };
+	key <AC10> { [ hebrew_finalpe, U05B2, VoidSymbol, colon ] };
+	key <AC11> { [ U059a, U05B7, comma, quotedbl ] };
+
+	key <AB01> { [ hebrew_zain, U05C5 ] };
+	key <AB02> { [ hebrew_samech, U05A4 ] };
+	key <AB03> { [ hebrew_bet, U05AA, U05A2 ] };
+	key <AB04> { [ hebrew_he, U05A6 ] };
+	key <AB05> { [ hebrew_nun, U05A5, U05C6 ] };
+	key <AB06> { [ hebrew_mem, U05A7 ] };
+	key <AB07> { [ hebrew_zade, U059B ] };
+	key <AB08> { [ hebrew_taw, U0591, VoidSymbol, greater ] };
+	key <AB09> { [ hebrew_finalzade, U0596, VoidSymbol, less ] };
+	key <AB10> { [ U05AD, U05A3, period, question ] };
+
+	key <SPCE> { [ space, space, thinspace, nobreakspace ] };
+};
+
+// EXTRAS
+
+// Biblical hebrew (SIL) US Standard layout version 1.5
+// This map is based closely on v 1.5 of the standard. The only deviation being the replacement of the composite characters sin and shin 
+// by their more recent Unicodev6 counterparts
+// this map contains all the characters found in Biblical annotation, masoretic and Dead Sea Scroll related work.
+// The layout corresponds phonetically to a US standard layout or similar (Qwerty).
+// If you are using an actual Hebrew keyboard, you are probably better off using a Tiro compliant scholarly layout
+// This linux port created and maintained by Dennis Meulensteen, dennis@meulensteen.nl
+partial alphanumeric_keys 
+xkb_symbols "biblicalSIL" {
+	name[Group1]= "Hebrew (Biblical, SIL phonetic)";
+	key.type = "FOUR_LEVEL_SEMIALPHABETIC";
+
+	key <TLDE> { [ U20AC,		U20AA,		U0024 ] }; 			//Euro, 		Shekel, 		Dollar		-
+	key <AE01> { [ 1,		U0021,		U05BD,		U0597 ] };		//1,			exclamation	meteg		revia
+	key <AE02> { [ 2,		U0598,		U05A2,		U05AE ] };	//2,			zarqa		atn. hafukh	zinor
+	key <AE03> { [ 3,		U05A8,		U0596,		U0599 ] };		//3,			qadma		tipeha		pashta
+	key <AE04> { [ 4,		U059C,		U05A5,		U05A0 ] };		//4,			geresh		merkha		tel. gedola
+	key <AE05> { [ 5,		U059E,		U05A6,		U05A9 ] };		//5,			gershayim		mer. kefula	tel qetana
+	key <AE06> { [ 6,		VoidSymbol,	U05AD,		U059F ] };		//6,			-			dehi			qar. para
+	key <AE07> { [ 7,		U05AC,		U05A3,		U05A1 ] };		//7,			iluy			munah		pazer
+	key <AE08> { [ 8,		U059D,		U059B,		U0595 ] };		//8,			g. muqdam	tevir			zaq. gadol
+	key <AE09> { [ 9,		U0029,		U05A7,		U0593 ] };		//9,			parenth.R		darqa		shalshelet
+	key <AE10> { [ 0,		U0028,		U05AA,		U05AF ] };		//0,			paren.L		yer. ben yomo	masora c.
+	key <AE11> { [ U05BE,		U2013,		U2014,		U05BF ] };	//Maqaf, 		en dash		em dash		rafe
+	key <AE12> { [ U05BC,		VoidSymbol,	U0591,		U25CC ] };	//Dagesh		-			etnahta		mark base
+
+	key <AD01> { [ hebrew_qoph,	U0597 ] };							//Qof		revia			-			-
+	key <AD02> { [ hebrew_waw] }; 								//waw		-			-			-
+	key <AD03> { [ U05B6,		U05B5,		VoidSymbol,	U05B1 ] };	//segol		tsere			-			hat. segol
+	key <AD04> { [ hebrew_resh ] };								//resh		-			-			-
+	key <AD05> { [ hebrew_taw ] }; 								//taw		-			-			-
+	key <AD06> { [ hebrew_yod,	U059F ] };							//jod		qar. para		-			-
+	key <AD07> { [ U05BB] }; 									//quibuts		-			-			-
+	key <AD08> { [ U05B4 ] };									//hiriq, 		-			-			-
+	key <AD09> { [ U05B9,		U05BA,		U05C7, 		U05B3 ] };	//holam, 		holam(wav)	qam. qatan	hat. Qamats
+	key <AD10> { [ hebrew_pe,	hebrew_finalpe,	VoidSymbol,	U034F ] };	//pe			final pe		-			c. grapheme joiner
+	key <AD11> { [ bracketright,	braceright,	VoidSymbol,	U0594 ] };		//Bracket R	brace R		-			zaq. qatan
+	key <AD12> { [ bracketleft,	braceleft, 	U059A,		U0592 ] };		//Brachket L	brace L		yetiv			segolta
+	key <BKSL> { [ U05C0, 		U05C0, 		U05A4,		U05AB ] };//Paseq		Paseq		mahapakh		ole
+
+	key <AC01> { [ U05B7,		U05B8,		U05C7,		U05B2 ] };  //patah		Qamats		Qam. Qatan	hat. patah
+	key <AC02> { [ hebrew_samech,	U05E9 ] }; 					//Samech, 	shin no dot	-			-
+	key <AC03> { [ hebrew_dalet ] }; 								//dalet		-			-			-
+	key <AC04> { [ UFB2B,		hebrew_sin,	U05C2 ] }; 			//UCSv6 Sin	sin (nodot)	sindot		-
+	key <AC05> { [ hebrew_gimel,	VoidSymbol,	U25E6,		U2022 ] };	//gimel		-			bullet(DSS)	bulletfill (DSS)
+	key <AC06> { [ hebrew_he,	VoidSymbol,	U0336,		U030A ] };//he			-			strikeout(DSS)	Ring Above(DSS)
+	key <AC07> { [ UFB2A,		hebrew_shin,	U05C1] };				//UCSv6 Shin	shin (nodot)	shindot		-
+	key <AC08> { [ hebrew_kaph,	hebrew_finalkaph ] };					//kaph		Final kaph		-
+	key <AC09> { [ hebrew_lamed,	VoidSymbol ] };						//lamed		-			-
+	key <AC10> { [ U05B0,		U05F4,		semicolon,	U05C3 ] };		//sva		gers. p		semicolon		sof pasuq
+	key <AC11> { [ U2019,		U201D, 		U0323,		U05C4 ] };//QuoteRight	double R Quote	punctum		punctum Above
+
+	key <AB01> { [ hebrew_zain ] };								//Zayin		-			-			
+	key <AB02> { [ hebrew_chet ] };								//chet		-			-
+	key <AB03> { [ hebrew_zade, 	U05E5 ] };							// tzade, 		final tzade		-
+	key <AB04> { [ hebrew_tet ] };									//tet			-			-
+	key <AB05> { [ hebrew_bet ] };									//bet			-			-
+	key <AB06> { [ hebrew_nun,	hebrew_finalnun ] }; 					//nun, 		final nun
+	key <AB07> { [ hebrew_mem,	hebrew_finalmem, U200C,		U200D ] };	//mem, 		final mem		0.wid.non.join.	0.wid.joiner
+	key <AB08> { [ U002C,		U05E2, 		U00AB,		U0307 ] }; //comma, 	ayin			guillemetsR	masora dot
+	key <AB09> { [ U0002E,		U05D0, 		U00BB,		U0308 ] }; //period, 		alef			guillemetsL	thousands
+	key <AB10> { [ slash,		question,	U05F3 ] };					//slash		question		geresh P
+
+	key <SPCE> { [ space, 		space,		thinspace,	nobreakspace ] };//space		space			thin space,		nbsp
+};
diff --git a/data/symbols/in b/data/symbols/in
new file mode 100644
--- /dev/null
+++ b/data/symbols/in
@@ -0,0 +1,1755 @@
+// This layout includes all Indian layouts, including:
+//     - Bengali
+//     - Gujarati 
+//     - Kannada 
+//     - Malayalam
+//     - Oriya 
+//     - Tamil
+//     - Telugu
+//     - Urdu
+
+// Links:
+// - Indic INSCRIPT keyboard layout diagrams:
+//     http://java.sun.com/products/jfc/tsc/articles/InputMethod/indiclayout.html
+// - Bengali Baishakhi (Bengali layouts):
+// - Bengali Baishakhi Inscript (Bengali layouts):
+// - Bengali Bornona (Bengali layouts):
+// - Uni Gitanjali (Bengali layouts):
+//     http://nltr.org
+// - Ekusheyr Shadhinota (Bengali layouts):
+//     http://ekushey.org/projects/shadhinota/index.html
+// - Microsoft Windows XP SP2: Indic Language Standards - an Introduction:
+//     http://www.bhashaindia.com/MSProducts/XpSp2/Articles/IndicLanguageStandards.aspx
+
+// based on a keyboard map from an 'xkb/symbols/dev' file
+
+// Devangari is the default. Kill me if I am wrong:)
+default partial alphanumeric_keys
+xkb_symbols "deva" {
+	// March 2004 -- David Holl <smyrph+dev_xkb@ece.wpi.edu>
+	name[Group1]="Indian";
+
+	key.type="FOUR_LEVEL";
+
+	key <TLDE> { [ U094a, U0912,   grave, asciitilde  ] };
+	key <AE01> { [ U0967, U090d,       1, exclam      ] };
+	key <AE02> { [ U0968, U0945,       2, at          ] };
+	// Shift+AE0[3-8] really need to return a macro of keys defined by
+	// INSCRIPT in place of the symbols that are here for now.  But this
+	// requires XKB to map 1 key into two to three other key presses.
+	key <AE03> { [ U0969, numbersign,  3, numbersign  ] };
+	key <AE04> { [ U096a, dollar,      4		  ] };
+	key <AE05> { [ U096b, percent,     5, percent     ] };
+	key <AE06> { [ U096c, asciicircum, 6, asciicircum ] };
+	key <AE07> { [ U096d, ampersand,   7, ampersand   ] };
+	key <AE08> { [ U096e, asterisk,    8, asterisk    ] };
+	key <AE09> { [ U096f, parenleft,   9, parenleft   ] };
+	key <AE10> { [ U0966, parenright,  0, parenright  ] };
+	key <AE11> { [ minus, U0903, minus, underscore    ] };
+	key <AE12> { [ U0943, U090b, U0944, U0960 ] };
+
+	key <AD01> { [ U094c, U0914 ] };
+	key <AD02> { [ U0948, U0910 ] };
+	key <AD03> { [ U093e, U0906 ] };
+	key <AD04> { [ U0940, U0908, U0963, U0961 ] };
+	key <AD05> { [ U0942, U090a ] };
+	key <AD06> { [ U092c, U092d ] };
+	key <AD07> { [ U0939, U0919 ] };
+	key <AD08> { [ U0917, U0918, U095a ] };
+	key <AD09> { [ U0926, U0927 ] };
+	key <AD10> { [ U091c, U091d, U095b ] };
+	key <AD11> { [ U0921, U0922, U095c, U095d ] };
+	key <AD12> { [ U093c, U091e ] };
+	// I added \ / ? | for shell-convenience (file names and piping)
+	key <BKSL> { [ U0949, U0911, U005C, U007C ] };
+
+	key <AC01> { [ U094b, U0913 ] };
+	key <AC02> { [ U0947, U090f ] };
+	key <AC03> { [ U094d, U0905 ] };
+	key <AC04> { [ U093f, U0907, U0962, U090c ] };
+	key <AC05> { [ U0941, U0909 ] };
+	key <AC06> { [ U092a, U092b, NoSymbol, U095e ] };
+	key <AC07> { [ U0930, U0931 ] };
+	key <AC08> { [ U0915, U0916, U0958, U0959 ] };
+	key <AC09> { [ U0924, U0925 ] };
+	key <AC10> { [ U091a, U091b, U0952 ] };
+	key <AC11> { [ U091f, U0920, NoSymbol, U0951 ] };
+
+	key <AB01> { [ U0946, U090e, U0953 ] };
+	key <AB02> { [ U0902, U0901, NoSymbol, U0950 ] };
+	key <AB03> { [ U092e, U0923, U0954 ] };
+	key <AB04> { [ U0928, U0929 ] };
+	key <AB05> { [ U0935, U0934 ] };
+	key <AB06> { [ U0932, U0933 ] };
+	key <AB07> { [ U0938, U0936 ] };
+	key <AB08> { [ comma, U0937, U0970 ] };
+	key <AB09> { [ period, U0964, U0965, U093d ] };
+	// I added \ / ? | for shell-convenience (file names and piping)
+	key <AB10> { [ U092f, U095f, slash, question ] };
+
+	// space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ):
+	include "nbsp(zwnj3zwj4)"
+        include "rupeesign(4)"
+        include "level3(ralt_switch)"
+};
+
+//Name		:	Bolnagri (Combined)
+//Description	:	A phonetic keyboard layout for Devnagari(Hindi)
+//			http://www.indlinux.org/wiki/index.php/BolNagri
+//NOTE		: 	This is a combined map of bolnagri_matras and bolnagri_vowels.
+//Inspired by "devrom" keymap by Steve Smith for the windows tool "keyman"
+//Original Author :	Noah Levitt<nlevitt at columbia.edu>
+//Past Authors  : Pramod.R <pramodr at gmail.com> and Ravikant <ravikant at sarai.net>
+//Current Main. : G Karunakar <karunakar@indlinux.org>
+
+partial alphanumeric_keys
+xkb_symbols "bolnagri" {
+     name[Group1] = "Hindi (Bolnagri)";
+     key.type="FOUR_LEVEL";
+    //Top Alphanumeric row
+    // Roman digits
+    key <TLDE>  { [   U0902,	U0901,		apostrophe, 	asciitilde ] }; // apostrophe: anusvara, candrabindu
+    key <AE01>  { [   1,	exclam,		U0967,		exclam	   ] };
+    key <AE02>  { [   2,	at,		U0968,		at	   ] };
+    key <AE03>  { [   3,    	numbersign, 	U0969,		numbersign ] };
+    key <AE04>  { [   4,	dollar,		U096A			    ] }; // Rupee symbol on AltGr+4
+    key <AE05>  { [   5,	percent,	U096B,		percent    ] };
+    key <AE06>  { [   6,	asciicircum,	U096C,		asciicircum ] };
+    key <AE07>  { [   7,	ampersand,	U096D,		ampersand  ] };
+    key <AE08>  { [   8,	asterisk,	U096E,		asterisk   ] };
+    key <AE09>  { [   9,	parenleft,	U096F,		parenleft  ] };
+    key <AE10>  { [   0,	parenright,	U0966,		parenright ] };
+    key <AE11>	{ [   minus,	underscore	     ] };
+    key <AE12>	{ [   equal,	plus		     ] };
+    key <BKSL>  { [   U0964,	U0965,		U007C,		U005C   ] }; //pipe : danda, double danda
+
+    //Q Row	
+    key <AD01>   { [   U200C, 	U200D   ] };  // Q: ZWNJ, ZWJ
+    key <AD02>   { [   U0935,  	U950	] };  // W: wa, OM
+    key <AD03>   { [   U0947,   U0948,	U090F,	U0910   ] };  // E: e, ai matras
+    key <AD04>   { [   U0930,	U0943,	U0931,  U090B  	] };  // R: ra, vocalic Ri
+    key <AD05>   { [   U0924,   U0925   ] };  // T: ta, tha
+    key <AD06>   { [   U092f,	U091E   ] };  // Y: ya, nya
+    key <AD07>   { [   U0941,   U0942,	U0909,	U090A   ] };  // U: u, uu matras
+    key <AD08>   { [   U093F,   U0940,	U0907,	U0908   ] };  // I: i, ii matras
+    key <AD09>   { [   U094B,   U094C,	U0913,	U0914   ] };  // O: o, au matras
+    key <AD10>   { [   U092A,   U092B   ] };  // P: pa, pha
+    key <AD11>   { [   bracketleft,   braceleft   ] };  
+    key <AD12>	 { [   bracketright, braceright   ] };
+    
+    //A Row
+    key <AC01>   { [   U093E,	 U0906,	U0905,	U0906  ] };   // A: aa, full A, AA
+    key <AC02>   { [   U0938,    U0937   ] };  // S: sa, ssa
+    key <AC03>   { [   U0926,    U0927   ] };  // D: da, dha
+    key <AC04>   { [   U091F,    U0920   ] };  // F: TA, THA
+    key <AC05>   { [   U0917,    U0918   ] };  // G: ga, gha
+    key <AC06>   { [   U0939,    U0903   ] };  // H: ha, visarg 
+    key <AC07>   { [   U091C,    U091D   ] };  // J: ja, jha
+    key <AC08>   { [   U0915,    U0916   ] };  // K: ka, kha
+    key <AC09>   { [   U0932,	 U0933,	U0962,   U090C   ] };  // L: la, vocalic L or lru matra
+    key <AC10>   { [   semicolon, colon  ] }; 
+    key <AC11>   { [apostrophe, quotedbl ] };
+
+    //Z Row
+    key <AB01>   { [   U0936,	 U0945, U0936, U090D 	 ] };  // Z: sha, akaar candra
+    key <AB02>   { [   U094D,    U0949, U094D, U0911	 ] };  // X: halant, aakaar candra, chandra A
+    key <AB03>   { [   U091A,    U091B   ] };  // C: ca, cha
+    key <AB04>   { [   U0921,    U0922   ] };  // V: da, dha
+    key <AB05>   { [   U092C,    U092D   ] };  // B: ba, bha
+    key <AB06>   { [   U0928,    U0923   ] };  // N: na, nna
+    key <AB07>   { [   U092E,    U0919,	U092E,	U093D   ] };  // M: ma, nga, avagraha
+    key <AB08>   { [   comma,    U0970	 ] };// comma: comma, dev abbreviation sign
+    key <AB09>   { [   period,   U093C 	 ] };  // period: period, nukta
+    key <AB10>	 { [   slash,   question ] };
+
+   // begin modifier mappings
+//    modifier_map Shift  { Shift_L };
+//    modifier_map Lock   { Caps_Lock };
+//    modifier_map Control{ Control_L };
+//    modifier_map Mod3   { Mode_switch };
+
+    include "level3(ralt_switch)"
+    include "rupeesign(4)"
+};
+
+// based on a keyboard map from an 'xkb/symbols/ben' file
+
+partial alphanumeric_keys
+xkb_symbols "ben" {
+    name[Group1]= "Bengali (India)";
+
+      // Mainly numbers.
+      key <AE01> { [      U09E7 		]	};
+      key <AE02> { [      U09E8 		]	};
+      key <AE03> { [      U09E9 		]	};
+      key <AE04> { [      U09EA 		]	};
+      key <AE05> { [      U09EB		]	};
+      key <AE06> { [      U09EC 		]	};
+      key <AE07> { [      U09ED	        ]	};
+      key <AE08> { [      U09EE 		]	};
+      key <AE09> { [      U09EF, parenleft	]	};
+      key <AE10> { [      U09E6, parenright	]	};
+      key <AE11> { [      minus, U0983 	]	};
+      key <AE12> { [      U098B, U09C3	]	};
+
+// Mainly long vowels
+
+      key <AD01> { [      U09CC,  U0994	]	};
+      key <AD02> { [      U09C8,  U0990	]	};
+      key <AD03> { [      U09BE,  U0986	]	};
+      key <AD04> { [      U09C0,  U0988	]	};
+      key <AD05> { [      U09C2,  U098A	]	};
+
+// Mainly voiced consonants
+
+      key <AD06> { [      U09AC,  U09AD	]	};
+      key <AD07> { [      U09B9,  U0999 ]	};
+      key <AD08> { [      U0997,  U0998 ]	};
+      key <AD09> { [      U09A6,  U09A7 ]	};
+      key <AD10> { [      U099C,  U099D ]	};
+      key <AD11> { [      U09A1, U09A2 	]	};
+      key <AD12> { [      U09BC, U099E 	]	};
+
+// Mainly short vowels
+      key <AC01> { [      U09CB,  U0993 ]	};
+      key <AC02> { [      U09C7,  U098F ]	};
+      key <AC03> { [      U09CD,  U0985 ]	};
+      key <AC04> { [      U09BF,  U0987 ]	};
+      key <AC05> { [      U09C1,  U0989 ]	};
+
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      U09AA,  U09AB ]	};
+      key <AC07> { [      U09B0,  U09DD ]	};
+      key <AC08> { [      U0995,  U0996 ]	};
+      key <AC09> { [      U09A4,  U09A5 ]	};
+      key <AC10> { [      U099A,  U099B ]	};
+      key <AC11> { [      U099F, U09A0 	]	};
+      key <BKSL> { [      U005C, U007C 	]	};
+
+      key <AB01> { [      z, Z  		]       };
+      key <AB02> { [      U0982,  U0981 ]       };
+      key <AB03> { [      U09AE,  U09A3 ]       };
+      key <AB04> { [      U09A8,  U09A8 ]       };
+      key <AB05> { [      U09AC,  U09AC ]       };
+      key <AB06> { [      U09B2,  U09B2 ]       };
+      key <AB07> { [      U09B8,  U09B6 ]       };
+      key <AB08> { [      comma,      U09B7 ]       };
+      key <AB09> { [      period,     U0964 ]       };
+      key <AB10> { [      U09DF,  U09AF	]       };
+
+    include "level3(ralt_switch)"
+    include "rupeesign(4)"
+};
+
+xkb_symbols "ben_probhat" {
+ name[Group1]= "Bengali (India, Probhat)";
+   key <ESC>  { [ Escape ] };
+
+// numbers
+   key <TLDE> { [ U200D, asciitilde   ] };
+   key <AE01> { [ U09E7, exclam       ] };
+   key <AE02> { [ U09E8, at           ] };
+   key <AE03> { [ U09E9, numbersign   ] };
+   key <AE04> { [ U09EA, U09F3    ] };
+   key <AE05> { [ U09EB, percent      ] };
+   key <AE06> { [ U09EC, asciicircum  ] };
+   key <AE07> { [ U09ED, U099E    ] };
+   key <AE08> { [ U09EE, U09CE    ] };
+   key <AE09> { [ U09EF, parenleft    ] };
+   key <AE10> { [ U09E6, parenright   ] };
+   key <AE11> { [ minus,     underscore   ] };
+   key <AE12> { [ equal,     plus         ] };
+   key <BKSP> { [ BackSpace               ] };
+
+// tab, q to ] 
+   key <TAB>  { [   Tab,  ISO_Left_Tab     ] };
+   key <AD01> { [   U09A6,  U09A7  ] };
+   key <AD02> { [   U09C2,  U098A  ] };
+   key <AD03> { [   U09C0,  U0988  ] };
+   key <AD04> { [   U09B0,  U09DC  ] };
+   key <AD05> { [   U099F,  U09A0  ] };
+   key <AD06> { [   U098F,  U0990  ] };
+   key <AD07> { [   U09C1,  U0989  ] };
+   key <AD08> { [   U09BF,  U0987  ] };
+   key <AD09> { [   U0993,  U0994  ] };
+   key <AD10> { [   U09AA,  U09AB  ] };
+   key <AD11> { [   U09C7,  U09C8  ] };
+   key <AD12> { [   U09CB,  U09CC  ] };
+   key <RTRN> { [   Return                 ] };
+
+// caps, a to ' 
+//   key <CAPS> { [   Caps_Lock              ] };
+   key <AC01> { [   U09BE,  U0985  ] };
+   key <AC02> { [   U09B8,  U09B7  ] };
+   key <AC03> { [   U09A1,  U09A2  ] };
+   key <AC04> { [   U09A4,  U09A5  ] };
+   key <AC05> { [   U0997,  U0998  ] };
+   key <AC06> { [   U09B9,  U0983  ] };
+   key <AC07> { [   U099C,  U099D  ] };
+   key <AC08> { [   U0995,  U0996  ] };
+   key <AC09> { [   U09B2,  U0982  ] };
+   key <AC10> { [   semicolon,  colon      ] };
+   key <AC11> { [   quoteright, quotedbl   ] };
+
+// shift, z to /
+//   key <LFSH> { [   Shift_L                ] };
+   key <AB01> { [   U09DF,  U09AF  ] };
+   key <AB02> { [   U09B6,  U09DD  ] };
+   key <AB03> { [   U099A,  U099B  ] };
+   key <AB04> { [   U0986,  U098B  ] };
+   key <AB05> { [   U09AC,  U09AD  ] };
+   key <AB06> { [   U09A8,  U09A3  ] };
+   key <AB07> { [   U09AE,  U0999  ] };
+   key <AB08> { [   comma,      U09C3  ] };
+   key <AB09> { [   U0964,  U0981  ] };
+   key <AB10> { [   U09CD,  question   ] };
+   key <BKSL> { [   U200C,  U0965  ] };
+
+//   key <LCTL> { [   Control_L              ] };
+//   key <SPCE> { [   space                  ] };
+
+//   modifier_map Shift  { Shift_L };
+//   modifier_map Lock   { Caps_Lock };
+//   modifier_map Control{ Control_L };
+
+    include "level3(ralt_switch)"
+    include "rupeesign(4)"
+};
+
+// Bengali Baishakhi, Bengali Baishakhi Inscript, Bengali Bornona, Uni Gitanjali Layouts are added by Promathesh Mandal <promathesh812004@gmail.com>
+
+xkb_symbols "ben_baishakhi" {
+ name[Group1]= "Bengali (India, Baishakhi)";
+   key <ESC>   { [ Escape 					] };
+
+// numbers
+   key <TLDE> { [ 0x100200D, 0x100200C	] };
+   key <AE01> { [ 0x10009E7, exclam		] };
+   key <AE02> { [ 0x10009E8, at		] };
+   key <AE03> { [ 0x10009E9, numbersign	] };
+   key <AE04> { [ 0x10009EA, dollar, 0x10009F2	] };
+   key <AE05> { [ 0x10009EB, percent		] };
+   key <AE06> { [ 0x10009EC, asciicircum, 0x10009D7    ] };
+   key <AE07> { [ 0x10009ED, ampersand ] };
+   key <AE08> { [ 0x10009EE,   asterisk,0x10009FA       		] };
+   key <AE09> { [ 0x10009EF, parenleft    	] };
+   key <AE10> { [ 0x10009E6, parenright   	] };
+   key <AE11> { [ minus, underscore   	] };
+   key <AE12> { [ equal,     plus 	] };
+   key <BKSP> { [ BackSpace               		] };
+
+// tab, q to ] 
+   key <TAB>   { [   Tab,  ISO_Left_Tab		] };
+   key <AD01> { [   0x10009A1,  0x10009A2  ] };
+   key <AD02> { [  0x10009C0 ,  0x10009C2  ] };
+   key <AD03> { [   0x10009C7,  0x100098F, 0x1000990 ] };
+   key <AD04> { [   0x10009B0 , 0x10009C3, 0x100098B             		] };
+   key <AD05> { [   0x100099F,  0x10009A0	] };
+   key <AD06> { [   0x10009AF,  0x10009DF	] };
+   key <AD07> { [   0x10009C1,  0x1000989, 0x100098A  ] };
+   key <AD08> { [   0x10009BF,  0x1000987, 0x1000988  ] };
+   key <AD09> { [   0x10009CB,  0x1000993, 0x1000994	] };
+   key <AD10> { [   0x10009AA,  0x10009AB	] };
+   key <AD11> { [   bracketleft,  braceleft] };
+   key <AD12> { [   bracketright,	braceright	] };
+   key <RTRN> { [   Return                 		] };
+
+// caps, a to ' 
+// key <CAPS> { [   Caps_Lock            		] };
+   key <AC01> { [   0x10009BE,  0x1000985, 0x1000986  ] };
+   key <AC02> { [   0x10009B8,  0x10009B6,  0x10009B7  ] };
+   key <AC03> { [   0x10009A6,  0x10009A7  ] };
+   key <AC04> { [   0x10009A4,   0x10009A5, 0x10009CE  ] };
+   key <AC05> { [   0x1000997,  0x1000998	] };
+   key <AC06> { [   0x10009CD,  0x10009B9, 0x1000983  ] };
+   key <AC07> { [   0x100099C,  0x100099D	] };
+   key <AC08> { [   0x1000995,  0x1000996  	] };
+  key <AC09> { [   0x10009B2,  0x1000964, 0x100098C  ] };
+   key <AC10> { [   semicolon,  colon  	] };
+   key <AC11> { [   quoteright, quotedbl   	] };
+
+// shift, z to /
+// key <LFSH> { [   Shift_L              			] };
+   key <AB01> { [   0x10009C8, 0x10009CC              		] };
+   key <AB02> { [   0x10009DC, 0x10009DD              		] };
+   key <AB03> { [   0x100099A,  0x100099B  ] };
+   key <AB04> { [   0x10009F1,  0x10009F0	] };
+   key <AB05> { [   0x10009AC,  0x10009AD  ] };
+   key <AB06> { [   0x10009A8,  0x10009A3, 0x100099E  ] };
+   key <AB07> { [   0x10009AE,  0x1000999, 0x1000981  ] };
+   key <AB08> { [   comma,      less	] };
+   key <AB09> { [    period,	greater,0x10009BC 		] };
+   key <AB10> { [   slash,  question, 0x1000982   	] };
+   key <BKSL> { [   backslash,        bar	] };
+
+// third level with right-alt
+    include "level3(ralt_switch)"
+
+//   key <LCTL> { [   Control_L              ] };
+//   key <SPCE> { [   space                  ] };
+
+//   modifier_map Shift  { Shift_L };
+//   modifier_map Lock   { Caps_Lock };
+//   modifier_map Control{ Control_L };
+
+
+};
+
+xkb_symbols "ben_inscript" {
+    name[Group1]= "Bengali (India, Baishakhi Inscript)";
+
+      // Mainly numbers.
+      key <TLDE> { [      0x100200D, 0x100200C	] 	};
+      key <AE01> { [      0x10009E7  		]	};
+      key <AE02> { [      0x10009E8 		]	};
+      key <AE03> { [      0x10009E9 		]	};
+      key <AE04> { [      0x10009EA 		]	};
+      key <AE05> { [      0x10009EB		]	};
+      key <AE06> { [      0x10009EC 		]	};
+      key <AE07> { [      0x10009ED	        ]	};
+      key <AE08> { [      0x10009EE 		]	};
+      key <AE09> { [      0x10009EF, parenleft	]	};
+      key <AE10> { [      0x10009E6, parenright	]	};
+      key <AE11> { [      minus, 0x1000983 	]	};
+      key <AE12> { [      0x10009C3, 0x100098B 	]	};
+
+// Mainly long vowels
+
+      key <AD01> { [      0x10009CC,  0x1000994	]	};
+      key <AD02> { [      0x10009C8,  0x1000990	]	};
+      key <AD03> { [      0x10009BE,  0x1000986	]	};
+      key <AD04> { [      0x10009C0,  0x1000988	]	};
+      key <AD05> { [      0x10009C2,  0x100098A	]	};
+
+// Mainly voiced consonants
+
+      key <AD06> { [      0x10009AC,  0x10009AD	]	};
+      key <AD07> { [      0x10009B9,  0x1000999 ]	};
+      key <AD08> { [      0x1000997,  0x1000998 ]	};
+      key <AD09> { [      0x10009A6,  0x10009A7 ]	};
+      key <AD10> { [      0x100099C,  0x100099D ]	};
+      key <AD11> { [      0x10009A1,  0x10009A2 ]	};
+      key <AD12> { [      0x10009BC,  0x100099E ]	};
+
+// Mainly short vowels
+      key <AC01> { [      0x10009CB,  0x1000993 ]	};
+      key <AC02> { [      0x10009C7,  0x100098F ]	};
+      key <AC03> { [      0x10009CD,  0x1000985 ]	};
+      key <AC04> { [      0x10009BF,  0x1000987 ]	};
+      key <AC05> { [      0x10009C1,  0x1000989 ]	};
+
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      0x10009AA,  0x10009AB ]	};
+      key <AC07> { [      0x10009B0,  0x10009DD ]	};
+      key <AC08> { [      0x1000995,  0x1000996 ]	};
+      key <AC09> { [      0x10009A4,  0x10009A5 ]	};
+      key <AC10> { [      0x100099A,  0x100099B ]	};
+      key <AC11> { [      0x100099F, 0x10009A0 	]	};
+      key <BKSL> { [      backslash, bar 	]	};
+
+      key <AB01> { [      0x10009CE  		]       };
+      key <AB02> { [      0x1000982,  0x1000981 ]       };
+      key <AB03> { [      0x10009AE,  0x10009A3 ]       };
+      key <AB04> { [      0x10009A8,  0x10009A8 ]       };
+      key <AB05> { [      0x10009AC,  0x10009AC ]       };
+      key <AB06> { [      0x10009B2,  0x10009B2 ]       };
+      key <AB07> { [      0x10009B8,  0x10009B6 ]       };
+      key <AB08> { [      comma,      0x10009B7 ]       };
+      key <AB09> { [      period,     0x1000964 ]       };
+      key <AB10> { [      0x10009DF,  0x10009AF	]       };
+};
+
+xkb_symbols "ben_gitanjali" {
+ name[Group1]= "Bengali (India, Uni Gitanjali)";
+   key <ESC>   { [ Escape			] };
+
+// numbers
+   key <TLDE> { [ colon, question	] };
+   key <AE01> { [ 0x10009E7, 0x10009CE	] };
+   key <AE02> { [ 0x10009E8, quoteright	] };
+   key <AE03> { [ 0x10009E9, numbersign	] };
+   key <AE04> { [ 0x10009EA, 0x10009F3	] };
+   key <AE05> { [ 0x10009EB, slash	] };
+   key <AE06> { [ 0x10009EC, period	] };
+   key <AE07> { [ 0x10009ED, ampersand 	] };
+   key <AE08> { [ 0x10009EE, asterisk 	] };
+   key <AE09> { [ 0x10009EF, parenleft  ] };
+   key <AE10> { [ 0x10009E6, parenright	] };
+   key <AE11> { [ minus, 0x1000983   	] };
+   key <AE12> { [ 0x10009C3, 0x100098B 	] };
+   key <BKSP> { [ BackSpace		] };
+
+// tab, q to ] 
+   key <TAB>   { [   Tab,  ISO_Left_Tab	] };
+   key <AD01> { [   0x10009D7,  0x1000994 ] };
+   key <AD02> { [   0x10009C8,  0x1000990 ] };
+   key <AD03> { [   0x10009BE,  0x1000985 ] };
+   key <AD04> { [   0x10009C0,  0x1000988 ] };
+   key <AD05> { [   0x10009C2,  0x100098A ] };
+   key <AD06> { [   0x10009AC,  0x10009AD ] };
+   key <AD07> { [   0x10009B9,  0x1000999 ] };
+   key <AD08> { [   0x1000997,  0x1000998 ] };
+   key <AD09> { [   0x10009A6,  0x10009A7 ] };
+   key <AD10> { [   0x100099C,  0x100099D ] };
+   key <AD11> { [   0x10009A1,  0x10009A2 ] };
+   key <AD12> { [   0x100200C,  0x100099E ] };
+   key <RTRN> { [   Return		  ] };
+
+// caps, a to ' 
+// key <CAPS> { [   Caps_Lock            		] };
+   key <AC01> { [   0x100200D,  0x1000993 ] };
+   key <AC02> { [   0x10009C7,  0x100098F ] };
+   key <AC03> { [   0x10009CD		  ] };
+   key <AC04> { [   0x10009BF,  0x1000987 ] };
+   key <AC05> { [   0x10009C1,  0x1000989 ] };
+   key <AC06> { [   0x10009AA,  0x10009AB ] };
+   key <AC07> { [   0x10009B0,  0x10009F0 ] };
+   key <AC08> { [   0x1000995,  0x1000996 ] };
+   key <AC09> { [   0x10009A4,  0x10009A5 ] };
+   key <AC10> { [   0x100099A,  0x100099B ] };
+   key <AC11> { [   0x100099F,  0x10009A0 ] };
+
+// shift, z to /
+// key <LFSH> { [   Shift_L              			] };
+   key <AB01> { [   0x10009C7, 0x100098F ] };
+   key <AB02> { [   0x1000982, 0x1000981 ] };
+   key <AB03> { [   0x10009AE, 0x10009A3 ] };
+   key <AB04> { [   0x10009A8, 0x10009DC ] };
+   key <AB05> { [   0x10009F1, 0x10009DD ] };
+   key <AB06> { [   0x10009B2		 ] };
+   key <AB07> { [   0x10009B8, 0x10009B6 ] };
+   key <AB08> { [   comma,     0x10009B7 ] };
+   key <AB09> { [   0x1000964, 0x10009FA ] };
+   key <AB10> { [   0x10009AF, 0x10009DF ] };
+   key <BKSL> { [   backslash, bar	 ] };
+
+// third level with right-win
+//    include "level3(lwin_switch)"
+
+//   key <LCTL> { [   Control_L              ] };
+//   key <SPCE> { [   space                  ] };
+
+//   modifier_map Shift  { Shift_L };
+//   modifier_map Lock   { Caps_Lock };
+//   modifier_map Control{ Control_L };
+
+
+};
+
+
+xkb_symbols "ben_bornona" {
+ name[Group1]= "Bengali (India, Bornona)";
+   key <ESC>  { [ Escape 					] };
+
+// numbers
+   key <TLDE> { [ 0x100200D, 0x100200C   	] };
+   key <AE01> { [ 0x10009E7, exclam         	] };
+   key <AE02> { [ 0x10009E8, 0x1000981 	] };
+   key <AE03> { [ 0x10009E9, numbersign   	] };
+   key <AE04> { [ 0x10009EA, 0x10009F3    	] };
+   key <AE05> { [ 0x10009EB, percent      	] };
+   key <AE06> { [ 0x10009EC, 0x1000983    	] };
+   key <AE07> { [ 0x10009ED, 0x10009CE	] };
+   key <AE08> { [ 0x10009EE, asterisk		] };
+   key <AE09> { [ 0x10009EF, parenleft    	] };
+   key <AE10> { [ 0x10009E6, parenright	] };
+   key <AE11> { [ minus,	   underscore	] };
+   key <AE12> { [ equal,          plus			] };
+   key <BKSP> { [ BackSpace               		] };
+
+// tab, q to ] 
+   key <TAB>   { [   Tab,  	ISO_Left_Tab	] };
+   key <AD01> { [   0x1000982,  0x1000999, 0x10009D7	] };
+   key <AD02> { [   0x10009A2,  0x10009A0, 0x100098A ] };
+   key <AD03> { [   0x10009C7,  0x10009C8, 0x1000988	] };
+   key <AD04> { [   0x10009B0,  0x10009C3, 0x100098B	] };
+   key <AD05> { [   0x10009A4,  0x100099F	] };
+   key <AD06> { [   0x10009A7,  0x10009A5, 0x100098F  ] };
+   key <AD07> { [   0x10009C1,  0x10009C2, 0x1000989	] };
+   key <AD08> { [   0x10009BF,  0x10009C0, 0x1000987	] };
+   key <AD09> { [   0x10009CB,  0x10009CC, 0x1000993	] };
+   key <AD10> { [   0x10009AA, 0x1000990, 0x1000994		] };
+   key <AD11> { [   0x100005B,  0x100007B, 0x10009DC  ] };
+   key <AD12> { [   0x100005D,  0x100007D  ] };
+   key <RTRN> { [   Return					] };
+
+// caps, a to ' 
+// key <CAPS> { [   Caps_Lock            		] };
+   key <AC01> { [   0x10009BE,  0x1000985, 0x10009F4  ] };
+   key <AC02> { [   0x10009B8,  0x10009B6, 0x10009F5  ] };
+   key <AC03> { [   0x10009A6,  0x10009A1, 0x10009F8  ] };
+   key <AC04> { [   0x10009AB				] };
+   key <AC05> { [   0x1000997,  0x1000998	] };
+   key <AC06> { [   0x10009CD, 0x10009B9	] };
+   key <AC07> { [   0x100099C,  0x100099D	] };
+   key <AC08> { [   0x1000995,  0x1000996	] };
+   key <AC09> { [   0x10009B2,  0x1000964  ] };
+   key <AC10> { [   semicolon,  0x100003A	] };
+   key <AC11> { [   quoteright, quotedbl   	] };
+
+// shift, z to /
+// key <LFSH> { [   Shift_L              			] };
+   key <AB01> { [   0x10009AF, 0x10009DC	] };
+   key <AB02> { [   0x10009B7, 0x10009DD, 0x10009FA	] };
+   key <AB03> { [   0x100099A,  0x100099B  ] };
+   key <AB04> { [   0x10009AD				] };
+   key <AB05> { [   0x10009AC,  0x10009DF	] };
+   key <AB06> { [   0x10009A8,  0x10009A3	] };
+   key <AB07> { [   0x10009AE,  0x100099E	] };
+   key <AB08> { [   comma,      0x100003C	] };
+   key <AB09> { [   0x100002E,  0x100003E  ] };
+   key <AB10> { [   0x100002F,  question   	] };
+   key <BKSL> { [   0x10009F1,  0x10009F0	] };
+
+//   key <LCTL> { [   Control_L              ] };
+//   key <SPCE> { [   space                  ] };
+
+//   modifier_map Shift  { Shift_L };
+//   modifier_map Lock   { Caps_Lock };
+//   modifier_map Control{ Control_L };
+// third level with right-alt
+    include "level3(ralt_switch)"
+
+};
+
+partial alphanumeric_keys 
+xkb_symbols "guj" {
+      name[Group1]= "Gujarati";
+
+      // Mainly numbers.
+      key <AE01> { [      U0AE7, U0A8D 	]	};
+      key <AE02> { [      U0AE8, U0AC5 	]	};
+      key <AE03> { [      U0AE9 	 	]	};
+      key <AE04> { [      U0AEA  	 	]	};
+      key <AE05> { [      U0AEB  	 	]	};
+      key <AE06> { [      U0AEC  	 	]	};
+      key <AE07> { [      U0AED 		]	};
+      key <AE08> { [      U0AEE  	 	]	};
+      key <AE09> { [      U0AEF, parenleft 	]	};
+      key <AE10> { [      U0AE6, parenright ]	};
+      key <AE11> { [      minus,     U0A83  ]	};
+      key <AE12> { [      U0A8B, U0AC3 	]	};
+
+// Mainly long vowels
+
+      key <AD01> { [      U0ACC, U0A94  ]	};
+      key <AD02> { [      U0AC8, U0A90  ]	};
+      key <AD03> { [      U0ABE, U0A86  ]	};
+      key <AD04> { [      U0AC0, U0A88  ]	};
+      key <AD05> { [      U0AC2, U0A8A  ]	};
+
+// Mainly voiced consonants
+
+      key <AD06> { [      U0AAC, U0AAD 	]	};
+      key <AD07> { [      U0AB9, U0A99 	]	};
+      key <AD08> { [      U0A97, U0A98 	]	};
+      key <AD09> { [      U0AA6, U0AA7 	]	};
+      key <AD10> { [      U0A9C, U0A9D 	]	};
+      key <AD11> { [      U0AA1, U0AA2 	]	};
+      key <AD12> { [      U0ABC, U0A9E 	]	};
+
+// Mainly short vowels
+      key <AC01> { [      U0ACB, U0A93	]	};
+      key <AC02> { [      U0AC7, U0A8F	]	};
+      key <AC03> { [      U0ACD, U0A85  ]	};
+      key <AC04> { [      U0ABF, U0A87  ]	};
+      key <AC05> { [      U0AC1, U0A89  ]	};
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      U0AAA, U0AAB 	]	};
+      key <AC07> { [      U0AB0, U0AB0 	]	};
+      key <AC08> { [      U0A95, U0A96 	]	};
+      key <AC09> { [      U0AA4, U0AA5 	]	};
+      key <AC10> { [      U0A9A, U0A9B 	]	};
+      key <AC11> { [      U0A9F, U0AA0 	]	};
+      key <BKSL> { [      U0AC9, U0A91 	]	};
+
+      key <AB01> { [      z        , Z		]       };
+      key <AB02> { [      U0A82, U0A81	]       };
+      key <AB03> { [      U0AAE, U0AA3  ]       };
+      key <AB04> { [      U0AA8, U0AA8   ]       };
+      key <AB05> { [      U0AB5, U0AB5   ]       };
+      key <AB06> { [      U0AB2, U0AB3  ]       };
+      key <AB07> { [      U0AB8, U0AB6  ]       };
+      key <AB08> { [      comma,     U0AB7  ]       };
+      key <AB09> { [      period,    U0964  ]       };
+      key <AB10> { [      U0AAF, question   ]       };
+      include "rupeesign(4)"
+      include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys 
+xkb_symbols "kan" {
+
+    // Inscript layout for Kannada  
+    // Author : G Karunakar <karunakar@freedomink.org>
+    // Date   : Wed Nov 13 17:22:58 IST 2002
+    // Kannada digits mapped in basic only
+
+    name[Group1]= "Kannada";
+
+    key <TLDE> { [  U0cca, U0c92	] };
+    key <AE01> { [  U0ce7			] };
+    key <AE02> { [  U0ce8			] };
+    key <AE03> { [  U0ce9			] };
+    key <AE04> { [  U0cea			] };
+    key <AE05> { [  U0ceb			] };
+    key <AE06> { [  U0cec			] };
+    key <AE07> { [  U0ced			] };
+    key <AE08> { [  U0cee			] };
+    key <AE09> { [  U0cef			] };
+    key <AE10> { [  U0ce6			] };
+    key <AE11> { [  U0c83			] };
+    key <AE12> { [  U0cc3, U0c8b	] };
+
+    key <AD01> { [  U0ccc, U0c94	] };
+    key <AD02> { [  U0cc8, U0c90	] };
+    key <AD03> { [  U0cbe, U0c86	] };
+    key <AD04> { [  U0cc0, U0c88	] };
+    key <AD05> { [  U0cc2, U0c8a	] };
+    key <AD06> { [  U0cac, U0cad	] };
+    key <AD07> { [  U0cb9, U0c99	] };
+    key <AD08> { [  U0c97, U0c98	] };
+    key <AD09> { [  U0ca6, U0ca7	] };
+    key <AD10> { [  U0c9c, U0c9d	] };
+    key <AD11> { [  U0ca1, U0ca2	] };
+    key <AD12> { [  U0cbc, U0c9e	] };
+ 
+    key <AC01> { [  U0ccb, U0c93	] };
+    key <AC02> { [  U0cc7, U0c8f	] };
+    key <AC03> { [  U0ccd, U0c85	] };
+    key <AC04> { [  U0cbf, U0c87	] };
+    key <AC05> { [  U0cc1, U0c89	] };
+    key <AC06> { [  U0caa, U0cab	] };
+    key <AC07> { [  U0cb0, U0cb1	] };
+    key <AC08> { [  U0c95, U0c96	] };
+    key <AC09> { [  U0ca4, U0ca5	] };
+    key <AC10> { [  U0c9a, U0c9b	] };
+    key <AC11> { [  U0c9f, U0ca0	] };
+
+    key <AB01> { [  U0cc6, U0c8e	] };
+    key <AB02> { [  U0c82			] };
+    key <AB03> { [  U0cae, U0ca3	] };
+    key <AB04> { [  U0ca8			] };
+    key <AB05> { [  U0cb5, U0cb4	] };
+    key <AB06> { [  U0cb2, U0cb3	] };
+    key <AB07> { [  U0cb8, U0cb6	] };
+    key <AB08> { [  comma     , U0cb7	] };
+    key <AB09> { [  period    				] };
+    key <AB10> { [  U0caf, U0040	] };
+
+    key <RALT> {
+	symbols[Group1] = [ Mode_switch, Multi_key ],
+	virtualMods = AltGr
+    };
+    include "rupeesign(4)"
+    include "level3(ralt_switch)"
+};
+
+// Description : A keymap for Malayalam
+// Encoding    : Unicode (http://www.unicode.org)
+// Author      : Baiju M <baiju@freeshell.org>
+// Date        : Sat Aug  17 21:10:48 IST 2002
+// Mapping:
+
+partial alphanumeric_keys 
+xkb_symbols "mal" {
+
+    name[Group1] = "Malayalam";
+
+    //From grave to backslash (\)
+    
+    key <TLDE> { [ U0d4a , U0d12           ] };
+
+// svu: 
+// These lines were in former "mal" variant - 
+// but the digits are replaced with the ones from 'mal_plusnum' -
+// for the integrity of all Indian layouts
+//
+//    key <AE01> { [1           ,     exclam           ] }; 
+//    key <AE02> { [2           ,         at           ] };
+//    key <AE03> { [3           , numbersign           ] };
+//    key <AE04> { [4           ,     dollar           ] };
+//    key <AE05> { [5           ,    percent           ] };
+//    key <AE06> { [6           ,asciicircum           ] };
+//    key <AE07> { [7           ,  ampersand           ] };
+//    key <AE08> { [8           , asterisk           ] };
+//    key <AE09> { [9           ,  parenleft           ] };
+//    key <AE10> { [0           , parenright           ] };
+
+      key <AE01> { [ U0d67 ,      exclam ] };
+      key <AE02> { [ U0d68 ,          at ] };
+      key <AE03> { [ U0d69 ,  numbersign ] };
+      key <AE04> { [ U0d6a ,      dollar ] };
+      key <AE05> { [ U0d6b ,     percent ] };
+      key <AE06> { [ U0d6c , asciicircum ] };
+      key <AE07> { [ U0d6d ,   ampersand ] };
+      key <AE08> { [ U0d6e ,  asterisk ] };
+      key <AE09> { [ U0d6f ,   parenleft ] };
+      key <AE10> { [ U0d66 ,  parenright ] };
+
+    key <AE11> { [ minus      , U0d03           ] };
+    key <AE12> { [ U0d43 , U0d0b           ] };
+    key <BKSL>  { [U0200c, U05C ]};//bksl: ZWNJ 
+
+  
+    // From 'q' to right bracket (])
+    
+    key <AD01> { [ U0d4c , U0d14 ] };
+    key <AD02> { [ U0d48 , U0d10 ] };
+    key <AD03> { [ U0d3e , U0d06 ] };
+    key <AD04> { [ U0d40 , U0d08 ] };
+    key <AD05> { [ U0d42 , U0d0a ] };
+    key <AD06> { [ U0d2c , U0d2d ] };
+    key <AD07> { [ U0d39 , U0d19 ] };
+    key <AD08> { [ U0d17 , U0d18 ] };
+    key <AD09> { [ U0d26 , U0d27 ] };
+    key <AD10> { [ U0d1c , U0d1d ] };
+    key <AD11> { [ U0d21 , U0d22 ] };
+    key <AD12> { [ U0200d , U0d1e ] };
+
+    // From 'a' to apostrophe (')
+    
+    key <AC01> { [ U0d4b , U0d13 ] };
+    key <AC02> { [ U0d47 , U0d0f ] };
+    key <AC03> { [ U0d4d , U0d05 ] };
+    key <AC04> { [ U0d3f , U0d07 ] };
+    key <AC05> { [ U0d41 , U0d09 ] };
+    key <AC06> { [ U0d2a , U0d2b ] };
+    key <AC07> { [ U0d30 , U0d31 ] };
+    key <AC08> { [ U0d15 , U0d16 ] };
+    key <AC09> { [ U0d24 , U0d25 ] };
+    key <AC10> { [ U0d1a , U0d1b ] };
+    key <AC11> { [ U0d1f , U0d20 ] };
+    
+    // From 'z' to slash (/)
+    
+    key <AB01> { [ U0d46 , U0d0e ] };
+    key <AB02> { [ U0d02 , U200b ] };//X:ZWSP
+    key <AB03> { [ U0d2e , U0d23 ] };
+    key <AB04> { [ U0d28 ] };
+    key <AB05> { [ U0d35 , U0d34 ] };
+    key <AB06> { [ U0d32 , U0d33 ] };
+    key <AB07> { [ U0d38 , U0d36 ] };
+    key <AB08> { [ comma      , U0d37 ] };
+    key <AB09> { [ period     , U0200d ] };
+    key <AB10> { [ U0d2f , question   ] };
+
+    include "rupeesign(4)"
+    include "level3(ralt_switch)"
+
+};
+
+//Name		:	Lalitha
+//Description	:	A transliteration keyboard layout for Malayalam
+//Original Author :	Noah Levitt<nlevitt at columbia.edu>
+//Current Main  : 	Jinesh K.J<jinesh.k@gmail.com>, Swathantra Malayalam Computing (SMC)<smc-discuss@googlegroups.com>
+
+partial alphanumeric_keys
+xkb_symbols "mal_lalitha" {
+     name[Group1] = "Malayalam (Lalitha)";
+     key.type="FOUR_LEVEL";
+    //Top Alphanumeric row
+    // Roman digits
+    key <TLDE>  { [   U0D4D,	U0D02,		apostrophe, 	asciitilde ] }; // apostrophe: virama(chandrakala),anusvara
+    key <AE01>  { [   1,	exclam,	U0D67,		exclam	   ] };
+    key <AE02>  { [   2,	at,		U0D68,		at	   ] };
+    key <AE03>  { [   3,    	numbersign, 	U0D69,		numbersign ] };
+    key <AE04>  { [   4,	dollar,		U0D6A			     ] };
+    key <AE05>  { [   5,	percent,	U0D6B,		percent    ] };
+    key <AE06>  { [   6,	asciicircum,	U0D6C,		asciicircum ] };
+    key <AE07>  { [   7,	ampersand,	U0D6D,		ampersand  ] };
+    key <AE08>  { [   8,	asterisk,	U0D6E,		asterisk   ] };
+    key <AE09>  { [   9,	parenleft,	U0D6F,		parenleft  ] };
+    key <AE10>  { [   0,	parenright,	U0D66,		parenright ] };
+    key <AE11>	{ [   minus,	underscore	     ] };
+    key <AE12>	{ [   equal,	plus		     ] };
+    key <BKSL>  { [   U005C,	U007C,		U200C	] };//backslash:pipe,backslash,ZWNJ 
+
+    //Q Row	
+    key <AD01>   { [   U0D48,	U0D4C,	U0D10,	U0D14  ] }; // Q: ai and au matras 
+    key <AD02>   { [   U0D35	] };  // W: wa, OM
+    key <AD03>   { [   U0D46,   U0D47,	U0D0E,	U0D0F   ] };  // E: e,ee matras
+    key <AD04>   { [   U0D30,	U0D31,	U0D43,	U0D0B  	] };  // R: ra,rra, vocalic Ri
+    key <AD05>   { [   U0D24,   U0D25,	U0D1F,	U0D20   ] };  // T: tha, ttha,ta,tta
+    key <AD06>   { [   U0D2f    ] };  // Y: ya
+    key <AD07>   { [   U0D41,   U0D42,	U0D09,	U0D0A   ] };  // U: u, uu matras
+    key <AD08>   { [   U0D3F,   U0D40,	U0D07,	U0D08   ] };  // I: i, ii matras
+    key <AD09>   { [   U0D4A,   U0D4B,	U0D12,	U0D13   ] };  // O: o, oo matras
+    key <AD10>   { [   U0D2A   ] };  // P: pa
+    key <AD11>   { [   bracketleft,   braceleft   ] };//braceleft:   
+    key <AD12>	 { [   bracketright, braceright   ] };//braceright:
+    
+    //A Row
+    key <AC01>   { [   U0D3E,	 U0D05,	U0D06,	U0D05  ] };   // A: a,aa
+    key <AC02>   { [   U0D38,    U0D37   ] };  // S: sa, ssa
+    key <AC03>   { [   U0D26,    U0D27,	U0D21,	U0D22   ] };  // D: soft da,soft dda,hard da,hard dda,
+    key <AC04>   { [   U0D2B     ] };  // F: pha
+    key <AC05>   { [   U0D17,    U0D18   ] };  // G: ga, gha
+    key <AC06>   { [   U0D39,    U0D03   ] };  // H: ha, visarg 
+    key <AC07>   { [   U0D1C,    U0D1D   ] };  // J: ja, jha
+    key <AC08>   { [   U0D15,    U0D16   ] };  // K: ka, kha
+    key <AC09>   { [   U0D32,	 U0D33   ] };  // L: la, vocalic L or lru matra`
+    key <AC10>   { [   semicolon, colon  ] }; 
+    key <AC11>   { [apostrophe, quotedbl ] };
+
+    //Z Row
+    key <AB01>   { [   U0D34,	 U0D36 	 ] };  // Z: sha,zha
+    key <AB02>   { [   U0D4D,	 U200B  ] };  // X: chandrakala,ZWSP
+    key <AB03>   { [   U0D1A,    U0D1B   ] };  // C: ca, cha
+    key <AB04>   { [   U0D35,	 U200D  ] };  // V: va,ZWJ
+    key <AB05>   { [   U0D2C,    U0D2D   ] };  // B: ba, bha
+    key <AB06>   { [   U0D28,    U0D23,	U0D19,	U0D1E   ] };  // N: na, hard na,nga,nha
+    key <AB07>   { [   U0D2E,	 U0D02  ] };  // M: ma
+    key <AB08>   { [   comma,    U003C ] };// comma: comma
+    key <AB09>   { [   period, 	 U003E ] };  // period: period
+    key <AB10>	 { [   slash,   question ] };
+
+   // begin modifier mappings
+//    modifier_map Shift  { Shift_L };
+//    modifier_map Lock   { Caps_Lock };
+//    modifier_map Control{ Control_L };
+//    modifier_map Mod3   { Mode_switch };
+    include "level3(ralt_switch)"
+    include "rupeesign(4)"
+};
+
+
+partial alphanumeric_keys 
+xkb_symbols "ori" {
+    // Inscript layout for Oriya  
+    // Author: G Karunakar <karunakar@freedomink.org>
+    // Date: Wed Nov 13 18:16:19 IST 2002
+
+    name[Group1]= "Oriya";
+    
+    key <AE01> { [  U0b67			] };
+    key <AE02> { [  U0b68			] };
+    key <AE03> { [  U0b69			] };
+    key <AE04> { [  U0b6a			] };
+    key <AE05> { [  U0b6b			] };
+    key <AE06> { [  U0b6c			] };
+    key <AE07> { [  U0b6d			] };
+    key <AE08> { [  U0b6e			] };
+    key <AE09> { [  U0b6f			] };
+    key <AE10> { [  U0b66			] };
+    key <AE11> { [  U0b03			] };
+    key <AE12> { [  U0b43, U0b0b	] };
+
+    key <AD01> { [  U0b4c, U0b14	] };
+    key <AD02> { [  U0b48, U0b10	] };
+    key <AD03> { [  U0b3e, U0b06	] };
+    key <AD04> { [  U0b40, U0b08	] };
+    key <AD05> { [  U0b42, U0b0a	] };
+    key <AD06> { [  U0b2c, U0b2d	] };
+    key <AD07> { [  U0b39, U0b19	] };
+    key <AD08> { [  U0b17, U0b18	] };
+    key <AD09> { [  U0b26, U0b27	] };
+    key <AD10> { [  U0b1c, U0b1d	] };
+    key <AD11> { [  U0b21, U0b22	] };
+    key <AD12> { [  U0b3c, U0b1e	] };
+ 
+    key <AC01> { [  U0b4b, U0b13	] };
+    key <AC02> { [  U0b47, U0b0f	] };
+    key <AC03> { [  U0b4d, U0b05	] };
+    key <AC04> { [  U0b3f, U0b07	] };
+    key <AC05> { [  U0b41, U0b09	] };
+    key <AC06> { [  U0b2a, U0b2b	] };
+    key <AC07> { [  U0b30			] };
+    key <AC08> { [  U0b15, U0b16	] };
+    key <AC09> { [  U0b24, U0b25	] };
+    key <AC10> { [  U0b1a, U0b1b	] };
+    key <AC11> { [  U0b1f, U0b20	] };
+ 
+    key <AB02> { [  U0b02, U0b01	] };
+    key <AB03> { [  U0b2e, U0b23	] };
+    key <AB04> { [  U0b28			] };
+    key <AB05> { [  U0b35			] };
+    key <AB06> { [  U0b32, U0b33	] };
+    key <AB07> { [  U0b38, U0b36	] };
+    key <AB08> { [  comma     , U0b37	] };
+    key <AB09> { [  period    				] };
+    key <AB10> { [  U0b2f, U0040	] };
+
+    key <RALT> {
+	symbols[Group1] = [ Mode_switch, Multi_key ],
+	virtualMods = AltGr
+    };
+    include "rupeesign(4)"
+    include "level3(ralt_switch)"
+};
+
+// based on a keyboard map from an 'xkb/symbols/tml' file
+// INSCRIPT
+partial alphanumeric_keys 
+xkb_symbols "tam" {
+      name[Group1]= "Tamil";
+
+      key <TLDE> { [      U0BCA, U0B92	]	};
+
+      // Mainly numbers.
+      key <AE01> { [      U0BE7 		]	};
+      key <AE02> { [      U0BE8 		]	};
+      key <AE03> { [      U0BE9 		]	};
+      key <AE04> { [      U0BEA 		]	};
+      key <AE05> { [      U0BEB 		]	};
+      key <AE06> { [      U0BEC 		]	};
+      key <AE07> { [      U0BED        	]	};
+      key <AE08> { [      U0BEE 		]	};
+      key <AE09> { [      U0BEF, parenleft	]	};
+      key <AE10> { [      U0BF0, parenright	]	};
+      key <AE11> { [      U0BF1, U0B83  ]	};
+      key <AE12> { [      U0BF2, plus	] 	};
+
+// Mainly long vowels
+
+      key <AD01> { [      U0BCC,  U0B94 ]	};
+      key <AD02> { [      U0BC8,  U0B90 ]	};
+      key <AD03> { [      U0BBE,  U0B86 ]	};
+      key <AD04> { [      U0BC0,  U0B88 ]	};
+      key <AD05> { [      U0BC2,  U0B8A ]	};
+
+// Mainly voiced consonants
+
+      key <AD07> { [      U0BB9, U0B99	]	};
+      key <AD10> { [      U0B9c 	]	}; 
+      key <AD12> { [      U0B9E				]	};
+
+// Mainly short vowels
+      key <AC01> { [      U0BCB,  U0B93 ]	};
+      key <AC02> { [      U0BC7,  U0B8F ]	};
+      key <AC03> { [      U0BCD,  U0B85 ]	};
+      key <AC04> { [      U0BBF,  U0B87 ]	};
+      key <AC05> { [      U0BC1,  U0B89 ]	};
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      U0BAA 		]	};
+      key <AC07> { [      U0BB0,  U0BB1 ]	};
+      key <AC08> { [      U0B95 		]	};
+      key <AC09> { [      U0BA4 		]	};
+      key <AC10> { [      U0B9A 		]	};
+      key <AC11> { [      U0B9F 		]	};
+      key <BKSL> { [      U005C, U007C	]	};//backslash-bar  - Changed to Unicode
+
+      key <AB01> { [      U0BC6,  U0B8E	]	};
+      key <AB02> { [      U0B82   		]       };
+      key <AB03> { [      U0BAE,  U0BA3 ]       };
+      key <AB04> { [      U0BA8,  U0BA9 ]       };
+      key <AB05> { [      U0BB5,  U0BB4 ]       };
+      key <AB06> { [      U0BB2,  U0BB3 ]       };
+      key <AB07> { [      U0BB8,  U0BB6	]       };
+      key <AB08> { [      comma,      U0BB7 ]       };
+      key <AB09> { [      period,     U0964 ]       };
+      key <AB10> { [      U0BAF,  question  ]       };
+
+      include "level3(ralt_switch)"
+      include "rupeesign(4)"
+};
+
+partial alphanumeric_keys 
+xkb_symbols "tam_unicode" {
+
+// Description: A keymap based on the TamilNet'99 typewriter keyboard 
+// Encoding: Unicode (http://www.unicode.org)
+// Author: Thuraiappah Vaseeharan <vasee@ieee.org>
+// Modifed by: Malathi S <malathiramya@gmail.com>
+// Secondary contact: Sri Ramadoss M <amachu@au-kbc.org>
+// Date  : Fri Sep 4 11:32:00 CST 2009
+// Mapping:
+  
+    name[Group1]= "Tamil (Unicode)";
+
+    // granthas
+    key <TLDE> {  [ apostrophe, asciitilde ] };
+    key <AE01> {  [ U0031, exclam ] } ;
+    key <AE02> {  [ U0032, at ] } ;
+    key <AE03> {  [ U0033, numbersign ] } ;
+    key <AE04> {  [ U0034, U0BF9 ] } ;
+    key <AE05> {  [ U0035, percent ] } ;
+    key <AE06> {  [ U0036, asciicircum ] } ;
+    key <AE07> {  [ U0037, ampersand ] } ;
+    key <AE08> {  [ U0038, asterisk ] } ;
+    key <AE09> {  [ U0039, parenleft ] } ;
+    key <AE10> {  [ U0030, parenright ] } ;
+    key <AE11> {  [ minus, underscore ] };
+    key <AE12> {  [ equal, plus	] };
+
+
+    // Qrow
+    key <AD01> {  [ U0B9E, U0BB6 ] };
+    key <AD02> {  [ U0BB1, U0BB7 ] };
+    key <AD03> {  [ U0BA8, U0BB8 ] };
+    key <AD04> {  [ U0B9A, U0BB9 ] };
+    key <AD05> {  [ U0BB5, U0B9C ] };
+    key <AD06> {  [ U0BB2 ] };
+    key <AD07> {  [ U0BB0 ] };
+    key <AD08> {  [ U0BC8, U0B90 ] };
+    key <AD09> {  [ U0BCA, U0BCB ] };
+    key <AD10> {  [ U0BBF, U0BC0 ] };
+    key <AD11> {  [ U0BC1, U0BC2 ] };
+
+    // Arow
+    key <AC01> { [ U0BAF ] };
+    key <AC02> { [ U0BB3 ] };
+    key <AC03> { [ U0BA9 ] };
+    key <AC04> { [ U0B95 ] };
+    key <AC05> { [ U0BAA ] };
+    key <AC06> { [ U0BBE, U0BB4 ] };
+    key <AC07> { [ U0BA4 ] };
+    key <AC08> { [ U0BAE ] };
+    key <AC09> { [ U0B9F ] };
+    key <AC10> { [ U0BCD, U0B83 ] };
+    key <AC11> { [ U0B99 ] };
+    
+    // Zrow
+    key <AB01> { [ U0BA3 ]  };
+    key <AB02> { [ U0B92, U0B93 ]  };
+    key <AB03> { [ U0B89, U0B8A ]  };
+    key <AB04> { [ U0B8E, U0B8F ]  };
+    key <AB05> { [ U0BC6, U0BC7 ]  };
+    key <AB06> { [ U0B94, U0BCC ]  };
+    key <AB07> { [ U0B85, U0B86 ]  };
+    key <AB08> { [ U0B87, U0B88 ]  };
+};
+
+partial alphanumeric_keys
+xkb_symbols "tam_keyboard_with_numerals" {
+
+// Description: A keymap based on the TamilNet'99 typewriter keyboard 
+// Encoding: Unicode (http://www.unicode.org)
+// Author: Malathi S <malathiramya@gmail.com>
+// Secondary contact: Sri Ramadoss M <amachu@au-kbc.org>
+// Date  : Fri Sep 4 11:33:00 CST 2009
+// Mapping:
+
+      name[Group1]= "Tamil (keyboard with numerals)";
+
+      // Mainly numbers.
+      key <TLDE> { [ apostrophe, asciitilde ] };
+      key <AE01> { [ U0BE7, exclam ] };
+      key <AE02> { [ U0BE8, at ] };
+      key <AE03> { [ U0BE9, numbersign ] };
+      key <AE04> { [ U0BEA, U0BF9 ] };
+      key <AE05> { [ U0BEB, percent ] };
+      key <AE06> { [ U0BEC, asciicircum ] };
+      key <AE07> { [ U0BED, ampersand ] };
+      key <AE08> { [ U0BEE, asterisk ] };
+      key <AE09> { [ U0BEF, parenleft ] };
+      key <AE10> { [ U0BE6, parenright ] };
+      key <AE11> { [ minus, underscore ] };
+      key <AE12> { [ equal, plus ] };
+
+
+    // Qrow
+    key <AD01> {  [ U0B9E, U0BB6 ] };
+    key <AD02> {  [ U0BB1, U0BB7 ] };
+    key <AD03> {  [ U0BA8, U0BB8 ] };
+    key <AD04> {  [ U0B9a, U0BB9 ] };
+    key <AD05> {  [ U0BB5, U0B9c ] };
+    key <AD06> {  [ U0BB2 ] };
+    key <AD07> {  [ U0BB0 ] };
+    key <AD08> {  [ U0BC8, U0B90 ] };
+    key <AD09> {  [ U0BCA, U0BCB ] };
+    key <AD10> {  [ U0BBF, U0BC0 ] };
+    key <AD11> {  [ U0BC1, U0BC2 ] };
+
+    // Arow
+    key <AC01> { [ U0BAF ] };
+    key <AC02> { [ U0BB3 ] };
+    key <AC03> { [ U0BA9 ] };
+    key <AC04> { [ U0B95 ] };
+    key <AC05> { [ U0BAA ] };
+    key <AC06> { [ U0BBE, U0BB4 ] };
+    key <AC07> { [ U0BA4 ] };
+    key <AC08> { [ U0BAE ] };
+    key <AC09> { [ U0B9F ] };
+    key <AC10> { [ U0BCD, U0B83 ] };
+    key <AC11> { [ U0B99 ] };
+
+    // Zrow
+    key <AB01> { [ U0BA3 ]  };
+    key <AB02> { [ U0B92, U0B93 ]  };
+    key <AB03> { [ U0B89, U0B8A ]  };
+    key <AB04> { [ U0B8E, U0B8F ]  };
+    key <AB05> { [ U0BC6, U0BC7 ]  };
+    key <AB06> { [ U0B94, U0BCC ]  };
+    key <AB07> { [ U0B85, U0B86 ]  };
+    key <AB08> { [ U0B87, U0B88 ]  };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "tam_TSCII" {
+
+// Description	: A Tamil typewrite-style keymap 
+//		  loosely based on TamilNet'99 reommendations 
+// Encoding	: TSCII (http://www.tscii.org)
+// Author	: Thuraiappah Vaseeharan <vasee@ieee.org>
+// Last Modified: Sat Jan  5 17:11:26 CST 2002
+
+    name[Group1]= "Tamil (TSCII typewriter)";
+
+    key <AE01> {  [ 0x10000b7, 0x10000a4 ] }; // aytham
+    key <AE02> {  [ 0x1000082, 0x10000a5 ] }; // shri
+    key <AE03> {  [ 0x1000083, 0x1000088 ] }; // ja
+    key <AE04> {  [ 0x1000084, 0x1000089 ] }; // sha
+    key <AE05> {  [ 0x1000085, 0x100008a ] }; // sa
+    key <AE06> {  [ 0x1000086, 0x100008b ] }; // ha
+    key <AE07> {  [ 0x1000087, 0x100008c ] }; // ksha
+	
+    // Qrow
+    key <AD01> {  [ 0x10000bb, 0x100009a ] }; // nja
+    key <AD02> {  [ 0x10000c8, 0x10000da ] }; // Ra
+    key <AD03> {  [ 0x10000bf, 0x10000d1 ] }; // NNa
+    key <AD04> {  [ 0x10000ba, 0x10000cd ] }; // ca
+    key <AD05> {  [ 0x10000c5, 0x10000d7 ] }; // va
+    key <AD06> {  [ 0x10000c4, 0x10000d6 ] }; // la
+    key <AD07> {  [ 0x10000c3, 0x10000d5 ] }; // ra
+    key <AD08> {  [ 0x10000a8, 0x10000b3 ] }; // sangili, ai
+    key <AD09> {  [ 0x10000ca, 0x10000cb ] }; // di, dI
+    key <AD10> {  [ 0x10000a2, 0x10000a3 ] }; // visiri
+    key <AD11> {  [ dead_acute, 0x10000a3 ] }; // Ukaaram
+
+    // Arow
+    key <AC01> { [ 0x10000c2, 0x10000d4 ] }; // ya
+    key <AC02> { [ 0x10000c7, 0x10000d9 ] }; // La
+    key <AC03> { [ 0x10000c9, 0x10000db ] }; // na
+    key <AC04> { [ 0x10000b8, 0x10000cc ] }; // ka
+    key <AC05> { [ 0x10000c0, 0x10000d2 ] }; // pa
+    key <AC06> { [ dead_grave,0x10000a1 ] }; // pulli,aravu
+    key <AC07> { [ 0x10000be, 0x10000d0 ] }; // tha
+    key <AC08> { [ 0x10000c1, 0x10000d3 ] }; // ma
+    key <AC09> { [ 0x10000bc, 0x10000ce ] }; // da
+    key <AC10> { [ 0x10000c6, 0x10000d8 ] }; // zha
+    key <AC11> { [ 0x10000b9, 0x1000099 ] }; // nga
+    
+    // Zrow
+    key <AB01> { [ 0x10000bd, 0x10000cf ] }; // Na
+    key <AB02> { [ 0x10000b4, 0x10000b5 ] }; // o, O
+    key <AB03> { [ 0x10000af, 0x10000b0 ] }; // u, U
+    key <AB04> { [ 0x10000b1, 0x10000b2 ] }; // e, E
+    key <AB05> { [ 0x10000a6, 0x10000a7 ] }; // kombus
+    key <AB06> { [ 0x10000b6, 0x10000aa ] }; // au
+    key <AB07> { [ 0x10000ab, 0x10000ac ] }; // a, A
+    key <AB08> { [ 0x10000fe, 0x10000ae ] }; // i, I
+
+};
+
+partial alphanumeric_keys 
+xkb_symbols "tam_TAB" {
+
+// Description: A keymap based on the TamilNet'99 typewriter keyboard 
+// Encoding: TAB (http://www.tamilnet99.org)
+// Author: Thuraiappah Vaseeharan <t_vasee@yahoo.com>
+// Date  : Sun Aug 12 02:23:00 CDT 2001
+
+    name[Group1]= "Tamil (TAB typewriter)";
+
+    // numeral row
+    key <AE01> {  [ 0x10000e7, 0x10000a7 ] } ;
+    key <AE02> {  [ 0x10000fa, 0x10000a8 ] } ;
+    key <AE03> {  [ 0x10000fb ] } ;
+    key <AE04> {  [ 0x10000fc ] } ;
+    key <AE05> {  [ 0x10000fd ] } ;
+    key <AE06> {  [ 0x10000fe ] } ;
+    key <AE07> {  [ 0x10000ff ] } ;
+	
+    // q-row
+    key <AD01> {  [ 0x10000eb, 0x10000b3 ] };
+    key <AD02> {  [ 0x10000f8, 0x10000c1 ] };
+    key <AD03> {  [ 0x10000ef, 0x10000b8 ] };
+    key <AD04> {  [ 0x10000ea, 0x10000b2 ] };
+    key <AD05> {  [ 0x10000f5, 0x10000be ] };
+    key <AD06> {  [ 0x10000f4, 0x10000bd ] };
+    key <AD07> {  [ 0x10000f3, 0x10000bc ] };
+    key <AD08> {  [ 0x10000ac, 0x10000e4 ] };
+    key <AD09> {  [ 0x10000ae, 0x10000af ] };
+    key <AD10> {  [ 0x10000a4, 0x10000a6 ] };
+    key <AD11> {  [ dead_circumflex, 0x10000a6 ] }; // Ukaaram
+
+    // a-row
+    key <AC01> {  [ 0x10000f2, 0x10000bb ] };
+    key <AC02> {  [ 0x10000f7, 0x10000c0 ] };
+    key <AC03> {  [ 0x10000f9, 0x10000c2 ] };
+    key <AC04> {  [ 0x10000e8, 0x10000b0 ] };
+    key <AC05> {  [ 0x10000f0, 0x10000b9 ] };
+    key <AC06> {  [ 0x10000a2, 0x10000a3 ] };
+    key <AC07> {  [ 0x10000ee, 0x10000b6 ] };
+    key <AC08> {  [ 0x10000f1, 0x10000ba ] };
+    key <AC09> {  [ 0x10000ec, 0x10000b4 ] };
+    key <AC10> {  [ 0x10000f6, 0x10000bf ] };
+    key <AC11> {  [ 0x10000e9, 0x10000b1 ] };
+    
+    // z-row
+    key <AB01> {  [ 0x10000ed, 0x10000b5 ] };
+    key <AB02> {  [ 0x10000e5, 0x10000e6 ] };
+    key <AB03> {  [ 0x10000e0, 0x10000e1 ] };
+    key <AB04> {  [ 0x10000e2, 0x10000e3 ] };
+    key <AB05> {  [ 0x10000aa, 0x10000ab ] };
+    key <AB06> {  [ 0x10000ac, 0x10000a3 ] };
+    key <AB07> {  [ 0x10000dc, 0x10000dd ] };
+    key <AB08> {  [ 0x10000de, 0x10000df ] };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "tel" {
+
+    // Inscript layout for Telugu using Unicode 
+    // Author: G Karunakar <karunakar@freedomink.org>
+    // Date:
+    // See layout at http://www.indlinux.org/keymap/telugu.php
+
+    name[Group1]= "Telugu";
+
+    key <TLDE> { [  U0c4a, U0c12	] };
+    key <AE01> { [  U0c67			] };
+    key <AE02> { [  U0c68			] };
+    key <AE03> { [  U0c69, numbersign	] };
+    key <AE04> { [  U0c6a, dollar		] };
+    key <AE05> { [  U0c6b, percent		] };
+    key <AE06> { [  U0c6c, asciicircum	] };
+    key <AE07> { [  U0c6d, ampersand	] };
+    key <AE08> { [  U0c6e, asterisk	] };
+    key <AE09> { [  U0c6f, parenleft	] };
+    key <AE10> { [  U0c66, parenright	] };
+    key <AE11> { [  U0c03, underscore	] };
+    key <AE12> { [  U0c43, U0c0b	] };
+    key <BKSP> { [  BackSpace			] };    
+ 
+    key <AD01> { [  U0c4c, U0c14	] };
+    key <AD02> { [  U0c48, U0c10	] };
+    key <AD03> { [  U0c3e, U0c06	] };
+    key <AD04> { [  U0c40, U0c08	] };
+    key <AD05> { [  U0c42, U0c0a	] };
+    key <AD06> { [  U0c2c, U0c2d	] };
+    key <AD07> { [  U0c39, U0c19	] };
+    key <AD08> { [  U0c17, U0c18	] };
+    key <AD09> { [  U0c26, U0c27	] };
+    key <AD10> { [  U0c1c, U0c1d	] };
+    key <AD11> { [  U0c21, U0c22	] };
+    key <AD12> { [  U0c1e			] };
+  
+    key <AC01> { [  U0c4b, U0c13	] };
+    key <AC02> { [  U0c47, U0c0f	] };
+    key <AC03> { [  U0c4d, U0c05	] };
+    key <AC04> { [  U0c3f, U0c07	] };
+    key <AC05> { [  U0c41, U0c09	] };
+    key <AC06> { [  U0c2a, U0c2b	] };
+    key <AC07> { [  U0c30, U0c31	] };
+    key <AC08> { [  U0c15, U0c16	] };
+    key <AC09> { [  U0c24, U0c25	] };
+    key <AC10> { [  U0c1a, U0c1b	] };
+    key <AC11> { [  U0c1f, U0c20	] };
+ 
+    key <AB01> { [  U0c46, U0c0e	] };
+    key <AB02> { [  U0c02, U0c01	] };
+    key <AB03> { [  U0c2e, U0c23	] };
+    key <AB04> { [  U0c28			] };
+    key <AB05> { [  U0c35			] };
+    key <AB06> { [  U0c32, U0c33	] };
+    key <AB07> { [  U0c38, U0c36	] };
+    key <AB08> { [  comma     , U0c37	] };
+    key <AB09> { [  period    				] };
+    key <AB10> { [  U0c2f, U0040	] };
+
+    key <RALT> {        
+        symbols[Group1] = [ Mode_switch, Multi_key ],
+        virtualMods = AltGr
+    };
+    include "rupeesign(4)"
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys 
+xkb_symbols "urd-phonetic" {
+    include "pk(urd-phonetic)"
+    name[Group1]= "Urdu (phonetic)";
+};
+
+partial alphanumeric_keys 
+xkb_symbols "urd-phonetic3" {
+    include "pk(urd-crulp)"
+    name[Group1]= "Urdu (alternative phonetic)";
+};
+
+partial alphanumeric_keys 
+xkb_symbols "urd-winkeys" {
+    include "pk(urd-nla)"
+    name[Group1]= "Urdu (WinKeys)";
+};
+
+// based on a keyboard map from an 'xkb/symbols/gur' file
+
+partial alphanumeric_keys
+xkb_symbols "guru" {
+      name[Group1]= "Punjabi (Gurmukhi)";
+
+      // Mainly numbers.
+      key <AE01> { [      U0A67 		]	};
+      key <AE02> { [      U0A68		]	};
+      key <AE03> { [      U0A69, U0A71	]	};
+      key <AE04> { [      U0A6A, U0A74	 	]	};
+      key <AE05> { [      U0A6B, U262C		]	};
+      key <AE06> { [      U0A6C  	 	]	};
+      key <AE07> { [      U0A6D 		]	};
+      key <AE08> { [      U0A6e  	 	]	};
+      key <AE09> { [      U0A6F, parenleft 	]	};
+      key <AE10> { [      U0A66, parenright ]	};
+      key <AE11> { [      gur_visarga 	 	]	};
+      key <AE12> { [      equal,	plus 	]	};
+
+// Mainly long vowels
+
+      key <AD01> { [      U0A4C, U0A14  ]	};
+      key <AD02> { [      U0A48, U0A10  ]	};
+      key <AD03> { [      U0A3E, U0A06  ]	};
+      key <AD04> { [      U0A40, U0A08  ]	};
+      key <AD05> { [      U0A42, U0A0A  ]	};
+
+// Mainly voiced consonants
+
+      key <AD06> { [      U0A2C, U0A2D 	]	};
+      key <AD07> { [      U0A39, U0A19 	]	};
+      key <AD08> { [      U0A17, U0A18 	]	};
+      key <AD09> { [      U0A26, U0A27 	]	};
+      key <AD10> { [      U0A1C, U0A1D 	]	};
+      key <AD11> { [      U0A21, U0A22 	]	};
+      key <AD12> { [      U0A3C, U0A1E 	]	};
+
+// Mainly short vowels
+      key <AC01> { [      U0A4B, U0A13  ]	};
+      key <AC02> { [      U0A47, U0A0F  ]	};
+      key <AC03> { [      U0A4D, U0A05  ]	};
+      key <AC04> { [      U0A3F, U0A07  ]	};
+      key <AC05> { [      U0A41, U0A09  ]	};
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      U0A2A, U0A2B 	]	};
+      key <AC07> { [      U0A30, U0A5C 	]	};
+      key <AC08> { [      U0A15, U0A16 	]	};
+      key <AC09> { [      U0A24, U0A25 	]	};
+      key <AC10> { [      U0A1A, U0A1B 	]	};
+      key <AC11> { [      U0A1F, U0A20 	]	};
+      key <BKSL> { [      U005C, U007C	]	};
+
+      key <AB01> { [      z, 	 U0A01	]       };
+      key <AB02> { [      U0A02, U0A70, U0A71  ]       };
+      key <AB03> { [      U0A2E, U0A23  ]       };
+      key <AB04> { [      U0A28, U0A28  ]       };
+      key <AB05> { [      U0A35, U0A35  ]       };
+      key <AB06> { [      U0A32, U0A33  ]       };
+      key <AB07> { [      U0A38, U0A36  ]       };
+      key <AB08> { [      comma,     less       ]       };
+      key <AB09> { [      period,    U0964  ]       };
+      key <AB10> { [      U0A2F, question   ]       };
+
+    include "rupeesign(4)"
+    include "level3(ralt_switch)"
+};
+
+//Name		:	Jhelum (Refind Inscript)
+//Description	:	A Jhelum keyboard layout for Gurmukhi (Punjabi)
+//			http://www.satluj.org/Jhelum.html
+//Modified for Inscript to make
+//Original Author :	Amanpreet Singh Alam <apreet.alam@gmail.com
+ 
+partial alphanumeric_keys
+xkb_symbols "jhelum" {
+      name[Group1] = "Punjabi (Gurmukhi Jhelum)";
+          key.type="FOUR_LEVEL";
+     //Top Alphanumeric row
+     // Roman digits
+     key <TLDE>  { [  apostrophe, asciitilde, U0A02,U0A01 ] }; // apostrophe: anusvara, candrabindu
+     key <AE01>  { [   1,exclam,	U0A67,	exclam	   ] };
+     key <AE02>  { [   2,at,	U0A68,	at	   ] };
+     key <AE03>  { [   3,numbersign, U0A69,	numbersign ] };
+     key <AE04>  { [   4,dollar,	U0A6A		 ] };
+     key <AE05>  { [   5,percent,U0A6B,	percent    ] };
+     key <AE06>  { [   6,U0A73, U0A6C,asciicircum ] };
+     key <AE07>  { [   7,U0A72,U0A6D,ampersand  ] };
+     key <AE08>  { [   8,asterisk,U0A6E,	asterisk   ] };
+     key <AE09>  { [   9,parenleft,U0A6F,parenleft  ] };
+     key <AE10>  { [   0,parenright,U0A66,parenright ] };
+     key <AE11>	{ [   minus,underscore] };
+     key <AE12>	{ [   equal,plus] };
+     key <BKSL>  { [   U0964,U0965,U007C,U005C] }; //pipe : danda, double danda
+ 
+     //Q Row	
+     key <AD01>   { [   U0A4C, 	U0A14   ] };  // Q: oo, ooh
+     key <AD02>   { [   U0A48,  	U0A10	] };  // W: ee, ae
+     key <AD03>   { [   U0A3E,   U0A06  ] };  // E: a, aa
+     key <AD04>   { [   U0A40,	U0A08, U20B9  	] };  // R: ee, ai, rupeesign
+     key <AD05>   { [   U0A42,   U0A0A   ] };  // T: u, uu
+     key <AD06>   { [   U0A30,	U0A5C   ] };  // Y: ra, raa
+     key <AD07>   { [   U0A26,   U0A27   ] };  // U: tha, thha
+     key <AD08>   { [   U0A17,   U0A18, U0A5A   ] };  // I:ga, gha
+     key <AD09>   { [   U0A24,   U0A1F   ] };  // O: ta, tha
+     key <AD10>   { [   U0A2A,   U0A5E, VoidSymbol,U0A5E  ] };  // P: pa, pha
+     key <AD11>   { [   U0A21,   U0A22,   bracketleft,   braceleft   ] };  
+     key <AD12>	 { [   U0A19,   U0A1E,   bracketright, braceright   ] };
+     
+     //A Row
+     key <AC01>   { [   U0A4B,	 U0A13  ] };   // A: o, oo
+     key <AC02>   { [   U0A47,    U0A0F   ] };  // S: e, ee
+     key <AC03>   { [   U0A4D,    U0A05   ] };  // D: halant, aa
+     key <AC04>   { [   U0A3F,    U0A07   ] };  // F: i, aa
+     key <AC05>   { [   U0A41,    U0A09   ] };  // G: u, uh
+     key <AC06>   { [   U0A39,    U0A20   ] };  // H: ha, thha
+     key <AC07>   { [   U0A1C,    U0A1D, U0A5B   ] };  // J: ja, jha
+     key <AC08>   { [   U0A15,    U0A16,VoidSymbol ,U0A59   ] };  // K: ka, kha
+     key <AC09>   { [   U0A32,	 U0A25, U0A33   ] };  // L: la, tha
+     key <AC10>   { [   U0A38,   colon, U0A36  ] }; //; sa
+     key <AC11>   { [apostrophe, quotedbl ] };
+ 
+     //Z Row
+     key <AB01>   { [   U0A71,	 U0A3C 	 ] };  // Z: addak, par bindi
+     key <AB02>   { [   U0A02,    U0A70	 ] };  // X: bindi, tippi
+     key <AB03>   { [   U0A1A,    U0A1B   ] };  // C: ca, cha
+     key <AB04>   { [   U0A35,    U0A2F   ] };  // V: va, ya
+     key <AB05>   { [   U0A2C,    U0A2D   ] };  // B: ba, bha
+     key <AB06>   { [   U0A28,    U0A23   ] };  // N: na, nha
+     key <AB07>   { [   U0A2E, U0A2E       ] };  // M: ma
+     key <AB08>   { [   comma,    U262C	 ] };// comma: comma, dev abbreviation sign
+     key <AB09>   { [   period,   U0A74 	 ] };  // period: period, nukta
+     key <AB10>	 { [   slash,   question ] };
+ 
+// begin modifier mappings
+//    modifier_map Shift  { Shift_L };
+//    modifier_map Lock   { Caps_Lock };
+//    modifier_map Control{ Control_L };
+//    modifier_map Mod3   { Mode_switch };
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+
+// Contact: Walter Bender <walter@laptop.org>
+
+  include "in(deva)"
+  key <TLDE> { [	U094A,	U0912 ] }; // DEVANAGARI VOWEL SIGN SHORT O; DEVANAGARI LETTER SHORT O
+  key <AE01> { [	U0967,	U090D ] }; // DEVANAGARI DIGIT ONE; DEVANAGARI LETTER CANDRA E
+  key <AE02> { [	U0968,	U0945 ] }; // DEVANAGARI DIGIT TWO; DEVANAGARI VOWEL SIGN CANDRA E
+  key <AE03> { [	U0969	 ] }; // DEVANAGARI DIGIT THREE; 
+  key <AE04> { [	U096A	 ] }; // DEVANAGARI DIGIT FOUR; 
+  key <AE05> { [	U096B	 ] }; // DEVANAGARI DIGIT FIVE; 
+  key <AE06> { [	U096C	 ] }; // DEVANAGARI DIGIT SIX; 
+  key <AE07> { [	U096D	 ] }; // DEVANAGARI DIGIT SEVEN; 
+  key <AE08> { [	U096E	 ] }; // DEVANAGARI DIGIT EIGHT; 
+  key <AE09> { [	U096F,	parenleft ] }; // DEVANAGARI DIGIT NINE; 
+  key <AE10> { [	U0966,	parenright ] }; // DEVANAGARI DIGIT ZERO; 
+  key <AE11> { [	minus,		U0903 ] }; // DEVANAGARI SIGN VISARGA; 
+  key <AE12> { [	U0943,	U090B ] }; // DEVANAGARI VOWEL SIGN VOCALIC R; DEVANAGARI LETTER VOCALIC R
+
+  key <AD01> { [	U094C,	U0914 ] }; // DEVANAGARI VOWEL SIGN AU; DEVANAGARI LETTER AU
+  key <AD02> { [	U0948,	U0910 ] }; // DEVANAGARI VOWEL SIGN AI; DEVANAGARI LETTER AI
+  key <AD03> { [	U093E,	U0906 ] }; // DEVANAGARI VOWEL SIGN AA; DEVANAGARI LETTER AA
+  key <AD04> { [	U0940,	U0908 ] }; // DEVANAGARI VOWEL SIGN II; DEVANAGARI LETTER II
+  key <AD05> { [	U0942,	U090A ] }; // DEVANAGARI VOWEL SIGN UU; DEVANAGARI LETTER UU
+  key <AD06> { [	U092C,	U092D ] }; // DEVANAGARI LETTER BA; DEVANAGARI LETTER BHA
+  key <AD07> { [	U0939,	U0919 ] }; // DEVANAGARI LETTER HA; DEVANAGARI LETTER NGA
+  key <AD08> { [	U0917,	U0918 ] }; // DEVANAGARI LETTER GA; DEVANAGARI LETTER GHA
+  key <AD09> { [	U0926,	U0927 ] }; // DEVANAGARI LETTER DA; DEVANAGARI LETTER DHA
+  key <AD10> { [	U091C,	U091D ] }; // DEVANAGARI LETTER JA; DEVANAGARI LETTER JHA
+  key <AD11> { [	U0921,	U0922 ] }; // DEVANAGARI LETTER DDA; DEVANAGARI LETTER DDHA
+  key <AD12> { [	U093C,	U091E ] }; // DEVANAGARI SIGN NUKTA; DEVANAGARI LETTER NYA
+
+  key <BKSL> { [	U0949,	U0911 ] }; // DEVANAGARI VOWEL SIGN CANDRA O; DEVANAGARI LETTER CANDRA O
+
+  key <AC01> { [	U094B,	U0913 ] }; // DEVANAGARI VOWEL SIGN O; DEVANAGARI LETTER O
+  key <AC02> { [	U0947,	U090F ] }; // DEVANAGARI VOWEL SIGN E; DEVANAGARI LETTER E
+  key <AC03> { [	U094D,	U0905 ] }; // DEVANAGARI SIGN VIRAMA; DEVANAGARI LETTER A
+  key <AC04> { [	U093F,	U0907 ] }; // DEVANAGARI VOWEL SIGN I; DEVANAGARI LETTER I
+  key <AC05> { [	U0941,	U0909 ] }; // DEVANAGARI VOWEL SIGN U; DEVANAGARI LETTER U
+  key <AC06> { [	U092A,	U092B ] }; // DEVANAGARI LETTER PA; DEVANAGARI LETTER PHA
+  key <AC07> { [	U0930,	U0931 ] }; // DEVANAGARI LETTER RA; DEVANAGARI LETTER RRA
+  key <AC08> { [	U0915,	U0916 ] }; // DEVANAGARI LETTER KA; DEVANAGARI LETTER KHA
+  key <AC09> { [	U0924,	U0925 ] }; // DEVANAGARI LETTER TA; DEVANAGARI LETTER THA
+  key <AC10> { [	U091A,	U091B ] }; // DEVANAGARI LETTER CA; DEVANAGARI LETTER CHA
+  key <AC11> { [	U091F,	U0920 ] }; // DEVANAGARI LETTER TTA; DEVANAGARI LETTER TTHA
+
+  key <AB01> { [	U0946,	U090E ] }; // DEVANAGARI VOWEL SIGN SHORT E; DEVANAGARI LETTER SHORT E
+  key <AB02> { [	U0902,	U0901 ] }; // DEVANAGARI SIGN ANUSVARA; DEVANAGARI SIGN CANDRABINDU
+  key <AB03> { [	U092E,	U0923 ] }; // DEVANAGARI LETTER MA; DEVANAGARI LETTER NNA
+  key <AB04> { [	U0928,	U0929 ] }; // DEVANAGARI LETTER NA; DEVANAGARI LETTER NNNA
+  key <AB05> { [	U0935,	U0934 ] }; // DEVANAGARI LETTER VA; DEVANAGARI LETTER LLLA
+  key <AB06> { [	U0932,	U0933 ] }; // DEVANAGARI LETTER LA; DEVANAGARI LETTER LLA
+  key <AB07> { [	U0938,	U0936 ] }; // DEVANAGARI LETTER SA; DEVANAGARI LETTER SHA
+  key <AB08> { [	comma,		U0937 ] }; // DEVANAGARI LETTER SSA
+  key <AB09> { [	period,		U0964 ] }; // DEVANAGARI DANDA
+  key <AB10> { [	U092F,	U095F ] }; // DEVANAGARI LETTER YA; DEVANAGARI LETTER YYA
+
+  // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ):
+  include "nbsp(zwnj3zwj4)"
+
+  include "group(olpc)"
+  include "rupeesign(4)"
+  include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys 
+xkb_symbols "hin-wx" {
+
+    name[Group1]= "Hindi (Wx)";
+
+      key <TLDE> {	 [     grave, asciitilde, 2, 3    ]	};
+
+      key <AE01> {	 [      0x1000967, exclam 		]	};
+      key <AE02> {	 [      0x1000968, at 		]	};
+      key <AE03> {	 [      0x1000969 , numbersign	 		]	};
+      key <AE04> {	 [      0x100096A , dollar		]	};
+      key <AE05> {	 [      0x100096B , percent 	 		]	};
+      key <AE06> {	 [      0x100096C , asciicircum	 		]	};
+      key <AE07> {	 [      0x100096D , ampersand                       ]	};
+      key <AE08> {	 [      0x100096e , asterisk 	 		]	};
+      key <AE09> {	 [      0x100096F, parenleft 		]	};
+      key <AE10> {	 [      0x1000966, parenright 		]	};
+      key <AE11> {	 [      minus, underscore 	 		]	};
+      key <AE12> {	 [      equal, plus 		]	};
+
+
+      key <AD01> {	 [      0x1000943,  0x1000944, 0x100090B, 0x1000960]	};
+      key <AD02> {	 [      0x1000924,  0x1000925       	]	};
+      key <AD03> {	 [      0x1000947,  0x1000948, 0x100090F, 0x1000910]	};
+      key <AD04> {	 [      0x1000930,  0x1000937       	]	};
+      key <AD05> {	 [      0x100091F,  0x1000920       	]	};
+
+
+      key <AD06> {	 [      0x100092F 		]	};
+      key <AD07> {	 [      0x1000941,  0x1000942, 0x1000909, 0x100090A ]	};
+      key <AD08> {	 [      0x100093F,  0x1000940, 0x1000907, 0x1000908 ]	};
+      key <AD09> {	 [      0x100094B,  0x100094C, 0x1000913, 0x1000914]	};
+      key <AD10> {	 [      0x100092A,  0x100092B 		]	};
+      key <AD11> {	 [      bracketleft, braceleft  		]	};
+      key <AD12> {	 [      bracketright, braceright  		]	};
+      key <BKSL> {       [      backslash, bar, 0x1000964, 0x1000965 ] };
+
+      key <AC01> {	 [      0x100094D,  0x100093E, 0x1000905,0x1000906 ] 	};
+      key <AC02> {	 [      0x1000938,  0x1000936       	]	};
+      key <AC03> {	 [      0x1000921,  0x1000922       	]	};
+      key <AC04> {	 [      0x1000919,  0x100091E       	]	};
+      key <AC05> {	 [      0x1000917,  0x1000918       	]	};
+
+
+      key <AC06> {	 [      0x1000939,  0x1000903 		]	};
+      key <AC07> {	 [      0x100091C,  0x100091D 		]	};
+      key <AC08> {	 [      0x1000915,  0x1000916 		]	};
+      key <AC09> {	 [      0x1000932,  0x1000962, 0x1000933, 0x100090C]	};
+      key <AC10> {	 [      semicolon, colon  		]	};
+      key <AC11> {	 [      quoteright, quotedbl 		]	};
+
+      key <AB01> {	 [      0x1000901,   0x100093C, 0x100093D, 0x1000950]   };
+      key <AB02> {       [      0x1000926,   0x1000927      ]       };
+      key <AB03> {       [      0x100091A,   0x100091B         ]       };
+      key <AB04> {       [      0x1000935,   dead_V        ]       };
+      key <AB05> {       [      0x100092C,   0x100092D        ]       };
+      key <AB06> {       [      0x1000928,   0x1000923         ]       };
+      key <AB07> {       [      0x100092E,   0x1000902         ]       };
+      key <AB08> {       [      comma,       less         ]       };
+      key <AB09> {       [      period,      greater       ]       };
+      key <AB10> {       [      slash,      question        ]       };
+
+    include "level3(ralt_switch)"
+    include "rupeesign(4)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "eng" {
+
+    name[Group1]= "English (India, with RupeeSign)";
+
+    include "us(basic)"
+
+    include "rupeesign(4)"
+
+    include "level3(ralt_switch)"
+};
+
+
+// Description : Enhanced INSCRIPT keymap for Malayalam
+// Encoding    : Unicode (http://www.unicode.org)
+// Author      : Mahesh T Pai <paivakil@gmail.com>
+// Date        : March, 2011
+// Source      : http://www.nongnu.org/smc/docs/images/ml_inscript_layout.jpg
+// Comment     : Based on the Inscript Keyboard created by M Baiju
+// Mapping:
+
+partial alphanumeric_keys 
+xkb_symbols "mal_enhanced" {
+
+    name[Group1] = "Malayalam (enhanced Inscript with Rupee Sign)";
+
+   //From grave to backslash (\)
+    
+      key <TLDE> { [ U0d4a ,       U0d12 ] };
+      key <AE01> { [ U0d67 ,      exclam ] };
+      key <AE02> { [ U0d68 ,          at ] };
+      key <AE03> { [ U0d69 ,  numbersign ] };
+      key <AE04> { [ U0d6a ,      dollar ] };
+      key <AE05> { [ U0d6b ,     percent ] };
+      key <AE06> { [ U0d6c , asciicircum ] };
+      key <AE07> { [ U0d6d ,   ampersand ] };
+      key <AE08> { [ U0d6e ,       U0d7e ] };
+      key <AE09> { [ U0d6f ,   parenleft ] };
+      key <AE10> { [ U0d66 ,  parenright ] };
+
+      key <AE11> { [ minus , U0d03       ] };
+      key <AE12> { [ U0d43 , U0d0b       ] };
+      key <BKSL> { [ U0d7c , U05C        ] }; //bksl: chillu RR 
+
+
+  // From 'q' to right bracket (])
+    
+    key <AD01> { [ U0d57 , U0d14 ] };
+    key <AD02> { [ U0d48 , U0d10 ] };
+    key <AD03> { [ U0d3e , U0d06 ] };
+    key <AD04> { [ U0d40 , U0d08 ] };
+    key <AD05> { [ U0d42 , U0d0a ] };
+    key <AD06> { [ U0d2c , U0d2d ] };
+    key <AD07> { [ U0d39 , U0d19 ] };
+    key <AD08> { [ U0d17 , U0d18 ] };
+    key <AD09> { [ U0d26 , U0d27 ] };
+    key <AD10> { [ U0d1c , U0d1d ] };
+    key <AD11> { [ U0d21 , U0d22 ] };
+    key <AD12> { [ U0200d , U0d1e ] };
+
+    // From 'a' to apostrophe (')
+    
+    key <AC01> { [ U0d4b , U0d13 ] };
+    key <AC02> { [ U0d47 , U0d0f ] };
+    key <AC03> { [ U0d4d , U0d05 ] };
+    key <AC04> { [ U0d3f , U0d07 ] };
+    key <AC05> { [ U0d41 , U0d09 ] };
+    key <AC06> { [ U0d2a , U0d2b ] };
+    key <AC07> { [ U0d30 , U0d31 ] };
+    key <AC08> { [ U0d15 , U0d16 ] };
+    key <AC09> { [ U0d24 , U0d25 ] };
+    key <AC10> { [ U0d1a , U0d1b ] };
+    key <AC11> { [ U0d1f , U0d20 ] };
+    
+    // From 'z' to slash (/)
+    
+    key <AB01> { [ U0d46 , U0d0e ] };
+    key <AB02> { [ U0d02 , U0d7a ] };
+    key <AB03> { [ U0d2e , U0d23 ] };
+    key <AB04> { [ U0d28 , U0d7b ] };
+    key <AB05> { [ U0d35 , U0d34 ] };
+    key <AB06> { [ U0d32 , U0d33 ] };
+    key <AB07> { [ U0d38 , U0d36 ] };
+    key <AB08> { [ comma , U0d37 ] };
+    key <AB09> { [ period , U0d7d ] }; //chillu l
+    key <AB10> { [ U0d2f , question ] };
+
+    // hope this includes the rupee sign at alt + 4
+
+    include "rupeesign(4)"
+    include "level3(ralt_switch)"
+
+};
+
diff --git a/data/symbols/inet b/data/symbols/inet
new file mode 100644
--- /dev/null
+++ b/data/symbols/inet
@@ -0,0 +1,1875 @@
+// EAK (Easy Access, Internet, Multimedia, PDA) keyboards
+// Copyright (C) 2002 Stanislav Brabec <sbrabec@suse.cz>
+//
+// Based on LinEAK project
+// LinEAK - Linux support for Easy Access and Internet Keyboards      
+// Copyright (C) 2001, 2002 Mark Smulders <Mark@PIRnet.nl>
+
+// Usage in XF86Config:
+// Option "XkbLayout"	"my_kb_layout"
+// Option "XkbVariant"	"my_kb_variant"
+// Option "XkbModel"	"my_eak_type"
+// Option "XkbRules"	"xfree86"
+// Simple command line usage:
+// setxkbmap 'my_kb_layout' -variant 'my_kb_variant' -model 'my_eak_type'
+
+// All keyboards listed here should be also mentioned in
+// rules/base, base.lst and base.xml.
+
+// Very common set of media keys
+partial hidden alphanumeric_keys
+xkb_symbols "media_common" {
+    key <I01>   {       [ XF86AudioMedia        ] }; 
+    key <I10>   {       [ XF86AudioPrev         ] };
+    key <I19>   {       [ XF86AudioNext         ] };
+    key <I20>   {       [ XF86AudioMute         ] };
+    key <I22>   {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I24>   {       [ XF86AudioStop, XF86Eject ] };
+    key <I2E>   {       [ XF86AudioLowerVolume  ] };	
+    key <I30>   {       [ XF86AudioRaiseVolume  ] };
+    key <K5A>   {       [ XF86Eject             ] };
+    key <K6C>   {       [ XF86Eject             ] };
+};
+
+// popular web navigation combination
+partial hidden alphanumeric_keys
+xkb_symbols "nav_common" {
+    key <I21>   {       [ XF86Calculator        ] }; 
+    key <I32>   {       [ XF86WWW               ] };
+    key <I65>   {       [ XF86Search            ] };
+    key <I66>   {       [ XF86Favorites         ] };
+    key <I67>   {       [ XF86Reload            ] };
+    key <I68>   {       [ XF86Stop              ] };
+    key <I69>   {       [ XF86Forward           ] };
+    key <I6A>   {       [ XF86Back              ] };
+    key <I6B>   {       [ XF86MyComputer        ] };
+    key <I6C>   {       [ XF86Mail              ] };
+    key <I6D>   {       [ XF86AudioMedia        ] }; 
+};
+
+// ACPI Standard
+partial hidden alphanumeric_keys
+xkb_symbols "acpi_common" {
+    key <I5E>	{	[ XF86PowerOff		]	};
+    key <I5F>	{	[ XF86Standby		]	};
+    key <I63>	{	[ XF86WakeUp		]	};
+    key <I74>	{	[ XF86Battery		]	};
+    key <I76>	{	[ XF86WLAN		]	};
+    key <I16>	{	[ XF86Sleep		]	};
+};
+
+// Combined sections, for simplicity
+partial hidden alphanumeric_keys
+xkb_symbols "media_nav_common" {
+    include "inet(media_common)"
+    include "inet(nav_common)"
+};
+
+partial hidden alphanumeric_keys
+xkb_symbols "media_nav_acpi_common" {
+    include "inet(media_common)"
+    include "inet(nav_common)"
+    include "inet(acpi_common)"
+};
+
+partial hidden alphanumeric_keys
+xkb_symbols "nav_acpi_common" {
+    include "inet(nav_common)"
+    include "inet(acpi_common)"
+};
+
+partial hidden alphanumeric_keys
+xkb_symbols "media_acpi_common" {
+    include "inet(media_common)"
+    include "inet(acpi_common)"
+};
+
+// Evdev Standardized Keycodes
+partial alphanumeric_keys
+xkb_symbols "evdev" {
+    key <MUTE>   {      [ XF86AudioMute         ]       };
+    key <VOL->   {      [ XF86AudioLowerVolume  ]       };
+    key <VOL+>   {      [ XF86AudioRaiseVolume  ]       };
+    key <POWR>   {      [ XF86PowerOff          ]       };
+    key <STOP>   {      [ Cancel                ]       };
+    key <AGAI>   {      [ Redo                  ]       };
+    key <PROP>   {      [ SunProps              ]       };
+    key <UNDO>   {      [ Undo                  ]       };
+    key <FRNT>   {      [ SunFront              ]       };
+    key <COPY>   {      [ XF86Copy              ]       };
+    key <OPEN>   {      [ XF86Open              ]       };
+    key <PAST>   {      [ XF86Paste             ]       };
+    key <FIND>   {      [ Find                  ]       };
+    key <CUT>    {      [ XF86Cut               ]       };
+    key <HELP>   {      [ Help                  ]       };
+    key <LNFD>   {      [ Linefeed              ]       };
+
+// Commented out because HZTG has same keycode as TLDE
+//    key <HZTG>   {      [ Zenkaku_Hankaku       ]       };
+
+    key <HKTG>   {      [ Hiragana_Katakana     ]       };
+    key <HENK>   {      [ Henkan                ]       };
+    key <MUHE>   {      [ Muhenkan              ]       };
+    key <KATA>   {      [ Katakana              ]       };
+    key <HIRA>   {      [ Hiragana              ]       };
+    key <RO>     {      [ Romaji                ]       };
+
+    key <HNGL>   {      [ Hangul                ]       };
+    key <HJCV>   {      [ Hangul_Hanja          ]       };
+    key <FK21>   {      [ XF86TouchpadToggle    ]       };
+    key <FK22>   {      [ XF86TouchpadOn        ]       };
+    key <FK23>   {      [ XF86TouchpadOff       ]       };
+
+    key <FK20>   {      [ XF86AudioMicMute      ]       };
+
+//  key <I120>   {      [ ]       }; // KEY_MACRO 
+    key <I126>   {      [ plusminus             ]       };
+    key <I128>   {      [ XF86LaunchA           ]       };
+    key <I147>   {      [ XF86MenuKB            ]       };
+    key <I148>   {      [ XF86Calculator        ]       };
+//  key <I149>   {      [ ]       }; // KEY_SETUP
+    key <I150>   {      [ XF86Sleep             ]       };
+    key <I151>   {      [ XF86WakeUp            ]       };
+    key <I152>   {      [ XF86Explorer          ]       };
+    key <I153>   {      [ XF86Send              ]       };
+//  key <I154>   {      [ ]       }; // KEY_DELETEFILE
+    key <I155>   {      [ XF86Xfer              ]       };
+    key <I156>   {      [ XF86Launch1           ]       };
+    key <I157>   {      [ XF86Launch2           ]       };
+    key <I158>   {      [ XF86WWW               ]       };
+    key <I159>   {      [ XF86DOS               ]       };
+    key <I160>   {      [ XF86ScreenSaver       ]       };
+//  key <I161>   {      [ ]       }; // KEY_DIRECTION
+    key <I162>   {      [ XF86RotateWindows     ]       };
+    key <I163>   {      [ XF86Mail              ]       };
+    key <I164>   {      [ XF86Favorites         ]       };
+    key <I165>   {      [ XF86MyComputer        ]       };
+    key <I166>   {      [ XF86Back              ]       };
+    key <I167>   {      [ XF86Forward           ]       };
+//  key <I168>   {      [ ]       }; // KEY_CLOSECD (opposite of eject)
+    key <I169>   {      [ XF86Eject             ]       };
+    key <I170>   {      [ XF86Eject, XF86Eject  ]       };
+    key <I171>   {      [ XF86AudioNext         ]       };
+    key <I172>   {      [ XF86AudioPlay, XF86AudioPause ] };
+    key <I173>   {      [ XF86AudioPrev         ]       };
+    key <I174>   {      [ XF86AudioStop, XF86Eject ]    };
+    key <I175>   {      [ XF86AudioRecord       ]       };
+    key <I176>   {      [ XF86AudioRewind       ]       };
+    key <I177>   {      [ XF86Phone             ]       };
+//  key <I178>   {      [ ]       }; // KEY_ISO
+    key <I179>   {      [ XF86Tools             ]       };
+    key <I180>   {      [ XF86HomePage          ]       };
+    key <I181>   {      [ XF86Reload           ]       };
+    key <I182>   {      [ XF86Close             ]       };
+//  key <I183>   {      [ ]       }; // KEY_MOVE
+//  key <I184>   {      [ ]       }; // KEY_EDIT
+    key <I185>   {      [ XF86ScrollUp          ]       };
+    key <I186>   {      [ XF86ScrollDown        ]       };
+    key <I187>   {      [ parenleft             ]       };
+    key <I188>   {      [ parenright            ]       };
+    key <I189>   {      [ XF86New               ]       };
+    key <I190>   {      [ Redo                  ]       };
+    key <I192>   {      [ XF86LaunchA           ]       };
+    key <I193>   {      [ XF86LaunchC           ]       };
+    key <I194>   {      [ XF86LaunchD           ]       };
+    key <I195>   {      [ XF86LaunchE           ]       };
+    key <I196>   {      [ XF86LaunchF           ]       };
+    key <I208>   {      [ XF86AudioPlay         ]       };
+    key <I209>   {      [ XF86AudioPause        ]       };
+    key <I210>   {      [ XF86Launch3           ]       };
+    key <I211>   {      [ XF86Launch4           ]       };
+    key <I212>   {      [ XF86LaunchB           ]       };
+    key <I213>   {      [ XF86Suspend           ]       };
+    key <I214>   {      [ XF86Close             ]       };
+    key <I215>   {      [ XF86AudioPlay         ]       };
+    key <I216>   {      [ XF86AudioForward      ]       };
+//  key <I217>   {      [ ]       }; // KEY_BASSBOOST
+    key <I218>   {      [ Print                 ]       };
+//  key <I219>   {      [ ]       }; // KEY_HP
+    key <I220>   {      [ XF86WebCam            ]       };
+//  key <I221>   {      [ ]       }; // KEY_SOUND
+//  key <I222>   {      [ ]       }; // KEY_QUESTION
+    key <I223>   {      [ XF86Mail              ]       };
+    key <I224>   {      [ XF86Messenger         ]       }; // KEY_CHAT
+    key <I225>   {      [ XF86Search            ]       };
+    key <I226>   {      [ XF86Go                ]       }; // KEY_CONNECT
+    key <I227>   {      [ XF86Finance           ]       };
+    key <I228>   {      [ XF86Game              ]       }; // KEY_SPORT
+    key <I229>   {      [ XF86Shop              ]       };
+//  key <I230>   {      [ ]       }; // KEY_ALTERASE
+    key <I231>   {      [ Cancel                ]       };
+    key <I232>   {      [ XF86MonBrightnessDown ]       };
+    key <I233>   {      [ XF86MonBrightnessUp   ]       };
+    key <I234>   {      [ XF86AudioMedia        ]       };
+    key <I235>   {      [ XF86Display           ]       };
+    key <I236>   {      [ XF86KbdLightOnOff     ]       }; // KEY_KBDILLUMTOGGLE
+    key <I237>   {      [ XF86KbdBrightnessDown ]       }; // KEY_KBDILLUMDOWN
+    key <I238>   {      [ XF86KbdBrightnessUp   ]       }; // KEY_KBDILLUMUP
+    key <I239>   {      [ XF86Send              ]       };
+    key <I240>   {      [ XF86Reply             ]       };
+    key <I241>   {      [ XF86MailForward       ]       };
+    key <I242>   {      [ XF86Save              ]       };
+    key <I243>   {      [ XF86Documents         ]       };
+    key <I244>   {      [ XF86Battery           ]       };
+    key <I245>   {      [ XF86Bluetooth         ]       };
+    key <I246>   {      [ XF86WLAN              ]       };
+//  key <I249>   {      [ ]       }; // KEY_VIDEO_NEXT  --  drive next video source
+//  key <I250>   {      [ ]       }; // KEY_VIDEO_PREV  --  drive previous video source
+//  key <I251>   {      [ ]       }; // KEY_BRIGHTNESS_CYCLE  --  bright up, max++ == min
+//  key <I252>   {      [ ]       }; // KEY_BRIGHTNESS_ZERO  --  brightness off
+//  key <I253>   {      [ ]       }; // KEY_DISPLAY_OFF  --  turn off display
+//  key <I254>   {      [ ]       }; // KEY_WIMAX
+    key <I255>   {      [ XF86Hibernate         ]       }; // KEY_HIBERNATE
+ 
+    key <FK13>   {      [ XF86Tools         ]       };
+    key <FK14>   {      [ XF86Launch5       ]       };
+    key <FK15>   {      [ XF86Launch6       ]       };
+    key <FK16>   {      [ XF86Launch7       ]       };
+    key <FK17>   {      [ XF86Launch8       ]       };
+    key <FK18>   {      [ XF86Launch9       ]       };
+};
+
+
+// Acer AirKey V
+partial alphanumeric_keys
+xkb_symbols "airkey" {
+    include "inet(acpi_common)"
+    key <I13>	{	[ XF86AudioNext		]	};
+    key <I15>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I16>	{	[ XF86Mail		]	};
+    key <I18>	{	[ XF86AudioPrev		]	};
+    key <I19>	{	[ XF86AudioMute		]	};
+    key <I24>	{	[ XF86WWW		]	};
+    key <I26>	{	[ XF86AudioLowerVolume	]	};
+    key <I2D>	{	[ XF86AudioRaiseVolume	]	};
+    key <I2F>	{	[ XF86Terminal		]	};
+    key <I31>	{	[ XF86AudioStop, XF86Eject ]	};
+};
+
+// Acer C300 Laptop
+partial alphanumeric_keys
+xkb_symbols "acer_c300" {
+    include "inet(nav_common)"
+    key <I17>   {       [ F14                   ]       };
+    key <I1F>   {       [ F13                   ]       };
+    key <I20>   {       [ XF86AudioMute         ]       };
+    key <I2E>   {       [ XF86AudioLowerVolume  ]       };
+    key <I30>   {       [ XF86AudioRaiseVolume  ]       };
+    key <I5E>   {       [ XF86Launch2           ]       };
+    key <I75>   {       [ Help                  ]       };
+    key <XFER>  {       [ XF86Launch1           ]       };
+};
+
+// Acer Ferrari 4000 Keyboard
+// From Alex Dubov <oakad@yahoo.com>
+partial alphanumeric_keys
+xkb_symbols "acer_ferrari4k" {
+    include "inet(media_nav_common)"
+    key <I24>   {       [ dollar                ]       };
+    key <I25>   {       [ EuroSign              ]       };
+    key <I26>   {       [ XF86Display           ]       };
+    // Missing keycodes - set-up with setkeycodes
+    key <I70>   {       [ Help                  ]       };
+    key <I71>   {       [ XF86Launch1           ]       };
+    key <I72>   {       [ XF86Launch2           ]       };
+    key <I73>   {       [ XF86Launch3           ]       };
+    key <I74>   {       [ XF86Launch4           ]       };
+};
+
+// Acer Laptop (Generic layout for Acer laptops from 2004 onwards)
+// From Carlos Corbacho <cathectic@gmail.com>
+// Keys marked (HAL) require HAL 0.5.10 (or newer) to be set up correctly
+// (Your laptop must also be added to hal-info)
+// (Not all these keys will be available on every Acer laptop)
+partial alphanumeric_keys
+xkb_symbols "acer_laptop" {
+    include "inet(media_nav_acpi_common)"
+    key <I17>   {       [ XF86Launch2           ]        }; // "P" or "P2" (HAL)
+    key <I1F>   {       [ XF86Launch1           ]        }; // "e" or "P1" (HAL)
+
+    // Hotkeys (Function)
+    // Launch Keys
+    // Device keys
+    key <I56>   {       [ XF86Display           ]        }; // Fn+F5 (HAL)
+    key <I71>   {       [ XF86Launch4           ]        }; // Fn+F3 (HAL)
+    key <I72>   {       [ XF86LaunchB           ]        }; // Bluetooth (HAL)
+    key <I73>   {       [ XF86LaunchA           ]        }; // Wireless (HAL)
+    key <I75>   {       [ Help                  ]        }; // Fn+F1 (HAL)
+    key <I79>   {       [ XF86Launch5           ]        }; // Fn+F7 (HAL)
+    key <K66>   {       [ XF86Launch3           ]        }; // Fn+F2 (HAL)
+
+    // Special Characters
+    // To avoid setting a precedent/ standard that will be broken in later
+    // versions of HAL, these keys are commented out for now. When they are no
+    // longer marked 'FIXME' and have saner keycodes, these two entries can be
+    // fixed and permanently uncommented. In the meantime, just uncomment these
+    // to make the keys work
+//  key <K5D>   {       [ EuroSign              ]        }; // Euro (HAL)
+//  key <K5E>   {       [ dollar                ]        }; // Dollar (HAL)
+};
+
+// Azona
+
+// Azona RF2300 wireless Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "azonaRF2300" {
+    // From Radics Laszlo <garaboncias@mailbox.hu>
+    include "inet(nav_acpi_common)"
+    key <I02>   {       [ XF86HomePage          ]       };
+    key <I17>   {       [ XF86AudioStop         ]       };
+    key <I1E>   {       [ XF86AudioRaiseVolume  ]       };
+    key <I1F>   {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>   {       [ XF86AudioNext         ]       };
+    key <I24>   {       [ XF86AudioPrev         ]       };
+    key <I25>   {       [ XF86AudioLowerVolume  ]       };
+    key <I26>   {       [ XF86AudioMute         ]       };
+    key <I3C>   {       [ XF86Copy              ]       };
+    key <I78>   {       [ XF86Cut               ]       };
+//  key <RCTL>  {       [ XF86Paste             ]       };
+};
+
+
+// Brother
+
+// Brother Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "brother" {
+    include "inet(acpi_common)"
+    key <I10>	{	[ XF86ScrollUp		]	};
+    key <I12>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I17>	{	[ XF86AudioPrev		]	};
+    key <I18>	{	[ XF86ScrollDown	]	};
+    key <I19>	{	[ XF86ZoomOut		]	};
+    key <I1E>	{	[ XF86AudioMute		]	};
+    key <I21>	{	[ XF86WWW		]	};
+    key <I22>	{	[ Menu			]	};
+    key <I23>	{	[ XF86AudioStop		]	};
+    key <I24>	{	[ XF86Calculator	]	};
+    key <I25>	{	[ XF86Xfer		]	};
+    key <I26>	{	[ XF86Mail		]	};
+    key <I2E>	{	[ XF86AudioNext		]	};
+    key <I30>	{	[ XF86AudioRaiseVolume	]	};
+    key <I32>	{	[ XF86ZoomIn		]	};
+    key <I68>	{	[ XF86AudioLowerVolume	]	};
+};
+
+
+// BTC
+
+// BTC 5113RF Multimedia
+partial alphanumeric_keys
+xkb_symbols "btc5113rf" {
+    include "inet(acpi_common)"
+    key <I10>	{	[ XF86AudioStop		]	};
+    key <I12>	{	[ XF86AudioMute		]	};
+    key <I19>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>	{	[ XF86AudioRaiseVolume	]	};
+    key <I20>	{	[ XF86Favorites		]	};
+    key <I21>	{	[ XF86Eject		]	};
+    key <I22>	{	[ XF86AudioPrev		]	};
+    key <I24>	{	[ XF86AudioNext		]	};
+    key <I25>	{	[ XF86AudioLowerVolume	]	};
+    key <I26>	{	[ XF86Back		]	};
+    key <I30>	{	[ XF86WWW		]	};
+    key <I32>	{	[ XF86Search		]	};
+};
+
+
+// BTC 9000
+partial alphanumeric_keys
+xkb_symbols "btc9000" {
+    include "inet(acpi_common)"
+    key <I10>	{	[ XF86AudioStop		]	};
+    key <I12>	{	[ XF86AudioMute		]	};
+    key <I19>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>	{	[ XF86AudioRaiseVolume	]	};
+    key <I20>	{	[ XF86Favorites		]	};
+    key <I21>	{	[ XF86AudioMedia	]	};
+    key <I22>	{	[ XF86AudioPrev		]	};
+    key <I24>	{	[ XF86AudioNext		]	};
+    key <I25>	{	[ XF86AudioLowerVolume	]	};
+    key <I26>	{	[ XF86Reload		]	};
+    key <I2E>	{	[ XF86Mail		]	};
+    key <I30>	{	[ XF86HomePage		]	};
+    key <I32>	{	[ XF86Search		]	};
+};
+
+// BTC 9000A
+partial alphanumeric_keys
+xkb_symbols "btc9000a" {
+    include "inet(acpi_common)"
+    key <I10>	{	[ XF86AudioStop		]	};
+    key <I12>	{	[ XF86AudioMute		]	};
+    key <I19>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>	{	[ XF86AudioRaiseVolume	]	};
+    key <I20>	{	[ XF86Favorites		]	};
+    key <I21>	{	[ XF86Eject		]	};
+    key <I22>	{	[ XF86AudioPrev		]	};
+    key <I24>	{	[ XF86AudioNext		]	};
+    key <I25>	{	[ XF86AudioLowerVolume	]	};
+    key <I26>	{	[ XF86HomePage		]	};
+    key <I2E>	{	[ Help			]	};
+    key <I30>	{	[ XF86WWW		]	};
+    key <I32>	{	[ XF86Search		]	};
+};
+
+// BTC 9001AH
+xkb_symbols "btc9001ah" {
+    include "inet(acpi_common)"
+    key <I02>   {       [ XF86HomePage          ]       };
+    key <I17>   {       [ XF86AudioStop         ]       };
+    key <I1E>   {       [ XF86AudioRaiseVolume  ]       };
+    key <I1F>   {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>   {       [ XF86AudioNext         ]       };
+    key <I24>   {       [ XF86AudioPrev         ]       };
+    key <I25>   {       [ XF86AudioLowerVolume  ]       };
+    key <I26>   {       [ XF86AudioMute         ]       };
+    key <I6C>   {       [ XF86Mail              ]       };
+    key <RWIN>  {       [ XF86Eject             ]       };
+};
+
+// BTC 5090
+partial alphanumeric_keys
+xkb_symbols "btc5090" {
+    include "inet(media_nav_acpi_common)"
+    key <I26>   {       [ XF86Start             ]       };
+    key <I33>   {       [ XF86Eject             ]       };
+};
+
+// BTC 9019U
+partial alphanumeric_keys
+xkb_symbols "btc9019u" {
+    include "inet(media_nav_acpi_common)"
+    key <FK17> {	[ XF86Search		]	};
+    key <I02>  {	[ XF86HomePage		]	};
+};
+
+// Cherry Blue Line
+
+// Cherry Blue Line CyBo@rd
+partial alphanumeric_keys
+xkb_symbols "cherryblue" {
+    include "inet(nav_common)"
+    key <FK16>	{	[ XF86Reload		]	};
+    key <I02>	{	[ XF86HomePage		]	};
+    key <I17>	{	[ XF86AudioStop		]	};
+    key <I1E>	{	[ XF86AudioRaiseVolume	]	};
+    key <I1F>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>	{	[ XF86AudioNext		]	};
+    key <I24>	{	[ XF86AudioPrev		]	};
+    key <I25>	{	[ XF86AudioLowerVolume	]	};
+    key <I26>	{	[ XF86AudioMute		]	};
+    key <I63>	{	[ XF86Standby		]	};
+    key <PRSC>	{	[ XF86Terminal		]	};
+    key <XFER>	{	[ XF86Go		]	};
+};
+
+// Cherry CyMotion Master XPress
+partial alphanumeric_keys
+xkb_symbols "cherryblueb" {
+    include "inet(media_nav_common)"
+    key <FK16>  {       [ XF86Reload            ]       };
+    key <I02>   {       [ XF86HomePage          ]       };
+    key <I07>   {       [ XF86Forward           ]       };
+    key <I08>   {       [ XF86Back              ]       };
+    key <I0A>   {       [ XF86Copy              ]       };
+    key <I0B>	{	[ XF86ScrollUp		]	};
+    key <I12>   {       [ XF86ScrollDown        ]       };
+    key <I17>   {       [ XF86Cut               ]       };
+    key <I18>   {       [ XF86Paste             ]       };
+    key <I1E>   {       [ XF86AudioRaiseVolume  ]       };
+    key <I25>   {       [ XF86AudioLowerVolume  ]       };
+    key <I26>   {       [ XF86AudioMute         ]       };
+    key <I2C>   {       [ XF86Book              ]       };
+    key <I32>   {       [ XF86Finance           ]       };
+    key <I63>   {       [ XF86Standby                   ] };
+    key <I67>   {       [ XF86AudioRewind       ]       };
+    key <I70>   {       [ XF86Eject             ]       };
+    key <I71>   {       [ XF86Book              ]       };
+    key <I72>   {       [ XF86Book              ]       };
+    key <PRSC>  {       [ XF86Terminal          ]       };
+    key <XFER>  {       [ XF86Go                ]       };
+};
+
+// Cherry Blue Line CyBo@rd (alternate option)
+partial alphanumeric_keys
+xkb_symbols "cherrybluea" {
+    include "inet(media_nav_acpi_common)"
+    key <I6D>	{	[ XF86Go		]	};
+};
+
+// Cherry CyBo@rd USB-Hub
+partial alphanumeric_keys
+xkb_symbols "cherrycyboard" {
+    include "inet(media_nav_acpi_common)"
+    key <FK17>    {   [ XF86Search        ]   };
+    key <I02> {   [ XF86HomePage      ]   };
+    key <K67> {   [ XF86Terminal      ]   };
+    key <XFER>    {   [ XF86AudioMedia    ]   };
+};
+
+// Cherry CyMotion Expert
+partial alphanumeric_keys 
+xkb_symbols "cherrycmexpert" {
+    include "inet(cherryblueb)"
+    include "inet(acpi_common)"
+    key <FK15>	{	[ XF86Mail		]	};
+};
+
+
+// Chicony
+
+// Chicony Internet Keyboard
+partial alphanumeric_keys 
+xkb_symbols "chicony" {
+    include "inet(acpi_common)"
+    key <I12>	{	[ XF86AudioMute		]	};
+    key <I17>	{	[ XF86Mail		]	};
+    key <I19>	{	[ XF86AudioLowerVolume	]	};
+    key <I1E>	{	[ XF86Forward		]	};
+    key <I20>	{	[ XF86AudioNext		]	};
+    key <I21>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>	{	[ XF86AudioPrev		]	};
+    key <I23>	{	[ XF86AudioRaiseVolume	]	};
+    key <I24>	{	[ XF86AudioStop		]	};
+    key <I25>	{	[ XF86Back		]	};
+    key <I26>	{	[ XF86LaunchB		]	};
+    key <I2E>	{	[ XF86LaunchC		]	};
+    key <I30>	{	[ XF86LaunchA		]	};
+    key <I32>	{	[ XF86WWW		]	};
+    key <I5F>	{	[ XF86ContrastAdjust	]	};
+    key <I63>	{	[ XF86BrightnessAdjust	]	};
+};
+
+// Chicony KU-0108
+partial alphanumeric_keys 
+xkb_symbols "chicony0108" {
+    include "inet(cherrycyboard)"
+};
+
+// Chicony KU-0420 AKA Targus Slim Internet Media USB Keyboard
+partial alphanumeric_keys
+xkb_symbols "chicony0420" {
+    include "inet(media_nav_acpi_common)"
+    key <I01>   {       [ XF86AudioMedia        ]       };
+    key <K67>   {       [ XF86MyComputer        ]       };
+};
+
+// Chicony KB-9885
+partial alphanumeric_keys
+xkb_symbols "chicony9885" {
+    include "inet(acpi_common)"
+    key <I12>	{	[ XF86AudioMute		]	};
+    key <I17>	{	[ XF86Mail		]	};
+    key <I19>	{	[ XF86AudioLowerVolume	]	};
+    key <I1E>	{	[ XF86Forward		]	};
+    key <I20>	{	[ XF86AudioNext		]	};
+    key <I21>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>	{	[ XF86AudioPrev		]	};
+    key <I23>	{	[ XF86AudioRaiseVolume	]	};
+    key <I24>	{	[ XF86AudioStop		]	};
+    key <I25>	{	[ XF86Back		]	};
+    key <I26>	{	[ XF86LaunchB		]	};
+    key <I2E>	{	[ XF86LaunchC		]	};
+    key <I30>	{	[ XF86LaunchA		]	};
+    key <I32>	{	[ XF86WWW		]	};
+};
+
+
+// Compaq
+
+// Compaq Easy Access Keyboard
+partial alphanumeric_keys
+xkb_symbols "compaqeak8" {
+    key <I13>	{	[ XF86Community		]	};
+    key <I14>	{	[ XF86Market		]	};
+    key <I15>	{	[ XF86Meeting		]	};
+    key <I1A>	{	[ XF86Search		]	};
+    key <I1B>	{	[ XF86News		]	};
+    key <I1E>	{	[ XF86Mail		]	};
+    key <I1F>	{	[ XF86HomePage		]	};
+    key <I23>	{	[ XF86WWW		]	};
+};
+
+// Compaq Internet Keyboard (7 keys)
+partial alphanumeric_keys 
+xkb_symbols "compaqik7" {
+    key <I12>	{	[ XF86LightBulb		]	};
+    key <I1E>	{	[ XF86Mail		]	};
+    key <I21>	{	[ XF86Search		]	};
+    key <I23>	{	[ Help			]	};
+    key <I25>	{	[ XF86VendorHome	]	};
+    key <I26>	{	[ XF86HomePage		]	};
+    key <I32>	{	[ XF86Shop		]	};
+};
+
+// Compaq Internet Keyboard (13 keys)
+partial alphanumeric_keys
+xkb_symbols "compaqik13" {
+    include "inet(media_acpi_common)"
+    key <I1E>	{	[ XF86Mail		]	};
+    key <I1F>	{	[ XF86Go		]	};
+    key <I21>	{	[ XF86Search		]	};
+    key <I23>	{	[ XF86WWW		]	};
+    key <I32>	{	[ XF86Shop		]	};
+};
+
+// Compaq Internet Keyboard (18 keys)
+partial alphanumeric_keys
+xkb_symbols "compaqik18" {
+    include "inet(media_acpi_common)"
+    key <I12>	{	[ XF86LightBulb		]	};
+    key <I18>	{	[ XF86Eject		]	};
+    key <I1E>	{	[ XF86Mail		]	};
+    key <I1F>	{	[ XF86Go		]	};
+    key <I21>	{	[ XF86Search		]	};
+    key <I23>	{	[ XF86WWW		]	};
+    key <I25>	{	[ XF86VendorHome	]	};
+    key <I26>	{	[ XF86Community		]	};
+    key <I32>	{	[ XF86Shop		]	};
+    key <I68>	{	[ Print			]	};
+};
+
+
+// Laptop/notebook Compaq (eg. Armada, Evo) Laptop Keyboard
+partial alphanumeric_keys
+xkb_symbols "armada" {
+    include "inet(media_acpi_common)"
+    key <I1A>	{	[ XF86Search		]	};
+    key <I1E>	{	[ XF86Mail		]	};
+    key <I1F>	{	[ XF86HomePage		]	};
+    key <I23>	{	[ XF86WWW		]	};
+    key <I59>   {       [ XF86Launch2           ]       }; // Battery Monitor 
+    key <I6F>	{	[ XF86AudioMedia	]	};
+    key <I75>   {       [ XF86Launch0           ]       }; // Info Center 
+};
+
+// Laptop/notebook Compaq (eg. Presario) Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "presario" {
+    include "inet(media_acpi_common)"
+    key <I14>	{	[ XF86Q			]	};
+    key <I18>	{	[ XF86Launch2		]	};
+    key <I1E>	{	[ XF86Mail		]	};
+    key <I1F>	{	[ XF86Launch1		]	};
+    key <I23>	{	[ XF86WWW		]	};
+    key <I32>	{	[ XF86Shop		]	};
+    key <I75>	{	[ XF86AudioMedia	]	};
+};
+
+// Compaq iPaq Keyboard
+partial alphanumeric_keys
+xkb_symbols "ipaq" {
+    key <FK16>	{	[ XF86Shop		]	};
+    key <I02>	{	[ XF86Standby		]	};
+    key <I65>	{	[ XF86Search		]	};
+    key <I66>	{	[ XF86Travel		]	};
+    key <I69>	{	[ XF86BackForward	]	};
+    key <I6A>	{	[ XF86Q			]	};
+    key <I6C>	{	[ XF86Mail		]	};
+};
+
+
+// Dell
+
+partial alphanumeric_keys
+xkb_symbols "dell" {
+    include "inet(acpi_common)"
+    key <I12>	{	[ XF86Mail		]	};
+    key <I1E>	{	[ XF86Search		]	};
+    key <I26>	{	[ XF86HomePage		]	};
+};
+
+// Dell Precision M65
+partial alphanumeric_keys
+xkb_symbols "dellm65" {
+    include "inet(media_common)"
+    key <I04>   {       [ XF86PowerOff          ]       };
+    key <LWIN>  {       [ Super_L               ]       };
+};
+
+// Laptop/notebook Dell Inspiron 8xxx
+partial alphanumeric_keys
+xkb_symbols "inspiron" {
+    include "inet(media_common)"
+    key <I02>   {       [ XF86AudioStop         ]       };
+    key <I04>   {       [ XF86AudioNext         ]       };
+    key <I21>   {       [ XF86Eject             ]       };
+    key <I56>   {       [ XF86Display           ]       };
+    key <NFER>  {       [ XF86AudioPrev         ]       };
+    key <XFER>  {       [ XF86AudioPlay, XF86AudioPause ] };
+};
+
+// DELL USB Multimedia Keyboard (former 8135, generalized, superset of 8125)
+partial alphanumeric_keys
+xkb_symbols "dellusbmm" {
+    // Describes the extra keys on a SK-8135 Multimedia keyboard
+    // From Olivier Lahaye <olivier dot lahaye at motorola dot com>
+    include "inet(media_nav_acpi_common)"
+    key <I02>	{	[ XF86HomePage		]	};
+    key <K67>	{	[ XF86MyComputer	]	}; 
+    key <XFER>	{	[ XF86AudioMedia	]	};  
+};
+
+
+// Diamond
+
+// Diamond 9801 / 9802 series
+partial alphanumeric_keys
+xkb_symbols "diamond" {
+    include "inet(media_nav_acpi_common)"
+    key <I6D>	{	[ XF86Go		]	};
+};
+
+
+// Ennyah
+
+// Ennyah DKB-1008
+partial alphanumeric_keys
+xkb_symbols "ennyah_dkb1008" {
+    include "inet(media_nav_acpi_common)"
+    key <XFER>  {	[ XF86AudioMedia	]	};
+};
+
+
+// Genius
+
+// Genius Comfy KB-16M / Genius MM Keyboard KWD-910
+partial alphanumeric_keys
+xkb_symbols "genius" {
+    include "inet(media_acpi_common)"
+    key <I12>   {	[ XF86AudioRaiseVolume	]	};
+    key <I17>   {	[ XF86Calculator	]	};
+    key <I19>   {	[ XF86AudioLowerVolume	]	};
+    key <I1E>   {	[ XF86Forward		]	};
+    key <I21>   {	[ XF86AudioNext		]	};
+    key <I23>	{	[ XF86AudioPrev		]	};
+    key <I25>   {	[ XF86Back		]	};
+    key <I26>   {	[ XF86ScreenSaver	]	};
+    key <I2E>   {	[ XF86Mail		]	};
+    key <I30>   {	[ XF86Eject		]	};
+    key <I32>   {	[ XF86WWW		]	};
+};
+
+
+// GeniusComfy21e
+partial alphanumeric_keys
+xkb_symbols "geniuscomfy2" {
+    // Describes the extra keys on a Genius Comfy KB-21e-Scroll
+    // From Radics Laszlo <garaboncias@mailbox.hu>
+    include "inet(media_nav_acpi_common)"
+    key <I23>   {       [ Return                ]       };
+};
+
+// Gyration
+
+partial alphanumeric_keys
+xkb_symbols "gyration" {
+    include "inet(nav_common)"
+    key <FK16>	{	[ XF86Reload		]	};
+    key <I02>	{	[ XF86HomePage		]	};
+    key <I17>	{	[ XF86AudioStop		]	};
+    key <I1E>	{	[ XF86AudioRaiseVolume	]	};
+    key <I1F>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>	{	[ XF86AudioNext		]	};
+    key <I24>	{	[ XF86AudioPrev		]	};
+    key <I25>	{	[ XF86AudioLowerVolume	]	};
+    key <I26>	{	[ XF86AudioMute		]	};
+};
+
+
+// Hewlett-Packard
+
+// Hewlett-Packard Internet Keyboard
+partial alphanumeric_keys 
+xkb_symbols "hpi6" {
+    include "inet(media_nav_acpi_common)"
+    key <I02>   {       [ XF86HomePage          ]       };
+    key <I12>	{	[ XF86Search		]	};
+    key <I14>	{	[ XF86VendorHome	]	};
+    key <I15>	{	[ XF86Community		]	};
+    key <I16>	{	[ XF86AudioMedia	]	};
+    key <I18>	{	[ XF86Eject		]	};
+    key <I1E>	{	[ XF86Shop		]	};
+    key <I1F>	{	[ XF86Launch1		]	};
+    key <I26>	{	[ Help			]	};
+    key <I27>	{	[ XF86Finance		]	};
+    key <I39>	{	[ Print			]	};
+    key <I75>   {       [ Help                  ]       };
+};
+
+// Hewlett-Packard SK-2501, SK-2505 Multimedia Keyboard
+partial alphanumeric_keys
+xkb_symbols "hp250x" {
+    key <I12>	{	[ XF86Tools		]	};
+    key <I17>	{	[ XF86Search		]	};
+    key <I18>	{	[ XF86Eject		]	};
+    key <I1E>	{	[ XF86Mail		]	};
+    key <I20>	{	[ XF86AudioMute		]	};
+    key <I21>	{	[ XF86Launch5		]	};
+    key <I22>	{	[ XF86Launch3		]	};
+    key <I23>	{	[ XF86Launch2		]	};
+    key <I24>	{	[ XF86Launch4		]	};
+    key <I25>	{	[ XF86Standby		]	};
+    key <I26>	{	[ Help			]	};
+    key <I2E>	{	[ XF86AudioLowerVolume	]	};
+    key <I30>	{	[ XF86AudioRaiseVolume	]	};
+    key <I32>	{	[ XF86WWW		]	};
+};
+
+// Hewlett-Packard Omnibook XE3 GC, GD, GE and Pavilion N5xxx
+partial alphanumeric_keys
+xkb_symbols "hpxe3gc" {
+    // Describes the OneTouch buttons on HP Omnibook XE3 GC and
+    // HP Pavilion N52XX models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_common)"
+    key <I71>	{	[ Help			]	};
+    key <I72>	{	[ XF86Launch1		]	};
+    key <I73>	{	[ XF86WWW		]	};
+    key <I74>	{	[ XF86Mail		]	};
+};
+
+// Hewlett-Packard Omnibook XE3 GF
+partial alphanumeric_keys
+xkb_symbols "hpxe3gf" {
+    // Describes the OneTouch buttons on HP Omnibook XE3 GF models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_nav_common)"
+    key <I73>	{	[ Help			]	};
+    key <I74>	{	[ XF86Launch1		]	};
+};
+
+// Hewlett-Packard Omnibook XT1000
+partial alphanumeric_keys
+xkb_symbols "hpxt1000" {
+    // Describes the OneTouch buttons on HP Omnibook XT1000 models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_nav_common)"
+    key <I71>	{	[ XF86Launch3		]	};
+    key <I72>	{	[ Help			]	};
+    key <I73>	{	[ XF86Launch2		]	};
+    key <I74>	{	[ XF86Launch1		]	};
+};
+
+// Hewlett-Packard Pavilion ZT11xx
+partial alphanumeric_keys
+xkb_symbols "hpzt11xx" {
+    // Describes the OneTouch buttons on HP Pavilion ZT11xx models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_nav_common)"
+    key <I71>	{	[ XF86Launch3		]	};
+    key <I72>	{	[ Help			]	};
+    key <I73>	{	[ XF86Launch2		]	};
+    key <I74>	{	[ XF86Launch1		]	};
+};
+
+// Hewlett-Packard Pavilion dv5
+partial alphanumeric_keys
+xkb_symbols "hpdv5" {
+    // Describes the OneTouch buttons on HP Pavilion dv5 models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_common)"
+    key <I12>  {       [ XF86ScreenSaver       ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+    key <I75>  {       [ Help                  ]       };
+    key <K6D>  {       [ XF86Launch1           ]       };
+};
+
+// Hewlett-Packard Omnibook XE4xxx and ZE4xxx
+partial alphanumeric_keys
+xkb_symbols "hpxe4xxx" {
+    // Describes the OneTouch buttons on HP Omnibook XE4xxx and ZE4xxx
+    // models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_nav_common)"
+    key <I70>	{	[ Help			]	};
+    key <I71>	{	[ XF86Launch2		]	};
+    key <I73>	{	[ XF86Launch1		]	};
+};
+
+// Hewlett-Packard Omnibook 500 FA
+partial alphanumeric_keys
+xkb_symbols "hp500fa" {
+    // Describes the OneTouch buttons on HP Omnibook 500 FA models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    key <I73>	{	[ Help			]	};
+    key <I74>	{	[ XF86Launch1		]	};
+};
+
+// Hewlett-Packard Omnibook 5xx
+partial alphanumeric_keys
+xkb_symbols "hp5xx" {
+    // Describes the OneTouch buttons on HP Omnibook 5xx models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_common)"
+    key <I73>	{	[ Help			]	};
+    key <I74>	{	[ XF86Launch1		]	};
+};
+
+
+// Honeywell
+
+// Honeywell Euroboard
+partial alphanumeric_keys
+xkb_symbols "honeywell_euroboard" {
+    // January 2002
+    // Scott Penrose <scottp@dd.com.au>
+    // http://linux.dd.com.au/quest/linux/keyboard/honeywell/
+    key <I10>	{	[ XF86Game		]	};
+    key <I12>	{	[ XF86AudioPrev		]	};
+    key <I17>	{	[ XF86Eject		]	};
+    key <I18>	{	[ XF86Launch2		]	};
+    key <I19>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>	{	[ XF86Launch1		]	};
+    key <I20>	{	[ XF86AudioMute		]	};
+    key <I22>	{	[ XF86AudioNext		]	};
+    key <I23>	{	[ XF86AudioStop		]	};
+    key <I24>	{	[ XF86Mail		]	};
+    key <I25>	{	[ XF86ScreenSaver	]	};
+    key <I26>	{	[ XF86Calculator	]	};
+    key <I2E>	{	[ XF86AudioLowerVolume	]	};
+    key <I30>	{	[ XF86AudioRaiseVolume	]	};
+    key <I32>	{	[ XF86WWW		]	};
+};
+
+
+// IBM
+
+
+// IBM Rapid Access
+partial alphanumeric_keys 
+xkb_symbols "rapidaccess" {
+    key <I12>	{	[ XF86AudioMute		]	};
+    key <I17>	{	[ XF86Launch2		]	};
+    key <I1E>	{	[ XF86AudioLowerVolume	]	};
+    key <I20>	{	[ XF86AudioRaiseVolume	]	};
+    key <I21>	{	[ XF86AudioNext		]	};
+    key <I22>	{	[ XF86AudioPause	]	};
+    key <I22>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I23>	{	[ XF86AudioPrev		]	};
+    key <I24>	{	[ XF86AudioStop		]	};
+    key <I25>	{	[ XF86Standby		]	};
+    key <I26>	{	[ Help			]	};
+    key <I2E>	{	[ XF86Launch4		]	};
+    key <I30>	{	[ XF86Launch3		]	};
+    key <I32>	{	[ XF86Launch1		]	};
+};
+
+// IBM Rapid Access II
+partial alphanumeric_keys 
+xkb_symbols "rapidaccess2" {
+    include "inet(acpi_common)"
+    key <I12>	{	[ XF86AudioNext		]	};
+    key <I17>	{	[ XF86Favorites		]	};
+    key <I1E>	{	[ XF86AudioMute		]	};
+    key <I20>	{	[ XF86AudioStop		]	};
+    key <I21>	{	[ XF86AudioLowerVolume	]	};
+    key <I22>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I23>	{	[ XF86AudioRaiseVolume	]	};
+    key <I24>	{	[ XF86AudioPrev		]	};
+    key <I25>	{	[ XF86HomePage		]	};
+    key <I26>	{	[ XF86Shop		]	};
+    key <I2E>	{	[ XF86Search		]	};
+    key <I30>	{	[ XF86MyComputer	]	};
+    key <I32>	{	[ XF86VendorHome	]	};
+};
+
+// IBM ThinkPad 60 series
+partial alphanumeric_keys
+xkb_symbols "thinkpad60" {
+    include "inet(media_nav_common)"
+    key <I1F> { [ XF86VendorHome ] };
+};
+
+// IBM Space Saver
+partial alphanumeric_keys
+xkb_symbols "ibm_spacesaver" {
+    key <NMLK>  {
+        type="ONE_LEVEL",
+        symbols[Group1]= [ Num_Lock ]
+    };
+};
+
+// Logitech
+
+// Logitech common definitions
+partial hidden alphanumeric_keys
+xkb_symbols "logitech_base" {
+    include "inet(media_nav_acpi_common)"
+    key <I02> { [ XF86HomePage ] };
+    key <I15> { [ XF86Community ] };
+    key <I16> { [ XF86ScrollClick ] };
+    key <I21> {	[ XF86VendorHome ] };
+    key <I3B> { [ XF86New ] };
+    key <I3C> { [ XF86Reply ] };
+    key <I43> { [ XF86MyComputer ] };
+    key <I44> { [ XF86Documents ] };
+    key <I57> { [ XF86Pictures ] };
+    key <I58> { [ XF86Music ] };
+};
+
+// Logitech second set of common keys
+partial hidden alphanumeric_keys
+xkb_symbols "logitech_set3" {
+    key <I17>	{	[ XF86AudioStop		]	};
+    key <I1E>	{	[ XF86AudioRaiseVolume	]	};
+    key <I1F>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>	{	[ XF86AudioNext		]	};
+    key <I24>	{	[ XF86AudioPrev		]	};
+    key <I25>	{	[ XF86AudioLowerVolume	]	};
+    key <I26>	{	[ XF86AudioMute		]	};
+    key <I44>   {       [ XF86New               ]       };      // F1
+    key <I45>   {       [ XF86Reply             ]       };      // F2
+    key <I4A>   {       [ XF86Send              ]       };      // F4
+    key <I54>   {       [ Print                 ]       };      // F7
+    key <I55>   {       [ XF86Save              ]       };      // F8
+    key <I56>   {       [ XF86Documents         ]       };      // F10
+    key <I69>   {       [ XF86Go                ]       };
+    key <XFER>  {       [ XF86AudioMedia        ]       };
+};
+
+// Logitech Access Keyboard
+partial alphanumeric_keys
+xkb_symbols "logiaccess" {
+    include "inet(logitech_base)"
+    key <FK13>	{	[ XF86MailForward	]	}; 
+    key <FK14>	{	[ XF86Send		]	}; 
+    key <I11>	{	[ XF86Messenger		]	};
+    key <I12>	{	[ XF86WebCam		]	};
+};
+
+// Logitech Cordless Desktop (alternate option)
+partial alphanumeric_keys
+xkb_symbols "logicda" {
+    include "inet(logitech_base)"
+    include "inet(logitech_set3)"
+};
+
+// Logitech Internet Navigator Keyboard
+partial alphanumeric_keys
+xkb_symbols "logicink" {
+    include "inet(logitech_base)"
+    key <I11>	{	[ XF86Shop		]	};
+    key <I12>	{	[ XF86VendorHome	]	};
+    key <I13>	{	[ XF86Finance		]	};
+    key <I14>	{	[ XF86Start		]	};
+};
+
+// Logitech Cordless Desktop EX110
+partial alphanumeric_keys
+xkb_symbols "logiex110" {
+    include "inet(logitech_base)"
+    key <I2F>   {       [ XF86Close             ]       };      // Close
+
+// Extended function keys
+// In the Console before starting X
+// Using setkeycodes e03b 212 e03c 213 e03d 214 e03e 215 e03f 216 e040 217 
+//       setkeycodes e041 218 e042 219 e043 220 e044 221 e057 222 e058 223 6d 206
+// *=keys that are there but need different symbol names.
+    key <I3B>   {       [ Help                  ]       };      // F1
+    key <FK13>  {       [ XF86Word              ]       };      // F2
+    key <FK14>  {       [ XF86Excel             ]       };      // F3
+    key <FK15>  {       [ XF86Pictures          ]       };      // F4
+    key <FK16>  {       [ Undo                  ]       };      // F5
+    key <I65>   {       [ Redo                  ]       };      // F6 *
+    key <I42>   {       [ Print                 ]       };      // F7
+    key <I43>   {       [ XF86Save              ]       };      // F8
+    key <I44>   {       [ XF86Launch1           ]       };      // F9 *
+    key <I45>   {       [ XF86Launch2           ]       };      // F10
+    key <I14>   {       [ XF86Launch3           ]       };      // F11
+    key <I4A>   {       [ XF86Launch4           ]       };      // F12
+};
+
+// Logitech iTouch Internet Navigator Keyboard SE
+partial alphanumeric_keys
+xkb_symbols "logiinkse" {
+    include "inet(logitech_base)"
+    key <FK13>	{	[ XF86MailForward	]	};	// F3
+    key <FK14>	{	[ XF86Send		]	};	// F4
+    key <FK15>	{	[ Undo			]	};	// F5
+    key <FK16>	{	[ Redo			]	};	// F6
+    key <FK17>	{	[ Print			]	};	// F7
+    key <I11>	{	[ XF86Messenger		]	};
+    key <I12>	{	[ XF86WebCam		]	};
+    key <I13>	{	[ XF86VendorHome	]	};
+    key <I14>	{	[ XF86Shop		]	};
+    key <I42>	{	[ XF86Save		]	};	// F8
+};
+
+// Logitech iTouch Internet Navigator Keyboard SE (USB)
+partial alphanumeric_keys
+xkb_symbols "logiinkseusb" {
+    include "inet(logitech_base)"
+    include "inet(logitech_set3)"
+};
+
+// Logitech iTouch Cordless Keyboard (model Y-RB6)
+partial alphanumeric_keys
+xkb_symbols "logiitc" {
+    include "inet(logitech_base)"
+    key <I2F> {	[ XF86AudioRaiseVolume ] };
+
+    // Just to override RaiseVolume from logitech_base,
+    // since no keysym can have two keycodes, see
+    // https://bugs.freedesktop.org/show_bug.cgi?id=7095
+    key <I30> {	[ XF86Launch1 ] };
+};
+
+// Logitech Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "logiik" {
+    include "inet(logitech_base)"
+    key <I12>	{	[ Find			]	};
+    key <I17>	{	[ Print			]	};
+    key <I18>	{	[ XF86Favorites		]	};
+    key <I19>	{	[ XF86Reload		]	};
+    key <I1E>	{	[ XF86Search		]	};
+    key <I20>	{	[ XF86HotLinks		]	};
+    key <I22>	{	[ XF86Forward		]	};
+    key <I23>	{	[ XF86HomePage		]	};
+    key <I24>	{	[ XF86Stop		]	};
+    key <I25>	{	[ XF86OpenURL		]	};
+    key <I26>	{	[ XF86AddFavorite	]	};
+    key <I32>	{	[ XF86History		]	};
+    key <I7A>	{	[ XF86WWW		]	};
+};
+
+// Logitech iTouch
+partial alphanumeric_keys
+xkb_symbols "itouch" {
+    include "inet(logitech_base)"
+    key <I1F>	{	[ XF86AudioMute		]	};
+    key <I2B>	{	[ XF86AudioLowerVolume	]	};
+    key <I2D>	{	[ XF86AudioRaiseVolume	]	};
+};
+
+// Logitech UltraX Cordless Media Desktop
+partial alphanumeric_keys
+xkb_symbols "logiultraxc" {
+    key <FK16>  {       [ XF86AudioMute ]       };
+    key <FK17>  {       [ XF86AudioLowerVolume  ]       };
+    key <I2B>   {       [ XF86AudioNext ]       };
+    key <I2D>   {       [ XF86AudioPrev ]       };
+    key <I2C>   {       [ XF86AudioPlay, XF86AudioPause ]       };
+    key <KPDC>  {       [ XF86AudioRaiseVolume  ]       };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "logidinovo" {
+    include "inet(media_nav_common)"
+    key <I02>	{	[ XF86HomePage		]	};
+    key <I12>	{	[ XF86Standby		]	};
+    key <I17>	{	[ XF86Search		]	};
+    key <I21>	{	[ XF86AudioRaiseVolume	]	};
+    key <K66>	{	[ XF86AudioLowerVolume	]	};
+    key <KPDC>	{	[ XF86AudioMute		]	};
+    key <XFER>	{	[ XF86AudioMedia	]	};
+};
+
+partial alphanumeric_keys 
+xkb_symbols "logidinovoedge" {
+    include "inet(media_acpi_common)"
+    key <I02>	{	[ XF86HomePage		]	};
+    key <I6C>	{	[ XF86Mail		]	};
+    key <FK17>  {       [ XF86Search            ]       };
+    key <XFER>	{	[ XF86AudioMedia	]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "logitech_g15" {
+    include "inet(media_nav_acpi_common)"
+    key <AE13> {         [   XF86Messenger ] };
+    key <HKTG> {         [     XF86Launch7 ] };
+    key  <I02> {         [     XF86Launch9 ] };
+    key  <I04> {         [       XF86Phone ] };
+    key  <I08> {         [     XF86LaunchD ] };
+    key  <I09> {         [     XF86Support ] };
+    key  <I0F> {         [     XF86LaunchF ] };
+    key  <I16> {         [      XF86LogOff ] };
+    key  <I18> {         [     XF86Launch5 ] };
+    key  <I21> {         [      XF86Travel ] };
+    key  <I23> {         [       XF86Spell ] };
+    key  <I31> {         [     XF86Launch4 ] };
+    key  <I3C> {         [       XF86Music ] };
+    key  <I42> {         [     XF86Forward ] };
+    key  <I43> {         [        XF86Send ] };
+    key  <I57> {         [        XF86Save ] };
+    key  <I64> {         [    XF86Pictures ] };
+    key  <I67> {         [     XF86LaunchA ] };
+    key  <I76> {         [      XF86iTouch ] };
+    key  <I77> {         [     XF86Launch3 ] };
+    key  <I79> {         [    XF86ToDoList ] };
+    key  <I7B> {         [  XF86Calculator ] };
+    key  <K5A> {         [  XF86VendorHome ] };
+    key  <K5D> {         [        XF86Away ] };
+    key  <K5E> {         [      XF86WebCam ] };
+    key  <K5F> {         [     XF86Launch0 ] };
+    key  <K63> {         [     XF86Launch6 ] };
+    key  <K6D> {         [    XF86Calendar ] };
+    key  <K71> {         [     XF86LaunchB ] };
+    key  <K72> {         [     XF86LaunchC ] };
+    key  <K74> {         [         XF86WWW ] };
+    key  <K75> {         [     XF86LaunchE ] };
+    key <II5D> {         [     XF86Launch1 ] };
+    key <NFER> {         [     XF86Launch2 ] };
+    key <XFER> {         [     XF86Launch8 ] };
+};
+
+
+// Memorex
+
+// Memorex MX1998
+partial alphanumeric_keys
+xkb_symbols "mx1998" {
+    include "inet(media_acpi_common)"
+    key <DOWN>	{	[ XF86ScrollDown	]	};
+    key <I12>	{	[ XF86AudioRewind	]	};
+    key <I17>	{	[ XF86Close		]	};
+    key <I18>	{	[ XF86Xfer		]	};
+    key <I1E>	{	[ XF86AudioRecord	]	};
+    key <I21>	{	[ XF86Documents		]	};
+    key <I23>	{	[ XF86Game		]	};
+    key <I25>	{	[ XF86Calculator	]	};
+    key <I26>	{	[ Menu			]	};
+    key <I32>	{	[ XF86WWW		]	};
+    key <I57>	{	[ XF86WakeUp		]	};
+    key <I68>	{	[ XF86DOS		]	};
+    key <I7A>	{	[ XF86ScreenSaver	]	};
+    key <UP>	{	[ XF86ScrollUp		]	};
+};
+
+// Memorex MX2500 EZ-Access Keyboard
+partial alphanumeric_keys
+xkb_symbols "mx2500" {
+    include "inet(media_nav_acpi_common)"
+    key <I12>	{	[ XF86Clear		]	};
+    key <I13>	{	[ XF86Phone		]	};
+    key <I14>	{	[ XF86DOS		]	};
+    key <I17>	{	[ XF86Close		]	};
+    key <I18>	{	[ XF86Xfer		]	};
+    key <I1E>	{	[ XF86Eject		]	};
+    key <I1F>	{	[ XF86Documents		]	};
+    key <I26>	{	[ XF86News		]	};
+    key <I6B>	{	[ XF86WakeUp		]	};
+    key <I6D>	{	[ XF86RotateWindows	]	};
+};
+
+// Memorex MX2750
+partial alphanumeric_keys
+xkb_symbols "mx2750" {
+    include "inet(media_nav_acpi_common)"
+    key <I32>	{	[ XF86Launch0		]	};
+};
+
+
+// Microsoft
+
+// Microsoft Natural Wireless Ergonomic Keyboard 4000
+partial alphanumeric_keys
+xkb_symbols "microsoft4000" {
+    include "inet(media_nav_common)"
+    key <I192>  {       [ XF86Launch1           ]       };
+    key <I193>  {       [ XF86Launch2           ]       };
+    key <I194>  {       [ XF86Launch3           ]       };
+    key <I195>  {       [ XF86Launch4           ]       };
+    key <I196>  {       [ XF86Launch5           ]       };
+//  Missing because of lack of support from kbd driver: Zoom in and
+//  slider.
+};
+
+// Microsoft Natural Wireless Ergonomic Keyboard 7000
+partial alphanumeric_keys
+xkb_symbols "microsoft7000" {
+    include "inet(media_nav_common)"
+    key <I07>	{	[ Undo			]	};
+    key <I09>	{	[ XF86New		]	};
+    key <I0A>	{	[ Redo			]	};
+    key <I0E>	{	[ XF86MailForward	]	};
+    key <I2F>	{	[ XF86Close		]	};
+    key <I39>	{	[ Print			]	};
+    key <I55>	{	[ XF86Save		]	};
+    key <I5A>	{	[ XF86Send		]	};
+    key <I62>	{	[ Help			]	};
+    key <I64>	{	[ XF86Reply		]	};
+    key <I76>	{	[ parenleft		]	};
+    key <I7B>	{	[ parenright		]	};
+    key <K59>	{	[ KP_Equal		]	};
+    key <K64>	{	[ XF86Open		]	};
+//  Missing because of lack of support from kbd driver: Spell, Launch,
+//  and Zoom in and out buttons.
+};
+
+// Microsoft Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "microsoftinet" {
+    include "inet(nav_acpi_common)"
+    key <I68>	{	[ XF86AudioStop		]	};
+};
+
+// Microsoft Natural Keyboard Pro USB  
+partial alphanumeric_keys  
+ xkb_symbols "microsoftprousb" {  
+    include "inet(nav_common)"
+     key <FK16>   {   [ XF86Reload      ]   };  
+     key <I01>   {   [ XF86AudioMedia   ]   };  
+     key <I02>   {   [ XF86HomePage      ]   };  
+     key <I17>   {   [ XF86AudioStop      ]   };  
+     key <I1E>   {   [ XF86AudioRaiseVolume   ]   };  
+     key <I1F>   {   [ XF86AudioPlay, XF86AudioPause ] };  
+     key <I22>   {   [ XF86AudioNext      ]   };  
+     key <I24>   {   [ XF86AudioPrev      ]   };  
+     key <I25>   {   [ XF86AudioLowerVolume   ]   };  
+     key <I26>   {   [ XF86AudioMute      ]   };  
+     key <I63>   {   [ XF86Standby      ]   };  
+ //   Internet Section -- Left Side  
+ //   Multimedia Section -- Right Side  
+ //   My Computer Section -- Far Right  
+ //  My computer maps to printscreen, so leaving commented out for now   
+ //  key <PRSC>   {   [ XF86MyComputer   ]   };  
+}; 
+
+// Microsoft Natural Keyboard Pro OEM 
+partial alphanumeric_keys  
+xkb_symbols "microsoftprooem" { 
+    include "inet(media_nav_common)"
+    key <FK17>	{	[ XF86Search		]	}; 
+    key <I02>	{	[ XF86HomePage		]	}; 
+    key <I63>	{	[ XF86Standby		]	}; 
+    key <K67>	{	[ XF86MyComputer	]	}; 
+//   Internet Section -- Left Side 
+//   Multimedia Section -- Right Side 
+//   My Computer Section -- Far Right 
+};
+
+// Microsoft Internet Keyboard Pro, Swedish
+partial alphanumeric_keys
+xkb_symbols "microsoftprose" {
+    include "inet(nav_common)"
+    key <FK16>	{	[ XF86Reload		]	};
+    key <I02>	{	[ XF86HomePage		]	};
+    key <I17>	{	[ XF86AudioStop		]	};
+    key <I1E>	{	[ XF86AudioRaiseVolume	]	};
+    key <I1F>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>	{	[ XF86AudioNext		]	};
+    key <I24>	{	[ XF86AudioPrev		]	};
+    key <I25>	{	[ XF86AudioLowerVolume	]	};
+    key <I26>	{	[ XF86AudioMute		]	};
+    key <I63>	{	[ XF86Standby		]	};
+    key <I68>	{	[ XF86AudioStop		]	};
+    key <PRSC>	{	[ XF86MyComputer	]	};
+    key <XFER>	{	[ XF86AudioMedia	]	};
+};
+
+// Microsoft Office Keyboard
+partial alphanumeric_keys
+xkb_symbols "microsoftoffice" {
+    include "inet(nav_acpi_common)"
+    key <BRK>	{	[ XF86Calendar		]	};
+    key <END>	{	[ Undo			]	};
+    key <I02>	{	[ XF86HomePage		]	};
+    key <I1E>	{	[ XF86AudioLowerVolume	]	};
+    key <I25>	{	[ XF86AudioRaiseVolume	]	};
+    key <I26>	{	[ XF86AudioMute		]	};
+    key <I3C>	{	[ XF86Cut		]	};
+    key <I4A>	{	[ XF86LogOff		]	};
+    key <I54>	{	[ XF86ApplicationLeft	]	};
+    key <I55>	{	[ XF86TaskPane		]	};
+    key <I56>	{	[ XF86Spell		]	};
+    key <I57>	{	[ XF86WWW		]	};
+    key <I58>	{	[ XF86New		]	};
+    key <I59>	{	[ XF86Open		]	};
+    key <I5A>	{	[ XF86Close		]	};
+    key <I62>	{	[ Help			]	};
+    key <I64>	{	[ XF86Save		]	};
+    key <I67>	{	[ Print			]	};
+    key <I6D>	{	[ XF86OfficeHome	]	};
+    key <I70>	{	[ Redo			]	};
+    key <I71>	{	[ XF86Reply		]	};
+    key <I72>	{	[ XF86MailForward	]	};
+    key <I73>	{	[ XF86Send		]	};
+    key <I78>	{	[ XF86Copy		]	};
+    key <MOAR>	{	[ XF86ApplicationRight	]	};
+    key <RCTL>	{	[ XF86Paste		]	};
+};
+
+// Microsoft Wireless Multimedia Keyboard 1.0A 
+partial alphanumeric_keys 
+xkb_symbols "microsoftmult" { 
+    include "inet(media_nav_acpi_common)"
+    key <AE13>  {       [ XF86Messenger         ]       }; 
+    key <FK14>	{	[ XF86New		]	}; 
+    key <FK15>	{	[ XF86Open		]	}; 
+    key <FK16>	{	[ XF86Close		]	}; 
+    key <FK17>	{	[ XF86Reply		]	}; 
+    key <I07>	{	[ Redo			]	}; 
+    key <I08>	{	[ Undo			]	}; 
+    key <I16>   {       [ XF86LogOff            ]       }; 
+    key <I23>	{	[ XF86Spell		]	}; 
+    key <I3B>	{	[ Help			]	}; 
+    key <I3C>   {       [ XF86Music     ]       }; 
+    key <I42>	{	[ XF86Forward		]	}; 
+    key <I43>	{	[ XF86Send		]	}; 
+    key <I57>	{	[ XF86Save		]	}; 
+    key <I58>	{	[ Print			]	}; 
+    key <I64>   {       [ XF86Pictures  ]       }; 
+    key <I80>   {       [ XF86Documents ]       }; 
+}; 
+
+
+// Oretec
+
+// Oretec MCK-800 MM/Internet keyboard
+partial alphanumeric_keys
+xkb_symbols "oretec" {
+    include "inet(acpi_common)"
+    key <I10>	{	[ XF86ScrollUp		]	};
+    key <I12>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I17>	{	[ XF86AudioPrev		]	};
+    key <I18>	{	[ XF86ScrollDown	]	};
+    key <I19>	{	[ XF86ZoomOut		]	};
+    key <I1E>	{	[ XF86AudioMute		]	};
+    key <I21>	{	[ XF86WWW		]	};
+    key <I22>	{	[ Menu			]	};
+    key <I23>	{	[ XF86AudioStop		]	};
+    key <I24>	{	[ XF86Calculator	]	};
+    key <I25>	{	[ XF86Xfer		]	};
+    key <I26>	{	[ XF86Mail		]	};
+    key <I2E>	{	[ XF86AudioNext		]	};
+    key <I30>	{	[ XF86AudioRaiseVolume	]	};
+    key <I32>	{	[ XF86ZoomIn		]	};
+    key <I68>	{	[ XF86AudioLowerVolume	]	};
+};
+
+
+// Propeller
+
+// Propeller Voyager (KTEZ-1000)
+partial alphanumeric_keys
+xkb_symbols "propeller" {
+    include "inet(media_common)"
+    key <I12>	{	[ XF86AudioRewind	]	};
+    key <I17>	{	[ XF86Close		]	};
+    key <I18>	{	[ XF86Xfer		]	};
+    key <I1E>	{	[ XF86AudioRecord	]	};
+    key <I21>	{	[ XF86Documents		]	};
+    key <I23>	{	[ XF86Game		]	};
+    key <I25>	{	[ XF86Calculator	]	};
+    key <I26>	{	[ Menu			]	};
+    key <I32>	{	[ XF86WWW		]	};
+    key <I68>	{	[ XF86DOS		]	};
+    key <I7A>	{	[ XF86Standby		]	};
+};
+
+
+// QTronix
+
+// QTronix Scorpius 98N+
+partial alphanumeric_keys
+xkb_symbols "qtronix" {
+    key <I10>	{	[ XF86ScrollDown	]	};
+    key <I12>	{	[ XF86Forward		]	};
+    key <I13>	{	[ XF86WakeUp		]	};
+    key <I17>	{	[ XF86Search		]	};
+    key <I18>	{	[ XF86Standby		]	};
+    key <I19>	{	[ XF86ScrollUp		]	};
+    key <I1E>	{	[ XF86Back		]	};
+    key <I1F>	{	[ XF86Reload		]	};
+    key <I20>	{	[ XF86AudioRaiseVolume	]	};
+    key <I21>	{	[ XF86AudioPrev		]	};
+    key <I22>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I23>	{	[ XF86AudioNext		]	};
+    key <I24>	{	[ XF86AudioStop		]	};
+    key <I25>	{	[ XF86HomePage		]	};
+    key <I26>	{	[ XF86AudioMute		]	};
+    key <I2E>	{	[ XF86AudioLowerVolume	]	};
+    key <I30>	{	[ XF86AudioRecord	]	};
+    key <I31>	{	[ XF86PowerOff		]	};
+    key <I32>	{	[ XF86Stop		]	};
+    key <I68>	{	[ XF86Calculator	]	};
+};
+
+
+// Samsung
+
+// Samsung SDM 4500P
+partial alphanumeric_keys
+xkb_symbols "samsung4500" {
+    include "inet(media_nav_acpi_common)"
+    key <AE13>	{	[ XF86Launch4		]	};
+    key <I02>	{	[ XF86Launch1		]	};
+    key <I04>	{	[ XF86Launch3		]	};
+    key <I06>	{	[ XF86Launch5		]	};
+    key <I09>	{	[ XF86Close		]	};
+    key <I0A>	{	[ XF86Book		]	};
+    key <I18>	{	[ XF86Eject		]	};
+    key <I26>	{	[ Help			]	};
+    key <I59>	{	[ XF86Explorer		]	};
+    key <NFER>	{	[ XF86Launch2		]	};
+};
+
+// Samsung SDM 4510P
+partial alphanumeric_keys
+xkb_symbols "samsung4510" {
+    include "inet(media_acpi_common)"
+    key <I02>	{	[ XF86Launch1		]	};
+    key <I04>	{	[ XF86Launch3		]	};
+    key <I18>	{	[ XF86Eject		]	};
+    key <NFER>	{	[ XF86Launch2		]	};
+};
+
+
+// SK
+
+// SK-1300
+partial alphanumeric_keys
+xkb_symbols "sk1300" {
+    include "inet(media_common)"
+    key <I12>	{	[ XF86Eject		]	};
+    key <I1E>	{	[ XF86Forward		]	};
+    key <I20>	{	[ XF86WWW		]	};
+    key <I25>	{	[ XF86Standby		]	};
+    key <I26>	{	[ XF86Back		]	};
+    key <I32>	{	[ XF86Stop		]	};
+};
+
+// SK-2500
+partial alphanumeric_keys
+xkb_symbols "sk2500" {
+    include "inet(media_nav_common)"
+    key <I12>	{	[ XF86AudioRewind	]	};
+    key <I17>	{	[ XF86Close		]	};
+    key <I18>	{	[ XF86Eject		]	};
+    key <I18>	{	[ XF86Eject		]	};
+    key <I19>	{	[ XF86Forward		]	};
+    key <I1E>	{	[ XF86AudioRecord	]	};
+    key <I23>	{	[ XF86Xfer		]	};
+    key <I25>	{	[ XF86PowerOff		]	};
+    key <I26>	{	[ Menu			]	};
+    key <I7A>	{	[ XF86ScreenSaver	]	};
+};
+
+// SK-6200
+partial alphanumeric_keys
+xkb_symbols "sk6200" {
+    include "inet(acpi_common)"
+    key <I12>	{	[ XF86Favorites		]	};
+    key <I14>	{	[ XF86AudioLowerVolume	]	};
+    key <I16>	{	[ XF86AudioRaiseVolume	]	};
+    key <I17>	{	[ XF86Back		]	};
+    key <I19>	{	[ XF86Forward		]	};
+    key <I1E>	{	[ XF86WWW		]	};
+    key <I20>	{	[ XF86AudioMute		]	};
+    key <I21>	{	[ XF86AudioNext		]	};
+    key <I22>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I23>	{	[ XF86AudioPrev		]	};
+    key <I24>	{	[ XF86AudioStop		]	};
+    key <I32>	{	[ XF86Mail		]	};
+};
+
+// SK-7100
+partial alphanumeric_keys
+xkb_symbols "sk7100" {
+    include "inet(media_common)"
+    key <I12>	{	[ XF86AudioPause	]	};
+    key <I17>	{	[ XF86Close		]	};
+    key <I18>	{	[ XF86Video		]	};
+    key <I1E>	{	[ XF86Eject		]	};
+    key <I25>	{	[ XF86CD		]	};
+    key <I26>	{	[ XF86Display		]	};
+    key <I32>	{	[ XF86WWW		]	};
+};
+
+
+// Sven
+
+// SVEN Ergonomic 2500
+partial alphanumeric_keys
+xkb_symbols "sven" {
+    include "inet(acpi_common)"
+    key <I10>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I12>	{	[ XF86Forward		]	};
+    key <I17>	{	[ XF86AudioRaiseVolume	]	};
+    key <I18>	{	[ XF86ZoomOut		]	};
+    key <I19>	{	[ XF86AudioPrev		]	};
+    key <I1A>	{	[ XF86AudioStop		]	};
+    key <I1E>	{	[ XF86HomePage		]	};
+    key <I20>	{	[ XF86Mail		]	};
+    key <I21>	{	[ XF86ZoomIn		]	};
+    key <I22>	{	[ XF86MyComputer	]	};
+    key <I23>	{	[ XF86Stop		]	};
+    key <I24>	{	[ XF86ScreenSaver	]	};
+    key <I25>	{	[ XF86AudioLowerVolume	]	};
+    key <I26>	{	[ XF86AudioMute		]	};
+    key <I28>	{	[ XF86Calculator	]	};
+    key <I29>	{	[ XF86Reload		]	};
+    key <I2E>	{	[ XF86Search		]	};
+    key <I30>	{	[ XF86Favorites		]	};
+    key <I31>	{	[ XF86ScrollUp		]	};
+    key <I32>	{	[ XF86ScrollDown	]	};
+    key <I62>	{	[ XF86AudioNext		]	};
+    key <I68>	{	[ XF86Back		]	};
+};
+
+// SVEN Slim 303
+partial alphanumeric_keys
+xkb_symbols "sven303" {
+    key <I11>	{	[ XF86PowerOff		]	};
+    key <I12>	{	[ XF86Sleep		]	};
+    key <I16>	{	[ XF86WakeUp		]	};
+};
+
+
+// Symplon
+
+// Symplon PaceBook (tablet PC)
+partial alphanumeric_keys
+xkb_symbols "symplon" {
+    include "inet(nav_acpi_common)"
+    key <HOME>	{	[ XF86RotationPB	]	};
+    key <I13>	{	[ XF86SplitScreen	]	};
+    key <I14>	{	[ XF86Support		]	};
+    key <I17>	{	[ XF86New		]	};
+    key <I21>	{	[ XF86User2KB		]	};
+    key <I25>	{	[ XF86RotationKB	]	};
+    key <I26>	{	[ XF86MenuKB		]	};
+    key <I6B>	{	[ XF86User1KB		]	};
+    key <PAUS>	{	[ XF86UserPB		]	};
+    key <UP>	{	[ XF86MenuPB		]	};
+};
+
+// Toshiba
+
+// Toshiba Satellite S3000
+partial alphanumeric_keys
+xkb_symbols "toshiba_s3000" {
+    include "inet(media_common)"
+    // Describes the Special buttons on Toshiba Satellite 3000 models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    key <I06>	{	[ XF86Launch1		]	};
+    key <I13>	{	[ XF86Launch2		]	};
+    key <I71>	{	[ XF86WWW		]	};
+    key <I73>	{	[ XF86Mail		]	};
+    key <I75>	{	[ XF86AudioRaiseVolume	]	};
+    key <I76>	{	[ XF86AudioLowerVolume	]	};
+};
+
+// Trust
+
+// Trust Wireless Keyboard Classic
+partial alphanumeric_keys
+xkb_symbols "trust" {
+    include "inet(media_nav_acpi_common)"
+    key <I11>	{	[ XF86ScreenSaver	]	};
+    key <I1E>	{	[ XF86Eject		]	};
+};
+
+
+// Trust Direct Access Keyboard
+partial alphanumeric_keys
+xkb_symbols "trustda" {
+    include "inet(media_common)"
+    key <I12>	{	[ XF86AudioRewind	]	};
+    key <I17>	{	[ XF86Close		]	};
+    key <I18>	{	[ XF86Eject		]	};
+    key <I1E>	{	[ XF86AudioRecord	]	};
+    key <I23>	{	[ XF86Xfer		]	};
+    key <I25>	{	[ XF86Standby		]	};
+    key <I26>	{	[ Help			]	};
+    key <I32>	{	[ XF86WWW		]	};
+    key <I7A>	{	[ XF86Away		]	};
+};
+
+
+// YaHoo!
+
+// Yahoo! Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "yahoo" {
+    include "inet(acpi_common)"
+    key <I11>	{	[ XF86AudioPrev		]	};
+    key <I12>	{	[ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>	{	[ XF86AudioStop		]	};
+    key <I1F>	{	[ XF86AudioNext		]	};
+    key <I20>	{	[ XF86AudioRecord	]	};
+    key <I21>	{	[ XF86AudioLowerVolume	]	};
+    key <I22>	{	[ XF86AudioRaiseVolume	]	};
+    key <I23>	{	[ XF86AudioMute		]	};
+    key <I24>	{	[ XF86Close		]	};
+    key <I25>	{	[ XF86Calculator	]	};
+    key <I26>	{	[ Help			]	};
+    key <I27>	{	[ XF86Mail		]	};
+    key <I28>	{	[ XF86WWW		]	};
+};
+
+// Apple keyboards (macbooks, powerbooks, powermac G5, etc)
+partial alphanumeric_keys
+xkb_symbols "apple" {
+// Really brightness up/down
+    key <II65>  {       [ XF86BrightnessAdjust  ]       };
+    key <I54>   {       [ XF86BrightnessAdjust  ]       };
+    key <I20>	{	[ XF86AudioMute		]	};
+    key <I2E>	{	[ XF86AudioLowerVolume	]	};
+    key <I30>	{	[ XF86AudioRaiseVolume	]	};
+    key <I56>   {       [ XF86RotateWindows	]	};
+// Really keyboard backlight off/up/down
+    key <I57>   {       [ XF86Launch0		]	};
+    key <I58>	{	[ XF86Launch1    	]	};
+    key <I59>	{	[ XF86Launch2   	]	};
+    key <I5E>	{	[ XF86PowerOff          ]       };
+    key <K5D>	{	[ F13 ]    };
+    key <K5E>	{	[ F14 ]    };
+    key <K5F>	{	[ F15 ]    };
+    key <K6C>	{	[ XF86Eject ]    };
+    key <II5D>	{	[ F16 ]    };
+    key <KPEQ>  {       [ KP_Equal ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "cymotionlinux" {
+    include "inet(media_nav_acpi_common)"
+    key <I07>	{	[	Undo			]	};
+    key <I0A>	{	[	Redo			]	};
+    key <I0F>	{	[	XF86ScrollDown		]	};
+    key <I17>	{	[	XF86Launch2		]	};
+    key <I1F>	{	[	XF86Launch1		]	};
+    key <I28>	{	[	XF86MenuKB		]	};
+    key <I2B>	{	[	XF86Launch3		]	};
+    key <I3C>	{	[	XF86Cut			]	};
+    key <I78>	{	[	XF86Copy		]	};
+    key <K65>	{	[	XF86Paste		]	};
+    key <K75>	{	[	XF86ScrollUp		]	};
+    key <XFER>	{	[	XF86AudioMedia		]	};
+};
+
+partial alphanumeric_keys 
+xkb_symbols "silvercrest" {
+    include "inet(media_nav_acpi_common)"
+    key <I02>	{	[ XF86HomePage		]	};    
+    key <I21>	{	[ XF86Launch2		]	};
+    key <K67>	{	[ XF86Launch1		]	};
+};
+
+// eMachines
+
+partial alphanumeric_keys
+xkb_symbols "emachines" {
+    include "inet(media_nav_acpi_common)"
+    key <I32>  {  [ XF86iTouch                    ]  };
+    key <KP0>  {  [ KP_0                          ]  };
+    key <KP1>  {  [ KP_1                          ]  };
+    key <KP2>  {  [ KP_2                          ]  };
+    key <KP3>  {  [ KP_3                          ]  };
+    key <KP4>  {  [ KP_4                          ]  };
+    key <KP5>  {  [ KP_5                          ]  };
+    key <KP6>  {  [ KP_6                          ]  };
+    key <KP7>  {  [ KP_7                          ]  };
+    key <KP8>  {  [ KP_8                          ]  };
+    key <KP9>  {  [ KP_9                          ]  };
+    key <KPAD> {  [ KP_Add                        ]  };
+    key <KPDL> {  [ KP_Decimal                    ]  };
+    key <KPDV> {  [ KP_Divide                     ]  };
+    key <KPMU> {  [ KP_Multiply                   ]  };
+    key <KPSU> {  [ KP_Subtract                   ]  };
+};
+
+// BenQ
+
+//
+// BenQ X*
+// (X730, X500, X800)
+//
+// to make the FN_LOCK and CONFIG key work on the BenQ X500 , use ...
+// setkeycodes e074 130 # KEY_PROPS  from /usr/include/linux/input.h
+// setkeycodes e075 171 # KEY_CONFIG from /usr/include/linux/input.h
+partial alphanumeric_keys
+xkb_symbols "benqx" {
+    include "inet(media_nav_acpi_common)"
+    key <I02> { [ XF86ModeLock ] };
+    key <I21> { [ XF86WWW      ]  };
+    key <I2B> { [ XF86Go ] };
+    key <I31> { [ XF86Calendar ] };
+};
+
+// Intel
+
+// Intel Classmate
+partial alphanumeric_keys
+xkb_symbols "classmate" {
+    key <I2E>   {       [ XF86AudioLowerVolume  ] };	
+    key <I30>   {       [ XF86AudioRaiseVolume  ] };
+};
+
+// Unitek
+
+partial alphanumeric_keys
+xkb_symbols "unitekkb1925" {
+    include "inet(media_nav_common)"
+    key <I0C> { [ XF86AudioMute ] };
+    key <I11> { [ XF86PowerOff ] };
+    key <I12> { [ XF86Sleep ] };
+    key <I16> { [ XF86WakeUp ] };
+    key <I18> { [ XF86Search ] };
+    key <I1A> { [ XF86Reload ] };
+};
+
+// Creative
+
+// Creative Desktop Wireless 7000
+partial alphanumeric_keys
+xkb_symbols "creativedw7000" {
+    include "inet(media_nav_acpi_common)"
+    key <I66>   {       [ XF86Pictures ]       };
+};
+
+// Compal
+
+// Compal FL90
+partial alphanumeric_keys
+xkb_symbols "compalfl90" {
+    include "inet(media_nav_acpi_common)"
+    key <I54>   {       [ XF86MonBrightnessUp   ]       };
+    key <II65>  {       [ XF86MonBrightnessDown ]       };
+};
+
+partial alphanumeric_keys
+xkb_symbols "pc105" {
+    include "inet(media_nav_acpi_common)"
+};
+
+// HTC Dream
+partial alphanumeric_keys
+xkb_symbols "htcdream" {
+	key <BKSP> { [ BackSpace ] };
+	key <RTRN> { [ Return ] };
+
+        //first row
+        key <AE01> { [ 1, 1, exclam, exclam ] };
+        key <AE02> { [ 2, 2, at, at ] };
+        key <AE03> { [ 3, 3, numbersign, numbersign ] };
+        key <AE04> { [ 4, 4, dollar, dollar ] };
+        key <AE05> { [ 5, 5, percent, percent ] };
+        key <AE06> { [ 6, 6, dead_circumflex, dead_circumflex ] };
+        key <AE07> { [ 7, 7, ampersand, ampersand ] };
+        key <AE08> { [ 8, 8, asterisk, asterisk ] };
+        key <AE09> { [ 9, 9, parenleft, parenleft ] };
+        key <AE10> { [ 0, 0, parenright, parenright ] };
+
+	//fifth row
+	key <LFSH> { [ Shift_L ] };
+	key <SPCE> { [ space ] };
+	key <AB09> { [ period, period, slash, slash ] };
+	key <RTSH> { [ Shift_R ] };
+
+	//modifiers
+	modifier_map Shift { <LFSH>, <RTSH> };
+};
diff --git a/data/symbols/keypad b/data/symbols/keypad
new file mode 100644
--- /dev/null
+++ b/data/symbols/keypad
@@ -0,0 +1,632 @@
+partial hidden keypad_keys
+xkb_symbols "overlay" {
+    include "keypad(overlay1)"
+};
+
+partial hidden keypad_keys
+xkb_symbols "overlay1" {
+
+    // Begin "Keypad" section
+
+    key  <KP7> {	[  KP_Home	],	overlay1=<KO7>	};
+    key  <KP8> {	[  KP_Up	],	overlay1=<KO8>	};
+    key  <KP9> {	[  KP_Prior	],	overlay1=<KO9>	};
+
+    key  <KP4> {	[  KP_Left	],	overlay1=<KO4>	};
+    key  <KP5> {	[  KP_Begin	],	overlay1=<KO5>	};
+    key  <KP6> {	[  KP_Right	],	overlay1=<KO6>	};
+
+    key  <KP1> {	[  KP_End	],	overlay1=<KO1>	};
+    key  <KP2> {	[  KP_Down	],	overlay1=<KO2>	};
+    key  <KP3> {	[  KP_Next	],	overlay1=<KO3>	};
+
+    key  <KP0> {	[  KP_Insert	],	overlay1=<KO0>	};
+    key <KPDL> {  	[  KP_Delete	],	overlay1=<KODL>	};
+
+    key  <KO7> {	[  KP_7	]	};
+    key  <KO8> {	[  KP_8	]	};
+    key  <KO9> {	[  KP_9	]	};
+
+    key  <KO4> {	[  KP_4	]	};
+    key  <KO5> {	[  KP_5	]	};
+    key  <KO6> {	[  KP_6	]	};
+
+    key  <KO1> {	[  KP_1	]	};
+    key  <KO2> {	[  KP_2	]	};
+    key  <KO3> {	[  KP_3	]	};
+
+    key  <KO0> {	[  KP_0	]	};
+    key <KODL> {  	[  KP_Decimal ]	};
+
+    // End "Keypad" section
+};
+
+partial hidden keypad_keys
+xkb_symbols "overlay2" {
+
+    // Begin "Keypad" section
+
+    key  <KP7> {	[  KP_Home	],	overlay2=<KO7>	};
+    key  <KP8> {	[  KP_Up	],	overlay2=<KO8>	};
+    key  <KP9> {	[  KP_Prior	],	overlay2=<KO9>	};
+
+    key  <KP4> {	[  KP_Left	],	overlay2=<KO4>	};
+    key  <KP5> {	[  KP_Begin	],	overlay2=<KO5>	};
+    key  <KP6> {	[  KP_Right	],	overlay2=<KO6>	};
+
+    key  <KP1> {	[  KP_End	],	overlay2=<KO1>	};
+    key  <KP2> {	[  KP_Down	],	overlay2=<KO2>	};
+    key  <KP3> {	[  KP_Next	],	overlay2=<KO3>	};
+
+    key  <KP0> {	[  KP_Insert	],	overlay2=<KO0>	};
+    key <KPDL> {  	[  KP_Delete	],	overlay2=<KODL>	};
+
+    key  <KO7> {	[  KP_7	]	};
+    key  <KO8> {	[  KP_8	]	};
+    key  <KO9> {	[  KP_9	]	};
+
+    key  <KO4> {	[  KP_4	]	};
+    key  <KO5> {	[  KP_5	]	};
+    key  <KO6> {	[  KP_6	]	};
+
+    key  <KO1> {	[  KP_1	]	};
+    key  <KO2> {	[  KP_2	]	};
+    key  <KO3> {	[  KP_3	]	};
+
+    key  <KO0> {	[  KP_0	]	};
+    key <KODL> {  	[  KP_Decimal ]	};
+
+    // End "Keypad" section
+};
+
+partial hidden default keypad_keys
+xkb_symbols "x11" {
+// Ungrab cancels server/keyboard/pointer grabs
+    key <KPDV> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ]
+    };
+
+// ClsGrb kills whichever client has a grab in effect
+    key <KPMU> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Multiply,	KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ]
+    };
+
+// -VMode switches to the previous video mode
+    key <KPSU> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ]
+    };
+
+    key  <KP7> {	[  KP_Home,	KP_7	]	};
+    key  <KP8> {	[  KP_Up,	KP_8	]	};
+    key  <KP9> {	[  KP_Prior,	KP_9	]	};
+
+// +VMode switches to the next video mode
+    key <KPAD> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ]
+    };
+
+    key  <KP4> {	[  KP_Left,	KP_4	]	};
+    key  <KP5> {	[  KP_Begin,	KP_5	]	};
+    key  <KP6> {	[  KP_Right,	KP_6	]	};
+
+    key  <KP1> {	[  KP_End,	KP_1	]	};
+    key  <KP2> {	[  KP_Down,	KP_2	]	};
+    key  <KP3> {	[  KP_Next,	KP_3	]	};
+    key <KPEN> {	[  	KP_Enter	]	};
+    key <KPEQ> {	[  	KP_Equal	]	};
+
+    key  <KP0> {	[  KP_Insert,	KP_0	]	};
+    key <KPDL> {  	[  KP_Delete,	KP_Decimal ]	};
+    key <KPPT> {  	[  KP_Decimal,	KP_Decimal ]	};
+};
+
+
+// Legacy PC keypad definition
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "legacy" {
+
+    include "keypad(core)"
+    include "keypad(legacymath)"
+    include "keypad(legacynumber)"
+    include "kpdl(dot)"
+};
+
+
+// Legacy Wang 725-3771-ae and 725-3771-uk keypad definition
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "legacy_wang" {
+
+    include "keypad(core)"
+    include "keypad(legacymath)"
+    include "keypad(legacynumber_wang)"
+    include "kpdl(dot)"
+};
+
+
+// Complete new keypad definition
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "oss" {
+
+    include "keypad(core)"
+    include "keypad(ossmath)"
+    include "keypad(ossnumber)"
+    include "kpdl(dotoss)"
+};
+
+
+// Latin9 restriction of new keypad definition
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "oss_latin9" {
+
+    include "keypad(core)"
+    include "keypad(ossmath_latin9)"
+    include "keypad(legacynumber)"
+    include "kpdl(dotoss_latin9)"
+};
+
+
+// Wang 725-3771-ae and 725-3771-uk keypad variant of oss keypad
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "oss_wang" {
+
+    include "keypad(core)"
+    include "keypad(ossmath)"
+    include "keypad(ossnumber_wang)"
+    include "kpdl(dotoss)"
+};
+
+
+// Forward-looking keypad definition
+// Won't work with applications that make ASCII assumptions
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "future" {
+
+    include "keypad(core)"
+    include "keypad(futuremath)"
+    include "keypad(ossnumber)"
+    include "kpdl(commaoss)"
+};
+
+
+// Forward-looking keypad definition
+// Won't work with applications that make ASCII assumptions
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "future_wang" {
+
+    include "keypad(core)"
+    include "keypad(futuremath)"
+    include "keypad(ossnumber_wang)"
+    include "kpdl(commaoss)"
+};
+
+
+// Keypad keys nobody changes
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+partial keypad_keys
+xkb_symbols "core" {
+
+    modifier_map Mod2 { Num_Lock };
+
+    key <NMLK> { [ Num_Lock, Pointer_EnableKeys ] };
+    key <KPEN> { [ KP_Enter                     ] };
+    key <KPEQ> { [ KP_Equal                     ] };
+};
+
+
+// Legacy keypad math area
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱─────┬─────┬─────┐
+// ┃Num  ┃ ₁   │ ₂   │ ₃   │ ₁ <XF86_Ungrab>
+// ┃Lock⇭┃ /   │ *   │ -   │ ₂ <XF86_ClearGrab>
+// ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
+//                   │ ₄   │ ₄ <XF86_Next_VMode>
+//                   │     │
+//                   ┤     │ 1 None
+//                   │     │ 2 Ctrl+Alt
+//                   │ +   │
+//                   ╆━━━━━┪
+partial keypad_keys
+xkb_symbols "legacymath" {
+
+    key.type[Group1]="CTRL+ALT" ;
+
+    key <KPDV> { [   KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ] }; // / <XF86_Ungrab>
+    key <KPMU> { [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ] }; // * <XF86_ClearGrab>
+    key <KPSU> { [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ] }; // - <XF86_Prev_VMode>
+
+    key <KPAD> { [      KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ] }; // + <XF86_Next_VMode>
+
+};
+
+
+// Keypad math area with non-CS operators
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱─────┬─────┬─────┐
+// ┃Num  ┃ ∕ ₁ │ . ₂ │ − ₃ │ ₁ <XF86_Ungrab>
+// ┃Lock⇭┃ / ÷ │ * × │ - − │ ₂ <XF86_ClearGrab>
+// ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
+//                   │ + ₄ │ ₄ <XF86_Next_VMode>
+//                   │     │
+//                   ┤     │ 1 None
+//                   │     │ 2 Level3 ⇮
+//                   │ + + │ 3 Shift+Level3 ⇧⇮
+//                   ╆━━━━━┪ 4 Ctrl+Alt
+partial keypad_keys
+xkb_symbols "ossmath" {
+
+    key.type[Group1]="CTRL+ALT" ;
+
+    key <KPDV> { [   KP_Divide, 0x1002215, 0x10000F7, VoidSymbol,     XF86_Ungrab ] }; // / ∕ ÷     <XF86_Ungrab>
+    key <KPMU> { [ KP_Multiply, 0x10022C5, 0x10000D7, VoidSymbol,  XF86_ClearGrab ] }; // * ⋅ ×  <XF86_ClearGrab>
+    key <KPSU> { [ KP_Subtract, 0x1002212, 0x1002212, VoidSymbol, XF86_Prev_VMode ] }; // - − − <XF86_Prev_VMode>
+    key <KPAD> { [      KP_Add, 0x100002B, 0x100002B, VoidSymbol, XF86_Next_VMode ] }; // + + + <XF86_Next_VMode>
+
+};
+
+
+// Keypad math area with non-CS operators in first levels
+// As demanded by users not interested in legacy pre-unicode junk
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱─────┬─────┬─────┐
+// ┃Num  ┃ / ₁ │ * ₂ │ - ₃ │ ₁ <XF86_Ungrab>
+// ┃Lock⇭┃ ∕ ÷ │ . × │ − − │ ₂ <XF86_ClearGrab>
+// ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
+//                   │ + ₄ │ ₄ <XF86_Next_VMode>
+//                   │     │
+//                   ┤     │ 1 None
+//                   │     │ 2 Level3 ⇮
+//                   │ + + │ 3 Shift+Level3 ⇧⇮
+//                   ╆━━━━━┪ 4 Ctrl+Alt
+partial keypad_keys
+xkb_symbols "futuremath" {
+
+    key.type[Group1]="FOUR_LEVEL_X" ;
+
+    key <KPDV> { [ 0x1002215,   KP_Divide, 0x10000F7,     XF86_Ungrab ] }; // ∕ / ÷     <XF86_Ungrab>
+    key <KPMU> { [ 0x10022C5, KP_Multiply, 0x10000D7,  XF86_ClearGrab ] }; // ⋅ * ×  <XF86_ClearGrab>
+    key <KPSU> { [ 0x1002212, KP_Subtract, 0x1002212, XF86_Prev_VMode ] }; // − - − <XF86_Prev_VMode>
+
+    key <KPAD> { [ 0x100002B,      KP_Add, 0x100002B, XF86_Next_VMode ] }; // + + + <XF86_Next_VMode>
+};
+
+
+// Keypad math area with non-CS operators, restricted to latin9
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱─────┬─────┬─────┐
+// ┃Num  ┃ / ₁ │ · ₂ │ - ₃ │ ₁ <XF86_Ungrab>
+// ┃Lock⇭┃ / ÷ │ * × │ - - │ ₂ <XF86_ClearGrab>
+// ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
+//                   │ + ₄ │ ₄ <XF86_Next_VMode>
+//                   │     │
+//                   ┤     │ 1 None
+//                   │     │ 2 Level3 ⇮
+//                   │ + + │ 3 Shift+Level3 ⇧⇮
+//                   ╆━━━━━┪ 4 Ctrl+Alt
+partial keypad_keys
+xkb_symbols "ossmath_latin9" {
+
+    key.type[Group1]="FOUR_LEVEL_X";
+
+    key <KPDV> { [   KP_Divide,          slash, division,     XF86_Ungrab ] }; // / / ÷     <XF86_Ungrab>
+    key <KPMU> { [ KP_Multiply, periodcentered, multiply,  XF86_ClearGrab ] }; // * · ×  <XF86_ClearGrab>
+    key <KPSU> { [ KP_Subtract,          minus,    minus, XF86_Prev_VMode ] }; // - - - <XF86_Prev_VMode>
+
+    key <KPAD> { [      KP_Add,           plus,     plus, XF86_Next_VMode ] }; // + + + <XF86_Next_VMode>
+};
+
+
+// Legacy keypad number area
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱                   ⇱ Home
+// ┃Num  ┃                   ⇲ End
+// ┃Lock⇭┃                   ⇞ Page up
+// ┡━━━━━╃─────┼─────┼       ⇟ Page down
+// │ 7   │ 8   │ 9   │       ⇞ Page up
+// │ ⇱   │ ⇧   │ ⇞   │       ⎀ Insert
+// ├─────┼─────┼─────┤       ␥ Delete
+// │ 4   │ 5   │ 6   │       ⇦⇧⇨⇩ Directions
+// │ ⇦   │     │ ⇨   │
+// ├─────┼─────┼─────╆
+// │ 1   │ 2   │ 3   ┃
+// │ ⇲   │ ⇩   │ ⇟   ┃        1 None
+// ├─────┴─────┼─────┨        2 Num Lock ⇭
+// │ 0         │
+// │ ⎀         │
+// └───────────┴
+partial keypad_keys
+xkb_symbols "legacynumber" {
+
+    key.type[Group1]="KEYPAD" ;
+
+    key <KP7>  { [   KP_Home,       KP_7 ] }; //   <home> 7
+    key <KP8>  { [     KP_Up,       KP_8 ] }; //     <up> 8
+    key <KP9>  { [  KP_Prior,       KP_9 ] }; //  <prior> 9
+ 
+    key <KP4>  { [   KP_Left,       KP_4 ] }; //   <left> 4
+    key <KP5>  { [  KP_Begin,       KP_5 ] }; //  <begin> 5
+    key <KP6>  { [  KP_Right,       KP_6 ] }; //  <right> 6
+
+    key <KP1>  { [    KP_End,       KP_1 ] }; //    <end> 1
+    key <KP2>  { [   KP_Down,       KP_2 ] }; //   <down> 2
+    key <KP3>  { [   KP_Next,       KP_3 ] }; //   <next> 3
+
+    key <KP0>  { [ KP_Insert,       KP_0 ] }; // <insert> 0
+};
+
+
+// Legacy Wang 725-3771-ae and 725-3771-uk keypad number area
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+// This is actually a three-level keypad, declared as four-level
+// to avoid defining a new type
+//
+// ┏━━━━━┱                   ⇱ Home
+// ┃Num  ┃                   ⇲ End
+// ┃Lock⇭┃                   ⇞ Page up
+// ┡━━━━━╃─────┼─────┼       ⇟ Page down
+// │ 7   │ 8   │ 9   │       ⇞ Page up
+// │ ⇱ < │ ⇧ > │ ⇞ ^ │       ⎀ Insert
+// ├─────┼─────┼─────┤       ␥ Delete
+// │ 4   │ 5   │ 6   │       ⇦⇧⇨⇩ Directions
+// │ ⇦ [ │   ] │ ⇨ $ │
+// ├─────┼─────┼─────╆
+// │ 1   │ 2   │ 3   ┃
+// │ ⇲ & │ ⇩ @ │ ⇟ # ┃       1 None
+// ├─────┴─────┼─────┨       2 Num Lock ⇭
+// │ 0         │             3 Level3 ⇮
+// │ ⎀         │
+// └───────────┴
+partial keypad_keys
+xkb_symbols "legacynumber_wang" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KP7>  { [   KP_Home,   KP_7,         less ] }; //   <home> 7 <
+    key <KP8>  { [     KP_Up,   KP_8,      greater ] }; //     <up> 8 >
+    key <KP9>  { [  KP_Prior,   KP_9,  asciicircum ] }; //  <prior> 9 ^
+ 
+    key <KP4>  { [   KP_Left,   KP_4,  bracketleft ] }; //   <left> 4 [
+    key <KP5>  { [  KP_Begin,   KP_5, bracketright ] }; //  <begin> 5 ]
+    key <KP6>  { [  KP_Right,   KP_6,       dollar ] }; //  <right> 6 $
+
+    key <KP1>  { [    KP_End,   KP_1,    ampersand ] }; //    <end> 1 &
+    key <KP2>  { [   KP_Down,   KP_2,           at ] }; //   <down> 2 @
+    key <KP3>  { [   KP_Next,   KP_3,   numbersign ] }; //   <next> 3 #
+
+    key <KP0>  { [ KP_Insert,   KP_0,   apostrophe ] }; // <insert> 0 '
+};
+
+
+// Keypad number area with arrow symbols
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱                   ⇱ Home
+// ┃Num  ┃                   ⇲ End
+// ┃Lock⇭┃                   ⇞ Page up
+// ┡━━━━━╃─────┼─────┼       ⇟ Page down
+// │ 7 ⇖ │ 8 ⇑ │ 9 ⇗ │       ⇞ Page up
+// │ ⇱ ↖ │ ⇧ ↑ │ ⇞ ↗ │       ⎀ Insert
+// ├─────┼─────┼─────┤       ␥ Delete
+// │ 4 ⇐ │ 5 ⇔ │ 6 ⇗ │       ⇦⇧⇨⇩ Directions
+// │ ⇦ ← │   ↔ │ ⇨ ↗ │       ⍽ narrow no-break space
+// ├─────┼─────┼─────╆
+// │ 1 ⇙ │ 2 ⇓ │ 3 ⇘ ┃
+// │ ⇲ ↙ │ ⇩ ↓ │ ⇟ ↘ ┃       1 None
+// ├─────┴─────┼─────┨       2 Num Lock ⇭
+// │ 0       ⇕ │             3 Level3 ⇮
+// │ ⎀       ↕ │             4 Shift+Level3 ⇧⇮
+// └───────────┴
+partial keypad_keys
+xkb_symbols "ossnumber" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KP7>  { [   KP_Home,   KP_7, 0x1002196, 0x10021D6 ] }; //   <home> 7 ↖ ⇖
+    key <KP8>  { [     KP_Up,   KP_8, 0x1002191, 0x10021D1 ] }; //     <up> 8 ↑ ⇑
+    key <KP9>  { [  KP_Prior,   KP_9, 0x1002197, 0x10021D7 ] }; //  <prior> 9 ↗ ⇗
+ 
+    key <KP4>  { [   KP_Left,   KP_4, 0x1002190, 0x10021D0 ] }; //   <left> 4 ← ⇐
+    key <KP5>  { [  KP_Begin,   KP_5, 0x1002194, 0x10021D4 ] }; //  <begin> 5 ↔ ⇔
+    key <KP6>  { [  KP_Right,   KP_6, 0x1002192, 0x10021D2 ] }; //  <right> 6 → ⇒
+
+    key <KP1>  { [    KP_End,   KP_1, 0x1002199, 0x10021D9 ] }; //    <end> 1 ↙ ⇙
+    key <KP2>  { [   KP_Down,   KP_2, 0x1002193, 0x10021D3 ] }; //   <down> 2 ↓ ⇓
+    key <KP3>  { [   KP_Next,   KP_3, 0x1002198, 0x10021D8 ] }; //   <next> 3 ↘ ⇘
+
+    key <KP0>  { [ KP_Insert,   KP_0, 0x1002195, 0x10021D5 ] }; // <insert> 0 ↕ ⇕
+};
+
+
+// Wang 725-3771-ae and 725-3771-uk keypad number area with additional arrow symbols
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱                   ⇱ Home
+// ┃Num  ┃                   ⇲ End
+// ┃Lock⇭┃                   ⇞ Page up
+// ┡━━━━━╃─────┼─────┼       ⇟ Page down
+// │ 7 ↖ │ 8 ↑ │ 9 ↗ │       ⇞ Page up
+// │ ⇱ < │ ⇧ > │ ⇞ ^ │       ⎀ Insert
+// ├─────┼─────┼─────┤       ␥ Delete
+// │ 4 ← │ 5 ↔ │ 6 → │       ⇦⇧⇨⇩ Directions
+// │ ⇦ [ │   ] │ ⇨ $ │       ⍽ narrow no-break space
+// ├─────┼─────┼─────╆
+// │ 1 ↙ │ 2 ↓ │ 3 ↘ ┃
+// │ ⇲ & │ ⇩ @ │ ⇟ # ┃       1 None
+// ├─────┴─────┼─────┨       2 Num Lock ⇭
+// │ 0       ↕ │             3 Level3 ⇮
+// │ ⎀       ' │             4 Shift+Level3 ⇧⇮
+// └───────────┴
+partial keypad_keys
+xkb_symbols "ossnumber_wang" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KP7>  { [   KP_Home,   KP_7,         less, 0x1002196 ] }; //   <home> 7 < ↖
+    key <KP8>  { [     KP_Up,   KP_8,      greater, 0x1002191 ] }; //     <up> 8 > ↑
+    key <KP9>  { [  KP_Prior,   KP_9,  asciicircum, 0x1002197 ] }; //  <prior> 9 ^ ↗
+ 
+    key <KP4>  { [   KP_Left,   KP_4,  bracketleft, 0x1002190 ] }; //   <left> 4 [ ←
+    key <KP5>  { [  KP_Begin,   KP_5, bracketright, 0x1002194 ] }; //  <begin> 5 ] ↔
+    key <KP6>  { [  KP_Right,   KP_6,       dollar, 0x1002192 ] }; //  <right> 6 $ →
+
+    key <KP1>  { [    KP_End,   KP_1,    ampersand, 0x1002199 ] }; //    <end> 1 & ↙
+    key <KP2>  { [   KP_Down,   KP_2,           at, 0x1002193 ] }; //   <down> 2 @ ↓
+    key <KP3>  { [   KP_Next,   KP_3,   numbersign, 0x1002198 ] }; //   <next> 3 # ↘
+
+    key <KP0>  { [ KP_Insert,   KP_0,   apostrophe, 0x1002195 ] }; // <insert> 0 ' ↕
+};
+
+// Standard base "pc" layout only contains cursor keys, and then gets
+// augmented with the digits later. If you define your own layout for
+// the numpad you can inherit the cursors, but you'll have to define
+// the digits yourself. This module can be included in the rules to
+// define math operators; these are the variants used in computer
+// languages that are based on ASCII. NoSymbol doesn't mean that
+// nothing is bound to the key but that no assignment is done here.
+// srvr_ctrl(stdkeypad) and keypad(x11) declare the operator keys to
+// be of type CTRL+ALT in order to assign server control events to
+// them, but it uses the second level which is overwritten if we have
+// more than one definition (shift state) for the key. Instead, here
+// the commands are put at the fourth level.
+partial keypad_keys
+xkb_symbols "ops" {
+    key <KPDV> { [ NoSymbol,  slash,     NoSymbol,  XF86_Ungrab     ] };
+    key <KPMU> { [ NoSymbol,  asterisk,  NoSymbol,  XF86_ClearGrab  ] };
+    key <KPSU> { [ NoSymbol,  minus,     NoSymbol,  XF86_Prev_VMode ] };
+    key <KPAD> { [ NoSymbol,  plus,      NoSymbol,  XF86_Next_VMode ] };
+    key <KPEQ> { [ NoSymbol,  equal      ] };
+};
+
+// Hexadecimal Numpad, by Roland Kaufmann <rlndkfmn at gmail dot com>
+// License: BSD (also covers variant with ATM digit order)
+// Third-level gives the letters used in hexadecimal numbers, or
+// columns in small spreadsheets. As a bonus, having 'e' available at
+// the center of the keyboard makes it easy to enter floating point
+// numbers in scientific notation.
+// Equal is added to start formulas (most numpads on PCs don't have
+// their own equal key), comma as a list separator (as most
+// programming languages wants period as a decimal separator) and
+// colon to enter times and ranges. Someone also may want to represent
+// multiplication and division in prose using x and colon.
+// Two first levels are specified as NoSymbol to not override any
+// previous specification. Combine this with another keypad specifier,
+// e.g. "legacy".
+partial keypad_keys
+xkb_symbols "hex" {
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    //             None       NumLock      AltGr
+    // symbol row
+    key <KPDV> { [ NoSymbol,  NoSymbol,  parenleft  ] };
+    key <KPMU> { [ NoSymbol,  NoSymbol,  parenright ] };
+    key <KPSU> { [ NoSymbol,  NoSymbol,  dollar     ] };
+
+    // upper row
+    key <KP7>  { [ NoSymbol,  NoSymbol,  a          ] };
+    key <KP8>  { [ NoSymbol,  NoSymbol,  b          ] };
+    key <KP9>  { [ NoSymbol,  NoSymbol,  c          ] };
+ 
+    // home row
+    key <KP4>  { [ NoSymbol,  NoSymbol,  d          ] };
+    key <KP5>  { [ NoSymbol,  NoSymbol,  e          ] };
+    key <KP6>  { [ NoSymbol,  NoSymbol,  f          ] };
+    key <KPAD> { [ NoSymbol,  NoSymbol,  comma      ] };
+
+    // lower row
+    key <KP1>  { [ NoSymbol,  NoSymbol,  equal      ] };
+    key <KP2>  { [ NoSymbol,  NoSymbol,  x          ] };
+    key <KP3>  { [ NoSymbol,  NoSymbol,  colon      ] };
+
+    // decimal row
+    key <KP0>  { [ NoSymbol,  NoSymbol,  backslash  ] };
+};
+
+// Main numbers follows the traditions from ATMs and phones with
+// numbers increasing downwards to the right. (It is easier to
+// change the keyboard layout than to reprogram your local ATM;
+// also cell-phones are becoming more common while calculators are
+// becoming more rare).
+// First level is left unspecified, so it may be combined with another
+// layout, e.g. "legacy".
+partial keypad_keys
+xkb_symbols "atm" {
+    // upper row
+    key <KP7>  { [ NoSymbol,  KP_1 ] };
+    key <KP8>  { [ NoSymbol,  KP_2 ] };
+    key <KP9>  { [ NoSymbol,  KP_3 ] };
+
+    // lower row
+    key <KP1>  { [ NoSymbol,  KP_7 ] };
+    key <KP2>  { [ NoSymbol,  KP_8 ] };
+    key <KP3>  { [ NoSymbol,  KP_9 ] };
+};
+
+
+partial modifier_keys
+xkb_symbols "pointerkeys" {
+    key <NMLK> {	[ Num_Lock,	Pointer_EnableKeys 	]	};
+};
+
+// Only numbers, operators and decimal separator,
+// as seen on keypad overlay on Japanese keyboard.
+// ┌─┬─┬─┬─┐
+// │7│8│9│*│
+// ├─┼─┼─┼─┤
+// │4│5│6│-│
+// ├─┼─┼─┼─┤
+// │1│2│3│+│
+// ├─┼─┼─┼─┤
+// │0│ │·│/│
+// └─┴─┴─┴─┘
+partial keypad_keys
+xkb_symbols "numoperdecsep" {
+    key  <KO7> {	[  KP_7	]	};
+    key  <KO8> {	[  KP_8	]	};
+    key  <KO9> {	[  KP_9	]	};
+// ClsGrb kills whichever client has a grab in effect
+    key <KOMU> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ]
+    };
+
+    key  <KO4> {	[  KP_4	]	};
+    key  <KO5> {	[  KP_5	]	};
+    key  <KO6> {	[  KP_6	]	};
+// -VMode switches to the previous video mode
+    key <KOSU> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ]
+    };
+
+    key  <KO1> {	[  KP_1	]	};
+    key  <KO2> {	[  KP_2	]	};
+    key  <KO3> {	[  KP_3	]	};
+// +VMode switches to the next video mode
+    key <KOAD> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ]
+    };
+
+    key  <KO0> {	[  KP_0	]	};
+    key <KODL> {	[ KP_Decimal ]	};
+// Ungrab cancels server/keyboard/pointer grabs
+    key <KODV> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ]
+    };
+};
diff --git a/data/symbols/kpdl b/data/symbols/kpdl
new file mode 100644
--- /dev/null
+++ b/data/symbols/kpdl
@@ -0,0 +1,102 @@
+// The <KPDL> key is a mess.
+// It was probably originally meant to be a decimal separator.
+// Except since it was declared by USA people it didn't use the original
+// SI separator "," but a "." (since then the USA managed to f-up the SI
+// by making "." an accepted alternative, but standards still use "," as
+// default)
+// As a result users of SI-abiding countries expect either a "." or a ","
+// or a "decimal_separator" which may or may not be translated in one of the
+// above depending on applications.
+// It's not possible to define a default per-country since user expectations
+// depend on the conflicting choices of their most-used applications,
+// operating system, etc. Therefore it needs to be a configuration setting
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+
+
+// Legacy <KPDL> #1
+// This assumes KP_Decimal will be translated in a dot
+partial keypad_keys
+xkb_symbols "dot" {
+
+    key.type[Group1]="KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, KP_Decimal ] }; // <delete> <separator>
+};
+
+
+// Legacy <KPDL> #2
+// This assumes KP_Separator will be translated in a comma
+partial keypad_keys
+xkb_symbols "comma" {
+
+    key.type[Group1]="KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, KP_Separator ] }; // <delete> <separator>
+};
+
+
+// Period <KPDL>, usual keyboard serigraphy in most countries
+partial keypad_keys
+xkb_symbols "dotoss" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, period, comma, 0x100202F ] }; // <delete> . , ⍽ (narrow no-break space)
+};
+
+
+// Period <KPDL>, usual keyboard serigraphy in most countries, latin-9 restriction
+partial keypad_keys
+xkb_symbols "dotoss_latin9" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, period, comma, nobreakspace ] }; // <delete> . , ⍽ (no-break space)
+};
+
+
+// Comma <KPDL>, what most non anglo-saxon people consider the real separator
+partial keypad_keys
+xkb_symbols "commaoss" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, comma, period, 0x100202F ] }; // <delete> , . ⍽ (narrow no-break space)
+};
+
+
+// Momayyez <KPDL>: Bahrain, Iran, Iraq, Kuwait, Oman, Qatar, Saudi Arabia, Syria, UAE
+partial keypad_keys
+xkb_symbols "momayyezoss" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, 0x100066B, comma, 0x100202F ] }; // <delete> ? , ⍽ (narrow no-break space)
+};
+
+
+// Abstracted <KPDL>, pray everything will work out (it usually does not)
+partial keypad_keys
+xkb_symbols "kposs" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, KP_Decimal, KP_Separator, 0x100202F ] }; // <delete> ? ? ⍽ (narrow no-break space)
+};
+
+// Spreadsheets may be configured to use the dot as decimal
+// punctuation, comma as a thousands separator and then semi-colon as
+// the list separator. Of these, dot and semi-colon is most important
+// when entering data by the keyboard; the comma can then be inferred
+// and added to the presentation afterwards. Using semi-colon as a
+// general separator may in fact be preferred to avoid ambiguities
+// in data files. Most times a decimal separator is hard-coded, it
+// seems to be period, probably since this is the syntax used in
+// (most) programming languages.
+partial keypad_keys
+xkb_symbols "semi" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ NoSymbol, NoSymbol, semicolon ] };
+};
diff --git a/data/symbols/latin b/data/symbols/latin
new file mode 100644
--- /dev/null
+++ b/data/symbols/latin
@@ -0,0 +1,256 @@
+// Common Latin alphabet layout
+
+default partial
+xkb_symbols "basic" {
+
+    key <AE01>	{ [         1,     exclam,  onesuperior,   exclamdown ]	};
+    key <AE02>	{ [         2,         at,  twosuperior,    oneeighth ]	};
+    key <AE03>	{ [         3, numbersign, threesuperior,    sterling ]	};
+    key <AE04>	{ [         4,     dollar,   onequarter,       dollar ]	};
+    key <AE05>	{ [         5,    percent,      onehalf, threeeighths ]	};
+    key <AE06>	{ [         6, asciicircum, threequarters, fiveeighths ] };
+    key <AE07>	{ [         7,  ampersand,    braceleft, seveneighths ]	};
+    key <AE08>	{ [         8,   asterisk,  bracketleft,    trademark ]	};
+    key <AE09>	{ [         9,  parenleft, bracketright,    plusminus ]	};
+    key <AE10>	{ [         0, parenright,   braceright,       degree ]	};
+    key <AE11>	{ [     minus, underscore,    backslash, questiondown ]	};
+    key <AE12>	{ [     equal,       plus, dead_cedilla,  dead_ogonek ]	};
+
+    key <AD01>	{ [         q,          Q,           at,  Greek_OMEGA ]	};
+    key <AD02>	{ [         w,          W,      lstroke,      Lstroke ]	};
+    key <AD03>	{ [         e,          E,            e,            E ]	};
+    key <AD04>	{ [         r,          R,    paragraph,   registered ]	};
+    key <AD05>	{ [         t,          T,       tslash,       Tslash ]	};
+    key <AD06>	{ [         y,          Y,    leftarrow,          yen ]	};
+    key <AD07>	{ [         u,          U,    downarrow,      uparrow ]	};
+    key <AD08>	{ [         i,          I,   rightarrow,     idotless ]	};
+    key <AD09>	{ [         o,          O,       oslash,     Ooblique ]	};
+    key <AD10>	{ [         p,          P,        thorn,        THORN ]	};
+    key <AD11>	{ [bracketleft,  braceleft, dead_diaeresis, dead_abovering ] };
+    key <AD12>	{ [bracketright, braceright, dead_tilde,  dead_macron ]	};
+
+    key <AC01>	{ [         a,          A,           ae,           AE ]	};
+    key <AC02>	{ [         s,          S,       ssharp,      section ]	};
+    key <AC03>	{ [         d,          D,          eth,          ETH ]	};
+    key <AC04>	{ [         f,          F,      dstroke,  ordfeminine ]	};
+    key <AC05>	{ [         g,          G,          eng,          ENG ]	};
+    key <AC06>	{ [         h,          H,      hstroke,      Hstroke ]	};
+    key <AC07>	{ [         j,          J,    dead_hook,    dead_horn ] };
+    key <AC08>	{ [         k,          K,          kra,    ampersand ]	};
+    key <AC09>	{ [         l,          L,      lstroke,      Lstroke ]	};
+    key <AC10>	{ [ semicolon,    colon, dead_acute, dead_doubleacute ]	};
+    key <AC11>	{ [apostrophe, quotedbl, dead_circumflex,  dead_caron ]	};
+    key <TLDE>	{ [     grave, asciitilde,      notsign,      notsign ]	};
+
+    key <BKSL>	{ [ backslash,        bar,   dead_grave,   dead_breve ]	};
+    key <AB01>	{ [         z,          Z, guillemotleft,        less ]	};
+    key <AB02>	{ [         x,          X, guillemotright,    greater ]	};
+    key <AB03>	{ [         c,          C,         cent,    copyright ]	};
+    key <AB04>	{ [         v,          V, leftdoublequotemark, leftsinglequotemark ]	};
+    key <AB05>	{ [         b,          B, rightdoublequotemark, rightsinglequotemark ] };
+    key <AB06>	{ [         n,          N,            n,            N ]	};
+    key <AB07>	{ [         m,          M,           mu,    masculine ]	};
+    key <AB08>	{ [     comma,       less, horizconnector,   multiply ]	};
+    key <AB09>	{ [    period,    greater, periodcentered,   division ]	};
+    key <AB10>	{ [     slash,   question, dead_belowdot, dead_abovedot ] };
+
+};
+
+// Northern Europe ( Danish, Finnish, Norwegian, Swedish) common layout
+
+partial
+xkb_symbols "type2" {
+
+    include "latin"
+
+    key <AE01>	{ [         1,     exclam,   exclamdown,  onesuperior ]	};
+    key <AE02>	{ [         2,   quotedbl,           at,  twosuperior ]	};
+    key <AE03>	{ [         3, numbersign,     sterling, threesuperior]	};
+    key <AE04>	{ [         4,   currency,       dollar,   onequarter ]	};
+    key <AE05>	{ [         5,    percent,      onehalf,         cent ]	};
+    key <AE06>	{ [         6,  ampersand,          yen,  fiveeighths ]	};
+    key <AE07>	{ [         7,      slash,    braceleft,     division ]	};
+    key <AE08>	{ [         8,  parenleft,  bracketleft, guillemotleft]	};
+    key <AE09>	{ [         9, parenright, bracketright, guillemotright] };
+    key <AE10>	{ [         0,      equal,   braceright,       degree ]	};
+
+    key <AD03>	{ [         e,          E,     EuroSign,         cent ]	};
+    key <AD04>	{ [         r,          R,   registered,   registered ]	};
+    key <AD05>	{ [         t,          T,        thorn,        THORN ]	};
+    key <AD09>	{ [         o,          O,           oe,           OE ]	};
+    key <AD11>	{ [     aring,  Aring, dead_diaeresis, dead_abovering ]	};
+    key <AD12>	{ [dead_diaeresis, dead_circumflex, dead_tilde, dead_caron ] };
+
+    key <AC01>	{ [         a,          A,  ordfeminine,    masculine ]	};
+
+    key <AB03>	{ [         c,          C,    copyright,    copyright ]	};
+    key <AB08>	{ [     comma,  semicolon, dead_cedilla,  dead_ogonek ]	};
+    key <AB09>	{ [    period,   colon, periodcentered, dead_abovedot ]	};
+    key <AB10>	{ [     minus, underscore, dead_belowdot, dead_abovedot ] };
+};
+
+// Slavic Latin ( Albanian, Croatian, Polish, Slovene, Yugoslav)
+// common layout
+
+partial
+xkb_symbols "type3" {
+
+    include "latin"
+
+    key <AD01>	{ [         q,          Q,    backslash,  Greek_OMEGA ]	};
+    key <AD02>	{ [         w,          W,          bar,      Lstroke ]	};
+    key <AD06>	{ [         z,          Z,    leftarrow,          yen ]	};
+
+    key <AC04>	{ [         f,          F,  bracketleft,  ordfeminine ]	};
+    key <AC05>	{ [         g,          G, bracketright,          ENG ]	};
+    key <AC08>	{ [         k,          K,      lstroke,    ampersand ]	};
+
+    key <AB01>	{ [         y,          Y, guillemotleft,         less ]	};
+    key <AB04>	{ [         v,          V,           at,        grave ]	};
+    key <AB05>	{ [         b,          B,    braceleft,   apostrophe ]	};
+    key <AB06>	{ [         n,          N,   braceright,   braceright ]	};
+    key <AB07>	{ [         m,          M,      section,    masculine ]	};
+    key <AB08>	{ [     comma,  semicolon,         less,     multiply ]	};
+    key <AB09>	{ [    period,      colon,      greater,     division ]	};
+};
+
+// Another one Latin common layout
+// (German, Estonian, Spanish, Icelandic, Italian, Latin American, Portuguese)
+ 
+partial
+xkb_symbols "type4" {
+
+    include "latin"
+
+    key <AE02>	{ [         2,   quotedbl,           at,    oneeighth ]	};
+    key <AE06>	{ [         6,  ampersand,      notsign,  fiveeighths ]	};
+    key <AE07>	{ [         7,      slash,    braceleft, seveneighths ]	};
+    key <AE08>	{ [         8,  parenleft,  bracketleft,    trademark ]	};
+    key <AE09>	{ [         9, parenright, bracketright,    plusminus ]	};
+    key <AE10>	{ [         0,      equal,   braceright,       degree ]	};
+
+    key <AD03>	{ [         e,          E,     EuroSign,         cent ]	};
+
+    key <AB08>	{ [   comma,  semicolon, horizconnector,     multiply ]	};
+    key <AB09>	{ [  period,      colon, periodcentered,     division ]	};
+    key <AB10>	{ [   minus, underscore, dead_belowdot, dead_abovedot ]	};
+};
+
+partial
+xkb_symbols "nodeadkeys" {
+
+    key <AE12>	{ [     equal,       plus,     cedilla,        ogonek ]	};
+    key <AD11>	{ [bracketleft,  braceleft,  diaeresis,        degree ]	};
+    key <AD12>	{ [bracketright, braceright, asciitilde,       macron ]	};
+    key <AC10>	{ [ semicolon,      colon,       acute,   doubleacute ]	};
+    key <AC11>	{ [apostrophe,   quotedbl, asciicircum,         caron ]	};
+    key <BKSL>	{ [ backslash,        bar,       grave,         breve ]	};
+    key <AB10>	{ [     slash,   question, dead_belowdot,    abovedot ]	};
+};
+
+partial
+xkb_symbols "type2_nodeadkeys" {
+ 
+    include "latin(nodeadkeys)"
+
+    key <AD11>	{ [     aring,      Aring,   diaeresis,        degree ]	};
+    key <AD12>	{ [ diaeresis, asciicircum, asciitilde,         caron ]	};
+    key <AB08>	{ [     comma,  semicolon,     cedilla,        ogonek ]	};
+    key <AB09>	{ [    period,   colon, periodcentered,      abovedot ]	};
+    key <AB10>	{ [   minus, underscore, dead_belowdot,      abovedot ]	};
+};
+
+partial
+xkb_symbols "type3_nodeadkeys" {
+ 
+    include "latin(nodeadkeys)"
+};
+
+partial
+xkb_symbols "type4_nodeadkeys" {
+ 
+    include "latin(nodeadkeys)"
+
+    key <AB10>	{ [   minus, underscore, dead_belowdot,      abovedot ]	};
+};
+
+// Added 2008.03.05 by Marcin Woliński
+// See http://marcinwolinski.pl/keyboard/ for a description.
+// Used by pl(intl)
+//
+// ┌────┐
+// │ 2 4│   2 = Shift,  4 = Level3 + Shift
+// │ 1 3│   1 = Normal, 3 = Level3
+// └────┘
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ ~ ~ │ ! ' │ @ " │ # ˝ │ $ ¸ │ % ˇ │ ^ ^ │ & ˘ │ * ˙ │ ( ̣ │ ) ° │ _ ¯ │ + ˛ ┃ ⌫ Back  ┃
+// │ ` ` │ 1 ¡ │ 2 © │ 3 • │ 4 § │ 5 € │ 6 ¢ │ 7 − │ 8 × │ 9 ÷ │ 0 ° │ - – │ = — ┃  space  ┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃       ┃ Q   │ W   │ E   │ R   │ T   │ Y   │ U   │ I   │ O   │ P   │ { « │ } » ┃ Enter ┃
+// ┃Tab ↹  ┃ q   │ w   │ e   │ r   │ t   │ y   │ u   │ i   │ o   │ p   │ [ ‹ │ ] › ┃   ⏎   ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
+// ┃        ┃ A   │ S   │ D   │ F   │ G   │ H   │ J   │ K   │ L   │ : “ │ " ” │ | ¶ ┃      ┃
+// ┃Caps ⇬  ┃ a   │ s   │ d   │ f   │ g   │ h   │ j   │ k   │ l   │ ; ‘ │ ' ’ │ \   ┃      ┃
+// ┣━━━━━━━━┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
+// ┃             │ Z   │ X   │ C   │ V   │ B   │ N   │ M   │ < „ │ > · │ ? ¿ ┃             ┃
+// ┃Shift ⇧      │ z   │ x   │ c   │ v   │ b   │ n   │ m   │ , ‚ │ . … │ / ⁄ ┃Shift ⇧      ┃
+// ┣━━━━━━━┳━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
+// ┃       ┃       ┃       ┃ ␣                               ⍽ ┃       ┃       ┃       ┃
+// ┃Ctrl   ┃Meta   ┃Alt    ┃ ␣           Space               ⍽ ┃AltGr ⇮┃Menu   ┃Ctrl   ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
+ 
+partial
+xkb_symbols "intl" {
+
+    key <TLDE>	{ [     grave,  asciitilde, dead_grave,       dead_tilde ]	};
+    key <AE01>	{ [         1,      exclam, exclamdown,       dead_acute ]	};
+    key <AE02>	{ [         2,          at,  copyright,   dead_diaeresis ]	};
+    key <AE03>	{ [         3,  numbersign,      U2022, dead_doubleacute ]	}; // U+2022 is bullet (the name bullet doesn't work)
+    key <AE04>	{ [         4,      dollar,    section,     dead_cedilla ]	};
+    key <AE05>	{ [         5,     percent,   EuroSign,       dead_caron ]	};
+    key <AE06>	{ [         6, asciicircum,       cent,  dead_circumflex ]	};
+    key <AE07>	{ [         7,   ampersand,      U2212,       dead_breve ]	}; // U+2212 is MINUS SIGN
+    key <AE08>	{ [         8,    asterisk,   multiply,    dead_abovedot ]	};
+    key <AE09>	{ [         9,   parenleft,   division,    dead_belowdot ]	};
+    key <AE10>	{ [         0,  parenright,     degree,   dead_abovering ]	};
+    key <AE11>	{ [     minus,  underscore,     endash,      dead_macron ]	};
+    key <AE12>	{ [     equal,        plus,     emdash,      dead_ogonek ]	};
+
+    key <AD01>	{ [         q,          Q ]	};
+    key <AD02>	{ [         w,          W ]	};
+    key <AD03>	{ [         e,          E ]	};
+    key <AD04>	{ [         r,          R ]	};
+    key <AD05>	{ [         t,          T ]	};
+    key <AD06>	{ [         y,          Y ]	};
+    key <AD07>	{ [         u,          U ]	};
+    key <AD08>	{ [         i,          I ]	};
+    key <AD09>	{ [         o,          O ]	};
+    key <AD10>	{ [         p,          P ]	};
+    key <AD11>	{ [bracketleft,   braceleft,  U2039, guillemotleft ]    };
+    key <AD12>	{ [bracketright, braceright, U203A, guillemotright ]	};
+
+    key <AC01>	{ [         a,          A ]	};
+    key <AC02>	{ [         s,          S ]	};
+    key <AC03>	{ [         d,          D ]	};
+    key <AC04>	{ [         f,          F ]	};
+    key <AC05>	{ [         g,          G ]	};
+    key <AC06>	{ [         h,          H ]	};
+    key <AC07>	{ [         j,          J ]	};
+    key <AC08>	{ [         k,          K ]	};
+    key <AC09>	{ [         l,          L ]	};
+    key <AC10>	{ [ semicolon,      colon,  leftsinglequotemark,  leftdoublequotemark  ]  };
+    key <AC11>	{ [apostrophe,   quotedbl, rightsinglequotemark, rightdoublequotemark  ]  };
+
+    key <BKSL>	{ [ backslash,        bar, 	NoSymbol, paragraph ] };
+    key <AB01>	{ [         z,          Z ]	};
+    key <AB02>	{ [         x,          X ]	};
+    key <AB03>	{ [         c,          C ]	};
+    key <AB04>	{ [         v,          V ]	};
+    key <AB05>	{ [         b,          B ]     };
+    key <AB06>	{ [         n,          N ]	};
+    key <AB07>	{ [         m,          M ]	};
+    key <AB08>	{ [     comma,       less, singlelowquotemark, doublelowquotemark ]	};
+    key <AB09>	{ [    period,    greater, ellipsis, periodcentered ]	};
+    key <AB10>	{ [     slash,   question, U2044,  questiondown ]     };  // U+2044 is FRACTION SLASH
+
+};
diff --git a/data/symbols/level3 b/data/symbols/level3
new file mode 100644
--- /dev/null
+++ b/data/symbols/level3
@@ -0,0 +1,208 @@
+// these variants assign various XKB keycodes to ISO_Level3_Shift so that
+// the third shift level can be reached
+//
+
+// Ensure a mapping to a real modifier for LevelThree
+partial modifier_keys
+xkb_symbols "modifier_mapping" {
+  key.type[Group1] = "ONE_LEVEL";
+
+  replace key <LVL3> {
+    symbols[Group1] = [ ISO_Level3_Shift ]
+  };
+  modifier_map Mod5 { <LVL3> };
+};
+
+// the default behavior is for the right Alt key (AltGr) to generate the
+// third engraved symbol
+default partial modifier_keys
+xkb_symbols "ralt_switch" {
+  key <RALT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  include "level3(modifier_mapping)"
+};
+
+// Right Alt key never chooses 3rd level.
+// This option attempts to undo the effect of a layout's
+// including ralt_switch.  You may also want to select another
+// level3 option that maps the level3 shift to some other key.
+partial modifier_keys
+xkb_symbols "ralt_alt" {
+  key <RALT> { 
+    type[Group1]="TWO_LEVEL",
+    type[Group2]="TWO_LEVEL",
+    type[Group3]="TWO_LEVEL",
+    type[Group4]="TWO_LEVEL",
+    symbols[Group1] = [ Alt_R, Meta_R ], 
+    symbols[Group2] = [ Alt_R, Meta_R ], 
+    symbols[Group3] = [ Alt_R, Meta_R ], 
+    symbols[Group4] = [ Alt_R, Meta_R ]
+    };
+  modifier_map Mod1    { <RALT> };
+};
+
+partial modifier_keys
+xkb_symbols "ralt_switch_multikey" {
+  key <RALT> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift, Multi_key ]
+    };
+  include "level3(modifier_mapping)"
+};
+
+// special case or right Alt switch - for use with grp:alts_toggle
+//
+partial hidden modifier_keys
+xkb_symbols "ralt_switch_for_alts_toggle" {
+ virtual_modifiers LAlt, AlGr;
+  key <LALT> {
+    type[Group1]="PC_RALT_LEVEL2",
+    symbols[Group1] = [ Alt_L,  ISO_Prev_Group,  ISO_Prev_Group ],
+    virtualMods= LAlt
+  };
+  key <RALT> {
+    type[Group1]="PC_ALT_LEVEL2",
+    symbols[Group1] = [ ISO_Level3_Shift, ISO_Next_Group ],
+    virtualMods= AltGr
+  };
+  include "level3(modifier_mapping)"
+};
+
+// using the level(alt_switch) map, either Alt key temporarily chooses
+// the third shift level.  (Mostly be used to imitate Mac OS functionality.)
+partial modifier_keys
+xkb_symbols "alt_switch" {
+  include "level3(lalt_switch)"
+  include "level3(ralt_switch)"
+};
+
+partial modifier_keys
+xkb_symbols "lalt_switch" {
+  key <LALT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  include "level3(modifier_mapping)"
+};
+
+// using the level(switch) map, the right Control key temporarily
+// chooses the third shift level (until it is released).
+partial modifier_keys
+xkb_symbols "switch" {
+  key <RCTL> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  include "level3(modifier_mapping)"
+};
+
+// using the level(menu_switch) map, the Menu key temporarily
+// chooses the third shift level (until it is released).
+partial modifier_keys
+xkb_symbols "menu_switch" {
+  key <MENU> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  include "level3(modifier_mapping)"
+};
+
+// using the level3(win_switch) map, the either Windows' logo key
+// temporarily chooses the third shift level.
+partial modifier_keys
+xkb_symbols "win_switch" {
+  include "level3(lwin_switch)"
+  include "level3(rwin_switch)"
+};
+
+// using the level3(lwin_switch) map, the left Windows' logo key
+// temporarily chooses the third shift level.
+partial modifier_keys
+xkb_symbols "lwin_switch" {
+  key <LWIN> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  include "level3(modifier_mapping)"
+};
+
+// using the level(rwin_switch) map, the right Windows' logo key
+// temporarily chooses the third shift level.  If you use this map,
+// you should define your keyboard as pc101 or pc102 instead of pc104
+// or pc105.
+partial modifier_keys
+xkb_symbols "rwin_switch" {
+  key <RWIN> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  include "level3(modifier_mapping)"
+};
+
+// using the level3(enter_switch) map, the Enter key on the keypad
+// temporarily chooses the third shift level.  This is especially
+// useful for Mac laptops which miss the right Alt key.
+partial modifier_keys
+xkb_symbols "enter_switch" {
+  key <KPEN> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  include "level3(modifier_mapping)"
+};
+
+partial modifier_keys
+xkb_symbols "caps_switch" {
+  key <CAPS> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+  };
+  include "level3(modifier_mapping)"
+};
+
+partial modifier_keys
+xkb_symbols "bksl_switch" {
+  key <BKSL> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+  };
+  include "level3(modifier_mapping)"
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch" {
+  key <LSGT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+  };
+  include "level3(modifier_mapping)"
+};
+
+partial modifier_keys
+xkb_symbols "caps_switch_latch" {
+  key <CAPS> {
+    type[Group1]="THREE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ]
+  };
+  include "level3(modifier_mapping)"
+};
+
+partial modifier_keys
+xkb_symbols "bksl_switch_latch" {
+  key <BKSL> {
+    type[Group1]="THREE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ]
+  };
+  include "level3(modifier_mapping)"
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch_latch" {
+  key <LSGT> {
+    type[Group1]="THREE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ]
+  };
+  include "level3(modifier_mapping)"
+};
diff --git a/data/symbols/level5 b/data/symbols/level5
new file mode 100644
--- /dev/null
+++ b/data/symbols/level5
@@ -0,0 +1,153 @@
+// these variants assign various XKB keycodes to ISO_Level5_Shift so that
+// the third shift level can be reached
+//
+
+// Ensure a mapping to a real modifier for LevelFive
+partial modifier_keys
+xkb_symbols "modifier_mapping" {
+  key.type[Group1] = "ONE_LEVEL";
+
+  replace key <MDSW> {
+    symbols[Group1] = [ ISO_Level5_Shift ]
+  };
+  modifier_map Mod3 { <MDSW> };
+};
+
+// using the level(switch) map, the right Control key temporarily
+// chooses the fifth shift level (until it is released).
+partial modifier_keys
+xkb_symbols "rctrl_switch" {
+  key <RCTL> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift ]
+    };
+  include "level5(modifier_mapping)"
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch" {
+  key <LSGT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift ]
+    };
+  include "level5(modifier_mapping)"
+};
+
+partial modifier_keys
+xkb_symbols "ralt_switch" {
+  key <RALT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift ]
+    };
+  include "level5(modifier_mapping)"
+};
+
+
+// The following modifier keys are used to switch to the third shift and to set a
+// corresponding lock, implemented as NumLock.
+
+partial modifier_keys
+xkb_symbols "lock" {
+  // This adds the definitions needed to create a level5-lock behaviour, using
+  // the real modifier NumLock as a lock indicator.
+  // See also: types/level5 : EIGHT_LEVEL_LEVEL_FIVE_LOCK
+  // See also: compat/level5(level5_lock)
+  key.type[Group1] = "ONE_LEVEL";
+
+  include "level5(modifier_mapping)"
+
+  replace key <HYPR> {
+    vmods = NumLock,
+    symbols[Group1] = [ NoSymbol ],
+    actions[Group1] = [ SetMods(modifiers=NumLock) ]
+  };
+  modifier_map Mod2 { <HYPR> };
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch_lock" {
+
+  include "level5(lock)"
+
+  key <LSGT> {
+    type[Group1] = "EIGHT_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "lwin_switch_lock" {
+
+  include "level5(lock)"
+
+  key <LWIN> {
+    type[Group1] = "EIGHT_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "ralt_switch_lock" {
+
+  include "level5(lock)"
+
+  key <RALT> {
+    type[Group1] = "EIGHT_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "rwin_switch_lock" {
+
+  include "level5(lock)"
+
+  key <RWIN> {
+    type[Group1] = "EIGHT_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch_lock_cancel" {
+
+  include "level5(lock)"
+
+  key <LSGT> {
+    type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "lwin_switch_lock_cancel" {
+
+  include "level5(lock)"
+
+  key <LWIN> {
+    type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "ralt_switch_lock_cancel" {
+
+  include "level5(lock)"
+
+  key <RALT> {
+    type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "rwin_switch_lock_cancel" {
+
+  include "level5(lock)"
+
+  key <RWIN> {
+    type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
diff --git a/data/symbols/nbsp b/data/symbols/nbsp
new file mode 100644
--- /dev/null
+++ b/data/symbols/nbsp
@@ -0,0 +1,204 @@
+// Let Space key provide No-Break Space (NBSP), Narrow No-Break Space (NNBSP),
+// Zero-Width Non-Joiner (ZWNJ), and Zero-Width Joiner (ZWJ) for the desired
+// levels.
+
+
+////////////////////////////////////////
+// Only Space
+
+partial
+xkb_symbols "none" {
+  key <SPCE> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1]= [ space ]
+  };
+};
+
+
+////////////////////////////////////////
+// No-Break Space
+
+partial
+xkb_symbols "level2" {
+  key <SPCE> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1]= [ space, nobreakspace ]
+  };
+};
+
+
+// level3 & level3ns provide no-breaking spaces starting from level3
+// This is good for typographers but experience shows many users accidently
+// type no-breaking spaces on the CLI (resulting in errors)
+// Used by fr(latin9) and lt(std)
+partial
+xkb_symbols "level3" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, nobreakspace ]
+  };
+};
+
+// level3s kills fourth level
+// Used by ca(multix)
+partial
+xkb_symbols "level3s" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, nobreakspace, NoSymbol ]
+  };
+};
+
+// for this reason pushing no-breaking spaces to level4 is the safe default nowadays
+partial
+xkb_symbols "level4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, space, nobreakspace ]
+  };
+};
+
+
+////////////////////////////////////////
+// Narrow No-Break Space
+
+// level3n provides narrow no-breaking space in addition to the normal one
+partial
+xkb_symbols "level3n" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, nobreakspace, 0x100202F ]
+  };
+};
+
+// level4n provides narrow no-breaking space in addition to the normal one
+partial
+xkb_symbols "level4n" {
+ key <SPCE> {
+   type[Group1]="EIGHT_LEVEL",
+   symbols[Group1]= [ space, space, space, nobreakspace, space, 0x100202F, NoSymbol, NoSymbol ]
+ };
+};
+
+// level4nl provides narrow no-breaking space in addition to the normal one
+// without forcing the use of level5 for mostly four-level layouts
+// Used by fr(oss), be(oss)…
+partial
+xkb_symbols "level4nl" {
+ key <SPCE> {
+   type[Group1]="LOCAL_EIGHT_LEVEL",
+   symbols[Group1]= [ space, space, space, nobreakspace, space, 0x100202F, NoSymbol, NoSymbol ]
+ };
+};
+
+
+////////////////////////////////////////
+// Zero-Width Non-Joiner & Zero-Width Joiner
+// Author: Behnam Esfahbod <behnam@esfahbod.info>
+
+// ZWNJ and ZWJ are widely used in Persian, Kurdinsh, Pashto, Uzbek and other
+// languages that use PersoArabic script.
+
+
+// ZWNJ on level 2
+partial
+xkb_symbols "zwnj2" {
+  key <SPCE> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1]= [ space, 0x100200c ]
+  };
+};
+
+
+// ZWNJ on level 2
+// ZWJ on level 3
+partial
+xkb_symbols "zwnj2zwj3" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, 0x100200d ]
+  };
+};
+
+
+// ZWNJ on level 2
+// ZWJ on level 3
+// NBSP on level 4
+partial
+xkb_symbols "zwnj2zwj3nb4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, 0x100200d, nobreakspace ]
+  };
+};
+
+// ZWNJ on level 2
+// NBSP on level 3
+// Used by ir(ku_ara), af(basic), af(ps), af(uz), af(olpc-fa), af(olpc-ps), af(olpc-uz)
+partial
+xkb_symbols "zwnj2nb3" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, nobreakspace ]
+  };
+};
+
+
+// ZWNJ on level 2
+// NBSP on level 3
+partial
+xkb_symbols "zwnj2nb3s" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, nobreakspace, NoSymbol ]
+  };
+};
+
+
+// ZWNJ on level 2
+// NBSP on level 3
+// ZWJ on level 4
+partial
+xkb_symbols "zwnj2nb3zwj4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, nobreakspace, 0x100200d ]
+  };
+};
+
+
+// ZWNJ on level 2
+// NBSP on level 3
+// NNBSP on level 4
+// Used by ir(pes)
+partial
+xkb_symbols "zwnj2nb3nnb4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, nobreakspace, 0x100202F ]
+  };
+};
+
+
+// ZWNJ on level 3
+// ZWJ on level 4
+// Used by in(deva), in(olpc)
+partial
+xkb_symbols "zwnj3zwj4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, 0x100200c, 0x100200d ]
+  };
+};
+
+
+// NBSP on level 2
+// ZWNJ on level 3
+// Used by lk(sin_phonetic)
+partial
+xkb_symbols "nb2zwnj3s" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, nobreakspace, 0x100200c, NoSymbol ]
+  };
+};
diff --git a/data/symbols/pc b/data/symbols/pc
new file mode 100644
--- /dev/null
+++ b/data/symbols/pc
@@ -0,0 +1,90 @@
+default partial alphanumeric_keys modifier_keys 
+xkb_symbols "pc105" {
+
+    key <ESC>  {	[ Escape			]	};
+
+    // the extra key on most European keyboards
+    key <LSGT> {	[      less,    greater,          bar,    brokenbar ]	};
+
+    // these keys are common to all layouts
+    key <BKSL> {	[ backslash,	bar		]	};
+    key <SPCE> {	[ 	 space			]	};
+
+    include "srvr_ctrl(fkey2vt)"
+    include "pc(editing)"
+    include "keypad(x11)"
+
+    key <BKSP> {	[ BackSpace, BackSpace	]	};
+
+    key  <TAB> {	[ Tab,	ISO_Left_Tab	]	};
+    key <RTRN> {	[ Return	]	};
+
+    key <CAPS> {	[ Caps_Lock	]	};
+
+    key <NMLK> {	[ Num_Lock 	]	};
+
+    key <LFSH> {	[ Shift_L	]	};
+    key <LCTL> {	[ Control_L	]	};
+
+    key <LWIN> {	[ Super_L			]	};
+
+    key <RTSH> {	[ Shift_R	]	};
+    key <RCTL> {	[ Control_R	]	};
+
+    key <RWIN> {	[ Super_R			]	};
+
+    key <MENU> {	[ Menu			]	};
+
+    // begin modifier mappings
+    modifier_map Shift  { Shift_L, Shift_R };
+    modifier_map Lock   { Caps_Lock };
+    modifier_map Control{ Control_L, Control_R };
+    modifier_map Mod2   { Num_Lock };
+    modifier_map Mod4   { Super_L, Super_R };
+
+    //  Fake keys for virtual<->real modifiers mapping 
+    key <LVL3> {	[ ISO_Level3_Shift	]	};
+    key <MDSW> {	[ Mode_switch 		]	};
+    modifier_map Mod5   { <LVL3>, <MDSW> };
+
+    key <ALT>  {	[ NoSymbol, Alt_L	]	};
+    include "altwin(meta_alt)"
+
+    key <META> {	[ NoSymbol, Meta_L	]	};
+    modifier_map Mod1   { <META> };
+
+    key <SUPR> {	[ NoSymbol, Super_L	]	};
+    modifier_map Mod4   { <SUPR> };
+
+    key <HYPR> {	[ NoSymbol, Hyper_L	]	};
+    modifier_map Mod4   { <HYPR> };
+
+    key <OUTP> { [ XF86Display ] };
+    key <KITG> { [ XF86KbdLightOnOff ] };
+    key <KIDN> { [ XF86KbdBrightnessDown ] };
+    key <KIUP> { [ XF86KbdBrightnessUp ] };
+};
+
+partial hidden alphanumeric_keys
+xkb_symbols "editing" {
+    key <PRSC> {
+	type= "PC_ALT_LEVEL2",
+	symbols[Group1]= [ Print, Sys_Req ]
+    };
+    key <SCLK> {  [  Scroll_Lock	]	};
+    key <PAUS> {
+	type= "PC_CONTROL_LEVEL2",
+	symbols[Group1]= [ Pause, Break ]
+    };
+    key  <INS> {	[  Insert		]	};
+    key <HOME> {	[  Home			]	};
+    key <PGUP> {	[  Prior		]	};
+    key <DELE> {	[  Delete		]	};
+    key  <END> {	[  End			]	};
+    key <PGDN> {	[  Next			]	};
+
+    key   <UP> {	[  Up			]	};
+    key <LEFT> {	[  Left			]	};
+    key <DOWN> {	[  Down			]	};
+    key <RGHT> {	[  Right		]	};
+};
diff --git a/data/symbols/ru b/data/symbols/ru
new file mode 100644
--- /dev/null
+++ b/data/symbols/ru
@@ -0,0 +1,677 @@
+// based on
+// russian standard keyboard
+// AEN <aen@logic.ru>
+// 2001/12/23 by Leon Kanter <leon@blackcatlinux.com>
+// 2005/12/09 Valery Inozemtsev <shrek@altlinux.ru>
+
+// Windows layout
+partial default alphanumeric_keys
+xkb_symbols "winkeys" {
+    include "ru(common)"
+
+    name[Group1]= "Russian";
+
+    key <AE03> {        [               3,      numerosign      ]       };
+    key <AE04> {        [               4,       semicolon      ]       };
+    key <AE05> {        [               5,         percent      ]       };
+    key <AE06> {        [               6,           colon      ]       };
+    key <AE07> {        [               7,        question      ]       };
+    key <AE08> {        [               8,        asterisk      ]       };
+
+    key <AB10> {        [          period,           comma      ]       };
+    key <BKSL> {        [       backslash,           slash      ]       };
+};
+
+partial hidden alphanumeric_keys 
+xkb_symbols "common" {
+
+    key	<AE01> {	[		1,	    exclam 	]	};
+    key	<AE02> {	[		2,        quotedbl	]	};
+    key	<AE03> {	[		3,      numbersign	]	};
+    key	<AE04> {	[		4,        asterisk	]	};
+    key	<AE05> {	[		5,	     colon	]	};
+    key	<AE06> {	[		6,	     comma	]	};
+    key	<AE07> {	[		7,	    period	]	};
+    key	<AE08> {	[		8,	 semicolon	]	};
+    key	<AE09> {	[		9,	 parenleft	]	};
+    key	<AE10> {	[		0,	parenright	]	};
+    key	<AE11> {	[	    minus,	underscore	]	};
+    key	<AE12> {	[	    equal,	      plus	]	};
+    key	<BKSL> {	[	backslash,             bar	]	};
+    key	<AB10> {	[	    slash,	  question	]	};
+    key <LSGT> {        [           slash,             bar      ]       };
+
+    key	<TLDE> {	[     Cyrillic_io,     Cyrillic_IO	]	};
+    key	<AD01> {	[ Cyrillic_shorti, Cyrillic_SHORTI	]	};
+    key	<AD02> {	[    Cyrillic_tse,    Cyrillic_TSE	]	};
+    key	<AD03> {	[      Cyrillic_u,	Cyrillic_U	]	};
+    key	<AD04> {	[     Cyrillic_ka,     Cyrillic_KA	]	};
+    key	<AD05> {	[     Cyrillic_ie,     Cyrillic_IE	]	};
+    key	<AD06> {	[     Cyrillic_en,     Cyrillic_EN	]	};
+    key	<AD07> {	[    Cyrillic_ghe,    Cyrillic_GHE	]	};
+    key	<AD08> {	[    Cyrillic_sha,    Cyrillic_SHA	]	};
+    key	<AD09> {	[  Cyrillic_shcha,  Cyrillic_SHCHA	]	};
+    key	<AD10> {	[     Cyrillic_ze,     Cyrillic_ZE	]	};
+    key	<AD11> {	[     Cyrillic_ha,     Cyrillic_HA	]	};
+    key	<AD12> {	[Cyrillic_hardsign,Cyrillic_HARDSIGN	]	};
+    key	<AC01> {	[     Cyrillic_ef,     Cyrillic_EF	]	};
+    key	<AC02> {	[   Cyrillic_yeru,   Cyrillic_YERU	]	};
+    key	<AC03> {	[     Cyrillic_ve,     Cyrillic_VE	]	};
+    key	<AC04> {	[      Cyrillic_a,	Cyrillic_A	]	};
+    key	<AC05> {	[     Cyrillic_pe,     Cyrillic_PE	]	};
+    key	<AC06> {	[     Cyrillic_er,     Cyrillic_ER	]	};
+    key	<AC07> {	[      Cyrillic_o,	Cyrillic_O	]	};
+    key	<AC08> {	[     Cyrillic_el,     Cyrillic_EL	]	};
+    key	<AC09> {	[     Cyrillic_de,     Cyrillic_DE	]	};
+    key	<AC10> {	[    Cyrillic_zhe,    Cyrillic_ZHE	]	};
+    key	<AC11> {	[      Cyrillic_e,	Cyrillic_E	]	};
+    key	<AB01> {	[     Cyrillic_ya,     Cyrillic_YA	]	};
+    key	<AB02> {	[    Cyrillic_che,    Cyrillic_CHE	]	};
+    key	<AB03> {	[     Cyrillic_es,     Cyrillic_ES	]	};
+    key	<AB04> {	[     Cyrillic_em,     Cyrillic_EM	]	};
+    key	<AB05> {	[      Cyrillic_i,	Cyrillic_I	]	};
+    key	<AB06> {	[     Cyrillic_te,     Cyrillic_TE	]	};
+    key	<AB07> {	[Cyrillic_softsign,Cyrillic_SOFTSIGN	]	};
+    key	<AB08> {	[     Cyrillic_be,     Cyrillic_BE	]	};
+    key	<AB09> {	[     Cyrillic_yu,     Cyrillic_YU	]	};
+
+    key.type[group1]="TWO_LEVEL";
+
+    include "kpdl(comma)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "legacy" {
+    include "ru(common)"
+
+    name[Group1]= "Russian (legacy)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+
+    include "ru(common)"
+
+    key        <TLDE> {        [          0x01000451,          0x01000401, grave       ]       }; // Ñ‘, Ð
+    key <AE03> {        [               3,      numbersign, 0x01002116      ]       }; // â„–
+    key <AE04> {        [               4,          dollar, semicolon   ]       };
+    key <AE06> {        [               6,      asciicircum, colon      ]       };
+    key <AE07> {        [               7,          ampersand           ]       };
+    key <AE09> {        [               9,          parenleft, acute    ]       };
+    key <AC12> {        [       backslash,          bar, slash          ]       };
+
+    include "group(olpc)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "typewriter" {
+    include "ru(common)"
+    name[Group1]= "Russian (typewriter)";
+    key	<TLDE> {	[	      bar,	      plus	] 	};
+    key	<AE01> {	[      numerosign,		 1 	]	};
+    key	<AE02> {	[           minus,		 2	]	};
+    key	<AE03> {	[	    slash,		 3	]	};
+    key	<AE04> {	[	 quotedbl,		 4	]	};
+    key	<AE05> {	[	    colon,		 5	]	};
+    key	<AE06> {	[	    comma,		 6	]	};
+    key	<AE07> {	[	   period,		 7	]	};
+    key	<AE08> {	[      underscore,		 8	]	};
+    key	<AE09> {	[	 question,		 9	]	};
+    key	<AE10> {	[	  percent,		 0	]	};
+    key	<AE11> {	[	   exclam,	     equal	]	};
+    key	<AE12> {	[       semicolon,	 backslash	]	};
+
+    key	<BKSL> {	[	parenright,	 parenleft	]	};
+
+    key	<AD12> {	[Cyrillic_hardsign,Cyrillic_HARDSIGN	]	};
+    key	<AB10> {	[     Cyrillic_io,     Cyrillic_IO	]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "typewriter-legacy" {
+    include "ru(common)"
+    name[Group1]= "Russian (typewriter, legacy)";
+    key	<TLDE> {	[      apostrophe,	  quotedbl	] 	};
+    key	<AE01> {	[	   exclam,		 1 	]	};
+    key	<AE02> {	[      numerosign,		 2	]	};
+    key	<AE03> {	[	    slash,		 3	]	};
+    key	<AE04> {	[	semicolon,		 4	]	};
+    key	<AE05> {	[	    colon,		 5	]	};
+    key	<AE06> {	[	    comma,		 6	]	};
+    key	<AE07> {	[	   period,		 7	]	};
+    key	<AE08> {	[      underscore,		 8	]	};
+    key	<AE09> {	[	 question,		 9	]	};
+    key	<AE10> {	[	  percent,		 0	]	};
+    key	<BKSL> {	[	parenleft,	parenright	]	};
+
+    key	<AD12> {	[Cyrillic_hardsign,Cyrillic_HARDSIGN	]	};
+    key	<AB10> {	[     Cyrillic_io,     Cyrillic_IO	]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "phonetic" {
+
+    name[Group1]= "Russian (phonetic)";
+
+    key	<AE01> {	[		1,	    exclam 	]	};
+    key	<AE02> {	[		2,        	at	]	};
+    key	<AE03> {	[		3,     Cyrillic_io 	]	};
+    key	<AE04> {	[		4,     Cyrillic_IO	]	};
+    key	<AE05> {	[		5, Cyrillic_hardsign   	]	};
+    key	<AE06> {	[		6, Cyrillic_HARDSIGN	]	};
+    key	<AE07> {	[		7,	 ampersand	]	};
+    key	<AE08> {	[		8,        asterisk	]	};
+    key	<AE09> {	[		9,	 parenleft	]	};
+    key	<AE10> {	[		0,	parenright	]	};
+    key <AE11> {	[	    minus,	underscore	]	};
+
+    key	<AB09> {	[	   period,	   greater	]	};
+    key	<AB10> {	[	    slash,	  question	]	};
+    key	<AB08> {	[	    comma,	      less	]	};
+    key	<AC10> {	[	semicolon,	     colon	]	};
+    key	<AC11> {	[      apostrophe,	  quotedbl	]	};
+    key	<LSGT> {	[	      bar,	 brokenbar	]	};
+
+    key	<TLDE> {	[     Cyrillic_yu,     Cyrillic_YU	]	};
+    key	<LatQ> {	[     Cyrillic_ya,     Cyrillic_YA	]	};
+    key	<LatZ> {	[     Cyrillic_ze,     Cyrillic_ZE	]	};
+    key	<LatS> {	[     Cyrillic_es,     Cyrillic_ES	]	};
+    key	<LatA> {	[      Cyrillic_a,	Cyrillic_A	]	};
+    key	<LatW> {	[     Cyrillic_ve,     Cyrillic_VE	]	};
+    key	<LatC> {	[    Cyrillic_tse,    Cyrillic_TSE	]	};
+    key	<LatX> {	[Cyrillic_softsign,Cyrillic_SOFTSIGN	]	};
+    key	<LatD> {	[     Cyrillic_de,     Cyrillic_DE	]	};
+    key	<LatE> {	[     Cyrillic_ie,     Cyrillic_IE	]	};
+    key	<LatV> {	[    Cyrillic_zhe,    Cyrillic_ZHE	]	};
+    key	<LatF> {	[     Cyrillic_ef,     Cyrillic_EF	]	};
+    key	<LatT> {	[     Cyrillic_te,     Cyrillic_TE	]	};
+    key	<LatR> {	[     Cyrillic_er,     Cyrillic_ER	]	};
+    key	<LatN> {	[     Cyrillic_en,     Cyrillic_EN	]	};
+    key	<LatB> {	[     Cyrillic_be,     Cyrillic_BE	]	};
+    key	<LatH> {	[     Cyrillic_ha,     Cyrillic_HA	]	};
+    key	<LatG> {	[    Cyrillic_ghe,    Cyrillic_GHE	]	};
+    key	<LatY> {	[   Cyrillic_yeru,   Cyrillic_YERU	]	};
+    key	<LatM> {	[     Cyrillic_em,     Cyrillic_EM	]	};
+    key	<LatJ> {	[ Cyrillic_shorti, Cyrillic_SHORTI	]	};
+    key	<LatU> {	[      Cyrillic_u,	Cyrillic_U	]	};
+    key	<LatK> {	[     Cyrillic_ka,     Cyrillic_KA	]	};
+    key	<LatI> {	[      Cyrillic_i,	Cyrillic_I	]	};
+    key	<LatO> {	[      Cyrillic_o,	Cyrillic_O	]	};
+    key	<LatL> {	[     Cyrillic_el,     Cyrillic_EL	]	};
+    key	<LatP> {	[     Cyrillic_pe,     Cyrillic_PE	]	};
+
+    key	<AD11> {	[    Cyrillic_sha,    Cyrillic_SHA	]	};
+    key	<AE12> {	[    Cyrillic_che,    Cyrillic_CHE	]	};
+    key	<AD12> {	[  Cyrillic_shcha,  Cyrillic_SHCHA	]	};
+    key	<BKSL> {	[      Cyrillic_e,	Cyrillic_E	]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "phonetic_winkeys" {
+
+    include "ru(phonetic)"
+    name[Group1]= "Russian (phonetic WinKeys)";
+
+    key	<LatX> {	[     Cyrillic_ha,     Cyrillic_HA	]	};
+    key	<LatH> {	[     Cyrillic_che,     Cyrillic_CHE	]	};
+    key	<AE12> {	[ Cyrillic_softsign, Cyrillic_softsign  ]	};
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "tt" {
+    include "ru(winkeys)"
+    name[Group1]= "Tatar";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key <TLDE> {       [      0x010004bb,      0x010004ba,
+                             Cyrillic_io,     Cyrillic_IO      ]       };
+    key        <AD02> {        [      0x010004e9,      0x010004e8,
+                            Cyrillic_tse,    Cyrillic_TSE      ]       };
+    key        <AD09> {        [      0x010004d9,      0x010004d8,
+                          Cyrillic_shcha,  Cyrillic_SHCHA      ]       };
+    key        <AD12> {        [      0x010004af,      0x010004ae,
+                       Cyrillic_hardsign,Cyrillic_HARDSIGN     ]       };
+    key        <AC10> {        [      0x010004a3,      0x010004a2,
+                            Cyrillic_zhe,    Cyrillic_ZHE      ]       };
+    key        <AB07> {        [      0x01000497,      0x01000496,
+                       Cyrillic_softsign,Cyrillic_SOFTSIGN     ]       };
+
+    include "level3(ralt_switch)"
+
+};
+
+partial alphanumeric_keys 
+xkb_symbols "os_legacy" {
+    include "ru(common)"
+
+    name[Group1]= "Ossetian (legacy)";
+
+    key	<TLDE> {	[      Cyrillic_e,      Cyrillic_E	]	};
+    key	<AC07> {	[      Cyrillic_o,	Cyrillic_O, Cyrillic_io, Cyrillic_IO	]	};
+    key	<AC11> {	[      0x010004D5,      0x010004D4      ]	};
+};
+
+partial alphanumeric_keys 
+xkb_symbols "os_winkeys" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Ossetian (WinKeys)";
+
+    key	<TLDE> {	[      Cyrillic_e,      Cyrillic_E	]	};
+    key	<AC07> {	[      Cyrillic_o,	Cyrillic_O, Cyrillic_io, Cyrillic_IO	]	};
+    key	<AC11> {	[      0x010004D5,      0x010004D4      ]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "cv" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Chuvash";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key        <AD03> {        [      Cyrillic_u,	Cyrillic_U,
+                          U04F3,    U04F2      ]       };
+    key        <AD05> {        [      Cyrillic_ie,     Cyrillic_IE,
+                          U04D7,    U04D6     ]       };
+    key        <AC04> {        [      Cyrillic_a,	Cyrillic_A,
+                          U04D1,    U04D0      ]       };
+    key        <AB03> {        [      Cyrillic_es,     Cyrillic_ES,
+                          U04AB,    U04AA      ]       };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "udm" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Udmurt";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key	<AE01> {	[	 question,	    exclam,    1,       1 	]	};
+    key	<AE02> {	[	parenleft,        quotedbl,    2,       2	]	};
+    key	<AE03> {	[      parenright,      numerosign,    3,       3	]	};
+    key	<AE04> {	[	    colon,       semicolon,    4,       4	]	};
+    key	<AE05> {	[	 asterisk,	   percent,    5,       5	]	};
+    key	<AE06> {	[      0x010004dd,	0x010004dc,    6,       6	]	};
+    key	<AE07> {	[      0x010004e7,	0x010004e6,    7,       7	]	};
+    key	<AE08> {	[      0x010004f5,	0x010004f4,    8,       8	]	};
+    key	<AE09> {	[      0x010004e5,	0x010004e4,    9,       9	]	};
+    key	<AE10> {	[      0x010004df,	0x010004de,    0,       0	]	};
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "cv_latin" {
+    include "us(alt-intl)"
+
+    name[Group1]= "Chuvash (Latin)";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key        <AD01> {	[	  q,	Q,    0x01000161,       0x01000160 ] };
+    key        <AD02> {	[	  w,	W,    udiaeresis,       Udiaeresis ] };
+    key        <AD03> { [         e,	E,    0x01000115,	0x01000114 ] };
+    key        <AD07> {	[	  u,	U,    udiaeresis,       Udiaeresis ] };
+    key        <AD08> {	[	  i,	I,    0x0100012d,       0x0100012c ] };
+    key        <AD09> {	[	  o,	O,    odiaeresis,       Odiaeresis ] };
+    key        <AC01> { [	  a,    A,        abreve,           Abreve ] };
+    key        <AC02> { [	  s,    S,      scedilla,         Scedilla ] };
+    key        <AC05> { [	  g,    G,        gbreve,           Gbreve ] };
+    key        <AC07> { [	  j,    J,    0x01000131,       0x01000130 ] };
+    key        <AB03> { [         c,    C,      ccedilla,         Ccedilla ] };
+
+    include "level3(ralt_switch)"
+
+};
+
+// Komi language layout
+// based on
+// russian standard keyboard
+// Vlad Shakhov <lumpen.intellectual@gmail.com>
+// Last Changes 2007/10/23 by Vlad Shakhov <lumpen.intellectual@gmail.com>
+
+partial alphanumeric_keys 
+xkb_symbols "kom" {
+
+    include "ru(winkeys)"
+
+    name[Group1]= "Komi";
+
+    key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+
+// cyrilllic o with diaeresis 
+    key	<AC07> { [ 	Cyrillic_o,		Cyrillic_O,		
+			U04E7,  		U04E6		] };
+    
+// hard I as additional key for soft Cyrillic_I 
+    key <AB05> { [      Cyrillic_i,		Cyrillic_I,
+			Ukrainian_i,     	Ukrainian_I     ] };
+
+    include "level3(ralt_switch)"
+};
+
+// Yakut language layout
+// 2008/04/23 Yakov Aleksandrov <bertjickty@yandex.ru>
+// 2008/04/23 Anatoliy Zhozhikov <jav@sitc.ru>
+// 2008/04/23 Aleksandr Varlamov
+partial alphanumeric_keys
+xkb_symbols "sah" {
+
+    include "ru(winkeys)"
+
+    name[Group1]= "Yakut";
+
+    key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+
+    key <TLDE> { [	Cyrillic_io,		Cyrillic_IO,
+    			U04EB,			U04EA			] };
+    key <AD01> { [	Cyrillic_shorti,	Cyrillic_SHORTI,
+			U048B,			U048A			] };
+    key <AD03> { [	Cyrillic_u,		Cyrillic_U,
+			Cyrillic_u_straight,	Cyrillic_U_straight	] };
+    key <AD04> { [	Cyrillic_ka,		Cyrillic_KA,
+    			U04C4,			U04C3			] };
+    key <AD06> { [	Cyrillic_en,		Cyrillic_EN,
+			U04A5,			U04A4			] };
+    key <AD07> { [	Cyrillic_ghe,		Cyrillic_GHE,
+			U0495,			U0494			] };
+    key <AD10> { [	Cyrillic_ze,		Cyrillic_ZE,
+    			U04E1,			U04E0			] };
+    key <AD11> { [	Cyrillic_ha,		Cyrillic_HA,
+			Cyrillic_shha,		Cyrillic_SHHA		] };
+    key <AC07> { [	Cyrillic_o,		Cyrillic_O,
+			Cyrillic_o_bar,		Cyrillic_O_bar		] };
+    key <AC10> { [	Cyrillic_zhe,		Cyrillic_ZHE,
+    			U0461,			U0460			] };
+    key <AB02> { [	Cyrillic_che,		Cyrillic_CHE,
+    			Cyrillic_u_macron,	Cyrillic_U_macron	] };
+    key <AB04> { [	Cyrillic_em,		Cyrillic_EM,
+    			U04C8,			U04C7			] };
+    key <AB05> { [	Cyrillic_i,		Cyrillic_I,
+			Cyrillic_i_macron,	Cyrillic_I_macron	] };
+
+    include "level3(ralt_switch)"
+};
+
+
+//Kalmyk language layout
+//based on the Kalmyk language layout: http://soft.oyrat.org/
+//Nikolay Korneev <halmg@oyrat.org>
+//Toli Miron <mirontoli@gmail.com>
+        
+partial alphanumeric_keys
+xkb_symbols "xal" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Kalmyk";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key <AE01> {        [                     question,                  exclam,               1      ]       };
+    key <AE02> {        [      	            numerosign,                quotedbl,               2      ]       };
+    key <AE03> {        [          Cyrillic_u_straight,     Cyrillic_U_straight,               3      ]       };
+    key <AE04> {        [               Cyrillic_schwa,          Cyrillic_SCHWA,               4      ]       }; 
+    key <AE05> {        [                     asterisk,                 percent,               5      ]       };
+    key <AE06> {        [        Cyrillic_en_descender,   Cyrillic_EN_descender,               6      ]       };
+    key <AE07> {        [               Cyrillic_o_bar,          Cyrillic_O_bar,               7      ]       }; 
+    key <AE08> {        [                Cyrillic_shha,           Cyrillic_SHHA,               8      ]       }; 
+    key <AE09> {        [       Cyrillic_zhe_descender,  Cyrillic_ZHE_descender,               9      ]       };
+    key <AE10> {        [                    semicolon,                   colon,               0      ]       };
+
+    key <TLDE> {        [                    parenleft,               parenright, Cyrillic_io, Cyrillic_IO    ]       };
+
+    key <AD02> {        [                 Cyrillic_tse,             Cyrillic_TSE,         dollar      ]       };
+    key <AD03> {        [                   Cyrillic_u,               Cyrillic_U,       EuroSign      ]       }; 
+    key <AD04> {        [                  Cyrillic_ka,              Cyrillic_KA,     registered      ]       }; 
+    key <AD05> {        [                  Cyrillic_ie,              Cyrillic_IE,      trademark      ]       }; 
+    key <AD11> {        [                  Cyrillic_ha,              Cyrillic_HA,    bracketleft      ]       }; 
+    key <AD12> {        [            Cyrillic_hardsign,        Cyrillic_HARDSIGN,   bracketright      ]       };
+    key <AC11> {        [                   Cyrillic_e,               Cyrillic_E,     apostrophe      ]       };
+    key <AB03> {        [                  Cyrillic_es,              Cyrillic_ES,      copyright      ]       }; 
+    key <AB08> {        [                  Cyrillic_be,              Cyrillic_BE,           less      ]       };
+    key <AB09> {        [                  Cyrillic_yu,              Cyrillic_YU,        greater      ]       };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "dos" {
+
+    include "ru(common)"
+
+    name[Group1]= "Russian (DOS)";
+
+    key        <TLDE> {        [   parenright,  parenleft   ] };
+    key        <AE04> {        [   4,           currency    ] };
+    key        <AE09> {        [   9,           question    ] };
+    key        <AE10> {        [   0,           percent     ] };
+
+    key        <AB10> {        [   Cyrillic_io, Cyrillic_IO ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "bak" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Bashkirian";
+    key.type[group1]="FOUR_LEVEL";
+
+    key <TLDE> { [     0x010004d9,       0x010004d8,   Cyrillic_io,   Cyrillic_IO      ] };
+    key <AE01> { [     exclam,           quotedbl,      1,       1       ] };
+    key <AE02> { [     0x010004e9,       0x010004e8,    2,       2 ] };
+    key <AE03> { [     0x010004a1,       0x010004a0,    3,       3 ] };
+    key <AE04> { [     0x01000493,       0x01000492,    4,       4 ] };
+    key <AE05> { [     0x010004ab,       0x010004aa,    5,       5 ] };
+    key <AE06> { [     colon,            semicolon,     6,       6 ] };
+    key <AE07> { [     0x01000499,       0x01000498,    7,       7 ] };
+    key <AE08> { [     0x010004bb,       0x010004ba,    8,       8 ] };
+    key <AE09> { [     question,         parenleft,     9,       9 ] };
+    key <AE10> { [     numerosign,       parenright,    0,       0 ] };
+    key <AE11> { [     minus,            percent,       minus,    underscore     ]};
+    key <AE12> { [     0x010004af, 0x010004ae,    equal,  plus    ]};
+    key <BKSL> { [     0x010004a3, 0x010004a2,    backslash,        slash     ]};	
+	
+    include "level3(ralt_switch)"
+};
+
+// Serbian charecters added as third level symbols to Russian keyboard layout.
+
+partial alphanumeric_keys
+xkb_symbols "srp" {
+    include "ru(common)"
+    include "level3(ralt_switch)"
+
+    name[Group1]= "Serbian (Russia)";
+
+    key <AE03> { [ 3, numerosign ] };
+    key <AE04> { [ 4, semicolon ] };
+    key <AE05> { [ 5, percent ] };
+    key <AE06> { [ 6, colon ] };
+    key <AE07> { [ 7, question ] };
+    key <AE08> { [ 8, asterisk ] };
+    key <AB10> { [ period, comma ] };
+    key <BKSL> { [ backslash, slash ] };
+    key	<AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI, U458, U408 ] };
+    key	<AD06> { [ Cyrillic_en, Cyrillic_EN, U45A, U40A ] };
+    key	<AC08> { [ Cyrillic_el, Cyrillic_EL, U459, U409 ] };
+    key	<AC09> { [ Cyrillic_de, Cyrillic_DE, U45F, U40F ] };
+    key	<AC10> { [ Cyrillic_zhe, Cyrillic_ZHE, U452, U402 ] };
+    key	<AB02> { [ Cyrillic_che, Cyrillic_CHE, U45B, U40B ] };
+};
+
+// Mari language layout
+// based on Russian standard keyboard
+// http://www.marlamuter.ru/
+partial alphanumeric_keys
+xkb_symbols "chm" {
+    include "ru(common)"
+    
+    name[Group1]= "Mari";
+
+    key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+    key <AC04> { [      Cyrillic_a,     Cyrillic_A,    U04D3,       U04D2     ] };
+    key <AD03> { [      Cyrillic_u, Cyrillic_U,    U04F1,       U04F0     ] };
+    key <AC02> { [      Cyrillic_ui,    Cyrillic_UI,   U04F9,       U04F8     ] };
+    key <AD06> { [      Cyrillic_n, Cyrillic_N,    U04A5,       U04A4     ] };
+    key <AC11> { [      Cyrillic_e, Cyrillic_E,    U04E9,       U04E8     ] };
+    key <AC10> { [      Cyrillic_zh,    Cyrillic_ZH,   U04EB,       U04EA     ] };
+    key <AC01> { [      Cyrillic_f, Cyrillic_F,     UF537,      UF536     ] };
+
+    include "level3(ralt_switch)"
+};
+
+// EXTRAS:
+
+// Church Slavonic language layout
+// based on
+// russian standard keyboard
+// Aleksandr Andreev and Yuri Shardt 
+// Last Changes 2010/08/01. Contact <aleksandr.andreev@gmail.com>
+
+partial alphanumeric_keys
+xkb_symbols "chu"
+{
+	    name[Group1]= "Church Slavonic";
+	    key <TLDE> { [ U0457, U0407, U0482, U20DD ] }; // ї Ї ҂ e.g: а⃝ where the last is a combining ten thousands sign
+	    key <AE01> { [ U0461, U0460, U047D, U047C] }; // ѡ Ѡ ѽ Ѽ
+	    key <AE02> { [ U0454, U0404, U0465, U0464] }; // є Є ѥ Ѥ
+	    key <AE03> { [ U046F, U046E, U0469, U0468] }; // ѯ Ѯ ѩ Ѩ
+	    key <AE04> { [ U0471, U0470, U046D, U046C] }; // ѱ Ѱ ѭ Ѭ
+	    key <AE05> { [ U0473, U0472, UA657, UA656] }; // ѳ Ѳ iotified A
+	    key <AE06> { [ U0475, U0474, U0477, U0476] }; // ѵ Ѵ ѷ Ѷ
+	    key <AE07> { [ U047B, U047A, UA64D, UA64C] }; // ѻ Ѻ ꙍ Ꙍ
+	    key <AE08> { [ U047F, U047E, U046B, U046A] }; // ѿ Ѿ ѫ Ѫ
+	    key <AE09> { [ U0455, U0405, parenleft, U002A ] }; // ѕ Ѕ ( *
+	    key <AE10> { [ Cyrillic_u,	Cyrillic_U, parenright, U0488 ] }; // у У ) NB: for diagraph Ouk, use Cyrillic_o + Cyrillic_u
+	    key <AE11> { [ U0483, U0486, U0487, U005F] }; // а҃ а҆ а҇, _ (titlo, psili, pokrytie, underscore)
+	    key <AE12> { [ U0301, U0300, U0484, UA67E] }; //  а̀ а́ а҄ ꙾ (oxia, varia, kamora, kavyka)
+	    key	<AD01> {	[ Cyrillic_shorti, Cyrillic_SHORTI, U0456	]	};
+	    key	<AD02> {	[    Cyrillic_tse,    Cyrillic_TSE, U2DF0	]	};
+	    key	<AD03> {	[   UA64B,  UA64A, U2DF9  	]	}; // Cyrillic monograph Uk (not U)!
+	    key	<AD04> {	[     Cyrillic_ka,     Cyrillic_KA, U2DE6	]	};
+	    key	<AD05> {	[     Cyrillic_ie,     Cyrillic_IE, U2DF7	]	};
+	    key	<AD06> {	[     Cyrillic_en,     Cyrillic_EN, U2DE9	]	};
+	    key	<AD07> {	[    Cyrillic_ghe,    Cyrillic_GHE, U2DE2	]	};
+	    key	<AD08> {	[    Cyrillic_sha,    Cyrillic_SHA, U2DF2	]	};
+	    key	<AD09> {	[  Cyrillic_shcha,  Cyrillic_SHCHA, U2DF3	]	};
+	    key	<AD10> {	[     Cyrillic_ze,     Cyrillic_ZE, U2DE5	]	};
+	    key	<AD11> {	[     Cyrillic_ha,     Cyrillic_HA, U2DEF	]	};
+	    key	<AD12> {	[Cyrillic_hardsign,Cyrillic_HARDSIGN, UA67D	]	}; // Payerok
+	    key <BKSL> { [backslash, slash, colon, question] }; // \ / : ? (note, for Slavonic question use semicolon
+	    key	<AC01> {	[     Cyrillic_ef,     Cyrillic_EF	]	};
+	    key	<AC02> {	[   Cyrillic_yeru,   Cyrillic_YERU	]	};
+	    key	<AC03> {	[     Cyrillic_ve,     Cyrillic_VE, U2DE1	]	};
+	    key	<AC04> {	[      Cyrillic_a,	Cyrillic_A, U2DF6	]	};
+	    key	<AC05> {	[     Cyrillic_pe,     Cyrillic_PE, U2DEB	]	};
+	    key	<AC06> {	[     Cyrillic_er,     Cyrillic_ER, U2DEC	]	};
+	    key	<AC07> {	[      Cyrillic_o,	Cyrillic_O, U2DEA	]	};
+	    key	<AC08> {	[     Cyrillic_el,     Cyrillic_EL, U2DE7	]	};
+	    key	<AC09> {	[     Cyrillic_de,     Cyrillic_DE, U2DE3	]	};
+	    key	<AC10> {	[    Cyrillic_zhe,    Cyrillic_ZHE, U2DE4	]	};
+	    key	<AC11> {	[     U0463,	U0462, U2DFA	]	}; // Yat
+	    key	<AB01> {	[    U0467, U0466, U2DFD 	]	}; // Small Yus
+	    key	<AB02> {	[    Cyrillic_che,    Cyrillic_CHE, U2DF1	]	};
+	    key	<AB03> {	[     Cyrillic_es,     Cyrillic_ES, U2DED	]	};
+	    key	<AB04> {	[     Cyrillic_em,     Cyrillic_EM, U2DE8	]	};
+	    key	<AB05> {	[      Cyrillic_i,	Cyrillic_I	]	};
+	    key	<AB06> {	[     Cyrillic_te,     Cyrillic_TE, U2DEE	]	};
+	    key	<AB07> {	[Cyrillic_softsign,Cyrillic_SOFTSIGN	]	};
+	    key	<AB08> {	[     Cyrillic_be,     Cyrillic_BE, U2DE0	]	};
+	    key	<AB09> {	[     Cyrillic_yu,     Cyrillic_YU, U2DFB	]	};
+	    key <AB10> {        [          period,    comma, semicolon, exclam      ]       };
+};
+
+
+// RUU (Russian-Ukrainian United keyboard layout).
+// Modified Russian standart keyboard with third level contains Ukrainian
+// and Belorusian alphabetic letters and commonly used Unicode symbols.
+// Description http://wiki.opennet.ru/RUU [russian]
+// Vasyĺ V. Vercynśkyj <fuckel@ukr.net>
+// Last Changes 2011/05/11
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ ' ~ │ ! ≈ │ " ∞ │ № ₴ │ ; € │ % ‰ │ : ≤ │ ? ≥ │ * × │ ( { │ ) } │ _ – │ + ± ┃ ⌫       ┃
+// │ ’  ́ │ 1 ÷ │ 2 ¤ │ 3 § │ 4 $ │ 5 ° │ 6 < │ 7 > │ 8 • │ 9 [ │ 0 ] │ - — │ = ≠ ┃Backspace┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃       ┃ Й   │ Ц   │ У Ў │ К   │ Е Ё │ Н   │ Г Ґ │ Ш   │ Щ   │ З   │ Х   │ Ъ Ї ┃ Enter ┃
+// ┃ Tab ↹ ┃ й   │ ц   │ у ў │ к ® │ е ё │ н   │ г ґ │ ш   │ щ   │ з   │ х   │ ъ ї ┃   ⏎   ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
+// ┃ Caps   ┃ Ф   │ Ы І │ В   │ А   │ П   │ Р   │ О   │ Л   │ Д   │ Ж   │ Э Є │ | ¦ ┃      ┃
+// ┃ Lock ⇬ ┃ ф   │ ы і │ в   │ а   │ п   │ р   │ о   │ л   │ д   │ ж   │ э є │ / \ ┃      ┃
+// ┣━━━━━━━━┻━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┲━━━┷━━━━━┻━━━━━━┫
+// ┃          ┃ Я   │ Ч   │ С   │ М   │ И   │ Т   │ Ь   │ Б „ │ Ю “ │ , … ┃                ┃
+// ┃  Shift ⇧ ┃ я   │ ч   │ с © │ м   │ и   │ т ™ │ ь µ │ б « │ ю » │ . / ┃     Shift ⇧    ┃
+// ┣━━━━━━━┳━━┻━━━━┳┷━━━━━┷┱────┴─────┴─────┴─────┴─────┴─────┴┲━━━━┷━━┳━━┻━━━━┳━━━━━━━┳━━━┛
+// ┃       ┃       ┃       ┃                                   ┃       ┃       ┃       ┃
+// ┃ Ctrl  ┃ Meta  ┃  Alt  ┃                Space              ┃AltGr ⇮┃ Menu  ┃ Ctrl  ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
+
+
+
+partial alphanumeric_keys
+xkb_symbols "ruu" {
+    include "ru(common)"
+
+    name[Group1]= "Russian (with Ukrainian-Belorussian layout)";
+
+    key <TLDE> {    [	U2019,		apostrophe,	U0301,		asciitilde	]	};	// Apostrophe and Stress symbol
+    key <AE01> {    [	1,		exclam,		U00F7,		U2248		]	};	// Division Sign and Almost Equal To
+    key <AE02> {    [	2,		quotedbl,	currency,	infinity	]	};
+    key <AE03> {    [	3,		numerosign,	U00A7,		U20B4		]	};	// Paragraph and Hryvnia sign
+    key <AE04> {    [	4,		semicolon,	dollar,		EuroSign	]	};
+    key <AE05> {    [	5,		percent,	degree,		U2030		]	};	// Per Mille Sign
+    key <AE06> {    [	6,		colon,		less,		U2264		]	};	// Less-Than Or Equal To
+    key <AE07> {    [	7,		question,	greater,	U2265		]	};	// Greater-Than Or Equal To
+    key <AE08> {    [	8,		asterisk,	enfilledcircbullet, U00D7	]	};	// Multiplication Sign
+    key <AE09> {    [	9,		parenleft,	bracketleft,	braceleft	]	};
+    key <AE10> {    [	0,		parenright,	bracketright,	braceright	]	};
+    key <AE11> {    [	minus,		underscore,	emdash,		endash		]	};
+    key <AE12> {    [	equal,		plus,		notequal,	plusminus	]	};
+    key <AD03> {    [	Cyrillic_u,	Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU ]	};
+    key <AD04> {    [	Cyrillic_ka,	Cyrillic_KA,	registered			]	};	// Registered tm
+    key <AD05> {    [	Cyrillic_ie,	Cyrillic_IE,	Cyrillic_io,	Cyrillic_IO	]	};
+    key <AD07> {    [Cyrillic_ghe, Cyrillic_GHE, Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
+    key <AD10> {    [	Cyrillic_ze,	Cyrillic_ZE,	U00B6				]	};	// Pilcrow Sign
+    key <AD12> {    [Cyrillic_hardsign,	Cyrillic_HARDSIGN, Ukrainian_yi, Ukrainian_YI	]	};
+    key <AC02> {    [	Cyrillic_yeru,	Cyrillic_YERU,	Ukrainian_i,  Ukrainian_I	]	};
+    key <AC11> {    [	Cyrillic_e,	Cyrillic_E,	Ukrainian_ie,Ukrainian_IE	]	};
+    key <BKSL> {    [	slash,		bar,		backslash,	U00A6		]	};	// Broken Bar
+    key <AB03> {    [	Cyrillic_es,	Cyrillic_ES,	copyright			]	};
+    key <AB06> {    [	Cyrillic_te,	Cyrillic_TE,	trademark			]	};
+    key <AB07> {    [	Cyrillic_softsign, Cyrillic_SOFTSIGN, U00B5			]	};	// Micro Sign
+    key <AB08> {    [	Cyrillic_be,	Cyrillic_BE,	guillemotleft,	doublelowquotemark ]	};
+    key <AB09> {    [	Cyrillic_yu,	Cyrillic_YU,	guillemotright,	leftdoublequotemark ]	};
+    key <AB10> {    [	period,		comma,		slash,		ellipsis	]	};
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+	xkb_symbols "sun_type6" {
+	include "sun_vndr/ru(sun_type6)"
+};
+
+// Apple layout
+partial alphanumeric_keys
+xkb_symbols "mac" {
+include "ru(common)"
+
+    name[Group1]= "Russian (Macintosh)";
+
+    key <LSGT> {	[	     less,	   greater	]	};
+    key <AE02> {	[		2,	  quotedbl	]	};
+    key <AE03> {        [               3,      numerosign     	]       };
+    key <AE04> {        [               4,         percent     	]       };
+    key <AE05> {        [               5,	     colon     	]       };
+    key <AE06> {        [               6,           comma     	]       };
+    key <AE07> {        [               7,	    period	]       };
+    key <AE08> {        [               8,       semicolon     	]       };
+    key <TLDE> {	[    bracketright,     bracketleft	]	};
+    key <BKSL> {        [       Cyrillic_io,   Cyrillic_IO      ]       };
+};
diff --git a/data/symbols/rupeesign b/data/symbols/rupeesign
new file mode 100644
--- /dev/null
+++ b/data/symbols/rupeesign
@@ -0,0 +1,5 @@
+// keyboards having the RupeeSign on the 4 key
+partial
+xkb_symbols "4" {
+    key <AE04>	{ [  NoSymbol,   NoSymbol,   U20B9 ]	};
+};
diff --git a/data/symbols/shift b/data/symbols/shift
new file mode 100644
--- /dev/null
+++ b/data/symbols/shift
@@ -0,0 +1,84 @@
+partial modifier_keys 
+xkb_symbols "breaks_caps" {
+    key <LFSH> {
+	type = "ALPHABETIC",
+    	actions [Group1] = [
+	    SetMods(modifiers=Shift),
+	    SetMods(modifiers=Shift+Lock,clearLocks)
+	]
+    };
+    key <RTSH> {
+	type = "ALPHABETIC",
+	actions [Group1] = [
+	    SetMods(modifiers=Shift),
+	    SetMods(modifiers=Shift+Lock,clearLocks)
+	]
+    };
+};
+
+// When pressed together with another Shift key, set/release Lock.
+partial modifier_keys
+xkb_symbols "lshift_both_capslock" {
+  key <LFSH> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ Shift_L,                       Caps_Lock                ]
+  };
+};
+// When pressed together with another Shift key, set or unset Lock.
+partial modifier_keys
+xkb_symbols "rshift_both_capslock" {
+  key <RTSH> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ Shift_R,                       Caps_Lock                ]
+  };
+};
+partial modifier_keys
+xkb_symbols "both_capslock" {
+  include "shift(lshift_both_capslock)"
+  include "shift(rshift_both_capslock)"
+};
+
+// Release Lock when pressed alone and set Lock when pressed with another Shift key.
+partial modifier_keys
+xkb_symbols "lshift_both_capslock_cancel" {
+  key <LFSH> {
+    type[Group1]="ALPHABETIC",
+    symbols[Group1] = [ Shift_L,                       Caps_Lock                ]
+  };
+};
+// Release Lock when pressed alone and set Lock when pressed with another Shift key.
+partial modifier_keys
+xkb_symbols "rshift_both_capslock_cancel" {
+  key <RTSH> {
+    type[Group1]="ALPHABETIC",
+    symbols[Group1] = [ Shift_R,                       Caps_Lock                ]
+  };
+};
+partial modifier_keys
+xkb_symbols "both_capslock_cancel" {
+  include "shift(lshift_both_capslock_cancel)"
+  include "shift(rshift_both_capslock_cancel)"
+};
+
+
+// When pressed together with another Shift key, lock/unlock Shift.
+partial modifier_keys
+xkb_symbols "lshift_both_shiftlock" {
+  key <LFSH> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ Shift_L,                       Shift_Lock ]
+  };
+};
+// When pressed together with another Shift key, lock/unlock Shift.
+partial modifier_keys
+xkb_symbols "rshift_both_shiftlock" {
+  key <RTSH> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ Shift_R,                       Shift_Lock ]
+  };
+};
+partial modifier_keys
+xkb_symbols "both_shiftlock" {
+  include "shift(lshift_both_shiftlock)"
+  include "shift(rshift_both_shiftlock)"
+};
diff --git a/data/symbols/srvr_ctrl b/data/symbols/srvr_ctrl
new file mode 100644
--- /dev/null
+++ b/data/symbols/srvr_ctrl
@@ -0,0 +1,125 @@
+// Actions which control the server's behavior
+
+partial keypad_keys function_keys
+xkb_symbols "xfree86" {
+    include "srvr_ctrl(stdkeypad)"
+    include "srvr_ctrl(fkey2vt)"
+};
+
+partial keypad_keys 
+xkb_symbols "stdkeypad" {
+
+// Ungrab cancels server/keyboard/pointer grabs
+    key <KPDV> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ]
+    };
+
+// ClsGrb kills whichever client has a grab in effect
+    key <KPMU> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ]
+    };
+
+// -VMode switches to the previous video mode
+    key <KPSU> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ]
+    };
+
+// +VMode switches to the next video mode
+    key <KPAD> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode]
+    };
+
+};
+
+partial function_keys 
+xkb_symbols "fkey2vt" {
+
+    key <FK01> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F1, F1, F1, F1, XF86_Switch_VT_1 ]
+    };
+
+    key <FK02> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F2, F2, F2, F2, XF86_Switch_VT_2 ]
+    };
+
+    key <FK03> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F3, F3, F3, F3, XF86_Switch_VT_3 ]
+    };
+
+    key <FK04> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F4, F4, F4, F4, XF86_Switch_VT_4 ]
+    };
+
+    key <FK05> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F5, F5, F5, F5, XF86_Switch_VT_5 ]
+    };
+
+    key <FK06> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F6, F6, F6, F6, XF86_Switch_VT_6 ]
+    };
+
+    key <FK07> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F7, F7, F7, F7, XF86_Switch_VT_7 ]
+    };
+
+    key <FK08> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F8, F8, F8, F8, XF86_Switch_VT_8 ]
+    };
+
+    key <FK09> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F9, F9, F9, F9, XF86_Switch_VT_9 ]
+    };
+
+    key <FK10> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F10, F10, F10, F10, XF86_Switch_VT_10 ]
+    };
+
+    key <FK11> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F11, F11, F11, F11, XF86_Switch_VT_11 ]
+    };
+
+    key <FK12> {
+	type="CTRL+ALT",
+	symbols[Group1]= [ F12, F12, F12, F12, XF86_Switch_VT_12 ]
+    };
+
+};
+
+partial function_keys keypad_keys
+xkb_symbols "no_srvr_keys" {
+
+    key.type="TWO_LEVEL";
+
+    key <FK01> { [ F1, F1 ]	};
+    key <FK02> { [ F2, F2 ]	};
+    key <FK03> { [ F3, F3 ]	};
+    key <FK04> { [ F4, F4 ]	};
+    key <FK05> { [ F5, F5 ]	};
+    key <FK06> { [ F6, F6 ]	};
+    key <FK07> { [ F7, F7 ]	};
+    key <FK08> { [ F8, F8 ]	};
+    key <FK09> { [ F9, F9 ]	};
+    key <FK10> { [ F10, F10 ]	};
+    key <FK11> { [ F11, F11 ]	};
+    key <FK12> { [ F12, F12 ]	};
+
+    key <KPDV> { [ KP_Divide,	KP_Divide	] };
+    key <KPMU> { [ KP_Multiply,	KP_Multiply	] };
+    key <KPSU> { [ KP_Subtract,	KP_Subtract	] };
+    key <KPAD> { [ KP_Add,	KP_Add		] };
+};
diff --git a/data/symbols/terminate b/data/symbols/terminate
new file mode 100644
--- /dev/null
+++ b/data/symbols/terminate
@@ -0,0 +1,7 @@
+partial default modifier_keys
+xkb_symbols "ctrl_alt_bksp" {
+    key <BKSP> {
+        type="CTRL+ALT",
+        symbols[Group1] = [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, Terminate_Server ]
+    };
+};
diff --git a/data/symbols/us b/data/symbols/us
new file mode 100644
--- /dev/null
+++ b/data/symbols/us
@@ -0,0 +1,1541 @@
+default
+partial alphanumeric_keys modifier_keys 
+xkb_symbols "basic" {
+
+    name[Group1]= "English (US)";
+
+    // Alphanumeric section
+    key <TLDE> {	[     grave,	asciitilde	]	};
+    key <AE01> {	[	  1,	exclam 		]	};
+    key <AE02> {	[	  2,	at		]	};
+    key <AE03> {	[	  3,	numbersign	]	};
+    key <AE04> {	[	  4,	dollar		]	};
+    key <AE05> {	[	  5,	percent		]	};
+    key <AE06> {        [         { H, E, L, L, O },    asciicircum     ]       };
+    key <AE07> {        [         { Y, E, S, space, T, H, I, S, space, I, S, space, D, O, G },  ampersand       ]       };
+    key <AE08> {	[	  8,	asterisk	]	};
+    key <AE09> {	[	  9,	parenleft	]	};
+    key <AE10> {	[	  0,	parenright	]	};
+    key <AE11> {	[     minus,	underscore	]	};
+    key <AE12> {	[     equal,	plus		]	};
+
+    key <AD01> {	[	  q,	Q 		]	};
+    key <AD02> {	[	  w,	W		]	};
+    key <AD03> {	[	  e,	E		]	};
+    key <AD04> {	[	  r,	R		]	};
+    key <AD05> {	[	  t,	T		]	};
+    key <AD06> {	[	  y,	Y		]	};
+    key <AD07> {	[	  u,	U		]	};
+    key <AD08> {	[	  i,	I		]	};
+    key <AD09> {	[	  o,	O		]	};
+    key <AD10> {	[	  p,	P		]	};
+    key <AD11> {	[ bracketleft,	braceleft	]	};
+    key <AD12> {	[ bracketright,	braceright	]	};
+
+    key <AC01> {	[	  a,	A 		]	};
+    key <AC02> {	[	  s,	S		]	};
+    key <AC03> {	[	  d,	D		]	};
+    key <AC04> {	[	  f,	F		]	};
+    key <AC05> {	[	  g,	G		]	};
+    key <AC06> {	[	  h,	H		]	};
+    key <AC07> {	[	  j,	J		]	};
+    key <AC08> {	[	  k,	K		]	};
+    key <AC09> {	[	  l,	L		]	};
+    key <AC10> {	[ semicolon,	colon		]	};
+    key <AC11> {	[ apostrophe,	quotedbl	]	};
+
+    key <AB01> {	[	  z,	Z 		]	};
+    key <AB02> {	[	  x,	X		]	};
+    key <AB03> {	[	  c,	C		]	};
+    key <AB04> {	[	  v,	V		]	};
+    key <AB05> {	[	  b,	B		]	};
+    key <AB06> {	[	  n,	N		]	};
+    key <AB07> {	[	  m,	M		]	};
+    key <AB08> {	[     comma,	less		]	};
+    key <AB09> {	[    period,	greater		]	};
+    key <AB10> {	[     slash,	question	]	};
+
+    key <BKSL> {	[ backslash,         bar	]	};
+    // End alphanumeric section
+};
+
+partial alphanumeric_keys
+xkb_symbols "euro" {
+
+    name[Group1]= "English (US, with euro on 5)";
+
+    include "us(basic)"
+
+    include "eurosign(5)"
+
+    include "level3(ralt_switch)"
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "intl" {
+
+    name[Group1]= "English (US, international with dead keys)";
+
+    include "us(basic)"
+
+    // Alphanumeric section
+    key <TLDE> { [dead_grave, dead_tilde,         grave,       asciitilde ] };
+    key <AE01> { [	   1,     exclam,    exclamdown,      onesuperior ] };
+    key <AE02> { [	   2,         at,   twosuperior, dead_doubleacute ] };
+    key <AE03> { [	   3, numbersign, threesuperior,      dead_macron ] };
+    key <AE04> { [	   4,     dollar,      currency,         sterling ] };
+    key <AE05> { [	   5,    percent,      EuroSign,     dead_cedilla ] };
+    key <AE06> { [    6, dead_circumflex,    onequarter,      asciicircum ] };
+    key <AE07> { [	   7,  ampersand,       onehalf,	dead_horn ] };
+    key <AE08> { [	   8,   asterisk, threequarters,      dead_ogonek ] };
+    key <AE09> { [	   9,  parenleft, leftsinglequotemark, dead_breve ] };
+    key <AE10> { [	   0, parenright, rightsinglequotemark, dead_abovering ] };
+    key <AE11> { [     minus, underscore,           yen,    dead_belowdot ] };
+    key <AE12> { [     equal,       plus,      multiply,         division ] };
+
+    key <AD01> { [	   q,          Q,    adiaeresis,       Adiaeresis ] };
+    key <AD02> { [	   w,          W,         aring,            Aring ] };
+    key <AD03> { [	   e,          E,        eacute,           Eacute ] };
+    key <AD04> { [	   r,          R,    registered,       registered ] };
+    key <AD05> { [	   t,          T,         thorn,            THORN ] };
+    key <AD06> { [	   y,          Y,    udiaeresis,       Udiaeresis ] };
+    key <AD07> { [	   u,          U,        uacute,           Uacute ] };
+    key <AD08> { [	   i,          I,        iacute,           Iacute ] };
+    key <AD09> { [	   o,          O,        oacute,           Oacute ] };
+    key <AD10> { [	   p,          P,    odiaeresis,       Odiaeresis ] };
+    key <AD11> { [ bracketleft,  braceleft,  guillemotleft, leftdoublequotemark ] };
+    key <AD12> { [bracketright, braceright, guillemotright, rightdoublequotemark ] };
+
+    key <AC01> { [	   a,          A,        aacute,           Aacute ] };
+    key <AC02> { [	   s,          S,        ssharp,          section ] };
+    key <AC03> { [	   d,          D,           eth,              ETH ] };
+    key <AC04> { [	   f,          F,             f,                F ] };
+    key <AC05> { [	   g,          G,             g,                G ] };
+    key <AC06> { [	   h,          H,             h,                H ] };
+    key <AC07> { [	   j,          J,             j,                J ] };
+    key <AC08> { [	   k,          K,            oe,               OE ] };
+
+    key <AC09> { [	   l,          L,        oslash,         Ooblique ] };
+    key <AC10> { [ semicolon,      colon,     paragraph,           degree ] };
+    key <AC11> { [dead_acute, dead_diaeresis, apostrophe,        quotedbl ] };
+
+    key <AB01> { [	   z,          Z,            ae,               AE ] };
+    key <AB02> { [	   x,          X,             x,                X ] };
+    key <AB03> { [	   c,          C,     copyright,             cent ] };
+    key <AB04> { [	   v,          V,             v,                V ] };
+    key <AB05> { [	   b,          B,             b,                B ] };
+    key <AB06> { [	   n,          N,        ntilde,           Ntilde ] };
+    key <AB07> { [	   m,          M,            mu,               mu ] };
+    key <AB08> { [     comma,       less,      ccedilla,         Ccedilla ] };
+    key <AB09> { [    period,    greater, dead_abovedot,       dead_caron ] };
+    key <AB10> { [     slash,   question,  questiondown,        dead_hook ] };
+    key <BKSL> { [ backslash,        bar,       notsign,        brokenbar ] };
+
+    include "level3(ralt_switch)"
+};
+
+// Based on symbols/us_intl keyboard map:
+// Dead-keys definition for a very simple US/ASCII layout.
+// by Conectiva (http://www.conectiva.com.br)
+// modified by Ricardo Y. Igarashi (iga@that.com.br)
+
+// Added the following deadkeys, to make it truly international:
+//
+// dead_macron: on AltGr-minus
+// dead_breve: on AltGr-parenleft
+// dead_abovedot: on AltGr-period
+// dead_abovering: on AltGr-0
+// dead_doubleacute: on AltGr-equal (as quotedbl is already used)
+// dead_caron: on AltGr-less (AltGr-shift-comma)
+// dead_cedilla: on AltGr-comma
+// dead_ogonek: on AltGr-semicolon
+// dead_belowdot: on AltGr-underscore (AltGr-shift-minus)
+// dead_hook: on AltGr-question
+// dead_horn: on AltGr-plus (AltGr-shift-equal)
+// dead_diaeresis: on AltGr-colon (Alt-shift-semicolon)
+//
+// those were already there:
+// dead_grave
+// dead_acute
+// dead_circumflex
+// dead_tilde
+// dead_diaeresis
+
+partial alphanumeric_keys
+xkb_symbols "alt-intl" {
+
+  name[Group1]= "English (US, alternative international)";
+
+  include "us"
+
+  key <TLDE> { [ dead_grave, dead_tilde,    grave,	      asciitilde    ] };
+  key <AE05> { [          5, percent,	    EuroSign			    ] };
+  key <AE06> { [	  6, dead_circumflex, asciicircum,    asciicircum   ] };
+  key <AE09> { [	  9, parenleft, leftsinglequotemark,  dead_breve ] };
+  key <AE10> { [	  0, parenright, rightsinglequotemark, dead_abovering ] };
+  key <AE11> { [      minus, underscore,    dead_macron,      dead_belowdot ] };
+  key <AE12> { [      equal, plus,	    dead_doubleacute, dead_horn	    ] };
+
+  key <AD03> { [          e, E,		     EuroSign,         cent	    ] };
+
+  key <AC10> { [  semicolon, colon,	     dead_ogonek,   dead_diaeresis  ] };
+  key <AC11> { [ dead_acute, dead_diaeresis, apostrophe,    quotedbl	    ] };
+
+  key <AB08> { [      comma, less,	     dead_cedilla,  dead_caron	    ] };
+  key <AB09> { [     period, greater,	     dead_abovedot, dead_circumflex ] };
+  key <AB10> { [      slash, question,	     dead_hook,	    dead_hook	    ] };
+
+  include "level3(ralt_switch)"
+};
+
+// based on a keyboard map from an 'xkb/symbols/dk' file
+
+partial alphanumeric_keys
+xkb_symbols "dvorak" {
+
+    name[Group1]= "English (Dvorak)";
+
+    // Alphanumeric section
+
+    key <TLDE> { [       grave,	asciitilde, dead_grave, dead_tilde	] };
+
+    key <AE01> { [	    1,	exclam 		]	};
+    key <AE02> { [	    2,	at		]	};
+    key <AE03> { [	    3,	numbersign	]	};
+    key <AE04> { [	    4,	dollar		]	};
+    key <AE05> { [	    5,	percent		]	};
+    key <AE06> { [	    6,	asciicircum, dead_circumflex, dead_circumflex ]	};
+    key <AE07> { [	    7,	ampersand	]	};
+    key <AE08> { [	    8,	asterisk	]	};
+    key <AE09> { [	    9,	parenleft,  dead_grave]	};
+    key <AE10> { [	    0,	parenright	]	};
+    key <AE11> { [ bracketleft,	braceleft	]	};
+    key <AE12> { [ bracketright, braceright,  dead_tilde] };
+
+    key <AD01> { [  apostrophe,	quotedbl, dead_acute, dead_diaeresis	] };
+    key <AD02> { [	comma,	less,   dead_cedilla, dead_caron	] };
+    key <AD03> { [      period,	greater, dead_abovedot, periodcentered	] };
+    key <AD04> { [	    p,	P		]	};
+    key <AD05> { [	    y,	Y		]	};
+    key <AD06> { [	    f,	F		]	};
+    key <AD07> { [	    g,	G		]	};
+    key <AD08> { [	    c,	C		]	};
+    key <AD09> { [	    r,	R		]	};
+    key <AD10> { [	    l,	L		]	};
+    key <AD11> { [	slash,	question	]	};
+    key <AD12> { [	equal,	plus		]	};
+
+    key <AC01> { [	    a,	A 		]	};
+    key <AC02> { [	    o,	O		]	};
+    key <AC03> { [	    e,	E		]	};
+    key <AC04> { [	    u,	U		]	};
+    key <AC05> { [	    i,	I		]	};
+    key <AC06> { [	    d,	D		]	};
+    key <AC07> { [	    h,	H		]	};
+    key <AC08> { [	    t,	T		]	};
+    key <AC09> { [	    n,	N		]	};
+    key <AC10> { [	    s,	S		]	};
+    key <AC11> { [	minus,	underscore	]	};
+
+    key <AB01> { [   semicolon,	colon, dead_ogonek, dead_doubleacute ] };
+    key <AB02> { [	    q,	Q		]	};
+    key <AB03> { [	    j,	J		]	};
+    key <AB04> { [	    k,	K		]	};
+    key <AB05> { [	    x,	X		]	};
+    key <AB06> { [	    b,	B		]	};
+    key <AB07> { [	    m,	M		]	};
+    key <AB08> { [	    w,	W		]	};
+    key <AB09> { [	    v,	V		]	};
+    key <AB10> { [	    z,	Z		]	};
+
+    key <BKSL> { [  backslash,  bar             ]       };
+};
+
+// Dvorak international with dead keys
+// Olivier Mehani (shtrom-xorg@ssji.net)
+// Reproduce the per-key mapping of us(intl) for the dvorak layout
+// aka "I just swapped my keys over"
+partial alphanumeric_keys
+xkb_symbols "dvorak-intl" {
+
+    name[Group1]= "English (Dvorak, international with dead keys)";
+
+    include "us(dvorak)"
+
+    key <TLDE> { [dead_grave, dead_tilde,         grave,       asciitilde ] };
+
+    key <AE01> { [	   1,     exclam,    exclamdown,      onesuperior ] };
+    key <AE02> { [	   2,         at,   twosuperior, dead_doubleacute ] };
+    key <AE03> { [	   3, numbersign, threesuperior,      dead_macron ] };
+    key <AE04> { [	   4,     dollar,      currency,         sterling ] };
+    key <AE05> { [	   5,    percent,      EuroSign,     dead_cedilla ] };
+    key <AE06> { [    6, dead_circumflex,    onequarter,      asciicircum ] };
+    key <AE07> { [	   7,  ampersand,       onehalf,	dead_horn ] };
+    key <AE08> { [	   8,   asterisk, threequarters,      dead_ogonek ] };
+    key <AE09> { [	   9,  parenleft, leftsinglequotemark, dead_breve ] };
+    key <AE10> { [	   0, parenright, rightsinglequotemark, dead_abovering ] };
+    key <AE11> { [ bracketleft,  braceleft,  guillemotleft, leftdoublequotemark ] };
+    key <AE12> { [bracketright, braceright, guillemotright, rightdoublequotemark ] };
+
+    key <AD01> { [dead_acute, dead_diaeresis, apostrophe,        quotedbl ] };
+    key <AD02> { [     comma,       less,      ccedilla,         Ccedilla ] };
+    key <AD03> { [    period,    greater, dead_abovedot,       dead_caron ] };
+    key <AD04> { [	   p,          P,    odiaeresis,       Odiaeresis ] };
+    key <AD05> { [	   y,          Y,    udiaeresis,       Udiaeresis ] };
+    // key <AD06> { [	   f,	F		]	};
+    // key <AD07> { [	   g,	G		]	};
+    key <AD08> { [	   c,          C,     copyright,             cent ] };
+    key <AD09> { [	   r,          R,    registered,       registered ] };
+    key <AD10> { [	   l,          L,        oslash,         Ooblique ] };
+    key <AD11> { [     slash,   question,  questiondown,        dead_hook ] };
+    // key <AD12> { [     equal,       plus,      multiply,         division ] };
+
+    key <AC01> { [	   a,          A,        aacute,           Aacute ] };
+    key <AC02> { [	   o,          O,        oacute,           Oacute ] };
+    key <AC03> { [	   e,          E,        eacute,           Eacute ] };
+    key <AC04> { [	   u,          U,        uacute,           Uacute ] };
+    key <AC05> { [	   i,          I,        iacute,           Iacute ] };
+    key <AC06> { [	   d,          D,           eth,              ETH ] };
+    // key <AC07> { [	   h,	H		]	};
+    key <AC08> { [	   t,          T,         thorn,            THORN ] };
+    key <AC09> { [	   n,          N,        ntilde,           Ntilde ] };
+    key <AC10> { [	   s,          S,        ssharp,          section ] };
+    // key <AC11> { [     minus, underscore,           yen,    dead_belowdot ] };
+
+    key <AB01> { [ semicolon,      colon,     paragraph,           degree ] };
+    key <AB02> { [	   q,          Q,    adiaeresis,       Adiaeresis ] };
+    // key <AB03> { [	   j,	J		]	};
+    key <AB04> { [	   k,          K,            oe,               OE ] };
+    // key <AB05> { [	   x,	X		]	};
+    // key <AB06> { [	   b,	B		]	};
+    key <AB07> { [	   m,          M,            mu,               mu ] };
+    key <AB08> { [	   w,          W,         aring,            Aring ] };
+    // key <AB09> { [	   v,	V		]	};
+    key <AB10> { [	   z,          Z,            ae,               AE ] };
+
+    key <BKSL> { [ backslash,        bar,       notsign,        brokenbar ] };
+
+    include "level3(ralt_switch)"
+};
+
+// Dvorak international without dead keys
+// Stephane Magnenat (stephane at magnenat dot net, http://stephane.magnenat.net)
+// Based on information from http://www.poupinou.org/dvorak/index.html
+//
+//  `   1   2   3   4   5   6   7   8   9   0   [   ]   \
+//                  €
+//
+//      '   ,   .   p   y   f   g   c   r   l   /   =
+//          ä   ê   ë   ü           ç
+//
+//      a   o   e   u   i   d   h   t   n   s   -
+//      à   ô   é   û   î                   ß
+//
+//      ;   q   j   k   x   b   m   w   v   z
+//      â   ö   è   ù   ï
+
+partial alphanumeric_keys
+xkb_symbols "dvorak-alt-intl" {
+
+    name[Group1]= "English (Dvorak alternative international no dead keys)";
+
+    include "us(dvorak)"
+
+    key <AE04> { [         4,  dollar,    EuroSign ] };
+
+    key <AD02> { [     comma,    less,  adiaeresis,       dead_caron ] };
+    key <AD03> { [    period, greater, ecircumflex,   periodcentered	] };
+    key <AD04> { [         p,       P,  ediaeresis,     dead_cedilla ] };
+    key <AD05> { [         y,       Y,  udiaeresis ] };
+    key <AD08> { [         c,       C,    ccedilla,    dead_abovedot ] };
+
+    key <AC01> { [         a,       A,      agrave ] };
+    key <AC02> { [         o,       O, ocircumflex ] };
+    key <AC03> { [         e,       E,      eacute ] };
+    key <AC04> { [         u,       U, ucircumflex ] };
+    key <AC05> { [         i,       I, icircumflex ] };
+    key <AC10> { [         s,       S,      ssharp ] };
+
+    key <AB01> { [ semicolon,   colon, acircumflex ] };
+    key <AB02> { [         q,       Q,  odiaeresis,      dead_ogonek ] };
+    key <AB03> { [         j,       J,      egrave, dead_doubleacute ] };
+    key <AB04> { [         k,       K,      ugrave ] };
+    key <AB05> { [         x,       X,  idiaeresis ] };
+
+    include "level3(ralt_switch)"
+};
+
+// Left and right handed dvorak layouts
+// by sqweek <sqweek@gmail.com> 2006-01-30
+// Based on the corresponding layouts in the console-tools package.
+partial alphanumeric_keys
+xkb_symbols "dvorak-l" {
+
+    include "us(dvorak)"
+    name[Group1]= "English (left handed Dvorak)";
+
+    key <AE01> {	[ bracketleft,	braceleft	]	};
+    key <AE02> {	[ bracketright,	braceright	]	};
+    key <AE03> {	[	slash,	question	]	};
+    key <AE04> {	[	    p,	P		]	};
+    key <AE05> {	[	    f,	F		]	};
+    key <AE06> {	[	    m,	M		]	};
+    key <AE07> {	[	    l,	L		]	};
+    key <AE08> {	[	    j,	J		]	};
+    key <AE09> {	[	    4,	dollar		]	};
+    key <AE10> {	[	    3,	numbersign	]	};
+    key <AE11> {	[	    2,	at		]	};
+    key <AE12> {	[	    1,	exclam 		]	};
+
+    key <AD01> {	[   semicolon,	colon 		]	};
+    key <AD02> {	[	    q,	Q		]	};
+    key <AD03> {	[	    b,	B		]	};
+    key <AD04> {	[	    y,	Y		]	};
+    key <AD05> {	[	    u,	U		]	};
+    key <AD06> {	[	    r,	R		]	};
+    key <AD07> {	[	    s,	S		]	};
+    key <AD08> {	[	    o,	O		]	};
+    key <AD09> {	[      period,	greater		]	};
+    key <AD10> {	[	    6,	asciicircum	]	};
+    key <AD11> {	[	    5,	percent		]	};
+    key <AD12> {	[	equal,	plus		]	};
+
+    key <AC01> {	[	minus,	underscore	]	};
+    key <AC02> {	[	    k,	K		]	};
+    key <AC03> {	[	    c,	C		]	};
+    key <AC04> {	[	    d,	D		]	};
+    key <AC05> {	[	    t,	T		]	};
+    key <AC06> {	[	    h,	H		]	};
+    key <AC07> {	[	    e,	E		]	};
+    key <AC08> {	[	    a,	A 		]	};
+    key <AC09> {	[	    z,	Z		]	};
+    key <AC10> {	[	    8,	asterisk	]	};
+    key <AC11> {	[	    7,	ampersand	]	};
+
+    key <AB01> {	[  apostrophe,	quotedbl	] 	};
+    key <AB02> {	[	    x,	X		]	};
+    key <AB03> {	[	    g,	G		]	};
+    key <AB04> {	[	    v,	V		]	};
+    key <AB05> {	[	    w,	W		]	};
+    key <AB06> {	[	    n,	N		]	};
+    key <AB07> {	[	    i,	I		]	};
+    key <AB08> {	[	comma,	less		]	};
+    key <AB09> {	[	    0,	parenright	]	};
+    key <AB10> {	[	    9,	parenleft	]	};
+};
+
+partial alphanumeric_keys
+xkb_symbols "dvorak-r" {
+    
+    include "us(dvorak)"
+    name[Group1]= "English (right handed Dvorak)";
+
+    key <AE01> {	[	    1,	exclam 		]	};
+    key <AE02> {	[	    2,	at		]	};
+    key <AE03> {	[	    3,	numbersign	]	};
+    key <AE04> {	[	    4,	dollar		]	};
+    key <AE05> {	[	    j,	J		]	};
+    key <AE06> {	[	    l,	L		]	};
+    key <AE07> {	[	    m,	M		]	};
+    key <AE08> {	[	    f,	F		]	};
+    key <AE09> {	[	    p,	P		]	};
+    key <AE10> {	[	slash,	question	]	};
+    key <AE11> {	[ bracketleft,	braceleft	]	};
+    key <AE12> {	[ bracketright,	braceright	]	};
+
+    key <AD01> {	[	    5,	percent		]	};
+    key <AD02> {	[	    6,	asciicircum ]	};
+    key <AD03> {	[	    q,	Q		]	};
+    key <AD04> {	[      period,	greater		]	};
+    key <AD05> {	[	    o,	O		]	};
+    key <AD06> {	[	    r,	R		]	};
+    key <AD07> {	[	    s,	S		]	};
+    key <AD08> {	[	    u,	U		]	};
+    key <AD09> {	[	    y,	Y		]	};
+    key <AD10> {	[	    b,	B		]	};
+    key <AD11> {	[   semicolon,	colon 		]	};
+    key <AD12> {	[	equal,	plus		]	};
+
+    key <AC01> {	[	    7,	ampersand	]	};
+    key <AC02> {	[	    8,	asterisk	]	};
+    key <AC03> {	[	    z,	Z		]	};
+    key <AC04> {	[	    a,	A 		]	};
+    key <AC05> {	[	    e,	E		]	};
+    key <AC06> {	[	    h,	H		]	};
+    key <AC07> {	[	    t,	T		]	};
+    key <AC08> {	[	    d,	D		]	};
+    key <AC09> {	[	    c,	C		]	};
+    key <AC10> {	[	    k,	K		]	};
+    key <AC11> {	[	minus,	underscore	]	};
+
+    key <AB01> {	[	    9,	parenleft	]	};
+    key <AB02> {	[	    0,	parenright	]	};
+    key <AB03> {	[	    x,	X		]	};
+    key <AB04> {	[	comma,	less		]	};
+    key <AB05> {	[	    i,	I		]	};
+    key <AB06> {	[	    n,	N		]	};
+    key <AB07> {	[	    w,	W		]	};
+    key <AB08> {	[	    v,	V		]	};
+    key <AB09> {	[	    g,	G		]	};
+    key <AB10> {	[  apostrophe,	quotedbl	] 	};
+};
+
+// Classic dvorak layout
+// by Piter Punk <piterpk@terra.com.br> - 2006-07-06 
+// Based on dvorak layout and e-mail from Russel L. Harris rlharris@oplink.net 
+// on xorg list.
+partial alphanumeric_keys
+xkb_symbols "dvorak-classic" {
+
+    name[Group1]= "English (classic Dvorak)";
+
+    // Alphanumeric section
+
+    key <TLDE> { [       grave,	asciitilde, dead_grave, dead_tilde	] };
+
+    key <AE01> { [ bracketleft,	braceleft	]	};
+    key <AE02> { [	    7,	ampersand	]	};
+    key <AE03> { [	    5,	percent		]	};
+    key <AE04> { [	    3,	numbersign	]	};
+    key <AE05> { [	    1,	exclam 		]	};
+    key <AE06> { [	    9,	parenleft,  dead_grave]	};
+    key <AE07> { [	    0,	parenright	]	};
+    key <AE08> { [	    2,	at		]	};
+    key <AE09> { [	    4,	dollar		]	};
+    key <AE10> { [	    6,	asciicircum, dead_circumflex, dead_circumflex ]	};
+    key <AE11> { [	    8,	asterisk	]	};
+    key <AE12> { [ bracketright, braceright,  dead_tilde] };
+
+    key <AD01> { [	slash,	question	]	};
+    key <AD02> { [	comma,	less,   dead_cedilla, dead_caron	] };
+    key <AD03> { [      period,	greater, dead_abovedot, periodcentered	] };
+    key <AD04> { [	    p,	P		]	};
+    key <AD05> { [	    y,	Y		]	};
+    key <AD06> { [	    f,	F		]	};
+    key <AD07> { [	    g,	G		]	};
+    key <AD08> { [	    c,	C		]	};
+    key <AD09> { [	    r,	R		]	};
+    key <AD10> { [	    l,	L		]	};
+    key <AD11> { [  apostrophe,	quotedbl, dead_acute, dead_diaeresis	] };
+    key <AD12> { [	equal,	plus		]	};
+
+    key <AC01> { [	    a,	A 		]	};
+    key <AC02> { [	    o,	O		]	};
+    key <AC03> { [	    e,	E		]	};
+    key <AC04> { [	    u,	U		]	};
+    key <AC05> { [	    i,	I		]	};
+    key <AC06> { [	    d,	D		]	};
+    key <AC07> { [	    h,	H		]	};
+    key <AC08> { [	    t,	T		]	};
+    key <AC09> { [	    n,	N		]	};
+    key <AC10> { [	    s,	S		]	};
+    key <AC11> { [	minus,	underscore	]	};
+
+    key <AB01> { [   semicolon,	colon, dead_ogonek, dead_doubleacute ] };
+    key <AB02> { [	    q,	Q		]	};
+    key <AB03> { [	    j,	J		]	};
+    key <AB04> { [	    k,	K		]	};
+    key <AB05> { [	    x,	X		]	};
+    key <AB06> { [	    b,	B		]	};
+    key <AB07> { [	    m,	M		]	};
+    key <AB08> { [	    w,	W		]	};
+    key <AB09> { [	    v,	V		]	};
+    key <AB10> { [	    z,	Z		]	};
+    key <BKSL> { [  backslash,  bar             ]       };
+};
+
+// Programmer Dvorak, by Roland Kaufmann <rlndkfmn at gmail dot com>
+// License: BSD, available at <http://www.kaufmann.no/roland/dvorak/license.html>
+// Main features: Numbers are in shift position (like French), symbols have been
+// placed in locations that give good hand-alternation and finger rolling with
+// symbols that usually follows, accented characters are possible for I18N.
+partial alphanumeric_keys
+xkb_symbols "dvp" {
+    include "us(dvorak)"
+
+    name[Group1] = "English (programmer Dvorak)";
+
+    //             Unmodified       Shift           AltGr            Shift+AltGr
+    // symbols row, left side
+    key <TLDE> { [ dollar,          asciitilde,     dead_tilde                  ] };
+    key <AE01> { [ ampersand,       percent                                     ] };
+    key <AE02> { [ bracketleft,     7,              currency                    ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE03> { [ braceleft,       5,              cent                        ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE04> { [ braceright,      3,              yen                         ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE05> { [ parenleft,       1,              EuroSign                    ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE06> { [ equal,           9,              sterling                    ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+
+    // symbols row, right side
+    key <AE07> { [ asterisk,        0                                           ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE08> { [ parenright,      2,              onehalf                     ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE09> { [ plus,            4                                           ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE10> { [ bracketright,    6                                           ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE11> { [ exclam,          8,              exclamdown                  ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE12> { [ numbersign,      grave,          dead_grave                  ] };
+    key <BKSP> { [ BackSpace,       BackSpace                                   ] };
+
+    // upper row, left side
+    key <AD01> { [ semicolon,       colon,          dead_diaeresis              ] };
+    key <AD02> { [ comma,           less,           guillemotleft               ] };
+    key <AD03> { [ period,          greater,        guillemotright              ] };
+    key <AD04> { [ p,               P,              paragraph,       section    ] };
+    key <AD05> { [ y,               Y,              udiaeresis,      Udiaeresis ] };
+
+    // upper row, right side
+    key <AD08> { [ c,               C,              ccedilla,        Ccedilla   ] };
+    key <AD09> { [ r,               R,              registered,      trademark  ] };
+    key <AD11> { [ slash,           question,       questiondown                ] };
+    key <AD12> { [ at,              asciicircum,    dead_circumflex, dead_caron ] };
+
+    // home row, left side
+    key <AC01> { [ a,               A,              aring,           Aring      ] };
+    key <AC02> { [ o,               O,              oslash,          Ooblique   ] };
+    key <AC03> { [ e,               E,              ae,              AE         ] };
+    key <AC04> { [ u,               U,              eacute,          Eacute     ] };
+
+    // home row, right side
+    key <AC06> { [ d,               D,              eth,             ETH        ] };
+    key <AC07> { [ h,               H,              dead_acute                  ] };
+    key <AC08> { [ t,               T,              thorn,           THORN      ] };
+    key <AC09> { [ n,               N,              ntilde,          Ntilde     ] };
+    key <AC10> { [ s,               S,              ssharp                      ] };
+    key <AC11> { [ minus,           underscore,     hyphen                      ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <BKSL> { [ backslash,       bar                                         ] };
+
+    // lower row, left side
+    key <AB01> { [ apostrophe,      quotedbl,       dead_acute                  ] };
+
+    include "level3(ralt_switch)"
+};
+
+// phonetic layout for Russian letters on an US keyboard
+// by Ivan Popov <pin@konvalo.org> 2005-07-17
+
+// level3 modifier is a shortcut to the "us" meaning of the keys where
+// we place cyrillic letters, handy for accessing the corresponding
+// punctuation marks.
+// It is important to have access to punctuation marks, and the rest of
+// alphabetical keys are added for being consequent so that the users
+// can expect the level3 modifier to give what the key label shows.
+
+partial alphanumeric_keys
+xkb_symbols "rus" {
+
+    name[Group1]= "Russian (US, phonetic)";
+
+    include "us(basic)"
+
+key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+
+    key	<LatA> {	[ Cyrillic_a, Cyrillic_A ]	};
+    key	<LatB> {	[ Cyrillic_be, Cyrillic_BE ]	};
+    key	<LatW> {	[ Cyrillic_ve, Cyrillic_VE ]	};
+    key	<LatG> {	[ Cyrillic_ghe, Cyrillic_GHE ]	};
+    key	<LatD> {	[ Cyrillic_de, Cyrillic_DE ]	};
+    key	<LatE> {	[ Cyrillic_ie, Cyrillic_IE ]	};
+    key	<TLDE> {	[ Cyrillic_io, Cyrillic_IO, grave, asciitilde ] };
+    key	<LatV> {	[ Cyrillic_zhe, Cyrillic_ZHE ]	};
+    key	<LatZ> {	[ Cyrillic_ze, Cyrillic_ZE ]	};
+    key	<LatI> {	[ Cyrillic_i, Cyrillic_I ]	};
+    key	<LatJ> {	[ Cyrillic_shorti, Cyrillic_SHORTI ]	};
+    key	<LatK> {	[ Cyrillic_ka, Cyrillic_KA ]	};
+    key	<LatL> {	[ Cyrillic_el, Cyrillic_EL ]	};
+    key	<LatM> {	[ Cyrillic_em, Cyrillic_EM ]	};
+    key	<LatN> {	[ Cyrillic_en, Cyrillic_EN ]	};
+    key	<LatO> {	[ Cyrillic_o, Cyrillic_O ]	};
+    key	<LatP> {	[ Cyrillic_pe, Cyrillic_PE ]	};
+    key	<LatR> {	[ Cyrillic_er, Cyrillic_ER ]	};
+    key	<LatS> {	[ Cyrillic_es, Cyrillic_ES ]	};
+    key	<LatT> {	[ Cyrillic_te, Cyrillic_TE ]	};
+    key	<LatU> {	[ Cyrillic_u, Cyrillic_U ]	};
+    key	<LatF> {	[ Cyrillic_ef, Cyrillic_EF ]	};
+    key	<LatH> {	[ Cyrillic_ha, Cyrillic_HA ]	};
+    key	<LatC> {	[ Cyrillic_tse, Cyrillic_TSE ]	};
+    key <AC10> {        [ Cyrillic_che, Cyrillic_CHE, semicolon, colon ] };
+    key	<AD11> {	[ Cyrillic_sha, Cyrillic_SHA, bracketleft, braceleft] };
+    key	<AD12> {	[ Cyrillic_shcha, Cyrillic_SHCHA, bracketright, braceright ]	};
+    key <AE12> {        [ Cyrillic_hardsign, Cyrillic_HARDSIGN, equal, plus ] };
+    key	<LatY> {	[ Cyrillic_yeru, Cyrillic_YERU ]	};
+    key	<LatX> {	[ Cyrillic_softsign, Cyrillic_SOFTSIGN ]	};
+    key	<BKSL> {	[ Cyrillic_e, Cyrillic_E, backslash, bar ]	};
+    key <AC11> {        [ Cyrillic_yu, Cyrillic_YU, apostrophe, quotedbl ] };
+    key	<LatQ> {	[ Cyrillic_ya, Cyrillic_YA ]	};
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+    include "us(basic)"
+    name[Group1]= "English (Macintosh)";
+    key.type[group1]="FOUR_LEVEL";
+
+    // Slightly improvised from http://homepage.mac.com/thgewecke/kblayout.jpg
+    key <LSGT> { [   section,  plusminus,       section,        plusminus ] };
+    key <TLDE> { [     grave, asciitilde,    dead_grave,        dead_horn ] };
+    key <AE01> { [	   1,     exclam,    exclamdown,            U2044 ] };
+    key <AE02> { [	   2,         at,     trademark,         EuroSign ] };
+    key <AE03> { [	   3, numbersign,      sterling,            U2039 ] };
+    key <AE04> { [	   4,     dollar,          cent,            U203A ] };
+    key <AE05> { [	   5,    percent,      infinity,            UFB01 ] };
+    key <AE06> { [         6,asciicircum,       section,            UFB02 ] };
+    key <AE07> { [	   7,  ampersand,     paragraph,     doubledagger ] };
+    key <AE08> { [	   8,   asterisk, enfilledcircbullet,      degree ] };
+    key <AE09> { [	   9,  parenleft,   ordfeminine,   periodcentered ] };
+    key <AE10> { [	   0, parenright,     masculine,singlelowquotemark] };
+    key <AE11> { [     minus, underscore,        endash,           emdash ] };
+    key <AE12> { [     equal,       plus,      notequal,        plusminus ] };
+
+    key <AD01> { [	   q,          Q,            oe,               OE ] };
+    key <AD02> { [	   w,          W,         U2211,doublelowquotemark] };
+    key <AD03> { [	   e,          E,    dead_acute,            acute ] };
+    key <AD04> { [	   r,          R,    registered,            U2030 ] };
+    key <AD05> { [	   t,          T,        dagger,       dead_caron ] };
+    key <AD06> { [	   y,          Y,           yen,       onequarter ] };
+    key <AD07> { [	   u,        U,  dead_diaeresis,        diaeresis ] };
+    key <AD08> { [	   i,        I, dead_circumflex,            U02C6 ] };
+    key <AD09> { [	   o,          O,        oslash,         Ooblique ] };
+    key <AD10> { [	   p,          P,      Greek_pi,            U220F ] };
+    key <AD11> { [ bracketleft,  braceleft, leftdoublequotemark, rightdoublequotemark ] };
+    key <AD12> { [bracketright, braceright, leftsinglequotemark, rightsinglequotemark ] };
+    key <BKSL> { [ backslash,        bar, guillemotleft,   guillemotright ] };
+
+    key <AC01> { [	   a,          A,         aring,            Aring ] };
+    key <AC02> { [	   s,          S,        ssharp,      dead_stroke ] };
+    key <AC03> { [	   d,          D, partialderivative,          eth ] };
+    key <AC04> { [	   f,          F,      function,        dead_hook ] };
+    key <AC05> { [	   g,          G,     copyright, dead_doubleacute ] };
+    key <AC06> { [	   h,          H, dead_abovedot,    dead_belowdot ] };
+    key <AC07> { [	   j,          J,         U2206,          onehalf ] };
+    key <AC08> { [	   k,          K,dead_abovering,            UF8FF ] };
+
+    key <AC09> { [	   l,          L,       notsign,            THORN ] };
+    key <AC10> { [ semicolon,      colon,         U2026,            thorn ] };
+    key <AC11> { [apostrophe,   quotedbl,            ae,               AE ] };
+
+    key <AB01> { [	   z,          Z,   Greek_OMEGA,     dead_cedilla ] };
+    key <AB02> { [	   x,          X,         U2248,      dead_ogonek ] };
+				// unclear whether "approxeq" is 2248 or 2245
+    key <AB03> { [	   c,          C,      ccedilla,         Ccedilla ] };
+    key <AB04> { [	   v,          V,    squareroot,            U25CA ] };
+    key <AB05> { [	   b,          B,      integral,         idotless ] };
+    key <AB06> { [	   n,          N,    dead_tilde,            U02DC ] };
+    key <AB07> { [	   m,          M,            mu,    threequarters ] };
+    key <AB08> { [     comma,       less, lessthanequal,      dead_macron ] };
+    key <AB09> { [    period,    greater, greaterthanequal,    dead_breve ] };
+    key <AB10> { [     slash,   question,      division,     questiondown ] };
+
+    include "level3(ralt_switch)"
+};
+ 
+// Colemak symbols for xkb on X.Org Server 7.x
+// 2006-01-01 Shai Coleman, http://colemak.com/
+
+partial alphanumeric_keys
+xkb_symbols "colemak" {
+    include "us"
+    name[Group1]= "English (Colemak)";
+
+    // Alphanumeric section
+    key <TLDE> { [        grave,   asciitilde,      dead_tilde,       asciitilde ] };
+    key <AE01> { [            1,       exclam,      exclamdown,      onesuperior ] };
+    key <AE02> { [            2,           at,       masculine,      twosuperior ] };
+    key <AE03> { [            3,   numbersign,     ordfeminine,    threesuperior ] };
+    key <AE04> { [            4,       dollar,            cent,         sterling ] };
+    key <AE05> { [            5,      percent,        EuroSign,              yen ] };
+    key <AE06> { [            6,  asciicircum,         hstroke,          Hstroke ] };
+    key <AE07> { [            7,    ampersand,             eth,              ETH ] };
+    key <AE08> { [            8,     asterisk,           thorn,            THORN ] };
+    key <AE09> { [            9,    parenleft,  leftsinglequotemark,  leftdoublequotemark ] };
+    key <AE10> { [            0,   parenright, rightsinglequotemark,  rightdoublequotemark ] };
+    key <AE11> { [        minus,   underscore,          endash,           emdash ] };
+    key <AE12> { [        equal,         plus,        multiply,         division ] };
+
+    key <AD01> { [            q,            Q,      adiaeresis,       Adiaeresis ] };
+    key <AD02> { [            w,            W,           aring,            Aring ] };
+    key <AD03> { [            f,            F,          atilde,           Atilde ] };
+    key <AD04> { [            p,            P,          oslash,         Ooblique ] };
+    key <AD05> { [            g,            G,     dead_ogonek,       asciitilde ] };
+    key <AD06> { [            j,            J,         dstroke,          Dstroke ] };
+    key <AD07> { [            l,            L,         lstroke,          Lstroke ] };
+    key <AD08> { [            u,            U,          uacute,           Uacute ] };
+    key <AD09> { [            y,            Y,      udiaeresis,       Udiaeresis ] };
+    key <AD10> { [    semicolon,        colon,      odiaeresis,       Odiaeresis ] };
+    key <AD11> { [  bracketleft,    braceleft,   guillemotleft,        0x1002039 ] };
+    key <AD12> { [ bracketright,   braceright,  guillemotright,        0x100203a ] };
+    key <BKSL> { [    backslash,          bar,      asciitilde,       asciitilde ] };
+
+    key <AC01> { [            a,            A,          aacute,           Aacute ] };
+    key <AC02> { [            r,            R,      dead_grave,       asciitilde ] };
+    key <AC03> { [            s,            S,          ssharp,       asciitilde ] };
+    key <AC04> { [            t,            T,      dead_acute, dead_doubleacute ] };
+    key <AC05> { [            d,            D,  dead_diaeresis,       asciitilde ] };
+    key <AC06> { [            h,            H,      dead_caron,       asciitilde ] };
+    key <AC07> { [            n,            N,          ntilde,           Ntilde ] };
+    key <AC08> { [            e,            E,          eacute,           Eacute ] };
+    key <AC09> { [            i,            I,          iacute,           Iacute ] };
+    key <AC10> { [            o,            O,          oacute,           Oacute ] };
+    key <AC11> { [   apostrophe,     quotedbl,          otilde,           Otilde ] };
+
+    key <AB01> { [            z,            Z,              ae,               AE ] };
+    key <AB02> { [            x,            X, dead_circumflex,       asciitilde ] };
+    key <AB03> { [            c,            C,        ccedilla,         Ccedilla ] };
+    key <AB04> { [            v,            V,              oe,               OE ] };
+    key <AB05> { [            b,            B,      dead_breve,       asciitilde ] };
+    key <AB06> { [            k,            K,  dead_abovering,       asciitilde ] };
+    key <AB07> { [            m,            M,     dead_macron,       asciitilde ] };
+    key <AB08> { [        comma,         less,    dead_cedilla,       asciitilde ] };
+    key <AB09> { [       period,      greater,   dead_abovedot,       asciitilde ] };
+    key <AB10> { [        slash,     question,    questiondown,       asciitilde ] };
+
+    key <CAPS> { [    BackSpace,    BackSpace,       BackSpace,        BackSpace ] };
+    key <LSGT> { [        minus,   underscore,          endash,           emdash ] };
+    key <SPCE> { [        space,        space,           space,     nobreakspace ] };
+
+    include "level3(ralt_switch)"
+};
+
+// I do NOT like dead-keys - the International keyboard as defined by Microsoft
+// doesn't fit my needs. Why use two keystrokes for all simple characters (eg '
+// and <space> generates a single ') just to have an é (eacute) in two strokes
+// as well? I type ' more often than é (eacute).
+//
+// This file works just like a regular keyboard, BUT has all dead-keys
+// accessible at level3 (through AltGr). An ë (ediaeresis) is now: AltGr+"
+// followed by an e. In other words, this keyboard is not international as long
+// as you leave the right Alt key alone.
+//
+// The original MS International keyboard was intended for Latin1 (iso8859-1).
+// With the introduction of iso8859-15, the (important) ligature oe (and OE)
+// became available. I added them next to ae. Because I write ediaeresis more
+// often than registered, I moved registered to be next to copyright and added
+// ediaeresis and idiaeresis. - Adriaan
+
+partial alphanumeric_keys
+xkb_symbols "altgr-intl" {
+
+   name[Group1]= "English (international AltGr dead keys)";
+
+   include "us(intl)"
+
+// five dead keys moved into level3:
+
+   key <TLDE> { [    grave, asciitilde,  dead_grave,   dead_tilde      ] };
+   key <AC11> { [apostrophe,quotedbl,    dead_acute,   dead_diaeresis  ] };
+
+// diversions from the MS Intl keyboard:
+
+   key <AE01> { [        1, exclam,      onesuperior,  exclamdown      ] };
+   key <AD04> { [        r, R,           ediaeresis,   Ediaeresis      ] };
+   key <AC07> { [        j, J,           idiaeresis,   Idiaeresis      ] };
+   key <AB02> { [        x, X,           oe,           OE              ] };
+   key <AB04> { [        v, V,           registered,   registered      ] };
+
+// onequarter etc (not in iso8859-15) moved to get three unshifted deadkeys:
+
+   key <AE06> { [        6, asciicircum, dead_circumflex, onequarter    ] };
+   key <AE07> { [        7, ampersand,   dead_horn,       onehalf       ] };
+   key <AE08> { [        8, asterisk,    dead_ogonek,     threequarters ] };
+
+   include "level3(ralt_switch)"
+};
+
+// Intel ClassmatePC Keyboard Layout
+// by Piter PUNK <piterpk@terra.com.br>
+//
+// The keyboard layouts below maps the us(basic), us(intl) and us(alt-intl)
+// to ClassmatePC keyboard. All layouts uses RCTL as level3(switch) since
+// the keyboard doesn't have AltGr key. The EuroSign is engraved at 5 key.
+
+// classmate - us(basic)
+partial alphanumeric_keys
+xkb_symbols "classmate" {
+    include "us(basic)"
+    name[Group1]= "USA - ClassmatePC";
+
+    key <LSGT> { [ backslash,	bar,		backslash,	bar ] };
+
+    include "eurosign(5)"
+    include "level3(switch)"
+};
+
+// classmate-intl - us(intl)
+// RCTL is generated by Fn+Alt, because that, when trying to access
+// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got
+// the keypad keycodes. The keypad is changed to make Fn+Alt+<KP_key>
+// generate the same symbol as the original key.
+partial alphanumeric_keys
+xkb_symbols "classmate-intl" {
+    include "us(intl)"
+    name[Group1]= "USA - ClassmatePC (International)";
+    key.type[Group1]="FOUR_LEVEL";
+
+    key <LSGT> { [ backslash,	bar,		backslash,	bar ] };
+
+    key <KP7>  { [	KP_Home,		KP_7,	
+			onehalf,		dead_horn	] };
+    key <KP8>  { [	KP_Up,			KP_8,
+			threequarters,		dead_ogonek	] };
+    key <KP9>  { [	KP_Prior,		KP_9,
+			leftsinglequotemark,	dead_breve	] };
+    key <KPMU> { [ 	KP_Multiply,		KP_Multiply,
+			rightsinglequotemark,	dead_abovering	] };
+
+    key <KP4>  { [	KP_Left,		KP_4,
+			uacute,			Uacute		] };
+    key <KP5>  { [	KP_Begin,		KP_5,
+			iacute,			Iacute		] };
+    key <KP6>  { [	KP_Right,		KP_6,
+			oacute,			Oacute		] };
+    key <KPSU> { [	KP_Subtract,		KP_Subtract,
+			odiaeresis,		Odiaeresis	] };
+
+    key <KP2>  { [	KP_Down,		KP_2,
+			oe,			OE		] };
+    key <KP3>  { [	KP_Next,		KP_3,
+			oslash,			Ooblique	] };
+    key <KPAD> { [ 	KP_Add,     		KP_Add,
+			paragraph,		degree          ] };
+   
+    key <KP0>  { [	KP_Insert,		KP_0,
+			mu,			mu	] };
+    key <KPDL> { [	KP_Delete,		KP_Decimal,
+			dead_abovedot,		dead_caron	] }; 
+    key <KPDV> { [ 	KP_Divide,   		KP_Divide,
+			questiondown,		dead_hook       ] };
+
+    include "level3(switch)"
+};
+
+// classmate-alt-intl - us(alt-intl)
+// RCTL is generated by Fn+Alt, because that, when trying to access
+// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got
+// the keypad keycodes. The keypad is changed to make Fn+Alt+<KP_key>
+// generate the same symbol as the original key.
+partial alphanumeric_keys
+xkb_symbols "classmate-alt-intl" {
+    include "us(alt-intl)"
+    name[Group1]= "USA - ClassmatePC (Alternative international)";
+    key.type[Group1]="FOUR_LEVEL";
+
+    key <LSGT> { [ backslash,	bar,		backslash,	bar ] };
+
+    key <KPSU> { [	KP_Subtract,		KP_Subtract	] };
+
+    key <KP9>  { [	KP_Prior,		KP_9,
+			leftsinglequotemark,	dead_breve	] };
+    key <KPMU> { [ 	KP_Multiply,		KP_Multiply,
+			rightsinglequotemark,	dead_abovering	] };
+
+    key <KPAD> { [ 	KP_Add,     		KP_Add,
+			dead_ogonek,		dead_diaeresis   ] };
+    
+    key <KPDL> { [	KP_Delete,		KP_Decimal,
+			dead_abovedot,		dead_circumflex	] }; 
+    key <KPDV> { [ 	KP_Divide,   		KP_Divide,
+			dead_hook,		dead_hook       ] };
+
+    include "level3(switch)"
+};
+
+// classmate-altgr-intl - us(altgr-intl)
+// RCTL is generated by Fn+Alt, because that, when trying to access
+// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got
+// the keypad keycodes. The keypad is changed to make Fn+Alt+<KP_key>
+// generate the same symbol as the original key.
+partial alphanumeric_keys
+xkb_symbols "classmate-altgr-intl" {
+    include "us(altgr-intl)"
+    name[Group1]= "USA - ClassmatePC (International Fn+Alt dead-keys)";
+    key.type[Group1]="FOUR_LEVEL";
+
+    key <LSGT> { [ backslash,	bar,		backslash,	bar ] };
+
+    key <KP7>  { [	KP_Home,		KP_7,	
+			dead_horn,		dead_horn	] };
+    key <KP8>  { [	KP_Up,			KP_8,
+			dead_ogonek,		dead_ogonek	] };
+    key <KP9>  { [	KP_Prior,		KP_9,
+			leftsinglequotemark,	dead_breve	] };
+    key <KPMU> { [ 	KP_Multiply,		KP_Multiply,
+			rightsinglequotemark,	dead_abovering	] };
+
+    key <KP4>  { [	KP_Left,		KP_4,
+			uacute,			Uacute		] };
+    key <KP5>  { [	KP_Begin,		KP_5,
+			iacute,			Iacute		] };
+    key <KP6>  { [	KP_Right,		KP_6,
+			oacute,			Oacute		] };
+    key <KPSU> { [	KP_Subtract,		KP_Subtract,
+			odiaeresis,		Odiaeresis	] };
+
+    key <KP1>  { [	KP_End,			KP_1,
+			idiaeresis,		Idiaeresis	] };
+    key <KP2>  { [	KP_Down,		KP_2,
+			oe,			OE		] };
+    key <KP3>  { [	KP_Next,		KP_3,
+			oslash,			Ooblique	] };
+    key <KPAD> { [ 	KP_Add,     		KP_Add,
+			paragraph,		degree          ] };
+   
+    key <KP0>  { [	KP_Insert,		KP_0,
+			mu,			mu	] };
+    key <KPDL> { [	KP_Delete,		KP_Decimal,
+			dead_abovedot,		dead_caron	] }; 
+    key <KPDV> { [ 	KP_Divide,   		KP_Divide,
+			questiondown,		dead_hook       ] };
+
+    include "level3(switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+
+   include "us(basic)"
+   name[Group1]= "English (US)";
+
+   // OLPC international US English keyboard layout.
+   // It's a little different from the usual international layout.
+   // See: http://wiki.laptop.org/go/Image:Keyboard_english.png
+
+   key <TLDE> { [     grave, asciitilde,    dead_grave, dead_tilde ] };
+   key <AE01> { [         1,     exclam,    exclamdown, exclamdown ] };
+   key <AE02> { [         2,         at,       notsign,    notsign ] };
+   key <AE03> { [         3, numbersign,     0x1000300,  0x1000300 ] }; // combining grave
+   key <AE04> { [         4,     dollar,     0x1000301,  0x1000301 ] }; // combining acute
+   key <AE05> { [         5,    percent,     0x1000306,  0x1000306 ] }; // combining breve above
+   key <AE06> { [         6,asciicircum,     0x100030A,  0x100030A ] }; // combining ring above
+   key <AE07> { [         7,  ampersand,     0x1000302,  0x1000302 ] }; // combining circumflex above
+   key <AE08> { [         8,   asterisk,     0x100030C,  0x100030C ] }; // combining caron above
+   key <AE09> { [         9,  parenleft,     0x1000307,  0x1000307 ] }; // combining dot above
+   key <AE10> { [         0, parenright,     0x1000308,  0x1000308 ] }; // combining diaeresis above
+   key <AE11> { [     minus, underscore,     0x1000304,  0x1000304 ] }; // combining macron above
+   key <AE12> { [     equal,       plus,     0x1000303,  0x1000303 ] }; // combining tilde above
+
+   key <AD01> { [         q,          Q,  Greek_omega, Greek_OMEGA ] };
+   key <AD02> { [         w,          W,       oslash,      Oslash ] };
+   key <AD03> { [         e,          E,           oe,          OE ] };
+   key <AD04> { [         r,          R,    0x1000327,   0x1000327 ] }; // combining cedilla
+   key <AD05> { [         t,          T,    0x100032E,   0x100032E ] }; // combining breve below
+   key <AD06> { [         y,          Y,    0x1000325,   0x1000325 ] }; // combining ring below
+   key <AD07> { [         u,          U,    0x100032D,   0x100032D ] }; // combining circumflex below
+   key <AD08> { [         i,          I,    0x100032C,   0x100032C ] }; // combining caron below
+   key <AD09> { [         o,          O,    0x1000323,   0x1000323 ] }; // combining dot below
+   key <AD10> { [         p,          P,    0x1000324,   0x1000324 ] }; // combining diaeresis below
+   key <AD11> { [ bracketleft,  braceleft,  0x1000331,   0x1000331 ] }; // combining macron below
+   key <AD12> { [bracketright, braceright,  0x1000330,   0x1000330 ] }; // combining tilde below
+
+   key <AC01>  { [         a,          A,          ae,               AE ] };
+   key <AC02>  { [         s,          S,      ssharp,        0x1001E9C ] }; // uppercase S sharp
+   key <AC03>  { [         d,          D,         eth,              ETH ] };
+   key <AC04>  { [         f,          F,       thorn,            THORN ] };
+   key <AC06>  { [         h,          H,    sterling,         sterling ] };
+   key <AC07>  { [         j,          J,    EuroSign,         EuroSign ] };
+   key <AC10>  { [ semicolon,      colon,   masculine,      ordfeminine ] };
+   key <AC11>  { [ apostrophe,  quotedbl,    currency,         currency ] };
+   key <AC12>  { [ backslash,        bar,      section,         section ] };
+
+   key <AB03>  { [         c,          C,    ccedilla,         Ccedilla ] };
+   key <AB06>  { [         n,          N,      ntilde,           Ntilde ] };
+   key <AB07>  { [         m,          M,          mu,               mu ] };
+   key <AB08>  { [     comma,     less,  guillemotleft,   guillemotleft ] };
+   key <AB09>  { [    period,  greater, guillemotright,  guillemotright ] };
+   key <AB10>  { [     slash,   question, questiondown,    questiondown ] };
+
+   key <I219>  { [  multiply,   division, ISO_Next_Group, ISO_Prev_Group ] };
+
+   include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc2" {
+   include "us(olpc)"
+   name[Group1]= "English (layout toggle on multiply/divide key)";
+   include "group(olpc)"
+};
+
+xkb_symbols "olpcm" {
+
+   include "us(basic)"
+   name[Group1]= "USA";
+
+   // Mechanical (non-membrane) OLPC int'l US English keyboard layout.
+   // See: http://wiki.laptop.org/go/OLPC_English_Non-membrane_Keyboard
+
+   key <TLDE> { [     grave, asciitilde,    dead_grave, dead_tilde ] };
+   key <AE01> { [         1,     exclam,    exclamdown, exclamdown ] };
+   key <AE02> { [         2,         at,       notsign,    notsign ] };
+   key <AE03> { [         3, numbersign,     0x1000300,  0x1000300 ] }; // combining grave
+   key <AE04> { [         4,     dollar,     0x1000301,  0x1000301 ] }; // combining acute
+   key <AE05> { [         5,    percent,     0x1000306,  0x1000306 ] }; // combining breve above
+   key <AE06> { [         6,asciicircum,     0x100030A,  0x100030A ] }; // combining ring above
+   key <AE07> { [         7,  ampersand,     0x1000302,  0x1000302 ] }; // combining circumflex above
+   key <AE08> { [         8,   asterisk,     0x100030C,  0x100030C ] }; // combining caron above
+   key <AE09> { [         9,  parenleft,     0x1000307,  0x1000307 ] }; // combining dot above
+   key <AE10> { [         0, parenright,     0x1000308,  0x1000308 ] }; // combining diaeresis above
+   key <AE11> { [     minus, underscore,     0x1000304,  0x1000304 ] }; // combining macron above
+
+   key <AD01> { [         q,          Q,  Greek_omega, Greek_OMEGA ] };
+   key <AD02> { [         w,          W,       oslash,      Oslash ] };
+   key <AD03> { [         e,          E,           oe,          OE ] };
+   key <AD04> { [         r,          R,    0x1000327,   0x1000327 ] }; // combining cedilla
+   key <AD05> { [         t,          T,    0x100032E,   0x100032E ] }; // combining breve below
+   key <AD06> { [         y,          Y,    0x1000325,   0x1000325 ] }; // combining ring below
+   key <AD07> { [         u,          U,    0x100032D,   0x100032D ] }; // combining circumflex below
+   key <AD08> { [         i,          I,    0x100032C,   0x100032C ] }; // combining caron below
+   key <AD09> { [         o,          O,    0x1000323,   0x1000323 ] }; // combining dot below
+   key <AD10> { [         p,          P,    0x1000324,   0x1000324 ] }; // combining diaeresis below
+   key <AD11> { [ bracketleft,  braceleft,  0x1000331,   0x1000331 ] }; // combining macron below
+   key <AD12> { [bracketright, braceright,  0x1000330,   0x1000330 ] }; // combining tilde below
+
+   key <AC01>  { [         a,          A,          ae,               AE ] };
+   key <AC02>  { [         s,          S,      ssharp,        0x1001E9C ] }; // uppercase S sharp
+   key <AC03>  { [         d,          D,         eth,              ETH ] };
+   key <AC04>  { [         f,          F,       thorn,            THORN ] };
+   key <AC06>  { [         h,          H,    sterling,         sterling ] };
+   key <AC07>  { [         j,          J,    EuroSign,         EuroSign ] };
+   key <AC10>  { [ semicolon,      colon,   masculine,      ordfeminine ] };
+   // no AC11 or AC12 on olpcm
+
+   key <AB03>  { [         c,          C,    ccedilla,         Ccedilla ] };
+   key <AB06>  { [         n,          N,      ntilde,           Ntilde ] };
+   key <AB07>  { [         m,          M,          mu,               mu ] };
+   key <AB08>  { [     comma,     less,  guillemotleft,   guillemotleft ] };
+   key <AB09>  { [    period,  greater, guillemotright,  guillemotright ] };
+   key <AB10>  { [     slash,   question, questiondown,    questiondown ] };
+
+   key <AA02>  { [ backslash,        bar,      section,         section ] };
+   key <AA06>  { [     equal,       plus,     0x1000303,  0x1000303 ] };
+   key <AA07>  { [ apostrophe,  quotedbl,    currency,         currency ] };
+
+   include "level3(ralt_switch)"
+};
+
+// Based on Cherokee Nation Official Layout
+// http://www.cherokee.org/extras/downloads/font/Keyboard.htm
+
+partial alphanumeric_keys modifier_keys
+xkb_symbols "chr" {
+
+    name[Group1]= "Cherokee";
+    key.type[group1]="ALPHABETIC";
+
+    // Alphanumeric section
+    key <TLDE> { [      grave,      U13CA ] };
+    key <AE01> { [          1,      U13B1 ] };
+    key <AE02> { [          2,      U13C7 ] };
+    key <AE03> { [          3,      U13E7 ] };
+    key <AE04> { [      U13D9,      U13B0 ] };
+    key <AE05> { [      U13E6,      U13B9 ] };
+    key <AE06> { [      U13DC,      U13DD ] };
+    key <AE07> { [      U13CB,      U13E1 ] };
+    key <AE08> { [      U13D6,      U13BA ] };
+    key <AE09> { [      U13D2,  parenleft ] };
+    key <AE10> { [      U13C4, parenright ] };
+    key <AE11> { [      U13BF,      U13BC ] };
+    key <AE12> { [      U13F3,      U13BD ] };
+
+    key <AD01> { [      U13AA,      U13C6 ] };
+    key <AD02> { [      U13B3,      U13EB ] };
+    key <AD03> { [      U13A1,      U13E3 ] };
+    key <AD04> { [      U13DB,      U13CF ] };
+    key <AD05> { [      U13D4,      U13D8 ] };
+    key <AD06> { [      U13EF,      U13F2 ] };
+    key <AD07> { [      U13A4,      U13AD ] };
+    key <AD08> { [      U13A2,      U13F1 ] };
+    key <AD09> { [      U13A3,      U13EC ] };
+    key <AD10> { [      U13C1,      U13EA ] };
+    key <AD11> { [      U13D5,      U13D1 ] };
+    key <AD12> { [      U13B6,      U13E4 ] };
+    key <BKSL> { [      U13E9,      U13EE ] };
+
+    key <AC01> { [      U13A0,      U13CC ] };
+    key <AC02> { [      U13CD,      U13CE ] };
+    key <AC03> { [      U13D7,      U13D0 ] };
+    key <AC04> { [      U13A9,      U13C8 ] };
+    key <AC05> { [      U13A6,      U13E5 ] };
+    key <AC06> { [      U13AF,      U13B2 ] };
+    key <AC07> { [      U13DA,      U13AB ] };
+    key <AC08> { [      U13B8,      U13A7 ] };
+    key <AC09> { [      U13B5,      U13AE ] };
+    key <AC10> { [      U13E8,      U13E0 ] };
+    key <AC11> { [ apostrophe,   quotedbl ] };
+
+    key <AB01> { [      U13AC,      U13C3 ] };
+    key <AB02> { [      U13F4,      U13ED ] };
+    key <AB03> { [      U13D3,      U13DF ] };
+    key <AB04> { [      U13A5,      U13DE ] };
+    key <AB05> { [      U13A8,      U13F0 ] };
+    key <AB06> { [      U13BE,      U13BB ] };
+    key <AB07> { [      U13C5,      U13B7 ] };
+    key <AB08> { [      comma,      U13E2 ] };
+    key <AB09> { [     period,      U13B4 ] };
+    key <AB10> { [      U13C2,      U13C9 ] };
+
+    // End alphanumeric section
+};
+
+// Serbian charecters added as third level symbols to US keyboard layout.
+
+partial alphanumeric_keys
+xkb_symbols "hbs" {
+
+  name[Group1]= "Serbo-Croatian (US)";
+
+  include "us"
+
+  key <TLDE> { [ grave, asciitilde ] };
+  key <AE06> { [ 6, dead_caron, asciicircum, asciicircum ] };
+  key <AE08> { [ 8, asterisk, multiply, division ] };
+  key <AE11> { [ minus, underscore, endash, emdash ] };
+  key <AC09> { [ l, L, U1C9, U1C8 ] };
+  key <AB06> { [ n, N, U1CC, U1CB ] };
+  key <AB01> { [ z, Z, U1C6, U1C5 ] };
+  key <AD03> { [ e, E, EuroSign, cent ] };
+  key <AC03> { [ d, D, dstroke, Dstroke ] };
+  key <AC11> { [ dead_acute, quotedbl, apostrophe, apostrophe ] };
+  key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+  key <AB08> { [ comma, less, U3003, guillemotright ] };
+  key <AB09> { [ period, greater, ellipsis, guillemotleft ] };
+
+  include "level3(ralt_switch)"
+};
+
+//based on http://upload.wikimedia.org/wikipedia/commons/1/18/T-Mobile_G1_launch_event_2.jpg
+partial alphanumeric_keys
+xkb_symbols "htcdream" {
+        include "inet(htcdream)"
+        name[Group1]= "English (US)";
+
+        //second row
+        key <AD01> { [ q, Q, Tab, Tab ] };
+        key <AD02> { [ w, W, grave, grave ] };
+        key <AD03> { [ e, E, underscore, underscore ] };
+        key <AD04> { [ r, R, sterling, sterling ] };
+        key <AD05> { [ t, T, EuroSign, EuroSign ] };
+        key <AD06> { [ y, Y, division, division ] };
+        key <AD07> { [ u, U, multiply, multiply ] };
+        key <AD08> { [ i, I, minus, minus ] };
+        key <AD09> { [ o, O, plus, plus ] };
+        key <AD10> { [ p, P, equal, equal ] };
+
+        //third row
+        key <AC01> { [ a, A, NoSymbol, NoSymbol ] };
+        key <AC02> { [ s, S, bar, bar ] };
+        key <AC03> { [ d ,D, backslash, backslash ] };
+        key <AC04> { [ f, F, braceleft, braceleft ] };
+        key <AC05> { [ g, G, braceright, braceright ] };
+        key <AC06> { [ h, H, colon, colon ] };
+        key <AC07> { [ j, J, semicolon, semicolon ] };
+        key <AC08> { [ k, K, quotedbl, quotedbl ] };
+        key <AC09> { [ l, L, apostrophe, apostrophe ] };
+
+        //forth row
+        key <AB01> { [ z, Z, NoSymbol, NoSymbol ] };
+        key <AB02> { [ x, X, NoSymbol, NoSymbol ] };
+        key <AB03> { [ c, C, NoSymbol, NoSymbol ] };
+        key <AB04> { [ v, V, bracketleft, bracketleft ] };
+        key <AB05> { [ b, B, bracketright, bracketright ] };
+        key <AB06> { [ n, N, less, less ] };
+        key <AB07> { [ m, M, greater, greater ] };
+        key <AB08> { [ comma, comma, question, question ] };
+
+        //fifth row
+        key <FK15> { [ at, at, asciitilde, asciitilde ] };
+
+        include "level3(alt_switch)"
+};
+
+// Workman Keyboard Layout symbols for xkb on X.Org Server 7.x
+// 09-06-2010 OJ Bucao. http://www.workmanlayout.com
+
+partial alphanumeric_keys
+xkb_symbols "workman" {
+
+    name[Group1]= "English (Workman)";
+
+    include "us(basic)"
+
+    // Alphanumeric section
+    key <AD01> {  [   q,  Q   ] };
+    key <AD02> {  [   d,  D   ] };
+    key <AD03> {  [   r,  R   ] };
+    key <AD04> {  [   w,  W   ] };
+    key <AD05> {  [   b,  B   ] };
+    key <AD06> {  [   j,  J   ] };
+    key <AD07> {  [   f,  F   ] };
+    key <AD08> {  [   u,  U   ] };
+    key <AD09> {  [   p,  P   ] };
+    key <AD10> {  [   semicolon,  colon   ] };
+
+    key <AC01> {  [   a,  A   ] };
+    key <AC02> {  [   s,  S   ] };
+    key <AC03> {  [   h,  H   ] };
+    key <AC04> {  [   t,  T   ] };
+    key <AC05> {  [   g,  G   ] };
+    key <AC06> {  [   y,  Y   ] };
+    key <AC07> {  [   n,  N   ] };
+    key <AC08> {  [   e,  E   ] };
+    key <AC09> {  [   o,  O   ] };
+    key <AC10> {  [   i,  I   ] };
+
+    key <AB01> {  [   z,  Z   ] };
+    key <AB02> {  [   x,  X   ] };
+    key <AB03> {  [   m,  M   ] };
+    key <AB04> {  [   c,  C   ] };
+    key <AB05> {  [   v,  V   ] };
+    key <AB06> {  [   k,  K   ] };
+    key <AB07> {  [   l,  L   ] };
+    // End alphanumeric section
+
+    key <CAPS> { [    BackSpace,       Escape,       BackSpace,        BackSpace ] };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "workman-intl" {
+
+    name[Group1]= "English (Workman, international with dead keys)";
+
+    include "us(intl)"
+
+    // Alphanumeric section
+    key <AD01> { [     q,          Q,    adiaeresis,       Adiaeresis ] };
+    key <AD02> { [     d,          D,           eth,              ETH ] };
+    key <AD03> { [     r,          R,    registered,       registered ] };
+    key <AD04> { [     w,          W,         aring,            Aring ] };
+    key <AD05> { [     b,          B,             b,                B ] };
+    key <AD06> { [     j,          J,             j,                J ] };
+    key <AD07> { [     f,          F,             f,                F ] };
+    key <AD08> { [     u,          U,        uacute,           Uacute ] };
+    key <AD09> { [     p,          P,    odiaeresis,       Odiaeresis ] };
+    key <AD10> { [ semicolon,  colon,     paragraph,           degree ] };
+
+    key <AC01> { [     a,          A,        aacute,           Aacute ] };
+    key <AC02> { [     s,          S,        ssharp,          section ] };
+    key <AC03> { [     h,          H,             h,                H ] };
+    key <AC04> { [     t,          T,         thorn,            THORN ] };
+    key <AC05> { [     g,          G,             g,                G ] };
+    key <AC06> { [     y,          Y,    udiaeresis,       Udiaeresis ] };
+    key <AC07> { [     n,          N,        ntilde,           Ntilde ] };
+    key <AC08> { [     e,          E,        eacute,           Eacute ] };
+    key <AC09> { [     o,          O,        oacute,           Oacute ] };
+    key <AC10> { [     i,          I,        iacute,           Iacute ] };
+
+    key <AB01> { [     z,          Z,            ae,               AE ] };
+    key <AB02> { [     x,          X,             x,                X ] };
+    key <AB03> { [     m,          M,            mu,               mu ] };
+    key <AB04> { [     c,          C,     copyright,             cent ] };
+    key <AB05> { [     v,          V,             v,                V ] };
+    key <AB06> { [     k,          K,            oe,               OE ] };
+    key <AB07> { [     l,          L,        oslash,         Ooblique ] };
+    // End alphanumeric section
+
+    key <CAPS> { [ BackSpace, Escape,     BackSpace,        BackSpace ] };
+
+    include "level3(ralt_switch)"
+};
+
+// EXTRAS:
+
+// Czech, Slovak and German charecters added as third level symbols to US keyboard layout.
+partial alphanumeric_keys
+xkb_symbols "cz_sk_de" {
+    include "us"
+    name[Group1]="Czech Slovak and German (US)";
+
+    key <TLDE>  { [grave,   asciitilde, uring,      Uring       ] };
+    key <AE01>	{ [    1,	exclam,	uacute,	    Uacute	] };
+    key <AE02>	{ [    2,           at, ecaron,	    Ecaron	] };
+    key <AE03>	{ [    3,   numbersign, scaron,	    Scaron	] };
+    key <AE04>	{ [    4,       dollar,	ccaron,	    Ccaron	] };
+    key <AE05>	{ [    5,      percent, rcaron,	    Rcaron	] };
+    key <AE06>	{ [    6,  asciicircum, zcaron,	    Zcaron	] };
+    key <AE07>	{ [    7,    ampersand,	yacute,	    Yacute	] };
+    key <AE08>	{ [    8,     asterisk, aacute,	    Aacute	] };
+    key <AE09>	{ [    9,    parenleft,	iacute,	    Iacute	] };
+    key <AE10>	{ [    0,   parenright, eacute,	    Eacute	] };
+    key <AE11>	{ [minus,   underscore, ssharp,     0x1001E9E	] };
+    key <AE12>	{ [equal,	  plus, dead_acute, dead_caron  ] };
+    
+    key <AD03>	{ [         e,          E,     EuroSign,     Eacute ]	};
+
+    key <AD11>	{ [bracketleft, braceleft,   udiaeresis,   Udiaeresis ]	};
+    key <AC10>	{ [ semicolon,      colon,   odiaeresis,   Odiaeresis ]	};
+    key <AC11>	{ [apostrophe,      quotedbl,adiaeresis,   Adiaeresis ]	};
+
+    key <AC01>	{ [         a,          A,     aacute,	     Aacute   ]	};
+    key <AD08>	{ [         i,          I,     iacute,	     Iacute   ]	};
+    key <AD09>	{ [         o,          O,     oacute,       Oacute   ]	};
+    key <AD06>	{ [         y,          Y,     yacute,       Yacute   ]	};
+    key <AD07>	{ [         u,          U,     uring,	     Uring    ]	};
+
+    key <AC02>	{ [         s,          S,     scaron,       Scaron   ]	};
+    key <AB01>	{ [         z,          Z,     zcaron,	     Zcaron   ]	};
+    key <AB03>	{ [         c,          C,     ccaron,       Ccaron   ]	};
+    key <AD04>	{ [         r,          R,     rcaron,	     Rcaron   ]	};
+    key <AD05>	{ [         t,          T,     tcaron,	     Tcaron   ]	};
+    key <AC03>	{ [         d,          D,     dcaron,	     Dcaron   ]	};
+    key <AB06>	{ [         n,          N,     ncaron,	     Ncaron   ]	};
+    key <AC09>  { [         l,          L,     lcaron,       Lcaron   ] };
+    key <AD10>  { [         p,          P,ocircumflex,  Ocircumflex   ] };
+
+    key <SPCE>  { [     space,       space, nobreakspace, nobreakspace] };
+
+    include "level3(ralt_switch)"
+};
+
+// XCompose is out! Unicode combining is in!  For those of us who live
+// on the edge: A keymap using Unicode combining characters instead of
+// deadkeys.  This variation does not deviate from the lame MS-style
+// US-intl layout; but it uses AltGr for combining, like altgr-intl.
+//
+// This might break your font layout layout systems (because they
+// suck), caveat emptor.  Also, most of today's software will count
+// individual combining marks for selection, deletion, character
+// counting &c., and won't be smart enough to do canonical equivalence
+// when searching, &c.
+//
+// With Unicode combining you use "handwriting order", not
+// "typewriting order" as with deadkeys.  That is, you first type the
+// base character, then the diacritics/accents/modifiers.  This has
+// the advantage of avoiding hidden states --- each keypress changes
+// something on screen.
+//
+// TODO: as of now, this duplicates all us(intl) functionality with
+// combining.  With care, perhaps we could add more combining marks
+// not present in intl, and support all major languages.
+partial alphanumeric_keys
+xkb_symbols "intl-unicode" {
+
+ name[Group1]= "English (US, international AltGr Unicode combining)";
+
+ include "us(intl)"
+ include "level3(ralt_switch)"
+
+ // grave, tilde
+ key <TLDE> { [grave, asciitilde, U0300, U0303 ] };
+ // double acute
+ key <AE02> { [ 2, at, twosuperior, U030B ] };
+ // macron
+ key <AE03> { [ 3, numbersign, threesuperior, U0304 ] };
+ // circumflex
+ key <AE06> { [ 6, asciicircum, onequarter, U0302 ] };
+ // horn
+ key <AE07> { [ 7, ampersand, onehalf, U031B ] };
+ // ogonek
+ key <AE08> { [ 8, asterisk, threequarters, U0328 ] };
+ // breve
+ key <AE09> { [	 9, parenleft, leftsinglequotemark, U0306 ] };
+ // abovering
+ key <AE10> { [	 0, parenright, rightsinglequotemark, U030A ] };
+
+ // belowdot
+ key <AE11> { [ minus, underscore, yen, U0323 ] };
+ // acute, diaeresis
+ key <AC11> { [apostrophe, quotedbl, U0301, U0308 ] };
+ // abovedot, caron
+ key <AB09> { [ period, greater, U0307, U030C ] };
+ // hook
+ key <AB10> { [ slash, question, questiondown, U0309 ] };
+
+ // alt-intl compatibility
+ // cedilla, caron
+ key <AB08> { [ comma, less,	 U0327, U030C ] };
+ // ogonek, diaeresis
+ key <AC10> { [ semicolon, colon,	 U0328, U0308 ] };
+ // doubleacute, horn
+ key <AE12> { [ equal, plus,	 U030B, U031B ] };
+
+ // we don't do combining latin letters and combining enclosures
+ // because support for those is very rare.
+};
+
+// XCompose is out! Unicode combining is in! For those of us who live
+// on the edge: A keymap using Unicode combining characters instead of
+// deadkeys. This variation does break compatibility with us-intl,
+// whenever I thought it would be more mnemonic or Unicodeish.
+partial alphanumeric_keys
+xkb_symbols "alt-intl-unicode" {
+
+ name[Group1]= "English (US, international AltGr Unicode combining, alternative)";
+
+ include "us(intl-unicode)"
+
+ // easier macron; em-dash.
+ // em-dash is available via compose, but I added here since it's such
+ // an important typographic character.
+ key <AE11> { [ minus, underscore, U0304, U2014 ] };
+
+ // belowdot, abovedot (caron at coma/less key, per above)
+ key <AB09> { [ period, greater, U0323, U0307 ] };
+
+};
+
+partial alphanumeric_keys  
+xkb_symbols "ats" {
+
+    include "us"
+
+    name[Group1]= "Atsina";
+
+    //Using Dead key to get COMBINING COMMA ABOVE for ejectives on
+    //q, l, t, s, m, g, k, p, w, y, r
+    //XCompose key is used for the other accute and grave.
+
+    key <AD03> { [ e, E, eacute, Eacute  ] };
+    key <AD07> { [ u, U, uacute, Uacute  ] };
+    key <AD08> { [ i, I, iacute, Iacute  ] };
+    key <AD09> { [ o, O, oacute, Oacute  ] };
+    key <AD11> { [ bracketleft,	braceleft, U03B8 ] };
+    key <AD12> { [ bracketright, braceright, U010D, U010C ] };
+    //U+010C (uppercase Č) and U+010D (lowercase č).
+
+    key <AC01> { [ a, A, aacute, Aacute  ] };
+
+
+    //Small letter Open use compose to key get acute accent
+    key <AB03> { [ c,	C, U0254, U0186		  ] };
+    key <AB08> { [ comma,     less, U0313 ] };
+    key <AB10> { [ slash, question, U0294 ] };
+
+    include "level3(ralt_switch)"
+    include "compose(rctrl)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "crd" {
+
+  include "us"
+
+  name[Group1]= "Couer D'alene Salish";
+
+  // Alphanumeric section
+  key <AD02> { [         w,           W, U02B7, U02B7 ] }; 
+  key <AE07> { [         7,   ampersand, U0294        ] }; 
+  key <AD01> { [         q,           Q, U221A        ] }; 
+  key <AB04> { [         v,           V, U0259        ] }; 
+  key <BKSL> { [ backslash,         bar, U026B        ] }; 
+  key <AD03> { [         e,           E, U025B        ] }; 
+  key <AD08> { [         i,           I, U026A        ] }; 
+  key <AC07> { [         j,           J, U01F0        ] }; 
+  key <AE06> { [         6, asciicircum, U0295        ] }; 
+  key <AC02> { [         s,           S, U0161        ] }; 
+  key <AB03> { [         c,           C, U010D        ] }; 
+  key <AD09> { [         o,           O, U0254        ] }; 
+  key <AB09> { [    period,     greater, U0323        ] }; 
+
+  include "level3(ralt_switch)"
+  include "compose(rctrl)"
+
+  // End alphanumeric section
+};
+
+
+partial alphanumeric_keys
+	xkb_symbols "sun_type6" {
+	include "sun_vndr/us(sun_type6)"
+};
diff --git a/data/sync.sh b/data/sync.sh
new file mode 100644
--- /dev/null
+++ b/data/sync.sh
@@ -0,0 +1,67 @@
+#/bin/sh
+
+XKBCONFIGROOT='/usr/share/X11/xkb'
+
+if [ ! -d test/data ]; then
+    echo "Run this from the top source dir"
+    exit 1
+fi
+
+for file in \
+    symbols/terminate \
+    symbols/in \
+    symbols/keypad \
+    symbols/altwin \
+    symbols/ctrl \
+    symbols/eurosign \
+    symbols/inet \
+    symbols/shift \
+    symbols/pc \
+    symbols/ca \
+    symbols/cz \
+    symbols/srvr_ctrl \
+    symbols/capslock \
+    symbols/latin \
+    symbols/level5 \
+    symbols/us \
+    symbols/nbsp \
+    symbols/il \
+    symbols/group \
+    symbols/compose \
+    symbols/level3 \
+    symbols/ru \
+    symbols/rupeesign \
+    symbols/kpdl \
+    symbols/de \
+    symbols/ch \
+    symbols/empty \
+    keycodes/xfree86 \
+    keycodes/aliases \
+    keycodes/evdev \
+    keycodes/empty \
+    types/complete \
+    types/pc \
+    types/basic \
+    types/iso9995 \
+    types/level5 \
+    types/numpad \
+    types/extra \
+    types/mousekeys \
+    compat/complete \
+    compat/lednum \
+    compat/pc \
+    compat/ledscroll \
+    compat/basic \
+    compat/misc \
+    compat/iso9995 \
+    compat/accessx \
+    compat/xfree86 \
+    compat/level5 \
+    compat/caps \
+    compat/ledcaps \
+    compat/mousekeys \
+    rules/base \
+    rules/evdev \
+; do
+    cp "$XKBCONFIGROOT/$file" "test/data/$file"
+done
diff --git a/data/types/basic b/data/types/basic
new file mode 100644
--- /dev/null
+++ b/data/types/basic
@@ -0,0 +1,29 @@
+default xkb_types "basic" {
+
+    // Fairly standard definitions for
+    // the four required key types
+
+    virtual_modifiers NumLock;
+
+    type "ONE_LEVEL" {
+	modifiers = None;
+	map[None] = Level1;
+	level_name[Level1]= "Any";
+    };
+
+    type "TWO_LEVEL" {
+	modifiers = Shift;
+	map[Shift] = Level2;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift";
+    };
+
+    type "ALPHABETIC" {
+        modifiers = Shift+Lock;
+        map[Shift] = Level2;
+        map[Lock] = Level2;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Caps";
+    };
+
+};
diff --git a/data/types/complete b/data/types/complete
new file mode 100644
--- /dev/null
+++ b/data/types/complete
@@ -0,0 +1,9 @@
+default xkb_types "complete" {
+    include "basic"
+    include "mousekeys"
+    include "pc"
+    include "iso9995"
+    include "level5"
+    include "extra"
+    include "numpad"
+};
diff --git a/data/types/extra b/data/types/extra
new file mode 100644
--- /dev/null
+++ b/data/types/extra
@@ -0,0 +1,161 @@
+partial default xkb_types "default" {
+    // Definition for a key type used for the czech keymap, for instance.
+    // Defines style a with four level shift. It is similar to three_level
+    // type used for iso9995 but it lets the shift key behave "normally".
+
+    virtual_modifiers LevelThree;
+
+    type "FOUR_LEVEL" {
+        modifiers = Shift+LevelThree;
+	map[None] = Level1;
+	map[Shift] = Level2;
+	map[LevelThree] = Level3;
+	map[Shift+LevelThree] = Level4;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift";
+	level_name[Level3] = "Alt Base";  
+	level_name[Level4] = "Shift Alt";  
+    };
+
+    type "FOUR_LEVEL_ALPHABETIC" {
+	modifiers = Shift+Lock+LevelThree;
+	map[None] = Level1;
+	map[Shift] = Level2;
+	map[Lock]  = Level2;
+	map[LevelThree] = Level3;
+	map[Shift+LevelThree] = Level4;
+	map[Lock+LevelThree] =  Level4;
+	map[Lock+Shift+LevelThree] =  Level3;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift";
+	level_name[Level3] = "Alt Base";
+	level_name[Level4] = "Shift Alt";
+    };
+
+    type "FOUR_LEVEL_SEMIALPHABETIC" {
+	modifiers = Shift+Lock+LevelThree;
+	map[None] = Level1;
+	map[Shift] = Level2;
+	map[Lock]  = Level2;
+	map[LevelThree] = Level3;
+	map[Shift+LevelThree] = Level4;
+	map[Lock+LevelThree] =  Level3;
+        map[Lock+Shift+LevelThree] = Level4;
+	preserve[Lock+LevelThree] = Lock;
+	preserve[Lock+Shift+LevelThree] = Lock;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift";
+	level_name[Level3] = "Alt Base";
+	level_name[Level4] = "Shift Alt";
+    };
+
+    // Another four level keypad variant
+    // First two levels are controled by NumLock (with active Shift-ing like
+    // in KEYPAD). LevelThree overrides this mode, with two additional
+    // Shift-ed levels
+    // NumLock state is intentionnaly ignored when LevelThree is active
+    type "FOUR_LEVEL_MIXED_KEYPAD" {
+        modifiers = Shift+NumLock+LevelThree;
+        map[None] = Level1;
+        map[Shift+NumLock] = Level1;
+        map[NumLock] = Level2;
+        map[Shift] = Level2;
+        map[LevelThree] = Level3;
+	map[NumLock+LevelThree] = Level3;
+        map[Shift+LevelThree] = Level4;
+	map[Shift+NumLock+LevelThree] = Level4;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Number";
+        level_name[Level3] = "Alt Base";
+        level_name[Level4] = "Shift Alt";
+    };
+
+    // Base level, two Shift-ed LevelThree levels, one Ctrl+Alt command level
+    type "FOUR_LEVEL_X" {
+        modifiers = Shift+LevelThree+Control+Alt;
+        map[None] = Level1;
+        map[LevelThree] = Level2;
+	map[Shift+LevelThree] = Level3;
+	map[Control+Alt] = Level4;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Alt Base";
+        level_name[Level3] = "Shift Alt";
+	level_name[Level4] = "Ctrl+Alt";
+    };
+
+// Special type for keys used in Serbian Latin Unicode map
+// It makes it possible to use all three forms of latin letters 
+// present in Unicode that are made up of two separate letters 
+// (forms like LJ, Lj, and lj; NJ, Nj, and nj; etc)
+
+    type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
+        modifiers = Shift+Lock+LevelThree;
+        map[None] = Level1;
+        map[Shift] = Level2;
+        map[Lock] = Level4;
+        map[LevelThree] = Level3;
+        map[Shift+LevelThree] = Level4;
+        map[Lock+LevelThree] =  Level3;
+        map[Lock+Shift+LevelThree] = Level3;
+        preserve[Lock]= Lock;
+        preserve[Lock+LevelThree]= Lock;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Shift";
+        level_name[Level3] = "AltGr Base";
+        level_name[Level4] = "Shift AltGr";
+    };
+
+// type for e.g. german ssharp which is capitalized SS.
+// CHARACTERISTICS:
+// It is FOUR_LEVEL with the exception that the fifth level
+// is mapped to the Lock modifier.
+// If other modifiers are used, the Lock state is ignored.
+// DETAILS ABOUT GERMAN:
+// The capital form of ssharp (called sharp s) only exists for
+// completely capitalized Text, not at the beginning of sentences
+// or nouns (nouns have a captial letter at the beginning in german).
+// The ssharp key, to the right of the zero key, takes this into
+// account and has a questionmark mapped on shift-ssharp since
+// normally no capital version is needed.
+// When typing with active capsLock, this key type is needed to
+// output two capital letters S because this is the only german key
+// whose capital letter is not the same as the one typed with shift.
+
+    type "FOUR_LEVEL_PLUS_LOCK" {
+        modifiers = Shift+Lock+LevelThree;
+        map[None] = Level1;
+        map[Shift] = Level2;
+        map[LevelThree] = Level3;
+        map[Shift+LevelThree] = Level4;
+        map[Lock]  = Level5;
+        map[Lock+Shift] = Level2;
+        map[Lock+LevelThree] = Level3;
+        map[Lock+Shift+LevelThree] = Level4;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Shift";
+        level_name[Level3] = "Alt Base";
+        level_name[Level4] = "Shift Alt";
+        level_name[Level5] = "Lock";
+    };
+};
+
+// This enables the four level shifting also for the keypad.
+partial xkb_types "keypad" {
+    virtual_modifiers LevelThree;
+
+    type "FOUR_LEVEL_KEYPAD" {
+	modifiers = Shift+NumLock+LevelThree;
+	map[None] = Level1;
+	map[Shift] = Level2;
+	map[NumLock] = Level2;
+	map[Shift+NumLock] = Level1;
+	map[LevelThree] = Level3;
+	map[Shift+LevelThree] = Level4;
+	map[NumLock+LevelThree] = Level4;
+	map[Shift+NumLock+LevelThree] = Level3;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Number";
+	level_name[Level3] = "Alt Base";
+	level_name[Level4] = "Alt Number";
+    };       
+};
diff --git a/data/types/iso9995 b/data/types/iso9995
new file mode 100644
--- /dev/null
+++ b/data/types/iso9995
@@ -0,0 +1,18 @@
+partial default xkb_types "default" {
+
+    // Definition for a key type which 
+    // can be used to implement ISO9995
+    // style level three shift
+    virtual_modifiers LevelThree;
+
+    type "THREE_LEVEL" {
+	modifiers = Shift+LevelThree;
+	map[None] = Level1;
+	map[Shift] = Level2;
+	map[LevelThree] = Level3;
+	map[Shift+LevelThree] = Level3;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift";
+	level_name[Level3] = "Level3";
+    };
+};
diff --git a/data/types/level5 b/data/types/level5
new file mode 100644
--- /dev/null
+++ b/data/types/level5
@@ -0,0 +1,214 @@
+partial default xkb_types "default" {
+    // Definition for a key type used for the czech keymap, for instance.
+    // Defines style a with four level shift. It is similar to three_level
+    // type used for iso9995 but it lets the shift key behave "normally".
+
+    virtual_modifiers LevelThree,ScrollLock,LevelFive;
+
+    type "EIGHT_LEVEL" {
+        modifiers = Shift+LevelThree+LevelFive;
+	map[None] = Level1;
+	map[Shift] = Level2;
+	map[LevelThree] = Level3;
+	map[Shift+LevelThree] = Level4;
+	map[LevelFive] = Level5;
+	map[Shift+LevelFive] = Level6;
+	map[LevelThree+LevelFive] = Level7;
+	map[Shift+LevelThree+LevelFive] = Level8;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift";
+	level_name[Level3] = "Alt Base";  
+	level_name[Level4] = "Shift Alt";  
+	level_name[Level5] = "X";
+	level_name[Level6] = "X Shift";
+	level_name[Level7] = "X Alt Base";
+	level_name[Level8] = "X Shift Alt";
+    };
+
+    type "EIGHT_LEVEL_ALPHABETIC" {
+	modifiers = Shift+Lock+LevelThree+LevelFive;
+	map[None] = Level1;
+	map[Shift] = Level2;
+	map[Lock]  = Level2;
+	map[LevelThree] = Level3;
+	map[Shift+LevelThree] = Level4;
+	map[Lock+LevelThree] =  Level4;
+        map[Lock+Shift+LevelThree] = Level3;
+
+	map[LevelFive] = Level5;
+	map[Shift+LevelFive] = Level6;
+	map[Lock+LevelFive]  = Level6;
+	map[LevelThree+LevelFive] = Level7;
+	map[Shift+LevelThree+LevelFive] = Level8;
+	map[Lock+LevelThree+LevelFive] =  Level8;
+        map[Lock+Shift+LevelThree+LevelFive] = Level7;
+
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift";
+	level_name[Level3] = "Alt Base";
+	level_name[Level4] = "Shift Alt";
+	level_name[Level5] = "X";
+	level_name[Level6] = "X Shift";
+	level_name[Level7] = "X Alt Base";
+	level_name[Level8] = "X Shift Alt";
+    };
+
+//    type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" {
+//    	// Level5-Lock is implemented by using NumLock, because a real modifier
+//    	// is required.
+//    	
+//        modifiers = Shift + Lock + LevelThree + NumLock + LevelFive;
+//
+//        map[None]                                    = Level1;
+//        map[Shift]                                   = Level2;
+//        map[LevelThree]                              = Level3;
+//        map[LevelThree+Shift]                        = Level4;
+//
+//        map[LevelFive]                               = Level5;
+//        map[LevelFive+Shift]                         = Level6;
+//        map[LevelFive+LevelThree]                    = Level7;
+//        map[LevelFive+LevelThree+Shift]              = Level8;
+//
+//        map[NumLock]                                 = Level5;
+//        map[NumLock+Shift]                           = Level6;
+//        map[NumLock+LevelThree]                      = Level7;
+//        map[NumLock+LevelThree+Shift]                = Level8;
+//
+//        map[NumLock+LevelFive]                       = Level1;
+//        map[NumLock+LevelFive+Shift]                 = Level2;
+//        map[NumLock+LevelFive+LevelThree]            = Level3;
+//        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
+//
+//        // Lock has no effect
+//        map[Lock]                                    = Level1;
+//        map[Lock+Shift]                              = Level2;
+//        map[Lock+LevelThree]                         = Level3;
+//        map[Lock+LevelThree+Shift]                   = Level4;
+//
+//        map[Lock+LevelFive]                          = Level5;
+//        map[Lock+LevelFive+Shift]                    = Level6;
+//        map[Lock+LevelFive+LevelThree]               = Level7;
+//        map[Lock+LevelFive+LevelThree+Shift]         = Level8;
+//
+//        map[Lock+NumLock]                            = Level5;
+//        map[Lock+NumLock+Shift]                      = Level6;
+//        map[Lock+NumLock+LevelThree]                 = Level7;
+//        map[Lock+NumLock+LevelThree+Shift]           = Level8;
+//
+//        map[Lock+NumLock+LevelFive]                  = Level1;
+//        map[Lock+NumLock+LevelFive+Shift]            = Level2;
+//        map[Lock+NumLock+LevelFive+LevelThree]       = Level3;
+//        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level4;
+//
+//        preserve[LevelFive+Shift] = Shift;
+//        preserve[NumLock+Shift] = Shift;
+//        preserve[Lock+LevelFive+Shift] = Shift;
+//        preserve[Lock+NumLock+Shift] = Shift;
+//
+//        level_name[Level1] = "Base";
+//        level_name[Level2] = "Shift";
+//        level_name[Level3] = "Alt Base";
+//        level_name[Level4] = "Shift Alt";
+//        level_name[Level5] = "X";
+//        level_name[Level6] = "X Shift";
+//        level_name[Level7] = "X Alt Base";
+//        level_name[Level8] = "X Shift Alt";
+//    };
+//
+//    type "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK" {
+//    	// Level5-Lock is implemented by using NumLock, because a real modifier
+//    	// is required.
+//    	
+//        modifiers = Shift + Lock + LevelThree + NumLock + LevelFive;
+//    
+//        map[None]                                    = Level1;
+//        map[Shift]                                   = Level2;
+//        map[LevelThree]                              = Level3;
+//        map[LevelThree+Shift]                        = Level4;
+//
+//        map[LevelFive]                               = Level5;
+//        map[LevelFive+Shift]                         = Level6;
+//        map[LevelFive+LevelThree]                    = Level7;
+//        map[LevelFive+LevelThree+Shift]              = Level8;
+//
+//        map[NumLock]                                 = Level5;
+//        map[NumLock+Shift]                           = Level6;
+//        map[NumLock+LevelThree]                      = Level7;
+//        map[NumLock+LevelThree+Shift]                = Level8;
+//
+//        map[NumLock+LevelFive]                       = Level1;
+//        map[NumLock+LevelFive+Shift]                 = Level2;
+//        map[NumLock+LevelFive+LevelThree]            = Level3;
+//        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
+//
+//        // Lock interchanges Level1 and Level2
+//        map[Lock]                                    = Level2;
+//        map[Lock+Shift]                              = Level1;
+//        map[Lock+LevelThree]                         = Level3;
+//        map[Lock+LevelThree+Shift]                   = Level4;
+//
+//        map[Lock+LevelFive]                          = Level5;
+//        map[Lock+LevelFive+Shift]                    = Level6;
+//        map[Lock+LevelFive+LevelThree]               = Level7;
+//        map[Lock+LevelFive+LevelThree+Shift]         = Level8;
+//
+//        map[Lock+NumLock]                            = Level5;
+//        map[Lock+NumLock+Shift]                      = Level6;
+//        map[Lock+NumLock+LevelThree]                 = Level7;
+//        map[Lock+NumLock+LevelThree+Shift]           = Level8;
+//
+//        map[Lock+NumLock+LevelFive]                  = Level2;
+//        map[Lock+NumLock+LevelFive+Shift]            = Level1;
+//        map[Lock+NumLock+LevelFive+LevelThree]       = Level4;
+//        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level3;
+//
+//        preserve[LevelFive+Shift] = Shift;
+//        preserve[NumLock+Shift] = Shift;
+//
+//        level_name[Level1] = "Base";
+//        level_name[Level2] = "Shift";
+//        level_name[Level3] = "Alt Base";
+//        level_name[Level4] = "Shift Alt";
+//        level_name[Level5] = "X";
+//        level_name[Level6] = "X Shift";
+//        level_name[Level7] = "X Alt Base";
+//        level_name[Level8] = "X Shift Alt";
+//    };
+
+    type "EIGHT_LEVEL_SEMIALPHABETIC" {
+	modifiers = Shift+Lock+LevelThree+LevelFive;
+	map[None] = Level1;
+	map[Shift] = Level2;
+	map[Lock]  = Level2;
+	map[LevelThree] = Level3;
+	map[Shift+LevelThree] = Level4;
+	map[Lock+LevelThree] =  Level3;
+        map[Lock+Shift+LevelThree] = Level4;
+
+	map[LevelFive] = Level5;
+	map[Shift+LevelFive] = Level6;
+	map[Lock+LevelFive]  = Level6;
+	map[Lock+Shift+LevelFive]  = Level6;
+	map[LevelThree+LevelFive] = Level7;
+	map[Shift+LevelThree+LevelFive] = Level8;
+	map[Lock+LevelThree+LevelFive] =  Level7;
+        map[Lock+Shift+LevelThree+LevelFive] = Level8;
+
+	preserve[Lock+LevelThree] = Lock;
+	preserve[Lock+Shift+LevelThree] = Lock;
+	preserve[Lock+LevelFive] = Lock;
+	preserve[Lock+Shift+LevelFive] = Lock;
+	preserve[Lock+LevelThree+LevelFive] = Lock;
+	preserve[Lock+Shift+LevelThree+LevelFive] = Lock;
+
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift";
+	level_name[Level3] = "Alt Base";
+	level_name[Level4] = "Shift Alt";
+	level_name[Level5] = "X";
+	level_name[Level6] = "X Shift";
+	level_name[Level7] = "X Alt Base";
+	level_name[Level8] = "X Shift Alt";
+    };
+
+};
diff --git a/data/types/mousekeys b/data/types/mousekeys
new file mode 100644
--- /dev/null
+++ b/data/types/mousekeys
@@ -0,0 +1,10 @@
+partial default xkb_types "default" {
+    virtual_modifiers Alt;
+
+    type "SHIFT+ALT" {
+   	modifiers = Shift+Alt;
+    	map[Shift+Alt] = Level2;
+    	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift+Alt";
+    };
+};
diff --git a/data/types/numpad b/data/types/numpad
new file mode 100644
--- /dev/null
+++ b/data/types/numpad
@@ -0,0 +1,67 @@
+partial default xkb_types "pc" {
+    type "KEYPAD" {
+	modifiers = Shift+NumLock;
+	map[None] = Level1;
+	map[Shift] = Level2;
+	map[NumLock] = Level2;
+	map[Shift+NumLock] = Level1;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Number";
+    };
+    include "extra(keypad)"
+};
+
+// On Mac keypads, level 1 and 2 are swapped
+partial xkb_types "mac" {
+    type "KEYPAD" {
+	modifiers = None;
+	map[None] = Level2;
+	level_name[Level2] = "Number";
+    };
+    include "extra(keypad)"
+};
+
+partial xkb_types "microsoft" {
+    type "KEYPAD" {
+        modifiers = Shift+NumLock;
+        map[None] = Level1;
+        preserve[Shift] = Shift;
+        map[NumLock] = Level2;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Number";
+    };
+    include "extra(keypad)"
+};
+
+// Swiss-German style numeric keypad: Shift and NumLock operates as
+// two independent modifiers; however, since we want shift state for
+// the cursor keys, only three levels are used from the key mappings.
+// Closest type is actually FOUR_LEVEL_X, but most numpad layouts uses
+// FOUR_LEVEL_MIXED_KEYPAD so that's the one we are going to override.
+partial xkb_types "shift3" {
+    type "FOUR_LEVEL_MIXED_KEYPAD" {
+        modifiers = Shift+NumLock+Control+Alt;
+
+        // NumLock Off => navigate using cursor keys
+        map[None] = Level1;
+
+        // NumLock Off + Shift pressed => select using cursor keys
+        preserve[Shift] = Shift;
+
+        // NumLock On => decimal digits
+        map[NumLock] = Level2;
+
+        // NumLock On + Shift pressed => auxiliary symbols,
+        // e.g. hexadecimal digits
+        map[Shift+NumLock] = Level3;
+
+        // Ctrl + Alt, regardless of NumLock and Shift => command keys
+        map[Control+Alt] = Level4;
+
+        // reverse map from levels to modifiers
+        level_name[Level1] = "Base";
+        level_name[Level2] = "NumLock";
+        level_name[Level3] = "Shift+NumLock";
+        level_name[Level4] = "Ctrl+Alt";
+    };
+};
diff --git a/data/types/pc b/data/types/pc
new file mode 100644
--- /dev/null
+++ b/data/types/pc
@@ -0,0 +1,117 @@
+partial default xkb_types "default" {
+
+    // Some types that are necessary
+    // for a full implementation of
+    // a PC compatible keyboard.
+    virtual_modifiers Alt;
+    virtual_modifiers LevelThree;
+    virtual_modifiers LAlt;
+    virtual_modifiers RAlt;
+    virtual_modifiers RControl;
+    virtual_modifiers LControl;
+
+    type "PC_CONTROL_LEVEL2" {
+	modifiers = Control;
+	map[None] = Level1;
+	map[Control] = Level2;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Control";
+    };
+
+    type "PC_LCONTROL_LEVEL2" {
+	modifiers = LControl;
+	map[None] = Level1;
+	map[LControl] = Level2;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "LControl";
+    };
+
+    type "PC_RCONTROL_LEVEL2" {
+	modifiers = RControl;
+	map[None] = Level1;
+	map[RControl] = Level2;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "RControl";
+    };
+
+    type "PC_ALT_LEVEL2" {
+	modifiers = Alt;
+	map[None] = Level1;
+	map[Alt] = Level2;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Alt";
+    };
+
+    type "PC_LALT_LEVEL2" {
+	modifiers = LAlt;
+	map[None] = Level1;
+	map[LAlt] = Level2;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "LAlt";
+    };
+
+    type "PC_RALT_LEVEL2" {
+	modifiers = RAlt;
+	map[None] = Level1;
+	map[RAlt] = Level2;
+	level_name[Level1] = "Base";
+	level_name[Level2] = "RAlt";
+    };
+
+    type "CTRL+ALT" {
+        modifiers = Control+Alt+Shift+LevelThree;
+        map[None] = Level1;
+        map[Shift] = Level2;
+        map[LevelThree] = Level3;
+        map[Shift+LevelThree] = Level4;
+        map[Control+Alt] = Level5;
+        preserve[Shift] = Shift;
+        preserve[Shift+LevelThree] = Shift;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Shift";
+        level_name[Level3] = "Alt Base";
+        level_name[Level4] = "Shift Alt";
+        level_name[Level5] = "Ctrl+Alt";
+    };
+
+   // Local eight level
+   // Needed when you want part of your layout eight-level but can not use
+   // LevelFive as modifier, as this will take over right ctrl by default
+   // for all the layout and is too invasive for your average four-level user
+   // Needed to fix bug #9529
+   // FIXME Should really use RControl but it's seems not to be enabled by
+   // default and touching this requires a lot of testing
+   type "LOCAL_EIGHT_LEVEL" {
+	modifiers = Shift+Lock+LevelThree+Control;
+
+	map[None]       = Level1;
+	map[Lock+Shift] = Level1;
+	map[Shift] = Level2;
+	map[Lock]  = Level2;
+
+	map[LevelThree]            = Level3;
+	map[Lock+Shift+LevelThree] = Level3;
+	map[Shift+LevelThree] = Level4;
+	map[Lock+LevelThree]  = Level4;
+
+	map[Control]            = Level5;
+	map[Lock+Shift+Control] = Level5;
+	map[Shift+Control] = Level6;
+	map[Lock+Control]  = Level6;
+
+	map[LevelThree+Control]            = Level7;
+	map[Lock+Shift+LevelThree+Control] = Level7;
+	map[Shift+LevelThree+Control] = Level8;
+	map[Lock+LevelThree+Control]  = Level8;
+
+	level_name[Level1] = "Base";
+	level_name[Level2] = "Shift";
+	level_name[Level3] = "Level3";
+	level_name[Level4] = "Shift Level3";
+	level_name[Level5] = "Ctrl";
+	level_name[Level6] = "Shift Ctrl";
+	level_name[Level7] = "Level3 Ctrl";
+	level_name[Level8] = "Shift Level3 Ctrl";
+    };
+
+};
diff --git a/xkbcommon.cabal b/xkbcommon.cabal
--- a/xkbcommon.cabal
+++ b/xkbcommon.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                xkbcommon
-version:             0.0.2
+version:             0.0.3
 synopsis:            Haskell bindings for libxkbcommon
 description:
   Wrapper library for libxkbcommon, which is the new alternative for the X11 XKB.h keyboard input
@@ -33,6 +33,81 @@
 category:            Text
 build-type:          Custom
 cabal-version:       >=1.8
+extra-source-files:
+  -- Used by Setup.hs
+  Module.hs
+  Utils.hs
+  -- test artifacts
+  data/compat/accessx
+  data/compat/basic
+  data/compat/caps
+  data/compat/complete
+  data/compat/iso9995
+  data/compat/ledcaps
+  data/compat/lednum
+  data/compat/ledscroll
+  data/compat/level5
+  data/compat/misc
+  data/compat/mousekeys
+  data/compat/pc
+  data/compat/xfree86
+  data/keycodes/aliases
+  data/keycodes/aliases-xkbcommon
+  data/keycodes/empty
+  data/keycodes/evdev
+  data/keycodes/evdev-xkbcommon
+  data/keycodes/xfree86
+  data/keymaps/bad.xkb
+  data/keymaps/basic.xkb
+  data/keymaps/comprehensive-plus-geom.xkb
+  data/keymaps/divide-by-zero.xkb
+  data/keymaps/no-types.xkb
+  data/keymaps/quartz.xkb
+  data/keymaps/stringcomp.data
+  data/keymaps/unbound-vmod.xkb
+  data/rules/base
+  data/rules/evdev
+  data/rules/evdev-xkbcommon
+  data/rules/groups
+  data/rules/index
+  data/rules/multiple-options
+  data/rules/simple
+  data/symbols/altwin
+  data/symbols/ca
+  data/symbols/capslock
+  data/symbols/ch
+  data/symbols/compose
+  data/symbols/ctrl
+  data/symbols/cz
+  data/symbols/de
+  data/symbols/empty
+  data/symbols/eurosign
+  data/symbols/group
+  data/symbols/il
+  data/symbols/in
+  data/symbols/inet
+  data/symbols/keypad
+  data/symbols/kpdl
+  data/symbols/latin
+  data/symbols/level3
+  data/symbols/level5
+  data/symbols/nbsp
+  data/symbols/pc
+  data/symbols/ru
+  data/symbols/rupeesign
+  data/symbols/shift
+  data/symbols/srvr_ctrl
+  data/symbols/terminate
+  data/symbols/us
+  data/sync.sh
+  data/types/basic
+  data/types/complete
+  data/types/extra
+  data/types/iso9995
+  data/types/level5
+  data/types/mousekeys
+  data/types/numpad
+  data/types/pc
 
 source-repository head
   type:     git
@@ -47,13 +122,13 @@
     Text.XkbCommon.ModList,
     Text.XkbCommon.Constants,
     Text.XkbCommon.Types,
+    Text.XkbCommon.InternalTypes,
     Text.XkbCommon.Context,
     Text.XkbCommon.Keymap,
     Text.XkbCommon.KeyboardState,
     Text.XkbCommon.Keysym
   other-modules:
-    Text.XkbCommon.ParseDefines,
-    Text.XkbCommon.InternalTypes
+    Text.XkbCommon.ParseDefines
   -- other-modules:
   build-depends:       base <5, transformers, storable-record, process, cpphs, template-haskell, text, bytestring, data-flags, filepath
   -- build-tools:         c2hs
@@ -115,3 +190,6 @@
   other-modules: Common
   main-is: stringcomp.hs
   build-depends : base, xkbcommon
+
+custom-setup
+  setup-depends: base, Cabal, cpphs, directory, filepath, process, template-haskell, text
