public function &GetNextStep()
    {
        static $oNextStep;
        if (!$oNextStep) {
            $oUsers = TdbDataExtranetUser::GetInstance();
            if ($oUsers->IsLoggedIn() && $oUsers->HasData()) {
                $oBasket = TShopBasket::GetInstance();
                $oBasket->aCompletedOrderStepList['user'] = true;
                // now search for the next step not marked as completed
                $oStepList = TdbShopOrderStepList::GetList();
                $oStepList->bAllowItemCache = true;
                $oNextStep = null;
                $bDone = false;
                // do not allow access to the last stpe
                $iNumItems = $oStepList->Length();
                while (($iNumItems > 0) && !$bDone && ($oTmpStep = $oStepList->Next())) {
                    --$iNumItems;
                    if (!$oTmpStep->AllowAccessToStepPublic()) {
                        // step not completed...
                        $bDone = true;
                    } else {
                        $oNextStep = $oTmpStep;
                    }
                }
            } else {
                $oNextStep = &TdbShopOrderStepList::GetNextStep($this);
            }
        }

        return $oNextStep;
    }