diff --git a/config.def.h b/config.def.h
index 93cfeeb..3ae7106 100644
--- a/config.def.h
+++ b/config.def.h
@@ -6,6 +6,7 @@ static char *styledir       = "~/.surf/styles/";
 static char *certdir        = "~/.surf/certificates/";
 static char *cachedir       = "~/.surf/cache/";
 static char *cookiefile     = "~/.surf/cookies.txt";
+static char *historyfile     = "~/.surf/history.txt";
 
 /* Webkit default features */
 /* Highest priority value will be used.
@@ -62,16 +63,27 @@ static int winsize[] = { 800, 600 };
 static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
                                     WEBKIT_FIND_OPTIONS_WRAP_AROUND;
 
+#define HOMEPAGE "https://duckduckgo.com/"
 #define PROMPT_GO   "Go:"
 #define PROMPT_FIND "Find:"
 
+/* SETURI(setprop)*/
+#define SETURI(s) {                                                    \
+    .v = (char *[]){                                                    \
+      "/bin/sh", "-c",                                                  \
+      "prop=\"`~/src/surf/dmenu.uri.sh`\" &&"                           \
+      "xprop -id $1 -f "s" 8u -set "s" \"$prop\"", \
+      "surf-setprop", winid, NULL \
+    } \
+}
+
 /* SETPROP(readprop, setprop, prompt)*/
 #define SETPROP(r, s, p) { \
         .v = (const char *[]){ "/bin/sh", "-c", \
              "prop=\"$(printf '%b' \"$(xprop -id $1 "r" " \
-             "| sed -e 's/^"r"(UTF8_STRING) = \"\\(.*\\)\"/\\1/' " \
-             "      -e 's/\\\\\\(.\\)/\\1/g')\" " \
-             "| dmenu -p '"p"' -w $1)\" " \
+             "| sed -e 's/^"r"(UTF8_STRING) = \"\\(.*\\)\"/\\1/' && cat ~/.surf/bookmarks.txt" \
+             "      -e 's/\\\\\\(.\\)/\\1/g')\"" \
+             "| dmenu -l 10 -p '"p"' -w $1)\" " \
              "&& xprop -id $1 -f "s" 8u -set "s" \"$prop\"", \
              "surf-setprop", winid, NULL \
         } \
@@ -79,7 +91,7 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
 
 /* DOWNLOAD(URI, referer) */
 #define DOWNLOAD(u, r) { \
-        .v = (const char *[]){ "st", "-e", "/bin/sh", "-c",\
+        .v = (const char *[]){ "uxterm", "-e", "/bin/sh", "-c",\
              "curl -g -L -J -O -A \"$1\" -b \"$2\" -c \"$2\"" \
              " -e \"$3\" \"$4\"; read", \
              "surf-download", useragent, cookiefile, r, u, NULL \
@@ -96,6 +108,16 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
         } \
 }
 
+#define BM_ADD(r) {\
+        .v = (const char *[]){ "/bin/sh", "-c", \
+             "(echo $(xprop -id $0 $1) | cut -d '\"' -f2 " \
+             "| sed 's/.*https*:\\/\\/\\(www\\.\\)\\?//' && cat ~/.surf/bookmarks.txt) " \
+             "| awk '!seen[$0]++' > ~/.surf/bookmarks.tmp && " \
+             "mv ~/.surf/bookmarks.tmp ~/.surf/bookmarks.txt", \
+             winid, r, NULL \
+        } \
+}
+
 /* VIDEOPLAY(URI) */
 #define VIDEOPLAY(u) {\
         .v = (const char *[]){ "/bin/sh", "-c", \
@@ -103,6 +125,14 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
         } \
 }
 
