diff --git a/apps/bookmarks/css/bookmarks.css b/apps/bookmarks/css/bookmarks.css
index b1139f2c34667594f0a970d26c077270484042d7..3a3e0fbf6b392bd07f339790d0093b1cf5ca83e6 100644
--- a/apps/bookmarks/css/bookmarks.css
+++ b/apps/bookmarks/css/bookmarks.css
@@ -17,7 +17,9 @@
 }
 
 .bookmarks_list {
-	margin-top: 36px;
+	overflow: auto;
+	position: fixed;
+	top: 6.5em;
 }
 
 .bookmarks_addBml {
diff --git a/apps/bookmarks/js/bookmarks.js b/apps/bookmarks/js/bookmarks.js
index 7317a154a76e89e8fe61a3fa0c0a438e1a41812f..fa5adde2545a4abf3473feaeb9a822b0885e503d 100644
--- a/apps/bookmarks/js/bookmarks.js
+++ b/apps/bookmarks/js/bookmarks.js
@@ -5,7 +5,11 @@ var bookmarks_sorting = 'bookmarks_sorting_recent';
 
 $(document).ready(function() {	
 	$('#bookmark_add_submit').click(addOrEditBookmark);
-	$(window).scroll(updateOnBottom);
+	$(window).resize(function () {
+		fillWindow($('.bookmarks_list'));
+	});
+	$(window).resize();
+	$($('.bookmarks_list')).scroll(updateOnBottom);
 	
 	$('.bookmarks_list').empty();
 	getBookmarks();
@@ -21,7 +25,9 @@ function getBookmarks() {
 		url: 'ajax/updateList.php',
 		data: 'tag=' + encodeURI($('#bookmarkFilterTag').val()) + '&page=' + bookmarks_page + '&sort=' + bookmarks_sorting,
 		success: function(bookmarks){
-			bookmarks_page += 1;
+			if (bookmarks.data.length) {
+				bookmarks_page += 1;
+			}
 			$('.bookmark_link').unbind('click', recordClick);
 			$('.bookmark_delete').unbind('click', delBookmark);
 			$('.bookmark_edit').unbind('click', showBookmark);
@@ -39,6 +45,9 @@ function getBookmarks() {
 			$('.bookmark_edit').click(showBookmark);
 			
 			bookmarks_loading = false;
+			if (bookmarks.data.length) {
+				updateOnBottom()
+			}
 		}
 	});	
 }
@@ -146,7 +155,11 @@ function updateBookmarksList(bookmark) {
 
 function updateOnBottom() {
 	//check wether user is on bottom of the page
-	if ($('body').height() <= ($(window).height() + $(window).scrollTop())) {
+	var top = $('.bookmarks_list>:last-child').position().top;
+	var height = $('.bookmarks_list').height();
+	// use a bit of margin to begin loading before we are really at the
+	// bottom
+	if (top < height * 1.2) {
 		getBookmarks();
 	}
 }