contract UpgradeabilityProxy is Proxy, UpgradeabilityStorage, Ownable {

    /**
    * @dev Constructor function
    */
    constructor(string _version) public {
        registry = IRegistry(msg.sender);
        upgradeTo(_version);
    }

    /**
    * @dev Upgrades the implementation to the requested version
    * @param _version representing the version name of the new implementation to be set
    */
    function upgradeTo(string _version) public onlyOwner {
        _implementation = registry.getVersion(_version);
    }

}
/**
 * @title UpgradeabilityProxy
 * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded
 */
function upgradeTo(string _version) public onlyOwner {
    _implementation = registry.getVersion(_version);
}

/**
 * @dev Upgrades the implementation to the requested version
 * @param _version representing the version name of the new implementation to be set
 */