         let focusArea: CGRect
         let focusRect: TMBarViewFocusRect
         
-        fileprivate let animation: TMAnimation
-        
         init(position: CGFloat,
              capacity: Int,
              direction: TMBarUpdateDirection,
-             focusArea: CGRect,
-             animation: TMAnimation) {
+             focusArea: CGRect) {
             self.position = position
             self.capacity = capacity
             self.direction = direction
             self.focusArea = focusArea
             self.focusRect = TMBarViewFocusRect(rect: focusArea, at: position, capacity: capacity)
-            self.animation = animation
         }
     }
     
     private weak var barView: TMBarView<LayoutType, ButtonType, IndicatorType>!
-    let context: Context
+    private let position: CGFloat
+    private let capacity: Int
+    private let direction: TMBarUpdateDirection
+    private let animation: TMAnimation
+    
+    private var focusArea: CGRect?
     
     // MARK: Init
     

    /// Generate a new context from an existing one, that takes account of animation style.
    ///
    /// - Parameters:
    ///   - context: Original context.
    ///   - transitionStyle: Animation style.
    /// - Returns: Context relevant for animation style.
    private func generateContext(from context: Context, animationStyle: TMTransitionStyle) -> Context {
        let position = makePosition(from: context.position, for: animationStyle)
        let focusArea = makeFocusArea(for: position, capacity: context.capacity)
        let animation = makeAnimation(for: animationStyle, expected: context.animation)
        return Context(position: position,
                       capacity: context.capacity,
                       direction: context.direction,
                       focusArea: focusArea,
                       animation: animation)
    }
    
    /// Generate a new position dependending on animation style.

    ///   - component: Component to update.
    ///   - action: Action closure with Component relevant context.
    func update(component: TMTransitionStyleable, action: @escaping (Context) -> Void) {
        let transitionStyle = component.transitionStyle
        let animation = makeAnimation(for: transitionStyle, expected: self.animation)

        let update = {
            let context = self.generateContext(for: transitionStyle)
            action(context)
        }
        
        if animation.isEnabled {
            UIView.animate(withDuration: animation.duration) {
                update()
            }
        } else {
            update()
        }
    }
    
