diff --git a/lib/models/exchange/exchange_form_state.dart b/lib/models/exchange/exchange_form_state.dart
index a2ebb8aed..8b2b26ae3 100644
--- a/lib/models/exchange/exchange_form_state.dart
+++ b/lib/models/exchange/exchange_form_state.dart
@@ -1,9 +1,14 @@
 import 'package:decimal/decimal.dart';
 import 'package:flutter/foundation.dart';
+import 'package:isar/isar.dart';
 import 'package:stackwallet/models/exchange/response_objects/estimate.dart';
 import 'package:stackwallet/models/isar/exchange_cache/currency.dart';
+import 'package:stackwallet/models/isar/exchange_cache/pair.dart';
 import 'package:stackwallet/pages/exchange_view/sub_widgets/exchange_rate_sheet.dart';
+import 'package:stackwallet/services/exchange/change_now/change_now_exchange.dart';
 import 'package:stackwallet/services/exchange/exchange.dart';
+import 'package:stackwallet/services/exchange/exchange_data_loading_service.dart';
+import 'package:stackwallet/services/exchange/majestic_bank/majestic_bank_exchange.dart';
 import 'package:stackwallet/utilities/logger.dart';
 
 class ExchangeFormState extends ChangeNotifier {
@@ -119,10 +124,10 @@ class ExchangeFormState extends ChangeNotifier {
         if (_minReceiveAmount != null &&
             _receiveAmount! < _minReceiveAmount! &&
             _receiveAmount! > Decimal.zero) {
-          return "Minimum amount ${_minReceiveAmount!.toString()} ${_receiveCurrency!.ticker.toUpperCase()}";
+          return "Min receive amount ${_minReceiveAmount!.toString()} ${_receiveCurrency!.ticker.toUpperCase()}";
         } else if (_maxReceiveAmount != null &&
             _receiveAmount! > _maxReceiveAmount!) {
-          return "Maximum amount ${_maxReceiveAmount!.toString()} ${_receiveCurrency!.ticker.toUpperCase()}";
+          return "Max receive amount ${_maxReceiveAmount!.toString()} ${_receiveCurrency!.ticker.toUpperCase()}";
         }
       }
     } else {
@@ -130,9 +135,9 @@ class ExchangeFormState extends ChangeNotifier {
         if (_minSendAmount != null &&
             _sendAmount! < _minSendAmount! &&
             _sendAmount! > Decimal.zero) {
-          return "Minimum amount ${_minSendAmount!.toString()} ${_sendCurrency!.ticker.toUpperCase()}";
+          return "Min send amount ${_minSendAmount!.toString()} ${_sendCurrency!.ticker.toUpperCase()}";
         } else if (_maxSendAmount != null && _sendAmount! > _maxSendAmount!) {
-          return "Maximum amount ${_maxSendAmount!.toString()} ${_sendCurrency!.ticker.toUpperCase()}";
+          return "Max send amount ${_maxSendAmount!.toString()} ${_sendCurrency!.ticker.toUpperCase()}";
         }
       }
     }
