diff --git a/src/main/java/org/opennars/middle/operatorreflection/MethodInvocationOperator.java b/src/main/java/org/opennars/middle/operatorreflection/MethodInvocationOperator.java
index 94ef4ee0bb4e117f090cbeebbf565b691628cc70..8f634b5ee03e01987d1c6454cf7f21b4f0f235b7 100644
--- a/src/main/java/org/opennars/middle/operatorreflection/MethodInvocationOperator.java
+++ b/src/main/java/org/opennars/middle/operatorreflection/MethodInvocationOperator.java
@@ -16,16 +16,16 @@ import org.opennars.storage.Memory;
  * Exposes a method of a object as a callable operator
  */
 public class MethodInvocationOperator extends Operator {
-	private Method method;
-	private Object object;
-	private List<Class> argumentTypes;
+    final private Method method;
+    final private Object object;
+	final private Class[] argumentTypes;
 
 	/**
 	 * @param narsOperatorName name of the operator as called by NARS
 	 * @param object object of method call
 	 * @param method called method
 	 */
-	public MethodInvocationOperator(final String narsOperatorName, final Object object, final Method method, final List<Class> argumentTypes) {
+	public MethodInvocationOperator(final String narsOperatorName, final Object object, final Method method, final Class[] argumentTypes) {
 	    super(narsOperatorName);
 
 	    this.object = object;
@@ -36,16 +36,16 @@ public class MethodInvocationOperator extends Operator {
 	@Override
 	protected List<Task> execute(Operation operation, Term[] args, Memory memory, Timable time) {
 	    try {
-	        if (argumentTypes.size() == 0) {
+	        if (argumentTypes.length == 0) {
                 method.invoke(object);
             }
-            else if (argumentTypes.size() == 1 && argumentTypes.get(0).equals(String.class) ) {
+            else if (argumentTypes.length == 1 && argumentTypes[0].equals(String.class) ) {
 	            method.invoke(object, args[1].toString());
             }
-            else if (argumentTypes.size() == 2 && argumentTypes.get(0).equals(String.class) && argumentTypes.get(1).equals(String.class) ) {
+            else if (argumentTypes.length == 2 && argumentTypes[0].equals(String.class) && argumentTypes[1].equals(String.class) ) {
                 method.invoke(object, args[1].toString(), args[2].toString());
             }
-            else if (argumentTypes.size() == 3 && argumentTypes.get(0).equals(String.class) && argumentTypes.get(1).equals(String.class) && argumentTypes.get(2).equals(String.class) ) {
+            else if (argumentTypes.length == 3 && argumentTypes[0].equals(String.class) && argumentTypes[1].equals(String.class) && argumentTypes[2].equals(String.class) ) {
                 method.invoke(object, args[1].toString(), args[2].toString(), args[3].toString());
             }
             else {
diff --git a/src/main/java/org/opennars/middle/operatorreflection/OperatorReflection.java b/src/main/java/org/opennars/middle/operatorreflection/OperatorReflection.java
index a2f3e3dd7a7078c92a7714992775e6ca90199dca..b88a6c0e54781a999c37e8d67f29d126b348c27a 100644
--- a/src/main/java/org/opennars/middle/operatorreflection/OperatorReflection.java
+++ b/src/main/java/org/opennars/middle/operatorreflection/OperatorReflection.java
@@ -30,7 +30,10 @@ public class OperatorReflection {
      * @param argumentTypes the types of the called method
      */
     public void appendAndRegisterMethodWithoutArguments(final Pluggable pluggable, final String narsOperatorName, final Object object, final String methodName, final List<Class> argumentTypes) throws NoSuchMethodException {
-        Method calledMethod = retMethodByName(object, methodName);
+        Class[] argumentTypeArray = new Class[argumentTypes.size()];
+        argumentTypeArray = argumentTypes.toArray(argumentTypeArray);
+
+        Method calledMethod = retMethodByName(object, methodName, argumentTypeArray);
 
         MethodInvocationOperator operator = new MethodInvocationOperator(narsOperatorName, object, calledMethod, argumentTypes);
 
@@ -40,7 +43,7 @@ public class OperatorReflection {
         methodOperators.put(narsOperatorName, operator);
     }
 
-    protected Method retMethodByName(final Object object, final String methodName) throws NoSuchMethodException {
-        return object.getClass().getMethod(methodName);
+    protected Method retMethodByName(final Object object, final String methodName, final Class[] argumentTypes) throws NoSuchMethodException {
+        return object.getClass().getMethod(methodName, argumentTypes);
     }
 }