+/* URI_TO_CLIPBOARD(URI) */
+#define URI_TO_CLIPBOARD(u) {\
+        .v = (const char *[]){ "/bin/sh", "-c", \
+             "echo \"$0\" | xclip ", u, NULL \
+        } \
+}
+
+
 /* styles */
 /*
  * The iteration will stop at the first match, beginning at the beginning of
@@ -131,42 +161,46 @@ static SiteSpecific certs[] = {
  */
 static Key keys[] = {
 	/* modifier              keyval          function    arg */
-	{ MODKEY,                GDK_KEY_g,      spawn,      SETPROP("_SURF_URI", "_SURF_GO", PROMPT_GO) },
-	{ MODKEY,                GDK_KEY_f,      spawn,      SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
-	{ MODKEY,                GDK_KEY_slash,  spawn,      SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
+	{ MODKEY,                GDK_KEY_l,      spawn,      SETPROP("_SURF_URI", "_SURF_GO", PROMPT_GO) },
+	{ MODKEY,                GDK_KEY_s,      spawn,      SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
+        { MODKEY,                GDK_KEY_m,      spawn,      BM_ADD("_SURF_URI") },
+        { MODKEY,                GDK_KEY_h,      spawn,      SETURI("_SURF_GO") },
+        { MODKEY|GDK_SHIFT_MASK, GDK_KEY_m,      playexternal,      { 0 } },
+        { MODKEY|GDK_SHIFT_MASK, GDK_KEY_l,      copytoclipboard,   { 0 } },
 
 	{ 0,                     GDK_KEY_Escape, stop,       { 0 } },
 	{ MODKEY,                GDK_KEY_c,      stop,       { 0 } },
 
+	{ 0,                     GDK_KEY_F5,     reload,     { .i = 0 } },
 	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_r,      reload,     { .i = 1 } },
 	{ MODKEY,                GDK_KEY_r,      reload,     { .i = 0 } },
 
-	{ MODKEY,                GDK_KEY_l,      navigate,   { .i = +1 } },
-	{ MODKEY,                GDK_KEY_h,      navigate,   { .i = -1 } },
+	{ MODKEY,                GDK_KEY_f,      navigate,   { .i = +1 } },
+	{ MODKEY,                GDK_KEY_b,      navigate,   { .i = -1 } },
 
 	/* vertical and horizontal scrolling, in viewport percentage */
-	{ MODKEY,                GDK_KEY_j,      scrollv,    { .i = +10 } },
-	{ MODKEY,                GDK_KEY_k,      scrollv,    { .i = -10 } },
+	{ MODKEY,                GDK_KEY_n,      scrollv,    { .i = +10 } },
+	{ MODKEY,                GDK_KEY_p,      scrollv,    { .i = -10 } },
 	{ MODKEY,                GDK_KEY_space,  scrollv,    { .i = +50 } },
-	{ MODKEY,                GDK_KEY_b,      scrollv,    { .i = -50 } },
+	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_space,  scrollv,    { .i = -50 } },
 	{ MODKEY,                GDK_KEY_i,      scrollh,    { .i = +10 } },
 	{ MODKEY,                GDK_KEY_u,      scrollh,    { .i = -10 } },
 
 
-	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_j,      zoom,       { .i = -1 } },
-	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_k,      zoom,       { .i = +1 } },
-	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_q,      zoom,       { .i = 0  } },
+  //	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_n,      zoom,       { .i = -1 } },
+  //	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_p,      zoom,       { .i = +1 } },
+	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_0,      zoom,       { .i = 0  } },
 	{ MODKEY,                GDK_KEY_minus,  zoom,       { .i = -1 } },
-	{ MODKEY,                GDK_KEY_plus,   zoom,       { .i = +1 } },
+	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_plus,   zoom,       { .i = +1 } },
 
-	{ MODKEY,                GDK_KEY_p,      clipboard,  { .i = 1 } },
-	{ MODKEY,                GDK_KEY_y,      clipboard,  { .i = 0 } },
+	{ MODKEY,                GDK_KEY_y,      clipboard,  { .i = 1 } },
+	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_w,      clipboard,  { .i = 0 } },
 
-	{ MODKEY,                GDK_KEY_n,      find,       { .i = +1 } },
-	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_n,      find,       { .i = -1 } },
+	{ MODKEY,                GDK_KEY_j,      find,       { .i = +1 } },
+	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_j,      find,       { .i = -1 } },
 
 	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_p,      print,      { 0 } },
-	{ MODKEY,                GDK_KEY_t,      showcert,   { 0 } },
+	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_c,      showcert,   { 0 } },
 
 	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_a,      togglecookiepolicy, { 0 } },
 	{ 0,                     GDK_KEY_F11,    togglefullscreen, { 0 } },
diff --git a/surf-open.sh b/surf-open.sh
index c22edc2..366a94c 100755
--- a/surf-open.sh
+++ b/surf-open.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# See the LICENSE file for copyright and license details. 
+# See the LICENSE file for copyright and license details.
 #
 
 xidfile="$HOME/tmp/tabbed-surf.xid"