@@ -151,6 +156,73 @@ class ExchangeFormState extends ChangeNotifier {
   }) async {
     _exchange = exchange;
     if (shouldUpdateData) {
+      if (_sendCurrency != null) {
+        _sendCurrency = await ExchangeDataLoadingService
+            .instance.isar.currencies
+            .where()
+            .exchangeNameEqualTo(exchange.name)
+            .filter()
+            .tickerEqualTo(_sendCurrency!.ticker)
+            .and()
+            .group((q) => exchangeRateType == ExchangeRateType.fixed
+                ? q
+                    .rateTypeEqualTo(SupportedRateType.both)
+                    .or()
+                    .rateTypeEqualTo(SupportedRateType.fixed)
+                : q
+                    .rateTypeEqualTo(SupportedRateType.both)
+                    .or()
+                    .rateTypeEqualTo(SupportedRateType.estimated))
+            .findFirst();
+      }
+      if (_sendCurrency == null) {
+        switch (exchange.name) {
+          case ChangeNowExchange.exchangeName:
+            _sendCurrency = _cachedSendCN;
+            break;
+          case MajesticBankExchange.exchangeName:
+            _sendCurrency = _cachedSendMB;
+            break;
+        }
+      }
+
+      if (_receiveCurrency != null) {
+        _receiveCurrency = await ExchangeDataLoadingService
+            .instance.isar.currencies
+            .where()
+            .exchangeNameEqualTo(exchange.name)
+            .filter()
+            .tickerEqualTo(_receiveCurrency!.ticker)
+            .and()
+            .group((q) => exchangeRateType == ExchangeRateType.fixed
+                ? q
+                    .rateTypeEqualTo(SupportedRateType.both)
+                    .or()
+                    .rateTypeEqualTo(SupportedRateType.fixed)
+                : q
+                    .rateTypeEqualTo(SupportedRateType.both)
+                    .or()
+                    .rateTypeEqualTo(SupportedRateType.estimated))
+            .findFirst();
+      }
+
+      if (_receiveCurrency == null) {
+        switch (exchange.name) {
+          case ChangeNowExchange.exchangeName:
+            _receiveCurrency = _cachedReceivingCN;
+            break;
+          case MajesticBankExchange.exchangeName:
+            _receiveCurrency = _cachedReceivingMB;
+            break;
+        }
+      }
+
+      _updateCachedCurrencies(
+        exchangeName: exchange.name,
+        send: _sendCurrency,
+        receiving: _receiveCurrency,
+      );
+
       await _updateRangesAndEstimate(
         shouldNotifyListeners: false,
       );
@@ -164,6 +236,11 @@ class ExchangeFormState extends ChangeNotifier {
   void setCurrencies(Currency from, Currency to) {
     _sendCurrency = from;
     _receiveCurrency = to;
+    _updateCachedCurrencies(
+      exchangeName: exchange.name,
+      send: _sendCurrency,
+      receiving: _receiveCurrency,
+    );
   }
 
   void reset({
@@ -247,6 +324,12 @@ class ExchangeFormState extends ChangeNotifier {
       _minSendAmount = null;
       _maxSendAmount = null;
 
+      _updateCachedCurrencies(
+        exchangeName: exchange.name,
+        send: _sendCurrency,
+        receiving: _receiveCurrency,
+      );
+
       if (_receiveCurrency == null) {
         _rate = null;
       } else {
@@ -271,6 +354,12 @@ class ExchangeFormState extends ChangeNotifier {
       _minReceiveAmount = null;
       _maxReceiveAmount = null;
 
+      _updateCachedCurrencies(
+        exchangeName: exchange.name,
+        send: _sendCurrency,
+        receiving: _receiveCurrency,
+      );
+
       if (_sendCurrency == null) {
         _rate = null;
       } else {
@@ -302,6 +391,12 @@ class ExchangeFormState extends ChangeNotifier {
     _sendCurrency = receiveCurrency;
     _receiveCurrency = tmp;
 
+    _updateCachedCurrencies(
+      exchangeName: exchange.name,
+      send: _sendCurrency,
+      receiving: _receiveCurrency,
+    );
+
     await _updateRangesAndEstimate(
       shouldNotifyListeners: false,
     );
@@ -442,6 +537,34 @@ class ExchangeFormState extends ChangeNotifier {
   }
 
   //============================================================================
+
+  Currency? _cachedReceivingMB;
+  Currency? _cachedSendMB;
+  Currency? _cachedReceivingCN;
+  Currency? _cachedSendCN;
+
+  void _updateCachedCurrencies({
+    required String exchangeName,
+    required Currency? send,
+    required Currency? receiving,
+  }) {
+    switch (exchangeName) {
+      case ChangeNowExchange.exchangeName:
+        _cachedSendCN = send ?? _cachedSendCN;
+        _cachedReceivingCN = receiving ?? _cachedReceivingCN;
+        break;
+      case MajesticBankExchange.exchangeName:
+        _cachedSendMB = send ?? _cachedSendMB;
+        _cachedReceivingMB = receiving ?? _cachedReceivingMB;
+        break;
+    }
+  }
+
+  void _notify() {
+    debugPrint("ExFState NOTIFY: ${toString()}");
+    notifyListeners();
+  }
+
   @override
   String toString() {
     return "{"
@@ -462,9 +585,4 @@ class ExchangeFormState extends ChangeNotifier {
         "\n\t warning: $warning,"
         "\n}";
   }
-
-  void _notify() {
-    debugPrint("ExFState NOTIFY: ${toString()}");
-    notifyListeners();
-  }
 }
diff --git a/lib/services/exchange/majestic_bank/majestic_bank_exchange.dart b/lib/services/exchange/majestic_bank/majestic_bank_exchange.dart
index 65a0aec5b..ee9075434 100644
--- a/lib/services/exchange/majestic_bank/majestic_bank_exchange.dart
+++ b/lib/services/exchange/majestic_bank/majestic_bank_exchange.dart
@@ -162,7 +162,6 @@ class MajesticBankExchange extends Exchange {
       receiveCurrency: to,
     );
     if (response.value == null) {
-      print("AAAAAAAAAAAAAAAAAAAA ${response.exception}");
       return ExchangeResponse(exception: response.exception);
     }