diff --git a/exec/sbbslist.js b/exec/sbbslist.js
index 64d31437ae2aa83f5bd220b302ef6a8716da31dd..426ad544ad5e04567159686924448c3fb56a8840 100644
--- a/exec/sbbslist.js
+++ b/exec/sbbslist.js
@@ -1049,12 +1049,24 @@ function browse(list)
 		else if (top < 0)
 			ret_obj.top = 0;
 
-		if ((current >= top+pagesize) || (current < top))
+		if (current >= top+pagesize)
 		{
-			var page_num = calc_page_num_with_current_idx(current, pagesize);
-			if (page_num > 0)
-				ret_obj.top = pagesize * (page_num - 1);
-			else
+			ret_obj.top = top + pagesize;
+			// If the number of entries is less than the page size (i.e., on the last
+			// page), then adjust top so that there will be a full page of entries
+			var num_entries_remaining = list.length - ret_obj.top;
+			if (num_entries_remaining < pagesize)
+			{
+				ret_obj.top = list.length - pagesize;
+				if (ret_obj.top < 0)
+					ret_obj.top = 0;
+			}
+			ret_obj.new_page = true;
+		}
+		else if (current < top)
+		{
+			ret_obj.top = top - pagesize;
+			if (ret_obj.top < 0)
 				ret_obj.top = 0;
 			ret_obj.new_page = true;
 		}
@@ -1207,6 +1219,15 @@ function browse(list)
 			case 'N':
 				current += pagesize;
 				top += pagesize;
+				// If the number of entries is less than the page size (i.e., on the last
+				// page), then adjust top so that there will be a full page of entries
+				var num_entries_remaining = list.length - top;
+				if (num_entries_remaining < pagesize)
+				{
+					top = list.length - pagesize;
+					if (top < 0)
+						top = 0;
+				}
 				new_page = true;
 				break;
 			case KEY_PAGEUP:
@@ -2238,35 +2259,6 @@ function install()
 	return true;
 }
 
-// Calculates & returns a page number (1-based) based on a top index
-// and number per page.
-//
-// Parameters:
-//  top_index: The index (0-based) of the topmost item on the page
-//  num_per_page: The number of items per page
-//
-// Return value: The page number (1-based)
-function calc_page_num_with_top_idx(top_index, num_per_page)
-{
-	return ((top_index / num_per_page) + 1);
-}
-
-// Calculates & returns a page number (1-based) based on a specific item index
-// and number per page.
-//
-// Parameters:
-//  current_index: The index (0-based) of an item
-//  num_per_page: The number of items per page
-//
-// Return value: The page number (1-based)
-function calc_page_num_with_current_idx(current_idx, num_per_page)
-{
-	var top_idx = 0;
-	while (current_idx >= top_idx+num_per_page)
-		top_idx += num_per_page;
-	return calc_page_num_with_top_idx(top_idx, num_per_page);
-}
-
 
 function main()
 {
@@ -2686,4 +2678,4 @@ function main()
 	return 0;
 }
 
-exit(main());
+exit(main());
\ No newline at end of file