diff --git a/core/src/main/java/haveno/core/trade/Trade.java b/core/src/main/java/haveno/core/trade/Trade.java
index 6ad8e7aef3..3084aa77f1 100644
--- a/core/src/main/java/haveno/core/trade/Trade.java
+++ b/core/src/main/java/haveno/core/trade/Trade.java
@@ -735,9 +735,9 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
         // TODO: buyer's payment sent message state property became unsynced if shut down while awaiting ack from seller. fixed in v1.0.19 so this check can be removed?
         if (isBuyer()) {
             MessageState expectedState = getPaymentSentMessageState();
-            if (expectedState != null && expectedState != processModel.getPaymentSentMessageStateProperty().get()) {
-                log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStateProperty().get());
-                processModel.getPaymentSentMessageStateProperty().set(expectedState);
+            if (expectedState != null && expectedState != processModel.getPaymentSentMessageStatePropertySeller().get()) {
+                log.warn("Updating unexpected payment sent message state for {} {}, expected={}, actual={}", getClass().getSimpleName(), getId(), expectedState, processModel.getPaymentSentMessageStatePropertySeller().get());
+                processModel.getPaymentSentMessageStatePropertySeller().set(expectedState);
             }
         }
 
@@ -2017,7 +2017,7 @@ public abstract class Trade extends XmrWalletBase implements Tradable, Model {
 
     public MessageState getPaymentSentMessageState() {
         if (isPaymentReceived()) return MessageState.ACKNOWLEDGED;
-        if (processModel.getPaymentSentMessageStateProperty().get() == MessageState.ACKNOWLEDGED) return MessageState.ACKNOWLEDGED;
+        if (processModel.getPaymentSentMessageStatePropertySeller().get() == MessageState.ACKNOWLEDGED) return MessageState.ACKNOWLEDGED;
         switch (state) {
             case BUYER_SENT_PAYMENT_SENT_MSG:
                 return MessageState.SENT;
diff --git a/core/src/main/java/haveno/core/trade/protocol/ProcessModel.java b/core/src/main/java/haveno/core/trade/protocol/ProcessModel.java
index 54aaa65d37..d81c4f476a 100644
--- a/core/src/main/java/haveno/core/trade/protocol/ProcessModel.java
+++ b/core/src/main/java/haveno/core/trade/protocol/ProcessModel.java
@@ -163,7 +163,7 @@ public class ProcessModel implements Model, PersistablePayload {
     // PaymentSentMessage. As well we do an automatic re-send in case it was not ACKed yet.
     // To enable that even after restart we persist the state.
     @Setter
-    private ObjectProperty<MessageState> paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
+    private ObjectProperty<MessageState> paymentSentMessageStatePropertySeller = new SimpleObjectProperty<>(MessageState.UNDEFINED);
     @Setter
     private ObjectProperty<MessageState> paymentSentMessageStatePropertyArbitrator = new SimpleObjectProperty<>(MessageState.UNDEFINED);
     private ObjectProperty<Boolean> paymentAccountDecryptedProperty = new SimpleObjectProperty<>(false);
@@ -203,7 +203,7 @@ public class ProcessModel implements Model, PersistablePayload {
                 .setPubKeyRing(pubKeyRing.toProtoMessage())
                 .setUseSavingsWallet(useSavingsWallet)
                 .setFundsNeededForTrade(fundsNeededForTrade)
-                .setPaymentSentMessageState(paymentSentMessageStateProperty.get().name())
+                .setPaymentSentMessageStateSeller(paymentSentMessageStatePropertySeller.get().name())
                 .setPaymentSentMessageStateArbitrator(paymentSentMessageStatePropertyArbitrator.get().name())
                 .setBuyerPayoutAmountFromMediation(buyerPayoutAmountFromMediation)
                 .setSellerPayoutAmountFromMediation(sellerPayoutAmountFromMediation)
@@ -240,9 +240,9 @@ public class ProcessModel implements Model, PersistablePayload {
         processModel.setTradeFeeAddress(ProtoUtil.stringOrNullFromProto(proto.getTradeFeeAddress()));
         processModel.setMultisigAddress(ProtoUtil.stringOrNullFromProto(proto.getMultisigAddress()));
 
-        String paymentSentMessageStateString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageState());
-        MessageState paymentSentMessageState = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateString);
-        processModel.setPaymentSentMessageState(paymentSentMessageState);
+        String paymentSentMessageStateSellerString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateSeller());
+        MessageState paymentSentMessageStateSeller = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateSellerString);
+        processModel.setPaymentSentMessageStateSeller(paymentSentMessageStateSeller);
 
         String paymentSentMessageStateArbitratorString = ProtoUtil.stringOrNullFromProto(proto.getPaymentSentMessageStateArbitrator());
         MessageState paymentSentMessageStateArbitrator = ProtoUtil.enumFromProto(MessageState.class, paymentSentMessageStateArbitratorString);
@@ -274,11 +274,11 @@ public class ProcessModel implements Model, PersistablePayload {
         return getP2PService().getAddress();
     }
 
-    void setPaymentSentAckMessage(AckMessage ackMessage) {
+    void setPaymentSentAckMessageSeller(AckMessage ackMessage) {
         MessageState messageState = ackMessage.isSuccess() ?
                 MessageState.ACKNOWLEDGED :
                 MessageState.FAILED;
-        setPaymentSentMessageState(messageState);
+        setPaymentSentMessageStateSeller(messageState);
     }
 
     void setPaymentSentAckMessageArbitrator(AckMessage ackMessage) {
@@ -288,8 +288,8 @@ public class ProcessModel implements Model, PersistablePayload {
         setPaymentSentMessageStateArbitrator(messageState);
     }
 
-    public void setPaymentSentMessageState(MessageState paymentSentMessageStateProperty) {
-        this.paymentSentMessageStateProperty.set(paymentSentMessageStateProperty);
+    public void setPaymentSentMessageStateSeller(MessageState paymentSentMessageStateProperty) {
+        this.paymentSentMessageStatePropertySeller.set(paymentSentMessageStateProperty);
         if (tradeManager != null) {
             tradeManager.requestPersistence();
         }
@@ -302,6 +302,14 @@ public class ProcessModel implements Model, PersistablePayload {
         }
     }
 
+    public boolean isPaymentSentMessageAckedBySeller() {
+        return paymentSentMessageStatePropertySeller.get() == MessageState.ACKNOWLEDGED;
+    }
+
+    public boolean isPaymentSentMessageAckedByArbitrator() {
+        return paymentSentMessageStatePropertyArbitrator.get() == MessageState.ACKNOWLEDGED;
+    }
+
     void setDepositTxSentAckMessage(AckMessage ackMessage) {
         MessageState messageState = ackMessage.isSuccess() ?
                 MessageState.ACKNOWLEDGED :
diff --git a/core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java b/core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java
index 684dfb7c62..6a158bea7a 100644
--- a/core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java
+++ b/core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java
@@ -652,11 +652,12 @@ public abstract class TradeProtocol implements DecryptedDirectMessageListener, D
         // handle ack for PaymentSentMessage, which automatically re-sends if not ACKed in a certain time
         if (ackMessage.getSourceMsgClassName().equals(PaymentSentMessage.class.getSimpleName())) {
             if (trade.getTradePeer(sender) == trade.getSeller()) {
-                processModel.setPaymentSentAckMessage(ackMessage);
+                processModel.setPaymentSentAckMessageSeller(ackMessage);
                 trade.setStateIfValidTransitionTo(Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG);
                 processModel.getTradeManager().requestPersistence();
             } else if (trade.getTradePeer(sender) == trade.getArbitrator()) {
                 processModel.setPaymentSentAckMessageArbitrator(ackMessage);
+                processModel.getTradeManager().requestPersistence();
             } else if (!ackMessage.isSuccess()) {
                 String err = "Received AckMessage with error state for " + ackMessage.getSourceMsgClassName() + " from "+ sender + " with tradeId " + trade.getId() + " and errorMessage=" + ackMessage.getErrorMessage();
                 log.warn(err);
diff --git a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessage.java b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessage.java
index f060effe78..bc064399a3 100644
--- a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessage.java
+++ b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessage.java
@@ -170,7 +170,7 @@ public abstract class BuyerSendPaymentSentMessage extends SendMailboxMessageTask
             timer.stop();
         }
         if (listener != null) {
-            processModel.getPaymentSentMessageStateProperty().removeListener(listener);
+            processModel.getPaymentSentMessageStatePropertySeller().removeListener(listener);
         }
     }
 
@@ -194,8 +194,8 @@ public abstract class BuyerSendPaymentSentMessage extends SendMailboxMessageTask
 
         if (resendCounter == 0) {
             listener = (observable, oldValue, newValue) -> onMessageStateChange(newValue);
-            processModel.getPaymentSentMessageStateProperty().addListener(listener);
-            onMessageStateChange(processModel.getPaymentSentMessageStateProperty().get());
+            processModel.getPaymentSentMessageStatePropertySeller().addListener(listener);
+            onMessageStateChange(processModel.getPaymentSentMessageStatePropertySeller().get());
         }
 
         // first re-send is after 2 minutes, then increase the delay exponentially
diff --git a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToArbitrator.java b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToArbitrator.java
index cc4113e342..cd3098737a 100644
--- a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToArbitrator.java
+++ b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToArbitrator.java
@@ -18,7 +18,6 @@
 package haveno.core.trade.protocol.tasks;
 
 import haveno.common.taskrunner.TaskRunner;
-import haveno.core.network.MessageState;
 import haveno.core.trade.Trade;
 import haveno.core.trade.protocol.TradePeer;
 import lombok.EqualsAndHashCode;
@@ -59,6 +58,6 @@ public class BuyerSendPaymentSentMessageToArbitrator extends BuyerSendPaymentSen
 
     @Override
     protected boolean isAckedByReceiver() {
-        return trade.getProcessModel().getPaymentSentMessageStatePropertyArbitrator().get() == MessageState.ACKNOWLEDGED;
+        return trade.getProcessModel().isPaymentSentMessageAckedByArbitrator();
     }
 }
diff --git a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToSeller.java b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToSeller.java
index caf402be0a..825220d5b4 100644
--- a/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToSeller.java
+++ b/core/src/main/java/haveno/core/trade/protocol/tasks/BuyerSendPaymentSentMessageToSeller.java
@@ -40,25 +40,25 @@ public class BuyerSendPaymentSentMessageToSeller extends BuyerSendPaymentSentMes
     
     @Override
     protected void setStateSent() {
-        trade.getProcessModel().setPaymentSentMessageState(MessageState.SENT);
+        trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.SENT);
         super.setStateSent();
     }
 
     @Override
     protected void setStateArrived() {
-        trade.getProcessModel().setPaymentSentMessageState(MessageState.ARRIVED);
+        trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.ARRIVED);
         super.setStateArrived();
     }
 
     @Override
     protected void setStateStoredInMailbox() {
-        trade.getProcessModel().setPaymentSentMessageState(MessageState.STORED_IN_MAILBOX);
+        trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.STORED_IN_MAILBOX);
         super.setStateStoredInMailbox();
     }
 
     @Override
     protected void setStateFault() {
-        trade.getProcessModel().setPaymentSentMessageState(MessageState.FAILED);
+        trade.getProcessModel().setPaymentSentMessageStateSeller(MessageState.FAILED);
         super.setStateFault();
     }
 
@@ -72,6 +72,6 @@ public class BuyerSendPaymentSentMessageToSeller extends BuyerSendPaymentSentMes
 
     @Override
     protected boolean isAckedByReceiver() {
-        return trade.getState().ordinal() >= Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG.ordinal();
+        return trade.getProcessModel().isPaymentSentMessageAckedBySeller();
     }
 }
diff --git a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java
index 41881c58be..b9936236c6 100644
--- a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java
+++ b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java
@@ -100,7 +100,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
     private final ObjectProperty<BuyerState> buyerState = new SimpleObjectProperty<>();
     private final ObjectProperty<SellerState> sellerState = new SimpleObjectProperty<>();
     @Getter
-    private final ObjectProperty<MessageState> messageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
+    private final ObjectProperty<MessageState> paymentSentMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED);
     private Subscription tradeStateSubscription;
     private Subscription paymentAccountDecryptedSubscription;
     private Subscription payoutStateSubscription;
