 public enum CPSelectionType {
     case Single
     case Multiple
+    case LimitedMultiple(Int)
+}
+
+public enum CPSelectionErrorType: ErrorType {
+    case WrongSelectionType
 }
 
 public class CPSelectionManager {
     public var selectionType = CPSelectionType.Single {
         didSet {
-            if self.selectionType == .Single {
-                if let firstSelectedControl: UIControl = self.selectedControls().first {
-                    self.unselectAll()
-                    firstSelectedControl.selected = true
-                }
-            }
+            self.unselectAll()
         }
     }
     public var changedSelection: ((CPSelectionManager) -> ())? = nil
-
     internal var controls = [UIControl]()
 
     public func addControl(control: UIControl) -> CPSelectionManager {

    }

    @objc func touchUpInsideAtControl(control: UIControl) {
        if self.selectionType == .Single {
            self.unselectAll()
        }

        control.selected = !control.selected

        self.changedSelection?(self);
    }

        return self
    }

    public func selectAll() throws {
        switch self.selectionType {
        case .Multiple:
            if self.countOfSelection() != self.controls.count {
