     /// Type-erased reaction with 4 arguments
     open var reaction4Arguments : ((Any, Any, Any, Any) -> Any)?
     
+    open func make4ArgumentsReaction<View:ModelTransfer, Argument, ReturnType>(_ block: @escaping (Argument, View, View.ModelType, IndexPath)-> ReturnType) {
+        reaction4Arguments = { argument, view, model, indexPath in
+            guard let model = model as? View.ModelType,
+                let indexPath = indexPath as? IndexPath,
+                let argument = argument as? Argument,
+                let view = view as? View else { return 0 }
+            return block(argument, view, model, indexPath)
+        }
+    }
+    
     public override init<T: ModelTransfer>(signature: String, viewType: ViewType, viewClass: T.Type) {
         super.init(signature: signature, viewType: viewType, viewClass: viewClass)
     }

    
    /// Type-erased reaction with 5 arguments
    open var reaction5Arguments : ((Any, Any, Any, Any, Any) -> Any)?
    
    public override init<T: ModelTransfer>(signature: String, viewType: ViewType, viewClass: T.Type) {
        super.init(signature: signature, viewType: viewType, viewClass: viewClass)

        }
        return reaction.performWithArguments((view ?? 0, model, location))
    }
    
    public func perform4ArgumentsReaction(of type: ViewType, signature: String, argument: Any, view: Any?, model: Any, location: Any) -> Any {
        guard let reaction = reaction(of: type, signature: signature, forModel: model, view: view as? UIView) as? FourArgumentsEventReaction else { return 0 }
        return reaction.performWithArguments((argument, view ?? 0, model, location))
    }
    
    public func perform5ArgumentsReaction(of type: ViewType, signature: String, firstArgument: Any, secondArgument: Any, view: Any?, model: Any, location: Any) -> Any {
        guard let reaction = reaction(of: type, signature: signature, forModel: model, view: view as? UIView) as? FiveArgumentsEventReaction else { return 0 }
        return reaction.performWithArguments((firstArgument, secondArgument, view ?? 0, model, location))
    }
}
