Index: uspace/srv/kbd/layout/us_dvorak.c
===================================================================
--- uspace/srv/kbd/layout/us_dvorak.c	(revision 3d36075852f79255959c89045b94078d26087861)
+++ uspace/srv/kbd/layout/us_dvorak.c	(revision 2069690387d85704bf74e942dffbb2f24e8e0f9f)
@@ -166,5 +166,27 @@
 	[KC_BACKSPACE] = '\b',
 	[KC_TAB] = '\t',
-	[KC_ENTER] = '\n'
+	[KC_ENTER] = '\n',
+	[KC_SPACE] = ' ',
+
+	[KC_NSLASH] = '/',
+	[KC_NTIMES] = '*',
+	[KC_NMINUS] = '-',
+	[KC_NPLUS] = '+',
+	[KC_NENTER] = '\n'
+};
+
+static char map_numeric[] = {
+	[KC_N7] = '7',
+	[KC_N8] = '8',
+	[KC_N9] = '9',
+	[KC_N4] = '4',
+	[KC_N5] = '5',
+	[KC_N6] = '6',
+	[KC_N1] = '1',
+	[KC_N2] = '2',
+	[KC_N3] = '3',
+
+	[KC_N0] = '0',
+	[KC_NPERIOD] = '.'
 };
 
@@ -198,8 +220,13 @@
 		c = translate(ev->key, map_not_shifted, sizeof(map_not_shifted) / sizeof(char));
 
-	if (c != 0 ) return c;
-
+	if (c != 0) return c;
+
+	if ((ev->mods & KM_NUM_LOCK) != 0)
+		c = translate(ev->key, map_numeric, sizeof(map_numeric) / sizeof(char));
+	else
+		c = 0;
+
+	return c;
 }
-
 
 /**
