diff --git build/jam/HaikuImage build/jam/HaikuImage
index 90b9eee..0a8ecc9 100644
--- build/jam/HaikuImage
+++ build/jam/HaikuImage
@@ -499,10 +499,30 @@ AddSymlinkToHaikuImage system data Keymaps : Swedish : Finnish ;
 AddSymlinkToHaikuImage system data Keymaps : Slovene : Croatian ;
 AddSymlinkToHaikuImage system data Keymaps : US-International : Brazilian ;
 
+# Copy Keyboard Layout files to the image one-by-one
 local keyboardLayoutsDir
 	= [ FDirName $(HAIKU_TOP) data system data KeyboardLayouts ] ;
-local keyboardLayouts = [ Glob $(keyboardLayoutsDir) : [^.]* ] ;
-AddFilesToHaikuImage system data KeyboardLayouts : $(keyboardLayouts) ;
+local keyboardLayoutFiles =
+	$(keyboardLayoutsDir)/"Generic 104-key"
+	$(keyboardLayoutsDir)/"Generic 105-key International"
+	$(keyboardLayoutsDir)/"IBM Laptop International"
+	$(keyboardLayoutsDir)/"Kinesis Advantage"
+	$(keyboardLayoutsDir)/"Kinesis Ergo Elan International"
+	$(keyboardLayoutsDir)/"TypeMatrix 2030" ;
+AddDirectoryToHaikuImage system data KeyboardLayouts ;
+AddFilesToHaikuImage system data KeyboardLayouts
+	: $(keyboardLayoutFiles) ;
+
+local appleAluminumDir
+	= [ FDirName $(keyboardLayoutsDir) Apple\ Aluminum ] ;
+local appleAluminumFiles =
+	$(appleAluminumDir)/"Apple Aluminium Extended International"
+	$(appleAluminumDir)/"Apple Aluminium International"
+	$(appleAluminumDir)/"Apple Aluminum (US)"
+	$(appleAluminumDir)/"Apple Aluminum Extended (US)" ;
+AddDirectoryToHaikuImage system data KeyboardLayouts Apple\ Aluminum ;
+AddFilesToHaikuImage system data KeyboardLayouts Apple\ Aluminum
+	: $(appleAluminumFiles) ;
 
 local driverSettingsFiles = <driver-settings>kernel ;
 SEARCH on $(driverSettingsFiles)
