diff --git a/sdl.c b/sdl.c
index 344dfae..b061c8e 100644
--- a/sdl.c
+++ b/sdl.c
@@ -29,10 +29,6 @@
 #include <signal.h>
 #endif
 
-#if defined(__APPLE__)
-#define CONFIG_SDL_GENERIC_KBD
-#endif
-
 static SDL_Surface *screen;
 static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
 static int last_vm_running;
@@ -72,118 +68,26 @@
     ds->height = h;
 }
 
-#ifdef CONFIG_SDL_GENERIC_KBD
+/* generic keyboard conversion */
 
-/* XXX: use keymap tables defined in the VNC patch because the
-   following code suppose you have a US keyboard. */
+#include "sdl_keysym.h"
+#include "keymaps.c"
 
-static const uint8_t scancodes[SDLK_LAST] = {
-    [SDLK_ESCAPE]   = 0x01,
-    [SDLK_1]        = 0x02,
-    [SDLK_2]        = 0x03,
-    [SDLK_3]        = 0x04,
-    [SDLK_4]        = 0x05,
-    [SDLK_5]        = 0x06,
-    [SDLK_6]        = 0x07,
-    [SDLK_7]        = 0x08,
-    [SDLK_8]        = 0x09,
-    [SDLK_9]        = 0x0a,
-    [SDLK_0]        = 0x0b,
-    [SDLK_MINUS]    = 0x0c,
-    [SDLK_EQUALS]   = 0x0d,
-    [SDLK_BACKSPACE]        = 0x0e,
-    [SDLK_TAB]      = 0x0f,
-    [SDLK_q]        = 0x10,
-    [SDLK_w]        = 0x11,
-    [SDLK_e]        = 0x12,
-    [SDLK_r]        = 0x13,
-    [SDLK_t]        = 0x14,
-    [SDLK_y]        = 0x15,
-    [SDLK_u]        = 0x16,
-    [SDLK_i]        = 0x17,
-    [SDLK_o]        = 0x18,
-    [SDLK_p]        = 0x19,
-    [SDLK_LEFTBRACKET]      = 0x1a,
-    [SDLK_RIGHTBRACKET]     = 0x1b,
-    [SDLK_RETURN]   = 0x1c,
-    [SDLK_LCTRL]    = 0x1d,
-    [SDLK_a]        = 0x1e,
-    [SDLK_s]        = 0x1f,
-    [SDLK_d]        = 0x20,
-    [SDLK_f]        = 0x21,
-    [SDLK_g]        = 0x22,
-    [SDLK_h]        = 0x23,
-    [SDLK_j]        = 0x24,
-    [SDLK_k]        = 0x25,
-    [SDLK_l]        = 0x26,
-    [SDLK_SEMICOLON]        = 0x27,
-    [SDLK_QUOTE]    = 0x28,
-    [SDLK_BACKQUOTE]        = 0x29,
-    [SDLK_LSHIFT]   = 0x2a,
-    [SDLK_BACKSLASH]        = 0x2b,
-    [SDLK_z]        = 0x2c,
-    [SDLK_x]        = 0x2d,
-    [SDLK_c]        = 0x2e,
-    [SDLK_v]        = 0x2f,
-    [SDLK_b]        = 0x30,
-    [SDLK_n]        = 0x31,
-    [SDLK_m]        = 0x32,
-    [SDLK_COMMA]    = 0x33,
-    [SDLK_PERIOD]   = 0x34,
-    [SDLK_SLASH]    = 0x35,
-    [SDLK_KP_MULTIPLY]      = 0x37,
-    [SDLK_LALT]     = 0x38,
-    [SDLK_SPACE]    = 0x39,
-    [SDLK_CAPSLOCK] = 0x3a,
-    [SDLK_F1]       = 0x3b,
-    [SDLK_F2]       = 0x3c,
-    [SDLK_F3]       = 0x3d,
-    [SDLK_F4]       = 0x3e,
-    [SDLK_F5]       = 0x3f,
-    [SDLK_F6]       = 0x40,
-    [SDLK_F7]       = 0x41,
-    [SDLK_F8]       = 0x42,
-    [SDLK_F9]       = 0x43,
-    [SDLK_F10]      = 0x44,
-    [SDLK_NUMLOCK]  = 0x45,
-    [SDLK_SCROLLOCK]        = 0x46,
-    [SDLK_KP7]      = 0x47,
-    [SDLK_KP8]      = 0x48,
-    [SDLK_KP9]      = 0x49,
-    [SDLK_KP_MINUS] = 0x4a,
-    [SDLK_KP4]      = 0x4b,
-    [SDLK_KP5]      = 0x4c,
-    [SDLK_KP6]      = 0x4d,
-    [SDLK_KP_PLUS]  = 0x4e,
-    [SDLK_KP1]      = 0x4f,
-    [SDLK_KP2]      = 0x50,
-    [SDLK_KP3]      = 0x51,
-    [SDLK_KP0]      = 0x52,
-    [SDLK_KP_PERIOD]        = 0x53,
-    [SDLK_PRINT]    = 0x54,
-    [SDLK_LMETA]    = 0x56,
+static kbd_layout_t *kbd_layout = NULL;
 
-    [SDLK_KP_ENTER]  = 0x9c,
-    [SDLK_KP_DIVIDE] = 0xb5,
-    
-    [SDLK_UP]       = 0xc8,
-    [SDLK_DOWN]     = 0xd0,
-    [SDLK_RIGHT]    = 0xcd,
-    [SDLK_LEFT]     = 0xcb,
-    [SDLK_INSERT]   = 0xd2,
-    [SDLK_HOME]     = 0xc7,
-    [SDLK_END]      = 0xcf,
-    [SDLK_PAGEUP]   = 0xc9,
-    [SDLK_PAGEDOWN] = 0xd1,
-    [SDLK_DELETE]   = 0xd3,
-};
-
-static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
+static uint8_t sdl_keyevent_to_keycode_generic(const SDL_KeyboardEvent *ev)
 {
-    return scancodes[ev->keysym.sym];
+    int keysym;
+    /* workaround for X11+SDL bug with AltGR */
+    keysym = ev->keysym.sym;
+    if (keysym == 0 && ev->keysym.scancode == 113)
+        keysym = SDLK_MODE;
+    return keysym2scancode(kbd_layout, keysym);
 }
 
-#elif defined(_WIN32)
+/* specific keyboard conversions from scan codes */
+
+#if defined(_WIN32)
 
 static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
 {
@@ -305,8 +209,11 @@
         return;
     }
 
-    /* XXX: not portable, but avoids complicated mappings */
-    keycode = sdl_keyevent_to_keycode(ev);
+    if (kbd_layout) {
+        keycode = sdl_keyevent_to_keycode_generic(ev);
+    } else {
+        keycode = sdl_keyevent_to_keycode(ev);
+    }
 
     switch(keycode) {
     case 0x00:
@@ -558,6 +465,17 @@
 {
     int flags;
 
+#if defined(__APPLE__)
+    /* always use generic keymaps */
+    if (!keyboard_layout)
+        keyboard_layout = "en-us";
+#endif
+    if(keyboard_layout) {
+        kbd_layout = init_keyboard_layout(keyboard_layout);
+        if (!kbd_layout)
+            exit(1);
+    }
+
     flags = SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE;
     if (SDL_Init (flags)) {
         fprintf(stderr, "Could not initialize SDL - exiting\n");
