diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
index 16b0e6010ad33aa892f0ba94a13135f07df9ef29..a874480967340c83206006b58e3b3095fa91649a 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
@@ -547,7 +547,9 @@ public class SnarkManager implements CompleteListener {
                 int size = Integer.parseInt(pageSize.trim());
                 if (size <= 0)
                     size = 999999;
-                if (size != getPageSize() && size >= 5) {
+                else if (size < 5)
+                    size = 5;
+                if (size != getPageSize()) {
                     changed = true;
                     pageSize = Integer.toString(size);
                     _config.setProperty(PROP_PAGE_SIZE, pageSize);
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 33854b8f38b8eb2e2700a3e4f26f57038cc791b2..eec53a3518d024abc3b81809593568fce0c24b6c 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -522,23 +522,60 @@ public class I2PSnarkServlet extends BasicServlet {
         } else /** if (snarks.size() > 1) */ {
             out.write("<tfoot><tr>\n" +
                       "    <th align=\"left\" colspan=\"6\">");
+            // Page nav
             if (start > 0) {
-                int prev = Math.max(0, start - pageSize);
-                out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + prev);
+                // First
+                out.write("&nbsp;<a href=\"" + _contextPath);
                 if (peerParam != null)
-                    out.write("&p=" + peerParam);
+                    out.write("?p=" + peerParam);
                 out.write("\">" +
-                          "<img alt=\"" + _("Prev") + "\" title=\"" + _("Previous page") + "\" border=\"0\" src=\"" +
+                          "<img alt=\"" + _("First") + "\" title=\"" + _("First page") + "\" border=\"0\" src=\"" +
                           _imgPath + "control_rewind_blue.png\">" +
                           "</a>&nbsp;");
+                int prev = Math.max(0, start - pageSize);
+                if (prev > 0) {
+                    // Back
+                    out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + prev);
+                    if (peerParam != null)
+                        out.write("&p=" + peerParam);
+                    out.write("\">" +
+                          "<img alt=\"" + _("Prev") + "\" title=\"" + _("Previous page") + "\" border=\"0\" src=\"" +
+                          _imgPath + "control_back_blue.png\">" +
+                          "</a>&nbsp;");
+                }
             }
-            if (start + pageSize < snarks.size()) {
+            // Page count
+            int total = snarks.size();
+            int pages = 1 + (total / pageSize);
+            if (pages == 1 && start > 0)
+                pages = 2;
+            if (pages > 1) {
+                int page;
+                if (start + pageSize >= total)
+                    page = pages;
+                else
+                    page = 1 + (start / pageSize);
+                out.write("&nbsp;" + _("Page {0}", page) + thinsp(noThinsp) + pages + "&nbsp;");
+            }
+            if (start + pageSize < total) {
                 int next = start + pageSize;
-                out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + next);
+                if (next + pageSize < total) {
+                    // Next
+                    out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + next);
+                    if (peerParam != null)
+                        out.write("&p=" + peerParam);
+                    out.write("\">" +
+                          "<img alt=\"" + _("Next") + "\" title=\"" + _("Next page") + "\" border=\"0\" src=\"" +
+                          _imgPath + "control_play_blue.png\">" +
+                          "</a>&nbsp;");
+                }
+                // Last
+                int last = ((total - 1) / pageSize) * pageSize;
+                out.write("&nbsp;<a href=\"" + _contextPath +  "?st=" + last);
                 if (peerParam != null)
                     out.write("&p=" + peerParam);
                 out.write("\">" +
-                          "<img alt=\"" + _("Next") + "\" title=\"" + _("Next page") + "\" border=\"0\" src=\"" +
+                          "<img alt=\"" + _("Last") + "\" title=\"" + _("Last page") + "\" border=\"0\" src=\"" +
                           _imgPath + "control_fastforward_blue.png\">" +
                           "</a>&nbsp;");
             }
diff --git a/installer/resources/themes/snark/light/images/control_back_blue.png b/installer/resources/themes/snark/light/images/control_back_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f9e6fde420cb3f9454c692bc69b1d39efa280
Binary files /dev/null and b/installer/resources/themes/snark/light/images/control_back_blue.png differ
diff --git a/installer/resources/themes/snark/light/images/control_play_blue.png b/installer/resources/themes/snark/light/images/control_play_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8c8ec683edd6a974eacc253332f903d643dbe41
Binary files /dev/null and b/installer/resources/themes/snark/light/images/control_play_blue.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/control_back_blue.png b/installer/resources/themes/snark/ubergine/images/control_back_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f9e6fde420cb3f9454c692bc69b1d39efa280
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/control_back_blue.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/control_play_blue.png b/installer/resources/themes/snark/ubergine/images/control_play_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8c8ec683edd6a974eacc253332f903d643dbe41
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/control_play_blue.png differ
diff --git a/installer/resources/themes/snark/vanilla/images/control_back_blue.png b/installer/resources/themes/snark/vanilla/images/control_back_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f9e6fde420cb3f9454c692bc69b1d39efa280
Binary files /dev/null and b/installer/resources/themes/snark/vanilla/images/control_back_blue.png differ
diff --git a/installer/resources/themes/snark/vanilla/images/control_play_blue.png b/installer/resources/themes/snark/vanilla/images/control_play_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8c8ec683edd6a974eacc253332f903d643dbe41
Binary files /dev/null and b/installer/resources/themes/snark/vanilla/images/control_play_blue.png differ