public void handle(UserProcessingEvent event) {
        
        if (Boolean.getBoolean(Configuration.MULTI_LANE_MODES)) {

            ProcessingWorkEntry entry = new ProcessingWorkEntry();
            ProcessingWork work = new ProcessingWork();
            work.setEvent(event);
            entry.setWork(work);
            try {
                WorkManagerFactory.getInstance().getWorkManager(WorkType.COMMAND).schedule(UUID.randomUUID(), entry);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return;

        }

        State currentState = event.getCurrentState();
        State nextState = StatesMachine.getNextState(currentState);
        
        if (event.getRetryingCount() > 3) {
            // throw out and dump into places for future investigation
        } else {
            Processing processing = StatesMachine.getProcessing(nextState);
            if(processing != null) {
                 StandalonePusher<UserProcessingEvent, UserProcessingEventQueue> pusher = EventSystem.getPusher(EventType.USER_PROCESSING);
                 if(processing.processing(event)) {
                     //Successfully

                 } else {
                     //Failed will retry at least 3 times
                 }

                try {
                    pusher.push(event);
                } catch (EventProcessingException e) {
                    //Add logic future
                    consoleLogger.logError("Cannot push into the queue " + EventType.USER_PROCESSING, e);
                }
            } else if (processing == null && currentState == State.END) {
                //Reach the final tasks we can finished the round of processing.
            } else if (processing == null) {
                //May caused by one step didn't have configuration, wired situation.
            }
        }


    }