     @IBInspectable var animateAlpha = false
     
     //	MARK: Properties
+    
+    /// The delegate which allows for comunication back up to the walkthrough view controller.
     var delegate: WalkthroughPageDelegate?
-    
-    private var subsWeights = [CGPoint]()
+    /// Speeds of the animation applied to our subviews, mapped to each subview.
+    private var subviewSpeeds = [CGPoint]()
     
     override func viewDidLoad() {
         super.viewDidLoad()
-        self.view.layer.masksToBounds = true
-        
-        for _ in view.subviews {
-            animationSpeed.x += animationSpeedVariance.x
-            animationSpeed.y += animationSpeedVariance.y
-            subsWeights.append(animationSpeed)
+        view.layer.masksToBounds = true
+        
+        //  for each view we increase the animation speed appropriately and store it as a speed for that layer
+        subviewSpeeds = view.subviews.map { _ in
+            self.animationSpeed.x += self.animationSpeedVariance.x
+            self.animationSpeed.y += self.animationSpeedVariance.y
+            return self.animationSpeed
         }
         
     }

        if(tmpOffset > 1.0){
            tmpOffset = 1.0 + (1.0 - tmpOffset)
        }
        transform = CATransform3DTranslate(transform, (1.0 - tmpOffset) * subsWeights[index].x * 100, (1.0 - tmpOffset) * subsWeights[index].y * 100, 0)
        view.subviews[index].layer.transform = transform
        
    }

    
    func walkthroughDidScroll(position: CGFloat, offset: CGFloat) {
        
        for index in 0..<subviewSpeeds.count {
            
            //  perform transition / scale / rotate animations
            switch WalkthroughAnimationType.fromString(animationType) {