@@ -186,7 +186,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
 
             if (messageStateSubscription != null) {
                 messageStateSubscription.unsubscribe();
-                messageStateProperty.set(MessageState.UNDEFINED);
+                paymentSentMessageStateProperty.set(MessageState.UNDEFINED);
             }
 
             if (selectedItem != null) {
@@ -200,7 +200,7 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
                 payoutStateSubscription = EasyBind.subscribe(trade.payoutStateProperty(), state -> {
                     onPayoutStateChanged(state);
                 });
-                messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStateProperty(), this::onMessageStateChanged);
+                messageStateSubscription = EasyBind.subscribe(trade.getProcessModel().getPaymentSentMessageStatePropertySeller(), this::onPaymentSentMessageStateChanged);
             }
         }
     }
@@ -215,8 +215,8 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
         });
     }
 
-    private void onMessageStateChanged(MessageState messageState) {
-        messageStateProperty.set(messageState);
+    private void onPaymentSentMessageStateChanged(MessageState messageState) {
+        paymentSentMessageStateProperty.set(messageState);
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////
diff --git a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep3View.java b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep3View.java
index 57fda229f3..b28eda4a10 100644
--- a/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep3View.java
+++ b/desktop/src/main/java/haveno/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep3View.java
@@ -52,7 +52,7 @@ public class BuyerStep3View extends TradeStepView {
     public void activate() {
         super.activate();
 
-        model.getMessageStateProperty().addListener(messageStateChangeListener);
+        model.getPaymentSentMessageStateProperty().addListener(messageStateChangeListener);
 
         updateMessageStateInfo();
     }
@@ -60,7 +60,7 @@ public class BuyerStep3View extends TradeStepView {
     public void deactivate() {
         super.deactivate();
 
-        model.getMessageStateProperty().removeListener(messageStateChangeListener);
+        model.getPaymentSentMessageStateProperty().removeListener(messageStateChangeListener);
     }
 
 
@@ -87,7 +87,7 @@ public class BuyerStep3View extends TradeStepView {
     }
 
     private void updateMessageStateInfo() {
-        MessageState messageState = model.getMessageStateProperty().get();
+        MessageState messageState = model.getPaymentSentMessageStateProperty().get();
         textFieldWithIcon.setText(Res.get("message.state." + messageState.name()));
         Label iconLabel = textFieldWithIcon.getIconLabel();
         switch (messageState) {
diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto
index 04c32ee8dc..6436052333 100644
--- a/proto/src/main/proto/pb.proto
+++ b/proto/src/main/proto/pb.proto
@@ -1568,7 +1568,7 @@ message ProcessModel {
     bytes payout_tx_signature = 4;
     bool use_savings_wallet = 5;
     int64 funds_needed_for_trade = 6;
-    string payment_sent_message_state = 7;
+    string payment_sent_message_state_seller = 7;
     string payment_sent_message_state_arbitrator = 8;
     bytes maker_signature = 9;
     TradePeer maker = 10;