function buyFor(address _user, uint256 ethers, uint time) internal returns (bool success) {
        require(ethers > 0);

        uint8 icoStep = getIcoStep(time);

        require(icoStep == 1 || icoStep == 2);

        
        if(icoStep == 1 && (totalSoldSlogns + ethers) > 5000 ether) {
            throw;
        }

        uint256 slognAmount = ethers; 

        uint256 bonus = calculateBonus(icoStep, totalSoldSlogns, slognAmount);

        
        require(balanceOf[this] >= slognAmount + bonus);

        if(bonus > 0) {
            BonusEarned(_user, bonus);
        }

        transferInternal(this, _user, slognAmount + bonus);

        totalSoldSlogns += slognAmount;

        if(icoStep == 1) {
            preIcoEthers[_user] += ethers;      
        }
        if(icoStep == 2) {
            icoEthers[_user] += ethers;      
        }

        return true;
    }