            if (ssverbose)
                System.out.println("SS:  => do next step!");
            if (smartSteppingStepOut) {
                //TODO following line of code is wrong !
                // step out implementation calls getDebuggerImpl ().resume ();
                // such code should not be called from operator!
                //getStepActionProvider().doAction(ActionsManager.ACTION_STEP_OUT);
                setStepRequest ();
            } else if (stepRequest != null) {
                stepRequest.enable ();
            } else {
                setStepRequest (StepRequest.STEP_INTO);
            }
        }
    }
    
    private void setStepRequest () {
        JPDAThreadImpl jt = (JPDAThreadImpl) getDebuggerImpl ().
            getCurrentThread ();
        synchronized (jt) {
            if (!jt.isSuspended()) {}  // TODO Handle the condition or what?
            ThreadReference tr = jt.getThreadReference ();
            removeStepRequests (tr);
            stepRequest = getDebuggerImpl ().getVirtualMachine ().
            eventRequestManager ().createStepRequest (
                tr,
                StepRequest.STEP_LINE,
                StepRequest.STEP_INTO
            );
            getDebuggerImpl ().getOperator ().register (stepRequest, this);
            stepRequest.setSuspendPolicy (getDebuggerImpl ().getSuspend ());

            if (ssverbose)
                System.out.println("SS:    set patterns:");
            addPatternsToRequest (
                getSmartSteppingFilterImpl ().getExclusionPatterns ()
            );
            stepRequest.enable ();
        }
    }

    private SmartSteppingFilterImpl smartSteppingFilterImpl;
    
}
