     let distanceFromCenter = contentOffset.x - centerOffsetX
 
     if fabs(distanceFromCenter) > (contentWidth / 3) {
-      if distanceFromCenter > 0 {
-        reusableViews.shift(1)
-        accumulator++
-        reusableViews[2].prepareForReuse()
-        viewDelegate?.viewRequiresUpdate(reusableViews[2], viewBefore: reusableViews[1])
-      } else {
-        reusableViews.shift(-1)
-        accumulator--
-        reusableViews[0].prepareForReuse()
-        viewDelegate?.viewRequiresUpdate(reusableViews[0], viewAfter: reusableViews[1])
-      }
-      contentOffset = CGPoint(x: centerOffsetX, y: contentOffset.y)
+      recenter()
     }
+  }
+
+  func recenter() {
+    let contentWidth = contentSize.width
+    let centerOffsetX = (contentWidth - bounds.size.width) / 2
+    let distanceFromCenter = contentOffset.x - centerOffsetX
+
+    if distanceFromCenter > 0 {
+      reusableViews.shift(1)
+      accumulator++
+      reusableViews[2].prepareForReuse()
+      viewDelegate?.viewRequiresUpdate(reusableViews[2], viewBefore: reusableViews[1])
+    } else {
+      reusableViews.shift(-1)
+      accumulator--
+      reusableViews[0].prepareForReuse()
+      viewDelegate?.viewRequiresUpdate(reusableViews[0], viewAfter: reusableViews[1])
+    }
+    contentOffset = CGPoint(x: centerOffsetX, y: contentOffset.y)
   }
 
   func realignViews() {

      subview.frame.origin.x = bounds.width * CGFloat(index)
      subview.frame.size = bounds.size
    }
  }
}


      reusableViews.filter { $0 != reusableViews[Int(currentScrollViewPage)]}.forEach {$0.prepareForReuse()}
      previousPage = currentIndex
    }

    recenter()
  }

  func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
