@SuppressWarnings({ "unchecked", "rawtypes" })
	public static Object invokeStaticSubroutine(Object classInstance, String methodName, CalcValue... args) {
		// ~ Public Invokation
		try {
			Class clazz = classInstance instanceof Class ? (Class) classInstance : classInstance.getClass();

			// Invoke Subroutine with parameters
			if (args != null) {
				// ~ Get Static Method
				LinkedList<Class> params = new LinkedList<Class>();
				for (CalcValue arg : args) {
					params.add(arg.getType());
				}

				Method method = clazz.getMethod(methodName, params.toArray(new Class[] {}));

				// ~ Invoke Static Method
				LinkedList<Object> values = new LinkedList<Object>();
				for (CalcValue arg : args) {
					values.add(arg.getValue());
				}

				return method.invoke(classInstance, values.toArray(new Object[] {}));
			}
			// Invoke Subroutine without parameters
			else {
				Method method = clazz.getMethod(methodName, new Class[] {});
				return method.invoke(classInstance, new Object[] {});
			}

		} catch (SecurityException se) {

		} catch (NoSuchMethodException nsme) {

		} catch (IllegalArgumentException iae) {

		} catch (IllegalAccessException iae) {

		} catch (InvocationTargetException ate) {

		}

		return null;
	}