diff --git a/bindings.lua b/bindings.lua
index a978c2b..5605ddc 100644
--- a/bindings.lua
+++ b/bindings.lua
@@ -7,75 +7,69 @@ local scratch = require("scratch")
 local modkey = conf.modkey or "Mod4"
 local mb = require("modalbind")
 
-local bindings = {mb = mb}
+local bindings = {modalbind = mb}
 
 -- {{{ Mouse bindings
 root.buttons(awful.util.table.join(
-awful.button({ }, 4, awful.tag.viewnext),
-awful.button({ }, 5, awful.tag.viewprev)
+	awful.button({ }, 4, awful.tag.viewnext),
+	awful.button({ }, 5, awful.tag.viewprev)
 ))
 -- }}}
 
 local function spawnf(cmd) return function() awful.util.spawn(cmd) end end
+bindings.spawnf = spawnf
 
 conf.cmd.run = conf.cmd.run or spawnf("dmenu_run")
 
 mpdmap = {
-	name = "MPD",
-	m = mpd.ctrl.toggle,
-	n = mpd.ctrl.next,
-	N = mpd.ctrl.prev,
-	s = spawnf("mpd"),
-	S = spawnf("mpd --kill"),
-	g = spawnf(conf.cmd.mpd_client)
+	m = { func = mpd.ctrl.toggle, desc = "Toggle" },
+	n = { func = mpd.ctrl.next, desc = "Next" },
+	N = { func = mpd.ctrl.prev, desc = "Prev" },
+	s = { func = spawnf("mpd"), desc = "start MPD" },
+	S = { func = spawnf("mpd --kill"), desc = "kill MPD" },
+	g = { func = spawnf(conf.cmd.mpd_client), desc = "Gmpc" }
 }
 mpdpromts = {
-	name = "MPD PROMPTS",
-	a = mpd.prompt.artist,
-	b = mpd.prompt.album,
-	t = mpd.prompt.title,
-	r = mpd.prompt.toggle_replace_on_search
+	a = { func = mpd.prompt.artist, desc = "artist" },
+	b = { func = mpd.prompt.album, desc = "album" },
+	t = { func = mpd.prompt.title, desc = "title" },
+	r = { func = mpd.prompt.toggle_replace_on_search, desc = "toggle replacing" }
 }
 
 progmap = {
-	name = "PROGRAMS",
-	f = spawnf(conf.cmd.browser),
-	i = spawnf(conf.cmd.im_client),
-	I = spawnf(conf.cmd.irc_client),
-	m = spawnf(conf.cmd.mail_client)
+	f = { func = spawnf(conf.cmd.browser), desc = "Browser" },
+	i = { func = spawnf(conf.cmd.im_client), desc = "IM Client" },
+	I = { func = spawnf(conf.cmd.irc_client), desc = "IRC" },
+	m = { func = spawnf(conf.cmd.mail_client), desc = "Mail" }
 }
 
 docmap = {
-	name = "DOCUMENTS",
-	u = spawnf("docopen ~/uni pdf"),
-	b = spawnf("docopen ~/books pdf epub mobi txt lit html htm"),
+	u = { func = spawnf("docopen ~/uni pdf"), desc = "Uni-Dokumente" },
+	b = { func = spawnf("docopen ~/books pdf epub mobi txt lit html htm"), desc = "Bücher" }
 }
 
 adapters = { u = "wwan", w = "wlan", b = "bluetooth" } 
-function rfkill(cmd)
-	map={ name = string.upper(cmd) }
+local function rfkill(cmd)
+	map = {}
 	for key, adapter in pairs(adapters) do
-		map[key] = spawnf("sudo rfkill "..cmd.." "..adapter)
+		map[key] = { func = spawnf("sudo rfkill "..cmd.." "..adapter), desc = adapter }
 	end
 	return map
 end
 
 connectmap = {
-	name = "CONNECT",
-	u = spawnf("umts"),
-	w = spawnf("wlanacpi")
+	u = { func = spawnf("umts"), desc = "umts" },
+	w = { func = spawnf("wlanacpi"), desc = "wlan" }
 }
 
 wirelessmap = {
-	name = "WIRELESS",
-	b = mb.grabf(rfkill("block")),
-	u = mb.grabf(rfkill("unblock")),
-	c = mb.grabf(connectmap)
+	b = { func = mb.grabf(rfkill("block"),"Block"), desc = "block" },
+	u = { func = mb.grabf(rfkill("unblock"),"Unblock"), desc = "unblock" },
+	c = { func = mb.grabf(connectmap, "Connect"), desc = "connect" }
 }
 
