                 }
                 self.changedSelection?(self);
             }
-        case .Single:
-            if self.countOfSelection() == 0 {
-                if let firstControl = self.controls.first {
-                    firstControl.selected = true
-                    self.changedSelection?(self);
-                }
-            }
+        default:
+            throw CPSelectionErrorType.WrongSelectionType
         }
     }
 

    }

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

        control.selected = !control.selected

        self.changedSelection?(self);
    }

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 {
            self.unselectAll()
        }
    }
    public var changedSelection: ((CPSelectionManager) -> ())? = nil
    internal var controls = [UIControl]()

    public func addControl(control: UIControl) -> CPSelectionManager {
