diff --git a/lib/di.dart b/lib/di.dart
index aac1bfa24..f038a5d02 100644
--- a/lib/di.dart
+++ b/lib/di.dart
@@ -222,10 +222,10 @@ Future setup(
           addressEditOrCreateViewModel:
               getIt.get<WalletAddressEditOrCreateViewModel>(param1: item)));
 
-  // getIt.get<SendTemplateStore>()
   getIt.registerFactory<SendViewModel>(() => SendViewModel(
       getIt.get<AppStore>().wallet,
       getIt.get<AppStore>().settingsStore,
+      getIt.get<SendTemplateStore>(),
       getIt.get<FiatConversionStore>()));
 
   getIt.registerFactory(
@@ -318,10 +318,10 @@ Future setup(
       () => NodeCreateOrEditPage(getIt.get<NodeCreateOrEditViewModel>()));
 
   getIt.registerFactory(() => ExchangeViewModel(
-      wallet: getIt.get<AppStore>().wallet,
-      exchangeTemplateStore: getIt.get<ExchangeTemplateStore>(),
-      trades: tradesSource,
-      tradesStore: getIt.get<TradesStore>()));
+      getIt.get<AppStore>().wallet,
+      tradesSource,
+      getIt.get<ExchangeTemplateStore>(),
+      getIt.get<TradesStore>()));
 
   getIt.registerFactory(() => ExchangeTradeViewModel(
       wallet: getIt.get<AppStore>().wallet,
diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart
index ab154a98d..bf587776f 100644
--- a/lib/src/screens/exchange/exchange_page.dart
+++ b/lib/src/screens/exchange/exchange_page.dart
@@ -307,8 +307,7 @@ class ExchangePage extends BasePage {
                                 ),
                                 Observer(builder: (_) {
                                   final templates = exchangeViewModel.templates;
-                                  final itemCount =
-                                      exchangeViewModel.templates.length;
+                                  final itemCount = templates.length;
 
                                   return ListView.builder(
                                       scrollDirection: Axis.horizontal,
@@ -338,24 +337,22 @@ class ExchangePage extends BasePage {
                                                       alertContent: S
                                                           .of(context)
                                                           .confirm_delete_template,
-                                                      leftButtonText:
-                                                          S.of(context).delete,
                                                       rightButtonText:
+                                                          S.of(context).delete,
+                                                      leftButtonText:
                                                           S.of(context).cancel,
-                                                      actionLeftButton: () {
+                                                      actionRightButton: () {
                                                         Navigator.of(
                                                                 dialogContext)
                                                             .pop();
                                                         exchangeViewModel
-                                                            .exchangeTemplateStore
-                                                            .remove(
+                                                            .removeTemplate(
                                                                 template:
                                                                     template);
                                                         exchangeViewModel
-                                                            .exchangeTemplateStore
-                                                            .update();
+                                                            .updateTemplate();
                                                       },
-                                                      actionRightButton: () =>
+                                                      actionLeftButton: () =>
                                                           Navigator.of(
                                                                   dialogContext)
                                                               .pop());
diff --git a/lib/src/screens/exchange/exchange_template_page.dart b/lib/src/screens/exchange/exchange_template_page.dart
index 85ea1f280..c68efc473 100644
--- a/lib/src/screens/exchange/exchange_template_page.dart
+++ b/lib/src/screens/exchange/exchange_template_page.dart
@@ -134,6 +134,7 @@ class ExchangeTemplatePage extends BasePage {
                           initialIsAddressEditable: exchangeViewModel
                               .isDepositAddressEnabled,
                           isAmountEstimated: false,
+                          hasRefundAddress: true,
                           currencies: CryptoCurrency.all,
                           onCurrencySelected: (currency) =>
                               exchangeViewModel.changeDepositCurrency(
@@ -220,7 +221,7 @@ class ExchangeTemplatePage extends BasePage {
                 PrimaryButton(
                     onPressed: () {
                       if (_formKey.currentState.validate()) {
-                        exchangeViewModel.exchangeTemplateStore.addTemplate(
+                        exchangeViewModel.addTemplate(
                             amount: exchangeViewModel.depositAmount,
                             depositCurrency:
                             exchangeViewModel.depositCurrency.toString(),
@@ -229,7 +230,7 @@ class ExchangeTemplatePage extends BasePage {
                             provider: exchangeViewModel.provider.toString(),
                             depositAddress: exchangeViewModel.depositAddress,
                             receiveAddress: exchangeViewModel.receiveAddress);
-                        exchangeViewModel.exchangeTemplateStore.update();
+                        exchangeViewModel.updateTemplate();
                         Navigator.of(context).pop();
                       }
                     },
diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart
index cc0a9d0ba..811d940dd 100644
--- a/lib/src/screens/send/send_page.dart
+++ b/lib/src/screens/send/send_page.dart
@@ -1,7 +1,9 @@
 import 'dart:ui';
 import 'package:cake_wallet/entities/transaction_priority.dart';
+import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
 import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
 import 'package:cake_wallet/src/widgets/picker.dart';
+import 'package:cake_wallet/src/widgets/template_tile.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
@@ -416,53 +418,53 @@ class SendPage extends BasePage {
                                   )),
                             ),
                           ),
-                          // Observer(
-                          //     builder: (_) {
-                          //       final templates = sendViewModel.templates;
-                          //       final itemCount = templates.length;
+                           Observer(
+                               builder: (_) {
+                                 final templates = sendViewModel.templates;
+                                 final itemCount = templates.length;
 
-                          //       return ListView.builder(
-                          //           scrollDirection: Axis.horizontal,
-                          //           shrinkWrap: true,
-                          //           physics: NeverScrollableScrollPhysics(),
-                          //           itemCount: itemCount,
-                          //           itemBuilder: (context, index) {
-                          //             final template = templates[index];
+                                 return ListView.builder(
+                                     scrollDirection: Axis.horizontal,
+                                     shrinkWrap: true,
+                                     physics: NeverScrollableScrollPhysics(),
+                                     itemCount: itemCount,
+                                     itemBuilder: (context, index) {
+                                       final template = templates[index];
 
-                          //             return TemplateTile(
-                          //               key: UniqueKey(),
-                          //               to: template.name,
-                          //               amount: template.amount,
-                          //               from: template.cryptoCurrency,
-                          //               onTap: () {
-                          //                 _addressController.text = template.address;
-                          //                 _cryptoAmountController.text = template.amount;
-                          //                 getOpenaliasRecord(context);
-                          //               },
-                          //               onRemove: () {
-                          //                 showPopUp<void>(
-                          //                     context: context,
-                          //                     builder: (dialogContext) {
-                          //                       return AlertWithTwoActions(
-                          //                           alertTitle: S.of(context).template,
-                          //                           alertContent: S.of(context).confirm_delete_template,
-                          //                           leftButtonText: S.of(context).delete,
-                          //                           rightButtonText: S.of(context).cancel,
-                          //                           actionLeftButton: () {
-                          //                             Navigator.of(dialogContext).pop();
-                          //                             sendViewModel.sendTemplateStore.remove(template: template);
-                          //                             sendViewModel.sendTemplateStore.update();
-                          //                           },
-                          //                           actionRightButton: () => Navigator.of(dialogContext).pop()
-                          //                       );
-                          //                     }
-                          //                 );
-                          //               },
-                          //             );
-                          //           }
-                          //       );
-                          //     }
-                          // )
+                                       return TemplateTile(
+                                         key: UniqueKey(),
+                                         to: template.name,
+                                         amount: template.amount,
+                                         from: template.cryptoCurrency,
+                                         onTap: () {
+                                           _addressController.text = template.address;
+                                           _cryptoAmountController.text = template.amount;
+                                           getOpenaliasRecord(context);
+                                         },
+                                         onRemove: () {
+                                           showPopUp<void>(
+                                               context: context,
+                                               builder: (dialogContext) {
+                                                 return AlertWithTwoActions(
+                                                     alertTitle: S.of(context).template,
+                                                     alertContent: S.of(context).confirm_delete_template,
+                                                     rightButtonText: S.of(context).delete,
+                                                     leftButtonText: S.of(context).cancel,
+                                                     actionRightButton: () {
+                                                       Navigator.of(dialogContext).pop();
+                                                       sendViewModel.removeTemplate(template: template);
+                                                       sendViewModel.updateTemplate();
+                                                     },
+                                                     actionLeftButton: () => Navigator.of(dialogContext).pop()
+                                                 );
+                                               }
+                                           );
+                                         },
+                                       );
+                                     }
+                                 );
+                               }
+                           )
                         ],
                       ),
                     ),
@@ -507,6 +509,14 @@ class SendPage extends BasePage {
       }
     });
 
+    _fiatAmountController.addListener(() {
+      final amount = _fiatAmountController.text;
+
+      if (amount != sendViewModel.fiatAmount) {
+        sendViewModel.setFiatAmount(amount);
+      }
+    });
+
     reaction((_) => sendViewModel.sendAll, (bool all) {
       if (all) {
         _cryptoAmountController.text = S.current.all;
diff --git a/lib/src/screens/send/send_template_page.dart b/lib/src/screens/send/send_template_page.dart
index fcda9b7af..37708fcb2 100644
--- a/lib/src/screens/send/send_template_page.dart
+++ b/lib/src/screens/send/send_template_page.dart
@@ -134,7 +134,7 @@ class SendTemplatePage extends BasePage {
                                   signed: false, decimal: true),
                               inputFormatters: [
                                 BlacklistingTextInputFormatter(
-                                    RegExp('[\\-|\\ |\\,]'))
+                                    RegExp('[\\-|\\ ]'))
                               ],
                               prefixIcon: Padding(
                                 padding: EdgeInsets.only(top: 9),
@@ -172,7 +172,7 @@ class SendTemplatePage extends BasePage {
                               signed: false, decimal: true),
                           inputFormatters: [
                             BlacklistingTextInputFormatter(
-                                RegExp('[\\-|\\ |\\,]'))
+                                RegExp('[\\-|\\ ]'))
                           ],
                           prefixIcon: Padding(
                             padding: EdgeInsets.only(top: 9),
@@ -210,12 +210,12 @@ class SendTemplatePage extends BasePage {
         bottomSection: PrimaryButton(
             onPressed: () {
               if (_formKey.currentState.validate()) {
-                // sendViewModel.sendTemplateStore.addTemplate(
-                //     name: _nameController.text,
-                //     address: _addressController.text,
-                //     cryptoCurrency: sendViewModel.currency.title,
-                //     amount: _cryptoAmountController.text);
-                // sendViewModel.sendTemplateStore.update();
+                sendViewModel.addTemplate(
+                     name: _nameController.text,
+                     address: _addressController.text,
+                     cryptoCurrency: sendViewModel.currency.title,
+                     amount: _cryptoAmountController.text);
+                sendViewModel.updateTemplate();
                 Navigator.of(context).pop();
               }
             },
@@ -249,6 +249,22 @@ class SendTemplatePage extends BasePage {
       }
     });
 
+    _cryptoAmountController.addListener(() {
+      final amount = _cryptoAmountController.text;
+
+      if (amount != sendViewModel.cryptoAmount) {
+        sendViewModel.setCryptoAmount(amount);
+      }
+    });
+
+    _fiatAmountController.addListener(() {
+      final amount = _fiatAmountController.text;
+
+      if (amount != sendViewModel.fiatAmount) {
+        sendViewModel.setFiatAmount(amount);
+      }
+    });
+
     _addressController.addListener(() {
       final address = _addressController.text;
 
diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart
index caca84b83..b6efa310f 100644
--- a/lib/view_model/exchange/exchange_view_model.dart
+++ b/lib/view_model/exchange/exchange_view_model.dart
@@ -27,10 +27,10 @@ class ExchangeViewModel = ExchangeViewModelBase with _$ExchangeViewModel;
 
 abstract class ExchangeViewModelBase with Store {
   ExchangeViewModelBase(
-      {this.wallet,
+      this.wallet,
       this.trades,
-      this.exchangeTemplateStore,
-      this.tradesStore}) {
+      this._exchangeTemplateStore,
+      this.tradesStore) {
     providerList = [
       XMRTOExchangeProvider(),
       ChangeNowExchangeProvider(),
@@ -54,7 +54,7 @@ abstract class ExchangeViewModelBase with Store {
 
   final WalletBase wallet;
   final Box<Trade> trades;
-  final ExchangeTemplateStore exchangeTemplateStore;
+  final ExchangeTemplateStore _exchangeTemplateStore;
   final TradesStore tradesStore;
 
   @observable
@@ -101,7 +101,7 @@ abstract class ExchangeViewModelBase with Store {
 
   @computed
   ObservableList<ExchangeTemplate> get templates =>
-      exchangeTemplateStore.templates;
+      _exchangeTemplateStore.templates;
 
   @action
   void changeProvider({ExchangeProvider provider}) {
@@ -267,6 +267,22 @@ abstract class ExchangeViewModelBase with Store {
     _onPairChange();
   }
 
+  void updateTemplate() => _exchangeTemplateStore.update();
+
+  void addTemplate({String amount, String depositCurrency, String receiveCurrency,
+    String provider, String depositAddress, String receiveAddress}) =>
+    _exchangeTemplateStore.addTemplate(
+      amount: amount,
+      depositCurrency: depositCurrency,
+      receiveCurrency: receiveCurrency,
+      provider: provider,
+      depositAddress: depositAddress,
+      receiveAddress: receiveAddress
+    );
+
+  void removeTemplate({ExchangeTemplate template}) =>
+    _exchangeTemplateStore.remove(template: template);
+
   List<ExchangeProvider> providersForCurrentPair() {
     return _providersForPair(from: depositCurrency, to: receiveCurrency);
   }
diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart
index eb4ec2f4a..3cdcc7bb2 100644
--- a/lib/view_model/send/send_view_model.dart
+++ b/lib/view_model/send/send_view_model.dart
@@ -1,4 +1,6 @@
 import 'package:cake_wallet/entities/openalias_record.dart';
+import 'package:cake_wallet/entities/template.dart';
+import 'package:cake_wallet/store/templates/send_template_store.dart';
 import 'package:intl/intl.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/core/template_validator.dart';
@@ -29,7 +31,8 @@ class SendViewModel = SendViewModelBase with _$SendViewModel;
 
 abstract class SendViewModelBase with Store {
   SendViewModelBase(
-      this._wallet, this._settingsStore, this._fiatConversationStore)
+      this._wallet, this._settingsStore, this._sendTemplateStore,
+      this._fiatConversationStore)
       : state = InitialExecutionState(),
         _cryptoNumberFormat = NumberFormat(),
         sendAll = false {
@@ -88,8 +91,12 @@ abstract class SendViewModelBase with Store {
   @computed
   bool get isReadyForSend => _wallet.syncStatus is SyncedSyncStatus;
 
+  @computed
+  ObservableList<Template> get templates => _sendTemplateStore.templates;
+
   final WalletBase _wallet;
   final SettingsStore _settingsStore;
+  final SendTemplateStore _sendTemplateStore;
   final FiatConversionStore _fiatConversationStore;
   final NumberFormat _cryptoNumberFormat;
 
@@ -219,4 +226,17 @@ abstract class SendViewModelBase with Store {
 
     _cryptoNumberFormat.maximumFractionDigits = maximumFractionDigits;
   }
+
+  void updateTemplate() => _sendTemplateStore.update();
+
+  void addTemplate({String name, String address, String cryptoCurrency,
+    String amount}) => _sendTemplateStore
+      .addTemplate(
+         name: name,
+         address: address,
+         cryptoCurrency: cryptoCurrency,
+         amount: amount);
+
+  void removeTemplate({Template template}) =>
+      _sendTemplateStore.remove(template: template);
 }