diff --git data/system/data/KeyboardLayouts/Apple Aluminium data/system/data/KeyboardLayouts/Apple Aluminium
deleted file mode 100644
index dba6cde..0000000
--- data/system/data/KeyboardLayouts/Apple Aluminium	
+++ /dev/null
@@ -1,27 +0,0 @@
-name = Apple aluminium
-
-# Size shortcuts
-default-size = 10,10
-$back = 17,10
-$fn = 10.5,6
-$lshift = 13,10
-$ctrl = 14,10
-$alt = 12,10
-$cmd = 14,10
-$b = 5,10
-$d = 15,10
-$e = l12,20,8
-$f = 10,20
-$two = 20,10
-
-# Key rows
-[ 0,0;  4,5:-; d$fn:0x01; $fn:+12; d$fn:0x00; 5,6:-; 10,6:0x04+2; 5,6:-;
-	10,6:+4 ]
-[ 0,6; 4,5:-; :0x11+12; d$back:+; $b:-; d:+3; $b:-; d:+1; d:0x6a; d:0x23+1 ]
-[ 0,16; 4,5:-; d$d:0x26; :+12; d$e:0x47; $b:-; d:0x34-0x36; $b:-; :+3; d:0x25 ]
-[ 0,26; 4,5:led-caps; # integrated into caps key
-	d17,10:0x3b; :+11; :0x33; 50,10:-; :0x48-0x4a; d:0x3a ]
-[ 0,36; 4,5:-; d$lshift:0x4b; :0x69; :0x4c+9; d24,10:+1; 15,10:-; d:+1; 
-	15,10:-; :+3; d$f:+1 ]
-[ 0,46; 4,5:-; d$ctrl:0x5c; d$alt:0x5d; d$cmd:0x66; 67,10:0x5e; d$cmd:0x67;
-	d$alt:0x5f; d$ctrl:0x60; $b:-; d:+3; $b:-; $two:+1; :+1 ]
diff --git data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium Extended International data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium Extended International
new file mode 100644
index 0000000..68c96bb
--- /dev/null
+++ data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium Extended International	
@@ -0,0 +1,26 @@
+name = Apple Aluminium Extended International
+
+# Size shortcuts
+default-size = 10,10
+$back = 17,10
+$fn = 10.5,6
+$lshift = 13,10
+$ctrl = 14,10
+$alt = 12,10
+$cmd = 14,10
+$b = 5,10
+$d = 15,10
+$e = l12,20,8
+$f = 10,20
+$two = 20,10
+
+# Key rows
+[ 0,0;  4,5:-; d$fn:0x01; $fn:+12; 15.5,6:-; 10,6:0x70068; 10,6:+2; 5,6:-; 10,6:+4; ]
+[ 0,6; 4,5:-; :0x11+12; d$back:+; $b:-; :-; d:0x20; d:+1; $b:-; d:+1; d:0x6a; d:0x23+1 ]
+[ 0,16; 4,5:-; d$d:0x26; :+12; d$e:0x47; $b:-; d:0x34-0x36; $b:-; :+3; d:0x25 ]
+[ 0,26; 4,5:led-caps; # integrated into caps key
+	d17,10:0x3b; :+11; :0x33; 50,10:-; :0x48-0x4a; d:0x3a ]
+[ 0,36; 4,5:-; d$lshift:0x4b; :0x69; :0x4c+9; d24,10:+1; 15,10:-; d:+1; 
+	15,10:-; :+3; d$f:+1 ]
+[ 0,46; 4,5:-; d$ctrl:0x5c; d$alt:0x5d; d$cmd:0x66; 67,10:0x5e; d$cmd:0x67;
+	d$alt:0x5f; d$ctrl:0x60; $b:-; d:+3; $b:-; $two:+1; :+1 ]
diff --git data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium International data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium International
new file mode 100644
index 0000000..38758b8
--- /dev/null
+++ data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminium International	
@@ -0,0 +1,27 @@
+name = Apple Aluminium International
+
+# Size shortcuts
+default-size = 10,10
+$back = 17,10
+$fn = 10.5,6
+$lshift = 13,10
+$b = 2,12
+$d = 15,10
+$e = l12,20,8
+$f = 10,20
+$two = 20,10
+$last = 10,12
+$cmd = 14,12
+$arrow = 10,6
+
+# Key rows
+[ 0,0;  4,5:-; d$fn:0x01; $fn:+12; ]
+[ 0,6;  4,5:-; :0x11+12; d$back:+; ]
+[ 0,16; 4,5:-; d$d:0x26; :+12; d$e:0x47; ]
+[ 0,26; 4,5:led-caps; # integrated into caps key
+	d17,10:0x3b; :+11; :0x33; ]
+[ 0,36; 4,5:-; d$lshift:0x4b; :0x69; :0x4c+9; d24,10:+1; ]
+[ 0,46; 4,5:-; d$last:-; # fn key
+	d$last:0x5c; d$last:0x5d; d$cmd:0x66; 49,12:0x5e; d$cmd:0x67;
+	d$last:0x5f; $arrow:-; d$arrow:0x57; $arrow:-; ]
+[ 121,52; d$arrow:0x61+2; ]
diff --git data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum (US) data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum (US)
new file mode 100644
index 0000000..976c71c
--- /dev/null
+++ data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum (US)	
@@ -0,0 +1,24 @@
+name = Apple Aluminum (US)
+
+# Size shortcuts
+default-size = 10,10
+$back = 17,10
+$fn = 10.5,6
+$b = 2,12
+$f = 10,20
+$two = 20,10
+$last = 10,12
+$cmd = 14,12
+$arrow = 10,6
+
+# Key rows
+[ 0,0;  4,5:-; d$fn:0x01; $fn:+12; ]
+[ 0,6;  4,5:-; :0x11+12; d$back:+; ]
+[ 0,16; 4,5:-; d17,10:0x26; :+13; ]
+[ 0,26; 4,5:led-caps; # integrated into caps key
+	d19,10:0x3b; :+11; d18,10:0x47; ]
+[ 0,36; 4,5:-; d24,10:0x4b; :+10; d23,10:+1; ]
+[ 0,46; 4,5:-; d$last:-; # fn key
+	d$last:0x5c; d$last:0x5d; d$cmd:0x66; 49,12:0x5e; d$cmd:0x67;
+	d$last:0x5f; $arrow:-; d$arrow:0x57; $arrow:-; ]
+[ 121,52; d$arrow:0x61+2; ]
diff --git data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum Extended (US) data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum Extended (US)
new file mode 100644
index 0000000..c2a753b
--- /dev/null
+++ data/system/data/KeyboardLayouts/Apple Aluminum/Apple Aluminum Extended (US)	
@@ -0,0 +1,23 @@
+name = Apple Aluminum Extended (US)
+
+# Size shortcuts
+default-size = 10,10
+$back = 17,10
+$fn = 10.5,6
+$shift = 24,10
+$ctrl = 14,10
+$alt = 12,10
+$cmd = 14,10
+$b = 5,10
+$f = 10,20
+$two = 20,10
+
+# Key rows
+[ 0,0;  4,5:-; d$fn:0x01; $fn:+12; 15.5,6:-; 10,6:0x70068; 10,6:+2; 5,6:-; 10,6:+4; ]
+[ 0,6;  4,5:-; :0x11+12; d$back:+; $b:-; :-; d:0x20; d:+1; $b:-; d:+1; d:0x6a; d:0x23+1 ]
+[ 0,16; 4,5:-; 0,16; 4,5:-; d17,10:0x26; :+13; $b:-; d:0x34-0x36; $b:-; :+3; d:0x25 ]
+[ 0,26; 4,5:led-caps; # integrated into caps key
+	d19,10:0x3b; :+11; d18,10:0x47; 40,10:-; :0x48-0x4a; d:0x3a ]
+[ 0,36; 4,5:-; d24,10:0x4b; :+10; d23,10:+1; 15,10:-; d:+1; 15,10:-; :+3; d$f:+1 ]
+[ 0,46; 4,5:-; d$ctrl:0x5c; d$alt:0x5d; d$cmd:0x66; 67,10:0x5e; d$cmd:0x67;
+	d$alt:0x5f; d$ctrl:0x60; $b:-; d:+3; $b:-; $two:+1; :+1 ]
diff --git src/preferences/keymap/KeymapWindow.cpp src/preferences/keymap/KeymapWindow.cpp
index 62924a2..53393b1 100644
--- src/preferences/keymap/KeymapWindow.cpp
+++ src/preferences/keymap/KeymapWindow.cpp
@@ -537,10 +537,31 @@ KeymapWindow::_AddKeyboardLayouts(BMenu* menu)
 				if (menu->FindItem(ref.name) != NULL)
 					continue;
 
