function setup(address _bouncyCoinToken, uint256 _maxPreIcoDuration, uint256 _maxIcoDuration)
    public
    isOwner
    atStage(Stages.Deployed) {
    require(_bouncyCoinToken != 0x0);
    require(_maxPreIcoDuration > 0);
    require(_maxIcoDuration > 0);

    icoPriceThresholds[0] = PriceThreshold(20000000 * 10**18, 0.00020 * 10**18, 0);
    icoPriceThresholds[1] = PriceThreshold(50000000 * 10**18, 0.00025 * 10**18, 0);

    bouncyCoinToken = ERC20(_bouncyCoinToken);
    maxPreIcoDuration = _maxPreIcoDuration;
    maxIcoDuration = _maxIcoDuration;

    
    uint256 tokensRequired = PRE_ICO_TOKENS + maxIcoTokensSold();
    assert(bouncyCoinToken.balanceOf(this) == tokensRequired);

    stage = Stages.SetUp;
  }