How interested are you in trustless Option contracts?

Here is a rough mock-up of the code:

pragma solidity ^0.4.4;

import "erc20.sol"; 
import "BaseToken.sol";

contract OptionManager {

    address public currency; 
    address public asset;
    uint256 public price;
    uint256 public units;
    uint    public expireTime;

    address public issuers;
    address public options;

    uint256 public exerciseFunds;

    modifier onlyBeforeExpire() 
    {
        if(now < expireTime) _;
        else throw;
    }

    modifier onlyAfterExpire() 
    {
        if(now > expireTime) _;
        else throw;
    }

    function callOptionManager(
        address _currency, 
        address _asset, 
        uint256 _price, 
        uint256 _units, 
        uint _expireTime) 
    {
        currency = _currency;
        asset = _asset;
        price = _price;
        units = _units;
        expireTime = _expireTime; 

        issuers = new ownedToken(); 
        options = new ownedToken();
    }

    function issueOption(uint256 _value) onlyBeforeExpire 
    {
        if(!ERC20(asset).transferFrom(msg.sender, address(this),_value)) throw; 
        if(!ownedToken(issuers).issue(_value,msg.sender)) throw;
        if(!ownedToken(options).issue(_value,msg.sender)) throw;
    }

    function burnOption(uint256 _value) 
    {
        if(!ownedToken(issuers).burn(_value,msg.sender)) throw;
        if(!ownedToken(options).burn(_value,msg.sender)) throw;
        if(!ERC20(currency).transfer(msg.sender,_value)) throw; 
    } 

    function exercise(uint256 _value) onlyBeforeExpire {
        if(!ownedToken(options).burn(_value,msg.sender)) throw;

        uint payment = _value * price / units;

        if(!ERC20(currency).transferFrom(msg.sender, address(this),payment)) throw; 
        exerciseFunds += payment;
        if(!ERC20(asset).transfer(msg.sender,_value)) throw; 
    }

    function claim(uint256 _value) {
        if(!ownedToken(issuers).burn(_value,msg.sender)) throw;

        uint payment = _value * price / units;

        exerciseFunds -= payment;
        if(!ERC20(currency).transfer(msg.sender,payment)) throw;
    }
}

BaseToken.sol defines the standard token implementation ownedToken which is owned by its creator and has the function issue that generates balances and burn that removes balances of a target address allowing the OptionManager to generate tokens when funds are locked and burn them when they are unlocked or claimed. Anyone with better name suggestions, suggestions for appropriate events and security concerns from the basic outline please speak up.

/r/ethtrader Thread