diff --git a/Makefile b/Makefile
index fff52dd..276fb70 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-VERSION   := git-20150107
+VERSION   := git-20150111
 
 PREFIX    := /usr/local
 MANPREFIX := $(PREFIX)/share/man
diff --git a/commands.c b/commands.c
index d916a09..2f8a2fe 100644
--- a/commands.c
+++ b/commands.c
@@ -55,7 +55,7 @@ extern int markcnt;
 extern int prefix;
 extern bool extprefix;
 
-bool cg_quit(arg_t a)
+bool cg_quit(arg_t _)
 {
 	unsigned int i;
 
@@ -69,7 +69,7 @@ bool cg_quit(arg_t a)
 	exit(EXIT_SUCCESS);
 }
 
-bool cg_switch_mode(arg_t a)
+bool cg_switch_mode(arg_t _)
 {
 	if (mode == MODE_IMAGE) {
 		if (tns.thumbs == NULL)
@@ -89,7 +89,7 @@ bool cg_switch_mode(arg_t a)
 	return true;
 }
 
-bool cg_toggle_fullscreen(arg_t a)
+bool cg_toggle_fullscreen(arg_t _)
 {
 	win_toggle_fullscreen(&win);
 	/* redraw after next ConfigureNotify event */
@@ -101,7 +101,7 @@ bool cg_toggle_fullscreen(arg_t a)
 	return false;
 }
 
-bool cg_toggle_bar(arg_t a)
+bool cg_toggle_bar(arg_t _)
 {
 	win_toggle_bar(&win);
 	if (mode == MODE_IMAGE) {
@@ -114,13 +114,13 @@ bool cg_toggle_bar(arg_t a)
 	return true;
 }
 
-bool cg_prefix_external(arg_t a)
+bool cg_prefix_external(arg_t _)
 {
 	extprefix = true;
 	return false;
 }
 
-bool cg_reload_image(arg_t a)
+bool cg_reload_image(arg_t _)
 {
 	if (mode == MODE_IMAGE) {
 		load_image(fileidx);
@@ -134,7 +134,7 @@ bool cg_reload_image(arg_t a)
 	return true;
 }
 
-bool cg_remove_image(arg_t a)
+bool cg_remove_image(arg_t _)
 {
 	remove_file(fileidx, true);
 	if (mode == MODE_IMAGE)
@@ -144,7 +144,7 @@ bool cg_remove_image(arg_t a)
 	return true;
 }
 
-bool cg_first(arg_t a)
+bool cg_first(arg_t _)
 {
 	if (mode == MODE_IMAGE && fileidx != 0) {
 		load_image(0);
@@ -158,7 +158,7 @@ bool cg_first(arg_t a)
 	}
 }
 
-bool cg_n_or_last(arg_t a)
+bool cg_n_or_last(arg_t _)
 {
 	int n = prefix != 0 && prefix - 1 < filecnt ? prefix - 1 : filecnt - 1;
 
@@ -174,20 +174,16 @@ bool cg_n_or_last(arg_t a)
 	}
 }
 
-bool cg_scroll_screen(arg_t a)
+bool cg_scroll_screen(arg_t dir)
 {
-	direction_t dir = (direction_t) a;
-
 	if (mode == MODE_IMAGE)
 		return img_pan(&img, dir, -1);
 	else
 		return tns_scroll(&tns, dir, true);
 }
 
-bool cg_zoom(arg_t a)
+bool cg_zoom(arg_t d)
 {
-	long d = (long) a;
-
 	if (mode == MODE_THUMB)
 		return tns_zoom(&tns, d);
 	else if (d > 0)
@@ -198,7 +194,7 @@ bool cg_zoom(arg_t a)
 		return false;
 }
 
-bool cg_toggle_image_mark(arg_t a)
+bool cg_toggle_image_mark(arg_t _)
 {
 	files[fileidx].flags ^= FF_MARK;
 	markcnt += files[fileidx].flags & FF_MARK ? 1 : -1;
@@ -207,7 +203,7 @@ bool cg_toggle_image_mark(arg_t a)
 	return true;
 }
 
-bool cg_reverse_marks(arg_t a)
+bool cg_reverse_marks(arg_t _)
 {
 	int i;
 
@@ -220,7 +216,7 @@ bool cg_reverse_marks(arg_t a)
 	return true;
 }
 
-bool cg_unmark_all(arg_t a)
+bool cg_unmark_all(arg_t _)
 {
 	int i;
 
@@ -232,9 +228,8 @@ bool cg_unmark_all(arg_t a)
 	return true;
 }
 
-bool cg_navigate_marked(arg_t a)
+bool cg_navigate_marked(arg_t n)
 {
-	long n = (long) a;
 	int d, i;
 	int new = fileidx;
 	
@@ -260,9 +255,9 @@ bool cg_navigate_marked(arg_t a)
 	}
 }
 
-bool cg_change_gamma(arg_t a)
+bool cg_change_gamma(arg_t d)
 {
-	if (img_change_gamma(&img, (long) a * (prefix > 0 ? prefix : 1))) {
+	if (img_change_gamma(&img, d * (prefix > 0 ? prefix : 1))) {
 		if (mode == MODE_THUMB)
 			tns.dirty = true;
 		return true;
@@ -271,10 +266,8 @@ bool cg_change_gamma(arg_t a)
 	}
 }
 
-bool ci_navigate(arg_t a)
+bool ci_navigate(arg_t n)
 {
-	long n = (long) a;
-
 	if (prefix > 0)
 		n *= prefix;
 	n += fileidx;
@@ -291,18 +284,18 @@ bool ci_navigate(arg_t a)
 	}
 }
 
-bool ci_alternate(arg_t a)
+bool ci_alternate(arg_t _)
 {
 	load_image(alternate);
 	return true;
 }
 
-bool ci_navigate_frame(arg_t a)
+bool ci_navigate_frame(arg_t d)
 {
-	return !img.multi.animate && img_frame_navigate(&img, (long) a);
+	return !img.multi.animate && img_frame_navigate(&img, d);
 }
 
-bool ci_toggle_animation(arg_t a)
+bool ci_toggle_animation(arg_t _)
 {
 	bool dirty = false;
 
@@ -318,17 +311,13 @@ bool ci_toggle_animation(arg_t a)
 	return dirty;
 }
 
-bool ci_scroll(arg_t a)
+bool ci_scroll(arg_t dir)
 {
-	direction_t dir = (direction_t) a;
-
 	return img_pan(&img, dir, prefix);
 }
 
-bool ci_scroll_to_edge(arg_t a)
+bool ci_scroll_to_edge(arg_t dir)
 {
-	direction_t dir = (direction_t) a;
-
 	return img_pan_edge(&img, dir);
 }
 
@@ -343,7 +332,7 @@ Bool is_motionnotify(Display *d, XEvent *e, XPointer a)
 	ox = x, oy = y; \
 	break
 
-bool ci_drag(arg_t a)
+bool ci_drag(arg_t _)
 {
 	int dx = 0, dy = 0, i, ox, oy, x, y;
 	unsigned int ui;
@@ -402,48 +391,42 @@ bool ci_drag(arg_t a)
 	return true;
 }
 
-bool ci_set_zoom(arg_t a)
+bool ci_set_zoom(arg_t zl)
 {
-	return img_zoom(&img, (prefix ? prefix : (long) a) / 100.0);
+	return img_zoom(&img, (prefix ? prefix : zl) / 100.0);
 }
 
-bool ci_fit_to_win(arg_t a)
+bool ci_fit_to_win(arg_t sm)
 {
-	scalemode_t sm = (scalemode_t) a;
-
 	return img_fit_win(&img, sm);
 }
 
-bool ci_rotate(arg_t a)
+bool ci_rotate(arg_t degree)
 {
-	degree_t degree = (degree_t) a;
-
 	img_rotate(&img, degree);
 	return true;
 }
 
-bool ci_flip(arg_t a)
+bool ci_flip(arg_t dir)
 {
-	flipdir_t dir = (flipdir_t) a;
-
 	img_flip(&img, dir);
 	return true;
 }
 
-bool ci_toggle_antialias(arg_t a)
+bool ci_toggle_antialias(arg_t _)
 {
 	img_toggle_antialias(&img);
 	return true;
 }
 
-bool ci_toggle_alpha(arg_t a)
+bool ci_toggle_alpha(arg_t _)
 {
 	img.alpha = !img.alpha;
 	img.dirty = true;
 	return true;
 }
 
-bool ci_slideshow(arg_t a)
+bool ci_slideshow(arg_t _)
 {
 	if (prefix > 0) {
 		img.ss.on = true;
@@ -458,14 +441,12 @@ bool ci_slideshow(arg_t a)
 	return true;
 }
 
-bool ct_move_sel(arg_t a)
+bool ct_move_sel(arg_t dir)
 {
-	direction_t dir = (direction_t) a;
-
 	return tns_move_selection(&tns, dir, prefix);
 }
 
-bool ct_reload_all(arg_t a)
+bool ct_reload_all(arg_t _)
 {
 	tns_free(&tns);
 	tns_init(&tns, files, &filecnt, &fileidx, &win);
diff --git a/commands.h b/commands.h
index a06427a..07c1dd8 100644
--- a/commands.h
+++ b/commands.h
@@ -23,7 +23,7 @@
 
 #include "types.h"
 
-typedef void* arg_t;
+typedef int arg_t;
 typedef bool (*cmd_f)(arg_t);
 
 #define G_CMD(c) g_##c,
diff --git a/config.def.h b/config.def.h
index f3fd9d3..ac32bd7 100644
--- a/config.def.h
+++ b/config.def.h
@@ -62,99 +62,99 @@ static const int thumb_sizes[] = { 32, 64, 96, 128, 160 };
 /* keyboard mappings for image and thumbnail mode: */
 static const keymap_t keys[] = {
 	/* modifiers    key               function              argument */
-	{ 0,            XK_q,             g_quit,               (arg_t) None },
-	{ 0,            XK_Return,        g_switch_mode,        (arg_t) None },
-	{ 0,            XK_f,             g_toggle_fullscreen,  (arg_t) None },
-	{ 0,            XK_b,             g_toggle_bar,         (arg_t) None },
-	{ ControlMask,  XK_x,             g_prefix_external,    (arg_t) None },
-	{ 0,            XK_g,             g_first,              (arg_t) None },
-	{ 0,            XK_G,             g_n_or_last,          (arg_t) None },
-	{ 0,            XK_r,             g_reload_image,       (arg_t) None },
-	{ 0,            XK_D,             g_remove_image,       (arg_t) None },
-	{ ControlMask,  XK_h,             g_scroll_screen,      (arg_t) DIR_LEFT },
-	{ ControlMask,  XK_Left,          g_scroll_screen,      (arg_t) DIR_LEFT },
-	{ ControlMask,  XK_j,             g_scroll_screen,      (arg_t) DIR_DOWN },
-	{ ControlMask,  XK_Down,          g_scroll_screen,      (arg_t) DIR_DOWN },
-	{ ControlMask,  XK_k,             g_scroll_screen,      (arg_t) DIR_UP },
-	{ ControlMask,  XK_Up,            g_scroll_screen,      (arg_t) DIR_UP },
-	{ ControlMask,  XK_l,             g_scroll_screen,      (arg_t) DIR_RIGHT },
-	{ ControlMask,  XK_Right,         g_scroll_screen,      (arg_t) DIR_RIGHT },
-	{ 0,            XK_plus,          g_zoom,               (arg_t) +1 },
-	{ 0,            XK_KP_Add,        g_zoom,               (arg_t) +1 },
-	{ 0,            XK_minus,         g_zoom,               (arg_t) -1 },
-	{ 0,            XK_KP_Subtract,   g_zoom,               (arg_t) -1 },
-	{ 0,            XK_m,             g_toggle_image_mark,  (arg_t) None },
-	{ 0,            XK_M,             g_reverse_marks,      (arg_t) None },
-	{ ControlMask,  XK_m,             g_unmark_all,         (arg_t) None },
-	{ 0,            XK_N,             g_navigate_marked,    (arg_t) +1 },
-	{ 0,            XK_P,             g_navigate_marked,    (arg_t) -1 },
-	{ 0,            XK_braceleft,     g_change_gamma,       (arg_t) -1 },
-	{ 0,            XK_braceright,    g_change_gamma,       (arg_t) +1 },
-	{ ControlMask,  XK_g,             g_change_gamma,       (arg_t)  0 },
+	{ 0,            XK_q,             g_quit,               None },
+	{ 0,            XK_Return,        g_switch_mode,        None },
+	{ 0,            XK_f,             g_toggle_fullscreen,  None },
+	{ 0,            XK_b,             g_toggle_bar,         None },
+	{ ControlMask,  XK_x,             g_prefix_external,    None },
+	{ 0,            XK_g,             g_first,              None },
+	{ 0,            XK_G,             g_n_or_last,          None },
+	{ 0,            XK_r,             g_reload_image,       None },
+	{ 0,            XK_D,             g_remove_image,       None },
+	{ ControlMask,  XK_h,             g_scroll_screen,      DIR_LEFT },
+	{ ControlMask,  XK_Left,          g_scroll_screen,      DIR_LEFT },
+	{ ControlMask,  XK_j,             g_scroll_screen,      DIR_DOWN },
+	{ ControlMask,  XK_Down,          g_scroll_screen,      DIR_DOWN },
+	{ ControlMask,  XK_k,             g_scroll_screen,      DIR_UP },
+	{ ControlMask,  XK_Up,            g_scroll_screen,      DIR_UP },
+	{ ControlMask,  XK_l,             g_scroll_screen,      DIR_RIGHT },
+	{ ControlMask,  XK_Right,         g_scroll_screen,      DIR_RIGHT },
+	{ 0,            XK_plus,          g_zoom,               +1 },
+	{ 0,            XK_KP_Add,        g_zoom,               +1 },
+	{ 0,            XK_minus,         g_zoom,               -1 },
+	{ 0,            XK_KP_Subtract,   g_zoom,               -1 },
+	{ 0,            XK_m,             g_toggle_image_mark,  None },
+	{ 0,            XK_M,             g_reverse_marks,      None },
+	{ ControlMask,  XK_m,             g_unmark_all,         None },
+	{ 0,            XK_N,             g_navigate_marked,    +1 },
+	{ 0,            XK_P,             g_navigate_marked,    -1 },
+	{ 0,            XK_braceleft,     g_change_gamma,       -1 },
+	{ 0,            XK_braceright,    g_change_gamma,       +1 },
+	{ ControlMask,  XK_g,             g_change_gamma,        0 },
 
-	{ 0,            XK_h,             t_move_sel,           (arg_t) DIR_LEFT },
-	{ 0,            XK_Left,          t_move_sel,           (arg_t) DIR_LEFT },
-	{ 0,            XK_j,             t_move_sel,           (arg_t) DIR_DOWN },
-	{ 0,            XK_Down,          t_move_sel,           (arg_t) DIR_DOWN },
-	{ 0,            XK_k,             t_move_sel,           (arg_t) DIR_UP },
-	{ 0,            XK_Up,            t_move_sel,           (arg_t) DIR_UP },
-	{ 0,            XK_l,             t_move_sel,           (arg_t) DIR_RIGHT },
-	{ 0,            XK_Right,         t_move_sel,           (arg_t) DIR_RIGHT },
-	{ 0,            XK_R,             t_reload_all,         (arg_t) None },
+	{ 0,            XK_h,             t_move_sel,           DIR_LEFT },
+	{ 0,            XK_Left,          t_move_sel,           DIR_LEFT },
+	{ 0,            XK_j,             t_move_sel,           DIR_DOWN },
+	{ 0,            XK_Down,          t_move_sel,           DIR_DOWN },
+	{ 0,            XK_k,             t_move_sel,           DIR_UP },
+	{ 0,            XK_Up,            t_move_sel,           DIR_UP },
+	{ 0,            XK_l,             t_move_sel,           DIR_RIGHT },
+	{ 0,            XK_Right,         t_move_sel,           DIR_RIGHT },
+	{ 0,            XK_R,             t_reload_all,         None },
 
-	{ 0,            XK_n,             i_navigate,           (arg_t) +1 },
-	{ 0,            XK_n,             i_scroll_to_edge,     (arg_t) (DIR_LEFT | DIR_UP) },
-	{ 0,            XK_space,         i_navigate,           (arg_t) +1 },
-	{ 0,            XK_p,             i_navigate,           (arg_t) -1 },
-	{ 0,            XK_p,             i_scroll_to_edge,     (arg_t) (DIR_LEFT | DIR_UP) },
-	{ 0,            XK_BackSpace,     i_navigate,           (arg_t) -1 },
-	{ 0,            XK_bracketright,  i_navigate,           (arg_t) +10 },
-	{ 0,            XK_bracketleft,   i_navigate,           (arg_t) -10 },
-	{ ControlMask,  XK_6,             i_alternate,          (arg_t) None },
-	{ ControlMask,  XK_n,             i_navigate_frame,     (arg_t) +1 },
-	{ ControlMask,  XK_p,             i_navigate_frame,     (arg_t) -1 },
-	{ ControlMask,  XK_space,         i_toggle_animation,   (arg_t) None },
-	{ 0,            XK_h,             i_scroll,             (arg_t) DIR_LEFT },
-	{ 0,            XK_Left,          i_scroll,             (arg_t) DIR_LEFT },
-	{ 0,            XK_j,             i_scroll,             (arg_t) DIR_DOWN },
-	{ 0,            XK_Down,          i_scroll,             (arg_t) DIR_DOWN },
-	{ 0,            XK_k,             i_scroll,             (arg_t) DIR_UP },
-	{ 0,            XK_Up,            i_scroll,             (arg_t) DIR_UP },
-	{ 0,            XK_l,             i_scroll,             (arg_t) DIR_RIGHT },
-	{ 0,            XK_Right,         i_scroll,             (arg_t) DIR_RIGHT },
-	{ 0,            XK_H,             i_scroll_to_edge,     (arg_t) DIR_LEFT },
-	{ 0,            XK_J,             i_scroll_to_edge,     (arg_t) DIR_DOWN },
-	{ 0,            XK_K,             i_scroll_to_edge,     (arg_t) DIR_UP },
-	{ 0,            XK_L,             i_scroll_to_edge,     (arg_t) DIR_RIGHT },
-	{ 0,            XK_equal,         i_set_zoom,           (arg_t) 100 },
-	{ 0,            XK_w,             i_fit_to_win,         (arg_t) SCALE_DOWN },
-	{ 0,            XK_W,             i_fit_to_win,         (arg_t) SCALE_FIT },
-	{ 0,            XK_e,             i_fit_to_win,         (arg_t) SCALE_WIDTH },
-	{ 0,            XK_E,             i_fit_to_win,         (arg_t) SCALE_HEIGHT },
-	{ 0,            XK_less,          i_rotate,             (arg_t) DEGREE_270 },
-	{ 0,            XK_greater,       i_rotate,             (arg_t) DEGREE_90 },
-	{ 0,            XK_question,      i_rotate,             (arg_t) DEGREE_180 },
-	{ 0,            XK_bar,           i_flip,               (arg_t) FLIP_HORIZONTAL },
-	{ 0,            XK_underscore,    i_flip,               (arg_t) FLIP_VERTICAL },
-	{ 0,            XK_a,             i_toggle_antialias,   (arg_t) None },
-	{ 0,            XK_A,             i_toggle_alpha,       (arg_t) None },
-	{ 0,            XK_s,             i_slideshow,          (arg_t) None },
+	{ 0,            XK_n,             i_navigate,           +1 },
+	{ 0,            XK_n,             i_scroll_to_edge,     DIR_LEFT | DIR_UP },
+	{ 0,            XK_space,         i_navigate,           +1 },
+	{ 0,            XK_p,             i_navigate,           -1 },
+	{ 0,            XK_p,             i_scroll_to_edge,     DIR_LEFT | DIR_UP },
+	{ 0,            XK_BackSpace,     i_navigate,           -1 },
+	{ 0,            XK_bracketright,  i_navigate,           +10 },
+	{ 0,            XK_bracketleft,   i_navigate,           -10 },
+	{ ControlMask,  XK_6,             i_alternate,          None },
+	{ ControlMask,  XK_n,             i_navigate_frame,     +1 },
+	{ ControlMask,  XK_p,             i_navigate_frame,     -1 },
+	{ ControlMask,  XK_space,         i_toggle_animation,   None },
+	{ 0,            XK_h,             i_scroll,             DIR_LEFT },
+	{ 0,            XK_Left,          i_scroll,             DIR_LEFT },
+	{ 0,            XK_j,             i_scroll,             DIR_DOWN },
+	{ 0,            XK_Down,          i_scroll,             DIR_DOWN },
+	{ 0,            XK_k,             i_scroll,             DIR_UP },
+	{ 0,            XK_Up,            i_scroll,             DIR_UP },
+	{ 0,            XK_l,             i_scroll,             DIR_RIGHT },
+	{ 0,            XK_Right,         i_scroll,             DIR_RIGHT },
+	{ 0,            XK_H,             i_scroll_to_edge,     DIR_LEFT },
+	{ 0,            XK_J,             i_scroll_to_edge,     DIR_DOWN },
+	{ 0,            XK_K,             i_scroll_to_edge,     DIR_UP },
+	{ 0,            XK_L,             i_scroll_to_edge,     DIR_RIGHT },
+	{ 0,            XK_equal,         i_set_zoom,           100 },
+	{ 0,            XK_w,             i_fit_to_win,         SCALE_DOWN },
+	{ 0,            XK_W,             i_fit_to_win,         SCALE_FIT },
+	{ 0,            XK_e,             i_fit_to_win,         SCALE_WIDTH },
+	{ 0,            XK_E,             i_fit_to_win,         SCALE_HEIGHT },
+	{ 0,            XK_less,          i_rotate,             DEGREE_270 },
+	{ 0,            XK_greater,       i_rotate,             DEGREE_90 },
+	{ 0,            XK_question,      i_rotate,             DEGREE_180 },
+	{ 0,            XK_bar,           i_flip,               FLIP_HORIZONTAL },
+	{ 0,            XK_underscore,    i_flip,               FLIP_VERTICAL },
+	{ 0,            XK_a,             i_toggle_antialias,   None },
+	{ 0,            XK_A,             i_toggle_alpha,       None },
+	{ 0,            XK_s,             i_slideshow,          None },
 };
 
 /* mouse button mappings for image mode: */
 static const button_t buttons[] = {
 	/* modifiers    button            function              argument */
-	{ 0,            1,                i_navigate,           (arg_t) +1 },
-	{ 0,            3,                i_navigate,           (arg_t) -1 },
-	{ 0,            2,                i_drag,               (arg_t) None },
-	{ 0,            4,                i_scroll,             (arg_t) DIR_UP },
-	{ 0,            5,                i_scroll,             (arg_t) DIR_DOWN },
-	{ ShiftMask,    4,                i_scroll,             (arg_t) DIR_LEFT },
-	{ ShiftMask,    5,                i_scroll,             (arg_t) DIR_RIGHT },
-	{ 0,            6,                i_scroll,             (arg_t) DIR_LEFT },
-	{ 0,            7,                i_scroll,             (arg_t) DIR_RIGHT },
-	{ ControlMask,  4,                g_zoom,               (arg_t) +1 },
-	{ ControlMask,  5,                g_zoom,               (arg_t) -1 },
+	{ 0,            1,                i_navigate,           +1 },
+	{ 0,            3,                i_navigate,           -1 },
+	{ 0,            2,                i_drag,               None },
+	{ 0,            4,                i_scroll,             DIR_UP },
+	{ 0,            5,                i_scroll,             DIR_DOWN },
+	{ ShiftMask,    4,                i_scroll,             DIR_LEFT },
+	{ ShiftMask,    5,                i_scroll,             DIR_RIGHT },
+	{ 0,            6,                i_scroll,             DIR_LEFT },
+	{ 0,            7,                i_scroll,             DIR_RIGHT },
+	{ ControlMask,  4,                g_zoom,               +1 },
+	{ ControlMask,  5,                g_zoom,               -1 },
 };
 
 #endif