function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
        if (!transfersEnabled) revert();
        if (jail[msg.sender] >= block.timestamp || jail[_to] >= block.timestamp || jail[_from] >= block.timestamp) revert();

        if (allowance(_from, msg.sender) < _value) return false;

        m_allowance[_from][msg.sender] -= _value;

        if (!(doTransfer(_from, _to, _value))) {
            m_allowance[_from][msg.sender] += _value;
            return false;
        }
        else {
            return true;
        }
    }