diff --git a/js/carousel.js b/js/carousel.js
index 282d618fe20e8eef9840b8aa866183657a06feb9..99a077c10a7d55da6d02ed310eb7eec78ce1ce84 100644
--- a/js/carousel.js
+++ b/js/carousel.js
@@ -70,8 +70,11 @@
   }
 
   Carousel.prototype.getItemForDirection = function (direction, active) {
-    var delta = direction == 'prev' ? -1 : 1
     var activeIndex = this.getItemIndex(active)
+    var willWrap = (direction == 'prev' && activeIndex === 0)
+                || (direction == 'next' && activeIndex == (this.$items.length - 1))
+    if (willWrap && !this.options.wrap) return active
+    var delta = direction == 'prev' ? -1 : 1
     var itemIndex = (activeIndex + delta) % this.$items.length
     return this.$items.eq(itemIndex)
   }
@@ -116,14 +119,8 @@
     var $next     = next || this.getItemForDirection(type, $active)
     var isCycling = this.interval
     var direction = type == 'next' ? 'left' : 'right'
-    var fallback  = type == 'next' ? 'first' : 'last'
     var that      = this
 
-    if (!$next.length) {
-      if (!this.options.wrap) return
-      $next = this.$element.find('.item')[fallback]()
-    }
-
     if ($next.hasClass('active')) return (this.sliding = false)
 
     var relatedTarget = $next[0]