-				BMessage* message = new BMessage(kChangeKeyboardLayout);
-				message->AddRef("ref", &ref);
+				BDirectory subdirectory;
+				subdirectory.SetTo(&ref);
+
+				if (subdirectory.InitCheck() == B_OK) {
+					BMenu* submenu = new BMenu(ref.name);
+					submenu->SetRadioMode(true);
+					
+					entry_ref subref;
+
+					while (subdirectory.GetNextRef(&subref) == B_OK) {
+						if (submenu->FindItem(subref.name) != NULL)
+							continue;
+
+						BMessage* message = new BMessage(kChangeKeyboardLayout);
+						message->AddRef("ref", &subref);
+				
+						submenu->AddItem(new BMenuItem(subref.name, message));
+					}
+					menu->AddItem(submenu);
+				} else {
+					BMessage* message = new BMessage(kChangeKeyboardLayout);
+					message->AddRef("ref", &ref);
 
-				menu->AddItem(new BMenuItem(ref.name, message));
+					menu->AddItem(new BMenuItem(ref.name, message));
+				}
 			}
 		}
 	}
@@ -557,14 +578,30 @@ KeymapWindow::_SetKeyboardLayout(const char* path)
 		if (status == B_OK) {
 			// select item
 			for (int32 i = fLayoutMenu->CountItems(); i-- > 0;) {
-				BMenuItem* item = fLayoutMenu->ItemAt(i);
-				BMessage* message = item->Message();
-				entry_ref ref;
-				if (message->FindRef("ref", &ref) == B_OK) {
-					BPath layoutPath(&ref);
-					if (layoutPath == path) {
-						item->SetMarked(true);
-						break;
+				BMenu *submenu = fLayoutMenu->SubmenuAt(i);
+				if (submenu == NULL) {
+					BMenuItem* item = fLayoutMenu->ItemAt(i);
+					BMessage* message = item->Message();
+					entry_ref ref;
+					if (message->FindRef("ref", &ref) == B_OK) {
+						BPath layoutPath(&ref);
+						if (layoutPath == path)
+							item->SetMarked(true);
+						else
+							item->SetMarked(false);
+					}
+				} else {
+					for (int32 j = submenu->CountItems(); j-- > 0;) {
+						BMenuItem* item = submenu->ItemAt(j);
+						BMessage* message = item->Message();
+						entry_ref ref;
+						if (message->FindRef("ref", &ref) == B_OK) {
+							BPath layoutPath(&ref);
+							if (layoutPath == path)
+								item->SetMarked(true);
+							else
+								item->SetMarked(false);
+						}
 					}
 				}
 			}
