function __callback(bytes32 myid, string result) {
        if (msg.sender != oraclize.cbAddress()) revert();

        uint transactionID = oracalizeMyId2transactionID[myid];
        Transaction memory transaction = transactions[transactionID];
        
        if( bytes(result).length == 0 ) {
            TransactionAborted(transactionID, "Oracalize return value was invalid, this is probably due to incorrect sendToOtherBlockchain() argments");
            recoverable[transaction.returnAddress] += transaction.amount;
            transaction.amount = 0;
        }
        else {
            address depositAddress = parseAddr(result);
            require(depositAddress != msg.sender); 
            uint sendAmount = transaction.amount;
            transaction.amount = 0;
            if (depositAddress.send(sendAmount))
                TransactionSentToShapeShift(transactionID, transaction.returnAddress, depositAddress, sendAmount);
            else {
                TransactionAborted(transactionID, "transaction to address returned by Oracalize failed");
                recoverable[transaction.returnAddress] += sendAmount;
            }
        }
    }