private function fireQueue(SplPriorityQueue $queue, AbstractUserEvent $event)
    {
        $eventHappening = $event::getHappening();

        $iterator = clone $queue;
        $iterator->top();

        $arguments = null;
        $status = null;

        while ($iterator->valid()) {
            $handler = $iterator->current();
            $iterator->next();

            if (is_object($handler)) {
                if ($handler instanceof \Closure) {
                    $arguments = $arguments ?: [$event];
                    $status = call_user_func_array($handler, $arguments);
                } else {
                    if (method_exists($handler, $eventHappening)) {
                        $status = $handler->{$eventHappening}($event);
                    }
                }
            }
        }

        return $status;
    }