diff --git a/exec/load/dd_lightbar_menu.js b/exec/load/dd_lightbar_menu.js
index d8d64dca34ef32f9df40deaea20afa735723952e..d118b965fb6f1a5815b88d8c4618d59cf0eb558a 100644
--- a/exec/load/dd_lightbar_menu.js
+++ b/exec/load/dd_lightbar_menu.js
@@ -99,7 +99,7 @@ lbMenu.multiSelect = true;
 lbMenu.maxNumSelections = 5;
 
 Example usage:
-load("DDLightbarMenu.js");
+require("dd_lightbar_menu.js", "DDLightbarMenu");
 // Create a menu at position 1, 3 with width 45 and height of 10
 var lbMenu = new DDLightbarMenu(1, 3, 45, 10);
 // Add 12 items to the menu, each of which will return the text of the item
@@ -449,8 +449,12 @@ function DDLightbarMenu_SetHeight(pHeight)
 //  pSelectedItemIndexes: An object that can contain multiple indexes of selected
 //                        items.  Only for multi-select mode.  These are used
 //                        for drawing a marking character in the item text.
-function DDLightbarMenu_Draw(pSelectedItemIndexes)
+//  pDrawBorders: Boolean - Whether or not to draw the borders, if borders are enabled.
+//                Defaults to true.
+function DDLightbarMenu_Draw(pSelectedItemIndexes, pDrawBorders)
 {
+	var drawBorders = (typeof(pDrawBorders) == "boolean" ? pDrawBorders : true);
+
 	var itemLen = (this.showScrollbar ? this.size.width - 1 : this.size.width);
 	var curPos = { x: this.pos.x, y: this.pos.y }; // For writing the menu items
 	// If there is a border, then adjust the item length, starting x, and starting
@@ -460,7 +464,8 @@ function DDLightbarMenu_Draw(pSelectedItemIndexes)
 		itemLen -= 2;
 		++curPos.x;
 		++curPos.y;
-		this.DrawBorder();
+		if (drawBorders)
+			this.DrawBorder();
 	}
 	// For numbered mode, we'll need to know the length of the longest item number
 	// so that we can use that space to display the item numbers.