@@ -12,8 +12,7 @@ then
 fi
 
 runtabbed() {
-	tabbed -dn tabbed-surf -r 2 surf -e '' "$uri" >"$xidfile" \
-		2>/dev/null &
+	/home/kev/src/tabbed/tabbed -dn tabbed-surf -r 2 /home/kev/src/surf/surf -e '' "$uri" >"$xidfile" 2>/dev/null &
 }
 
 if [ ! -r "$xidfile" ];
@@ -26,7 +25,6 @@ else
 	then
 		runtabbed
 	else
-		surf -e "$xid" "$uri" >/dev/null 2>&1 &
+		/home/kev/src/surf/surf -e "$xid" "$uri" >/dev/null 2>&1 &
 	fi
 fi
-
diff --git a/surf.c b/surf.c
index 001f776..081b1af 100644
--- a/surf.c
+++ b/surf.c
@@ -238,6 +238,9 @@ static void togglefullscreen(Client *c, const Arg *a);
 static void togglecookiepolicy(Client *c, const Arg *a);
 static void toggleinspector(Client *c, const Arg *a);
 static void find(Client *c, const Arg *a);
+static void playexternal(Client *c, const Arg *a);
+static void copytoclipboard(Client *c, const Arg *a);
+
 
 /* Buttons */
 static void clicknavigate(Client *c, const Arg *a, WebKitHitTestResult *h);
@@ -355,6 +358,7 @@ setup(void)
 
 	/* dirs and files */
 	cookiefile = buildfile(cookiefile);
+  historyfile = buildfile(historyfile);
 	scriptfile = buildfile(scriptfile);
 	certdir    = buildpath(certdir);
 	if (curconfig[Ephemeral].val.i)
@@ -596,6 +600,7 @@ loaduri(Client *c, const Arg *a)
 	} else {
 		webkit_web_view_load_uri(c->view, url);
 		updatetitle(c);
+    updatehistory(url);
 	}
 
 	g_free(url);
@@ -654,11 +659,11 @@ updatetitle(Client *c)
 		getpagestats(c);
 
 		if (c->progress != 100)
-			title = g_strdup_printf("[%i%%] %s:%s | %s",
-			        c->progress, togglestats, pagestats, name);
+			title = g_strdup_printf("[%i%%] %s",
+                              c->progress, name);
 		else
-			title = g_strdup_printf("%s:%s | %s",
-			        togglestats, pagestats, name);
+			title = g_strdup_printf("%s | %s",
+			        pagestats, name);
 
 		gtk_window_set_title(GTK_WINDOW(c->win), title);
 		g_free(title);
@@ -667,6 +672,20 @@ updatetitle(Client *c)
 	}
 }
 
+void
+updatehistory(const char *url)
+{
+	FILE *f;
+	f = fopen(historyfile, "a+");
+
+	char timestamp[20];
+	time_t now = time (0);
+	strftime (timestamp, 20, "%Y-%m-%dT%H:%M:%S", localtime (&now));
+
+	fprintf(f, "%s %s\n", timestamp, url);
+	fclose(f);
+}
+
 void
 gettogglestats(Client *c)
 {
@@ -1096,6 +1115,7 @@ cleanup(void)
 	close(spair[0]);
 	close(spair[1]);
 	g_free(cookiefile);
+	g_free(historyfile);
 	g_free(scriptfile);
 	g_free(stylefile);
 	g_free(cachedir);
@@ -2021,6 +2041,24 @@ clickexternplayer(Client *c, const Arg *a, WebKitHitTestResult *h)
 	spawn(c, &arg);
 }
 
+void
+playexternal(Client *c, const Arg *a)
+{
+	Arg arg;
+
+	arg = (Arg)VIDEOPLAY(geturi(c));
+	spawn(c, &arg);
+}
+
+void
+copytoclipboard(Client *c, const Arg *a)
+{
+	Arg arg;
+
+	arg = (Arg)URI_TO_CLIPBOARD(geturi(c));
+	spawn(c, &arg);
+}
+
 int
 main(int argc, char *argv[])
 {
@@ -2155,6 +2193,12 @@ main(int argc, char *argv[])
 	else
 		arg.v = "about:blank";
 
+#ifdef HOMEPAGE
+		arg.v = HOMEPAGE;
+#else
+ 		arg.v = "about:blank";
+#endif
+
 	setup();
 	c = newclient(NULL);
 	showview(NULL, c);
