public function method($class, $method, $args = array(), $ttl = null)
    {
        // Ensure that the class is a string
        is_string($class) or $class = get_class($class);

        $identifier = array(
            'class' => $class,
            'method' => $method,
            'args' => $args
        );

        // do we have the data cached already?
        $result = $this->driver->get_method($identifier);

        if ($result['status']) {
            // yep, we had it
            return unserialize($result['data']);
        }

        // no data found, run the method
        if (is_string($class)) {
            $object = new $class;
        }

        $data = call_user_func_array(array($object, $method), $args);

        $data_string = serialize($data);

        // now cache the newfound data and return it
        $this->driver->set_method($identifier, $data_string, $ttl);

        // if we are testing we drop out of "return the correct data at any cost mode" 
        // and instead make sure that our write was successful
        if ($this->strict) {
            $result = $this->driver->get_method($identifier);
            return unserialize($result['data']);
        }

        return $data;
    }