         state = .Closed
     }
     
+    public func nextMenuItemPosition() -> MenuItemPosition? {
+        let takenPositions = menuItems.map( { $0.position.rawValue } )
+        let freePositions = [Int](MenuItemPosition.TwelveOClock.rawValue...MenuItemPosition.ElevenOClock.rawValue).filter() {
+            return find(takenPositions, $0) == nil
+        }
+        if freePositions.isEmpty {
+            return nil
+        } else {
+            return MenuItemPosition(rawValue: freePositions.first!)
+        }
+    }
+    
+    // MARK: Internal
+    
     func animateMenuItemOut(menuItem: MenuItem) {
-        let point = calculateMenuItemPoint(menuItem.positon)
+        menuItem.button.hidden = false
+        let point = calculateMenuItemPoint(menuItem.position)
         UIView.animateWithDuration(0.4, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.6, options: .CurveEaseInOut, animations: { () -> Void in
             menuItem.button.transform = CGAffineTransformMakeTranslation(point.x, point.y)
             }, completion: nil)

    func animateMenuItemIn(menuItem: MenuItem) {
        UIView.animateWithDuration(0.4, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0.4, options: .CurveEaseInOut, animations: { () -> Void in
            menuItem.button.transform = CGAffineTransformIdentity
            }, completion: nil)
    }
    
    public func nextMenuItemPosition() -> MenuItemPositon? {
        let takenPositions = menuItems.map( { $0.positon.rawValue } )
        let freePositions = [Int](MenuItemPositon.TwelveOClock.rawValue...MenuItemPositon.ElevenOClock.rawValue).filter() {
            return find(takenPositions, $0) == nil
        }
        if freePositions.isEmpty {
            return nil
        } else {
            return MenuItemPositon(rawValue: freePositions.first!)
        }
    }
    

        case ElevenOClock = 11
    }
    
    // MARK: Public
    
    public func addMenuItem<T: UIButton>(title: String, position: MenuItemPosition) -> T {
        return addMenuItem(title, position: position, size: menuItemSize)        
    }
    
    public func addMenuItem<T: UIButton>(title: String, position: MenuItemPosition, size: CGSize) -> T {
        let button = T()
        button.setTitle(title, forState: .Normal)
        button.setTranslatesAutoresizingMaskIntoConstraints(false)
        button.hidden = true
        button.addTarget(self, action: "menuItemButtonTapped:", forControlEvents: .TouchUpInside)
        addSubview(button)
        sendSubviewToBack(button)
        addButtonConstraints(button, size: size)
