Index: jquery.jcarousellite.js
===================================================================
--- jquery.jcarousellite.js	(revision 38)
+++ jquery.jcarousellite.js	(working copy)
@@ -293,6 +293,7 @@
         };  
 
         function go(to) {
+			if (curr == to) return false;
             if(!running) {
 
                 if(o.beforeStart)
@@ -308,9 +309,14 @@
                         // If "scroll" > 1, then the "to" might not be equal to the condition; it can be greater depending on the number of elements. 
                         curr = to==itemLength-v+1 ? v+1 : v+o.scroll;
                     } else curr = to;
-                } else {                    // If non-circular and to points to first or last, we just return.
-                    if(to<0 || to>itemLength-v) return;
-                    else curr = to;
+                } else {                    // If non-circular and to points beyond first or last, we just go as far forward or backward as we can.
+					if (to<0) {
+						curr = 0;
+					} else if (to>itemLength-v) {
+						curr = Math.max(0, itemLength-v);
+					} else {
+						curr = to;
+					}
                 }                           // If neither overrides it, the curr will still be "to" and we can proceed.
 
                 running = true;
@@ -325,21 +331,23 @@
                 );
                 // Disable buttons when the carousel reaches the last/first, and enable when not
                 if(!o.circular) {
-                    $(o.btnPrev + "," + o.btnNext).removeClass("disabled");
-                    $( (curr-o.scroll<0 && o.btnPrev) 
-                        || 
-                       (curr+o.scroll > itemLength-v && o.btnNext)
-                        ||
-                       []
-                     ).addClass("disabled");
+					updateButtons();
                 }
 
             }
             return false;
         };
+		function updateButtons() {
+			o.btnPrev[curr == 0 ? 'addClass' : 'removeClass']('disabled');
+			o.btnNext[curr >= itemLength-v ? 'addClass' : 'removeClass']('disabled');
+		}
+		if (!o.circular) {
+			updateButtons();
+		}
     });
 };
 
+
 function css(el, prop) {
     return parseInt($.css(el[0], prop)) || 0;
 };

