 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 // SOFTWARE.
 
-public protocol Actionable: NSObjectProtocol, ActionSelectable {
-    
-    init(actionClosure: () -> Void)
-    init(frame: CGRect, actionClosure: () -> Void)
-    func addTarget(controlEvents controlEvents: UIControlEvents, actionClosure: () -> Void)
-    
+private struct AssociatedKeys {
+    static var ActionName = "action"
 }
 
-public extension Actionable where Self : UIControl {
+extension UIControl {
     
     private var action: Action? {
         set { objc_setAssociatedObject(self, &AssociatedKeys.ActionName, newValue, .OBJC_ASSOCIATION_RETAIN) }

        action = Action(action: actionClosure)
        addTarget(self, action: #selector(handleAction), forControlEvents: controlEvents)
    }
}

public class Action {

     
     - returns: An initialized UIControl.
     */
    public convenience init(frame: CGRect, actionClosure: () -> Void) {
        self.init(frame: frame)
        action = Action(action: actionClosure)
        addTarget(self, action: #selector(handleAction), forControlEvents: .TouchUpInside)
