diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py
index 2a10572..9bc14ff 100644
--- a/basicswap/basicswap.py
+++ b/basicswap/basicswap.py
@@ -1174,16 +1174,17 @@ class BasicSwap(BaseApp):
         coin_from = Coins(offer.coin_from)
         coin_to = Coins(offer.coin_to)
 
+        reverse_bid: bool = self.is_reverse_ads_bid(offer.coin_from)
+        ci_from = self.ci(offer.coin_to if reverse_bid else offer.coin_from)
+        ci_to = self.ci(offer.coin_from if reverse_bid else offer.coin_to)
+
         if offer.swap_type == SwapTypes.XMR_SWAP:
             xmr_swap = session.query(XmrSwap).filter_by(bid_id=bid.bid_id).first()
             self.watchXmrSwap(bid, offer, xmr_swap, session)
-            if self.ci(coin_to).watch_blocks_for_scripts() and bid.xmr_a_lock_tx and bid.xmr_a_lock_tx.chain_height:
+            if ci_to.watch_blocks_for_scripts() and bid.xmr_a_lock_tx and bid.xmr_a_lock_tx.chain_height:
                 if not bid.xmr_b_lock_tx or not bid.xmr_b_lock_tx.txid:
-                    ci_from = self.ci(coin_from)
-                    ci_to = self.ci(coin_to)
                     chain_a_block_header = ci_from.getBlockHeaderFromHeight(bid.xmr_a_lock_tx.chain_height)
-                    block_time = chain_a_block_header['time']
-                    chain_b_block_header = ci_to.getBlockHeaderAt(block_time)
+                    chain_b_block_header = ci_to.getBlockHeaderAt(chain_a_block_header['time'])
                     dest_script = ci_to.getPkDest(xmr_swap.pkbs)
                     self.addWatchedScript(ci_to.coin_type(), bid.bid_id, dest_script, TxTypes.XMR_SWAP_B_LOCK)
                     self.setLastHeightCheckedStart(ci_to.coin_type(), chain_b_block_header['height'], session)
@@ -1195,10 +1196,12 @@ class BasicSwap(BaseApp):
             if bid.participate_tx and bid.participate_tx.txid:
                 self.addWatchedOutput(coin_to, bid.bid_id, bid.participate_tx.txid.hex(), bid.participate_tx.vout, BidStates.SWAP_PARTICIPATING)
 
-            if bid.participate_tx and bid.participate_tx.txid is None:
-                self.addWatchedScript(coin_to, bid.bid_id, self.ci(coin_to).getScriptDest(bid.participate_tx.script), TxTypes.PTX)
+            if ci_to.watch_blocks_for_scripts() and bid.participate_tx and bid.participate_tx.txid is None:
+                self.addWatchedScript(coin_to, bid.bid_id, ci_to.getScriptDest(bid.participate_tx.script), TxTypes.PTX)
                 if bid.initiate_tx and bid.initiate_tx.chain_height:
-                    self.setLastHeightCheckedStart(coin_to, bid.initiate_tx.chain_height, session)
+                    chain_a_block_header = ci_from.getBlockHeaderFromHeight(bid.initiate_tx.chain_height)
+                    chain_b_block_header = ci_to.getBlockHeaderAt(chain_a_block_header['time'])
+                    self.setLastHeightCheckedStart(coin_to, chain_b_block_header['height'], session)
 
             if self.coin_clients[coin_from]['last_height_checked'] < 1:
                 if bid.initiate_tx and bid.initiate_tx.chain_height:
diff --git a/basicswap/interface/dcr/dcr.py b/basicswap/interface/dcr/dcr.py
index 7628100..dc20bb4 100644
--- a/basicswap/interface/dcr/dcr.py
+++ b/basicswap/interface/dcr/dcr.py
@@ -1432,6 +1432,9 @@ class DCRInterface(Secp256k1Interface):
             return {'txid': txid_hex, 'amount': 0, 'height': block_height}
         return None
 
+    def encodeSharedAddress(self, Kbv, Kbs):
+        return self.pkh_to_address(self.pkh(Kbs))
+
     def isTxExistsError(self, err_str: str) -> bool:
         return 'transaction already exists' in err_str or 'already have transaction' in err_str
 
diff --git a/tests/basicswap/common_xmr.py b/tests/basicswap/common_xmr.py
index c244bf3..a26f716 100644
--- a/tests/basicswap/common_xmr.py
+++ b/tests/basicswap/common_xmr.py
@@ -126,7 +126,10 @@ def run_prepare(node_id, datadir_path, bins_path, with_coins, mnemonic_in=None,
     with patch.object(sys, 'argv', testargs), patch('sys.stdout', new=StringIO()) as mocked_stdout:
         prepareSystem.main()
         lines = mocked_stdout.getvalue().split('\n')
-        mnemonic_out = lines[-4]
+        if mnemonic_in is None:
+            mnemonic_out = lines[-4]
+        else:
+            mnemonic_out = mnemonic_in
 
     with open(config_path) as fs:
         settings = json.load(fs)