protected function _runFallbackMethod(
        $object, $varname, array $arguments = array(), $throw_errors = false, $fallback = null
    ) {
        if (property_exists($object, $varname)) {
            try {
                $object->{$varname} = $args;
                return $object;
            } catch (\Exception $e) {
            }
        }

        if (method_exists($object, $varname)) {
            try {
                $val = call_user_func_array(array($object, $varname), $arguments);
                return $val;
            } catch (\Exception $e) {
            }
        }

        if (!empty($fallback)) {
            $_meth = $fallback.ucfirst($varname);
            if (method_exists($object, $_meth)) {
                try {
                    $val = call_user_func_array(array($object, $_meth), $arguments);
                    return $val;
                } catch (\Exception $e) {
                }
            }
        }

        if ($throw_errors) {
            if (!empty($_meth)) {
                $msg = sprintf('Neither variable "%s" nor method "%s" or "%s" were found in object "%s"!',
                    $varname, $varname, $_meth, get_class($object));
            } else {
                $msg = sprintf('Neither variable "%s" nor method "%s" were found in object "%s"!',
                    $varname, $varname, get_class($object));
            }
            throw new TemplateEngineException($msg);
        }
        return null;
    }