-function bindings.extend_and_register_key_table(globalkeys)
-	local totalkeys = globalkeys or {}
-	totalkeys = awful.util.table.join(totalkeys,
+function bindings.extend_key_table(globalkeys)
+	return awful.util.table.join(globalkeys or {},
 	awful.key({ }, "Menu", spawnf('wmselect')),
 
 	awful.key({ modkey, "Control" }, "r", awesome.restart),
@@ -84,11 +78,11 @@ function bindings.extend_and_register_key_table(globalkeys)
 
 	--{{{ Modal mappings
 
-	awful.key({ modkey            },  "m",  mb.grabf(mpdmap, true)),
-	awful.key({ modkey, "Shift"   },  "m",  mb.grabf(mpdpromts)),
-	awful.key({ modkey            },  "c",  mb.grabf(progmap)),
-	awful.key({ modkey            },  "w",  mb.grabf(wirelessmap)),
-	awful.key({ modkey            },  "d",  mb.grabf(docmap)),
+	awful.key({ modkey            },  "m",  mb.grabf(mpdmap, "MPD", true)),
+	awful.key({ modkey, "Shift"   },  "m",  mb.grabf(mpdpromts, "MPD - Search for")),
+	awful.key({ modkey            },  "c",  mb.grabf(progmap, "Commands")),
+	awful.key({ modkey            },  "w",  mb.grabf(wirelessmap, "Wifi")),
+	awful.key({ modkey            },  "d",  mb.grabf(docmap, "Documents")),
 	--}}}
 
 	--{{{ Audio control
@@ -130,13 +124,10 @@ function bindings.extend_and_register_key_table(globalkeys)
 	)
 
 	--}}}
-
-	-- Set keys
-	root.keys(totalkeys)
 end
 
 
-function client_opacity_set(c, default, max, step)
+local function client_opacity_set(c, default, max, step)
 	if c.opacity < 0 or c.opacity > 1 then
 		c.opacity = default
 	end
diff --git a/layouts.lua b/layouts.lua
index 7bf2a52..7308f0b 100644
--- a/layouts.lua
+++ b/layouts.lua
@@ -30,7 +30,6 @@ function layouts.extend_key_table(globalkeys)
 		end),
 
 		-- Layout manipulation
-		awful.key({ modkey }, "u", awful.client.urgent.jumpto),
 		awful.key({ modkey }, "Tab", function ()
 			awful.client.focus.history.previous()
 			if client.focus then
@@ -78,10 +77,7 @@ function layouts.extend_key_table(globalkeys)
 		end),
 		awful.key({ modkey, "Control" }, "k", function ()
 			awful.screen.focus_relative(-1)
-		end),
-		awful.key({ modkey }, "Left",   awful.tag.viewprev       ),
-		awful.key({ modkey }, "Right",  awful.tag.viewnext       ),
-		awful.key({ modkey }, "Escape", awful.tag.history.restore)
+		end)
 	);
 end
 
diff --git a/modalbind.lua b/modalbind.lua
index aef2c71..bcaa904 100644
--- a/modalbind.lua
+++ b/modalbind.lua
@@ -105,7 +105,7 @@ local function set_default(s)
 	modewibox[s].x = settings.x_offset < 0 and
 		screen[s].geometry.x - width + settings.x_offset or
 		settings.x_offset
-	modewibox[s].y = screen[s].geometry.height - settings.height
+	modewibox[s].y = screen[s].geometry.height - modewibox[s].height
 end
 
 local function ensure_init()
@@ -115,7 +115,7 @@ local function ensure_init()
 	inited = true
 	for s = 1, screen.count() do
 		modewidget[s] = wibox.widget.textbox()
