contract Callable is Claimable {
  mapping(address => bool) public callers;

  event CallerAddressAdded(address indexed addr);
  event CallerAddressRemoved(address indexed addr);


  /**
   * @dev Modifier throws if called by any account other than the callers or owner.
   */
  modifier onlyCaller() {
    require(callers[msg.sender]);
    _;
  }

  /**
   * @dev add an address to the caller list
   * @param addr address
   * @return true if the address was added to the caller list, false if the address was already in the caller list
   */
  function addAddressToCaller(address addr) onlyOwner public returns(bool success) {
    if (!callers[addr]) {
      callers[addr] = true;
      emit CallerAddressAdded(addr);
      success = true;
    }
  }

  /**
   * @dev remove an address from the caller list
   * @param addr address
   * @return true if the address was removed from the caller list,
   * false if the address wasn't in the caller list in the first place
   */
  function removeAddressFromCaller(address addr) onlyOwner public returns(bool success) {
    if (callers[addr]) {
      callers[addr] = false;
      emit CallerAddressRemoved(addr);
      success = true;
    }
  }
}
/**
 * @title Callable
 * @dev Extension for the Claimable contract.
 * This allows the contract only be called by certain contract.
 */
function addAddressToCaller(address addr) onlyOwner public returns(bool success) {
  if (!callers[addr]) {
    callers[addr] = true;
    emit CallerAddressAdded(addr);
    success = true;
  }
}

/**
 * @dev add an address to the caller list
 * @param addr address
 * @return true if the address was added to the caller list, false if the address was already in the caller list
 */