contract GCCTokenICO is CappedCrowdsale, TimedCrowdsale, MintedCrowdsale, Ownable {

  address private _tokenAddress;

  event TokenContractOwnershipTransferred(address indexed newOwner);

  function GCCTokenICO(
    uint256 _openingTime,
    uint256 _closingTime,
    uint256 _rate,
    address _wallet,
    uint256 _cap,
    MintableToken _token
  )
    public
    Crowdsale(_rate, _wallet, _token)
    CappedCrowdsale(_cap)
    TimedCrowdsale(_openingTime, _closingTime)
  {
    _tokenAddress = _token;
  }

  /**
   * @dev Allows this contract to transfer control of token contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferTokenContractOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    Ownable(_tokenAddress).transferOwnership(newOwner);
    emit TokenContractOwnershipTransferred(newOwner);
  }

}
/**
 * @title GCC Token Sale
 * @dev Extension of CappedCrowdsale, TimedCrowdsale, MintedCrowdsale, Ownable. Entry point for GCC Token Sale.
 */
function transferTokenContractOwnership(address newOwner) public onlyOwner {
  require(newOwner != address(0));
  Ownable(_tokenAddress).transferOwnership(newOwner);
  emit TokenContractOwnershipTransferred(newOwner);
}

/**
 * @dev Allows this contract to transfer control of token contract to a newOwner.
 * @param newOwner The address to transfer ownership to.
 */