public static function fire($events, $parameters = array(), $halt = false)
    {
        $responses = array();
        $parameters = (array)$parameters;

        // If the event has listeners, iterate through them and call each listener,
        // passing in the parameters.
        foreach ((array)$events as $event) {

            if (static::listeners($event)) {

                foreach (static::$events[$event] as $callback) {
                    $response = call_user_func_array($callback, $parameters);

                    // If the event is set to halt,
                    // return the first response that is not null.
                    if ($halt && !is_null($response)) {
                        return $response;
                    }

                    $responses[] = $response;
                }
            }
        }

        return $halt ? null : $responses;
    }