-		modewidget[s]:set_align("center")
+		modewidget[s]:set_align("left")
 
 		modewibox[s] = wibox({
 			fg = beautiful.fg_normal,
@@ -141,16 +141,19 @@ local function ensure_init()
 	end
 end
 
-local function show_box(s, map)
+local function show_box(s, map, name)
 	ensure_init()
 	modewibox.screen = s
-	local label = " -- " .. map.name .. " -- "
+	local label = "<b>" .. name .. "</b>"
 	if settings.show_options then
-		for key in pairs(map) do
-			if key ~= "name" then label = label .. " " .. key end
+		for key, mapping in pairs(map) do
+			label = label .. "\n<b>" .. key .. "</b>"
+			if type(mapping) == "table" then
+				label = label .. "\t" .. (mapping.desc or "???")
+			end
 		end
 	end
-	modewidget[s]:set_text(label)
+	modewidget[s]:set_markup(label)
 	modewibox[s].visible = true
 	set_default(s)
 end
@@ -160,9 +163,9 @@ local function hide_box()
 	if s ~= -1 then modewibox[s].visible = false end
 end
 
-function grab(keymap, stay_in_mode)
-	if keymap.name then
-		show_box(mouse.screen, keymap)
+function grab(keymap, name, stay_in_mode)
+	if name then
+		show_box(mouse.screen, keymap, name)
 		nesting = nesting + 1
 	end
 
@@ -178,7 +181,11 @@ function grab(keymap, stay_in_mode)
 
 		if keymap[key] then
 			keygrabber.stop()
-			keymap[key]()
+			if type(keymap[key]) == "table" then
+				keymap[key].func()
+			else
+				keymap[key]()
+			end
 			if stay_in_mode then
 				grab(keymap, true)
 			else
@@ -193,8 +200,8 @@ function grab(keymap, stay_in_mode)
 end
 modalbind.grab = grab
 
-function grabf(keymap, stay_in_mode)
-	return function() grab(keymap, stay_in_mode) end
+function grabf(keymap, name, stay_in_mode)
+	return function() grab(keymap, name, stay_in_mode) end
 end
 modalbind.grabf = grabf
 
diff --git a/rc.lua b/rc.lua
index 0e1fe34..0efea95 100644
--- a/rc.lua
+++ b/rc.lua
@@ -64,8 +64,10 @@ globalkeys = layouts.extend_key_table(globalkeys);
 globalkeys = tags.extend_key_table(globalkeys);
 
 bindings = require("bindings")
-bindings.extend_and_register_key_table(globalkeys)
-bindings.mb.set_x_offset(18)
+bindings.modalbind.set_x_offset(18)
+globalkeys = bindings.extend_key_table(globalkeys)
+
+root.keys(globalkeys)
 -- }}}
 
 -- {{{ rules
diff --git a/tags.lua b/tags.lua
index d6a8d37..fe1c144 100644
--- a/tags.lua
+++ b/tags.lua
@@ -1,4 +1,4 @@
--- tags and layouts
+-- tags
 local awful = awful
 local conf = conf
 local modkey = conf.modkey or "Mod4"
@@ -6,7 +6,7 @@ local modkey = conf.modkey or "Mod4"
 local tags={ mt={} }
 local layouts = layouts
 
-local function funcViewOnly(i)
+local function getfunc_viewonly(i)
 	return function ()
 		local screen = mouse.screen
 		if tags[screen][i] then
@@ -15,7 +15,7 @@ local function funcViewOnly(i)
 	end
 end
 
-local function funcViewToggle(i)
+local function getfunc_viewtoggle(i)
 	return function ()
 		local screen = mouse.screen
 		if tags[screen][i] then
@@ -24,7 +24,7 @@ local function funcViewToggle(i)
 	end
 end
 
-local function funcMoveTo(i)
+local function getfunc_moveto(i)
 	return function ()
 		if client.focus and tags[client.focus.screen][i] then
 			awful.client.movetotag(tags[client.focus.screen][i])
@@ -32,7 +32,7 @@ local function funcMoveTo(i)
 	end
 end
 
-local function funcToggle(i)
+local function getfunc_clienttoggle(i)
 	return function ()
 		if client.focus and tags[client.focus.screen][i] then
 			awful.client.toggletag(tags[client.focus.screen][i])
@@ -104,12 +104,20 @@ function tags.extend_key_table(globalkeys)
 			k = "F" .. i - 10 -- F keys
 		end
 		tagkeys = awful.util.table.join(tagkeys,
-			awful.key( { modkey }, k, funcViewOnly(i)),
-			awful.key( { modkey, "Control" }, k, funcViewToggle(i)),
-			awful.key( { modkey, "Shift" }, k, funcMoveTo(i)),
-			awful.key( { modkey, "Control", "Shift" }, k, funcToggle(i))
+			awful.key( { modkey }, k, getfunc_viewonly(i)),
+			awful.key( { modkey, "Control" }, k, getfunc_viewtoggle(i)),
+			awful.key( { modkey, "Shift" }, k, getfunc_moveto(i)),
+			awful.key( { modkey, "Control", "Shift" }, k, getfunc_clienttoggle(i))
 		)
 	end
+
+	-- keys for all tags
+	tagkeys = awful.util.table.join(tagkeys,
+		awful.key({ modkey }, "u", awful.client.urgent.jumpto),
+		awful.key({ modkey }, "Left",   awful.tag.viewprev       ),
+		awful.key({ modkey }, "Right",  awful.tag.viewnext       ),
+		awful.key({ modkey }, "Escape", awful.tag.history.restore)
+	)
 	return tagkeys;
 end