     
 }
 
+public extension UIGestureRecognizer {
+    
+    public convenience init(action: ((sender: AnyObject) -> Void)?) {
+        self.init()
+        setAction(action)
+    }
+    
+    public func setAction(action: ((sender: AnyObject) -> Void)?) {
+        if let action = action {
+            self.removeTarget(self, action: nil)
+            self.addTarget(self, action: #selector(UIGestureRecognizer.performAction))
+            self.closuresWrapper = ClosureWrapper(action: action)
+        } else {
+            self.removeTarget(self, action: nil)
+            self.closuresWrapper = nil
+        }
+    }
+    
+    public func performAction() {
+        self.closuresWrapper?.action(sender: self)
+    }
+    
+    private var closuresWrapper: ClosureWrapper? {
+        get { return objc_getAssociatedObject(self, &_aaak) as? ClosureWrapper }
+        set { objc_setAssociatedObject(self, &_aaak, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
+    }
+    
+}
+
 public extension UIControl {
     
     public func setAction(controlEvents controlEvents: UIControlEvents, action: ((sender: AnyObject) -> Void)?) {
         if let action = action {
             self.removeTarget(self, action: nil, forControlEvents: controlEvents)
-            self.addTarget(self, action: #selector(UIButton.performAction), forControlEvents: controlEvents)
+            self.addTarget(self, action: #selector(UIControl.performAction), forControlEvents: controlEvents)
             self.closuresWrapper = ClosureWrapper(action: action)
         } else {
             self.removeTarget(self, action: nil, forControlEvents: controlEvents)

public extension UIBarButtonItem {
    
    public convenience init(barButtonSystemItem systemItem: UIBarButtonSystemItem, action: ((sender: AnyObject) -> Void)?) {
        self.init(barButtonSystemItem: systemItem, target: nil, action: #selector(UIButton.performAction))
        if let action = action {
            self.closuresWrapper = ClosureWrapper(action: action)
            self.target = self

    }
    
    public convenience init(image: UIImage?, style: UIBarButtonItemStyle, action: ((sender: AnyObject) -> Void)?) {
        self.init(image: image, style: style, target: nil, action: #selector(UIBarButtonItem.performAction))
        if let action = action {
            self.closuresWrapper = ClosureWrapper(action: action)
            self.target = self
