     
     /// Type-erased reaction with 5 arguments
     open var reaction5Arguments : ((Any, Any, Any, Any, Any) -> Any)?
+    
+    open func make5ArgumentsReaction<View:ModelTransfer, ArgumentOne, ArgumentTwo, ReturnType>(_ block: @escaping (ArgumentOne, ArgumentTwo, View, View.ModelType, IndexPath)-> ReturnType) {
+        reaction5Arguments = { argumentOne, argumentTwo, view, model, indexPath in
+            guard let model = model as? View.ModelType,
+                let indexPath = indexPath as? IndexPath,
+                let argument1 = argumentOne as? ArgumentOne,
+                let argument2 = argumentTwo as? ArgumentTwo,
+                let view = view as? View else { return 0 }
+            return block(argument1, argument2, view, model, indexPath)
+        }
+    }
     
     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))
    }
}

    /// 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)
    }