@@ -935,47 +940,78 @@ function DDLightbarMenu_GetVal(pDraw, pSelectedItemIndexes)
 		}
 		else if (this.lastUserInput == KEY_HOME)
 		{
-			// Go to the first item on the current page
-			if (this.selectedItemIdx > this.topItemIdx)
+			// Go to the first item in the list
+			if (this.selectedItemIdx > 0)
 			{
-				// Draw the current item in regular colors
-				if (this.borderEnabled)
-					console.gotoxy(this.pos.x+1, this.pos.y+this.selectedItemIdx-this.topItemIdx+1);
-				else
-					console.gotoxy(this.pos.x, this.pos.y+this.selectedItemIdx-this.topItemIdx);
-				this.WriteItem(this.selectedItemIdx, null, false, selectedItemIndexes.hasOwnProperty(this.selectedItemIdx));
-				this.selectedItemIdx = this.topItemIdx;
-				// Draw the new current item in selected colors
-				if (this.borderEnabled)
-					console.gotoxy(this.pos.x+1, this.pos.y+this.selectedItemIdx-this.topItemIdx+1);
+				// If the current item index is not on first current page, then scroll.
+				// Otherwise, draw more efficiently by drawing the current item in
+				// regular colors and the first item in highlighted colors.
+				this.topItemIdx = 0;
+				var numItemsPerPage = this.GetNumItemsPerPage();
+				if (this.selectedItemIdx >= 0 + numItemsPerPage)
+				{
+					this.selectedItemIdx = 0;
+					this.Draw(pSelectedItemIndexes, false);
+				}
 				else
-					console.gotoxy(this.pos.x, this.pos.y+this.selectedItemIdx-this.topItemIdx);
-				this.WriteItem(this.selectedItemIdx, null, true, selectedItemIndexes.hasOwnProperty(this.selectedItemIdx));
+				{
+					// We're already on the first page, so we can re-draw the
+					// 2 items more efficiently.
+					// Draw the current item in regular colors
+					if (this.borderEnabled)
+						console.gotoxy(this.pos.x+1, this.pos.y+this.selectedItemIdx-this.topItemIdx+1);
+					else
+						console.gotoxy(this.pos.x, this.pos.y+this.selectedItemIdx-this.topItemIdx);
+					this.WriteItem(this.selectedItemIdx, null, false, selectedItemIndexes.hasOwnProperty(this.selectedItemIdx));
+					this.selectedItemIdx = 0;
+					// Draw the new current item in selected colors
+					if (this.borderEnabled)
+						console.gotoxy(this.pos.x+1, this.pos.y+this.selectedItemIdx-this.topItemIdx+1);
+					else
+						console.gotoxy(this.pos.x, this.pos.y+this.selectedItemIdx-this.topItemIdx);
+					this.WriteItem(this.selectedItemIdx, null, true, selectedItemIndexes.hasOwnProperty(this.selectedItemIdx));
+				}
 			}
 		}
 		else if (this.lastUserInput == KEY_END)
 		{
-			var numItemsPerPage = this.size.height;
-			if (this.borderEnabled)
-				numItemsPerPage -= 2;
-			// Go to the last item on the current page
+			// Go to the last item in the list
+			var numItemsPerPage = this.GetNumItemsPerPage();
 			if (this.selectedItemIdx < this.items.length-1)
 			{
-				// Draw the current item in regular colors
-				if (this.borderEnabled)
-					console.gotoxy(this.pos.x+1, this.pos.y+this.selectedItemIdx-this.topItemIdx+1);
-				else
-					console.gotoxy(this.pos.x, this.pos.y+this.selectedItemIdx-this.topItemIdx);
-				this.WriteItem(this.selectedItemIdx, null, false, selectedItemIndexes.hasOwnProperty(this.selectedItemIdx));
-				this.selectedItemIdx = this.topItemIdx + numItemsPerPage - 1;
-				if (this.selectedItemIdx >= this.items.length)
-					this.selectedItemIdx = this.items.length - 1;
-				// Draw the new current item in selected colors
-				if (this.borderEnabled)
-					console.gotoxy(this.pos.x+1, this.pos.y+this.selectedItemIdx-this.topItemIdx+1);
+				var lastPossibleTop = this.items.length - numItemsPerPage;
+				if (lastPossibleTop < 0)
+					lastPossibleTop = 0;
+				var lastItemIdx = this.items.length - 1;
+				// If the last item index is below the current page, then scroll.
+				// Otherwise, draw more efficiently by drawing the current item in
+				// regular colors and the last item in highlighted colors.
+				if (lastItemIdx >= this.topItemIdx + numItemsPerPage)
+				{
+					this.topItemIdx = lastPossibleTop;
+					this.selectedItemIdx = lastItemIdx;
+					this.Draw(pSelectedItemIndexes, false);
+				}
 				else
-					console.gotoxy(this.pos.x, this.pos.y+this.selectedItemIdx-this.topItemIdx);
-				this.WriteItem(this.selectedItemIdx, null, true, selectedItemIndexes.hasOwnProperty(this.selectedItemIdx));
+				{
+					// We're already on the last page, so we can re-draw the
+					// 2 items more efficiently.
+					// Draw the current item in regular colors
+					if (this.borderEnabled)
+						console.gotoxy(this.pos.x+1, this.pos.y+this.selectedItemIdx-this.topItemIdx+1);
+					else
+						console.gotoxy(this.pos.x, this.pos.y+this.selectedItemIdx-this.topItemIdx);
+					this.WriteItem(this.selectedItemIdx, null, false, selectedItemIndexes.hasOwnProperty(this.selectedItemIdx));
+					this.selectedItemIdx = this.topItemIdx + numItemsPerPage - 1;
+					if (this.selectedItemIdx >= this.items.length)
+						this.selectedItemIdx = lastItemIdx;
+					// Draw the new current item in selected colors
+					if (this.borderEnabled)
+						console.gotoxy(this.pos.x+1, this.pos.y+this.selectedItemIdx-this.topItemIdx+1);
+					else
+						console.gotoxy(this.pos.x, this.pos.y+this.selectedItemIdx-this.topItemIdx);
+					this.WriteItem(this.selectedItemIdx, null, true, selectedItemIndexes.hasOwnProperty(this.selectedItemIdx));
+				}
 			}
 		}
 		// Enter key or additional select-item key: Select the item & quit out of the input loop