 				_isFunctionDefinition = false;
 				
 				if (_macroProxy == null)
-					_macroProxy = new ProxyObject(_hasMacro, _getMacro, null, evaluateMacro); // allows evaluating macros but not setting them
+					_macroProxy = new ProxyObject(_hasMacro, evaluateMacro, null, callMacro); // allows evaluating macros but not setting them
 				
 				if (detectLinkableObjectChange(_getNewCompiler, macroLibraries))
 					_compiler = _getNewCompiler(true);

				return lf;
			return lf.apply();
		}
		
		/**
		 * This function evaluates a macro specified in the macros hash map,
		 * catching and reporting any errors that are thrown.
		 * @param macroName The name of the macro to evaluate.
		 * @param params The parameters to pass to the macro.
		 * @return The result of evaluating the macro.
		 */
		public static function evaluateMacro(macroName:String, params:Array = null):*
		{
			// error catching/reporting is handled automatically for LinkableFunctions in the macros list.
			var lf:LinkableFunction = macros.getObject(macroName) as LinkableFunction;

			return macros.getObject(macroName) != null;
		}
		
		/**
		 * This function evaluates a macro specified in the macros hash map,
		 * catching and reporting any errors that are thrown.
		 * @param macroName The name of the macro to evaluate.
		 * @return The result of evaluating the macro.
		 */
		public static function evaluateMacro(macroName:String):*
		{
			var lf:LinkableFunction = macros.getObject(macroName) as LinkableFunction;
			if (!lf)
