     }
 
     @objc func touchUpInsideAtControl(control: UIControl) {
-        if self.selectionType == .Single {
+        switch self.selectionType {
+        case .Single:
             self.unselectAll()
+            control.selected = !control.selected
+        case .Multiple:
+            control.selected = !control.selected
+        case .LimitedMultiple(let maxCount):
+            if control.selected {
+                control.selected = false
+            } else if self.countOfSelection() < maxCount {
+                control.selected = !control.selected
+            } else {
+                return
+            }
         }
-
-        control.selected = !control.selected
 
         self.changedSelection?(self);
     }

                }
                self.changedSelection?(self);
            }
        case .Single:
            if self.countOfSelection() == 0 {
                if let firstControl = self.controls.first {
                    firstControl.selected = true
                    self.changedSelection?(self);
                }
            }
        }
    }


        return self
    }

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