diff --git a/plugins/exchange_rate.py b/plugins/exchange_rate.py
index 35d0df248..b19e8f9cb 100644
--- a/plugins/exchange_rate.py
+++ b/plugins/exchange_rate.py
@@ -50,7 +50,7 @@ class ExchangeBase:
 
     def get_historical_rates(self, ccy):
         result = self.history.get(ccy)
-        if not result:
+        if not result and ccy in self.history_ccys():
             self.print_error("requesting historical rates for", ccy)
             t = threading.Thread(target=self.historical_rates, args=(ccy,))
             t.setDaemon(True)
@@ -192,6 +192,8 @@ class Plugin(BasePlugin, ThreadJob):
         self.sig.connect(self.sig, SIGNAL('fx_quotes'), self.on_fx_quotes)
         self.sig.connect(self.sig, SIGNAL('fx_history'), self.on_fx_history)
         self.ccy_combo = None
+        self.hist_checkbox = None
+        self.ccy = self.config_ccy()
 
         is_exchange = lambda obj: (inspect.isclass(obj)
                                    and issubclass(obj, ExchangeBase))
@@ -207,9 +209,13 @@ class Plugin(BasePlugin, ThreadJob):
         # This runs from the network thread which catches exceptions
         if self.parent.windows and self.timeout <= time.time():
             self.timeout = time.time() + 150
-            rates = self.exchange.update(self.fiat_unit())
+            rates = self.exchange.update(self.ccy)
             self.refresh_fields()
 
+    def config_ccy(self):
+        '''Use when dynamic fetching is needed'''
+        return self.config.get("currency", "EUR")
+
     def config_exchange(self):
         return self.config.get('use_exchange', 'Blockchain')
 
@@ -252,20 +258,29 @@ class Plugin(BasePlugin, ThreadJob):
     def on_ccy_combo_change(self):
         '''Called when the chosen currency changes'''
         ccy = str(self.ccy_combo.currentText())
-        if ccy != self.fiat_unit():
+        if ccy and ccy != self.ccy:
+            print "Setting:", ccy
+            self.ccy = ccy
             self.config.set_key('currency', ccy, True)
             self.update_status_bars()
             self.get_historical_rates()
-            hist_checkbox_update()
+            self.hist_checkbox_update()
+
+    def hist_checkbox_update(self):
+        if self.hist_checkbox:
+            self.hist_checkbox.setEnabled(self.ccy in self.exchange.history_ccys())
+            self.hist_checkbox.setChecked(self.config_history())
 
     def populate_ccy_combo(self):
         # There should be at most one instance of the settings dialog
         combo = self.ccy_combo
         # NOTE: bool(combo) is False if it is empty.  Nuts.
         if combo is not None:
+            combo.blockSignals(True)
             combo.clear()
-            combo.addItems(self.exchange.quotes.keys())
-            combo.setCurrentIndex(combo.findText(self.fiat_unit()))
+            combo.addItems(sorted(self.exchange.quotes.keys()))
+            combo.blockSignals(False)
+            combo.setCurrentIndex(combo.findText(self.ccy))
 
     def close(self):
         BasePlugin.close(self)
@@ -277,7 +292,7 @@ class Plugin(BasePlugin, ThreadJob):
 
     def exchange_rate(self):
         '''Returns None, or the exchange rate as a Decimal'''
-        rate = self.exchange.quotes.get(self.fiat_unit())
+        rate = self.exchange.quotes.get(self.ccy)
         if rate:
             return Decimal(rate)
 
@@ -316,21 +331,12 @@ class Plugin(BasePlugin, ThreadJob):
         else:
             quote_balance = btc_balance * Decimal(cur_rate)
             self.btc_rate = cur_rate
-            quote_text = "%.2f %s" % (quote_balance, self.fiat_unit())
+            quote_text = "%.2f %s" % (quote_balance, self.ccy)
         return quote_text
 
     def get_historical_rates(self):
         if self.config_history():
-            self.exchange.get_historical_rates(self.fiat_unit())
-
-    def request_historical_rates(self):
-        try:
-            self.history = self.exchange.historical_rates(self.fiat_unit())
-        except Exception:
-            traceback.print_exc(file=sys.stderr)
-            return
-        for window in self.parent.windows:
-            window.need_update.set()
+            self.exchange.get_historical_rates(self.ccy)
 
     def requires_settings(self):
         return True
@@ -355,7 +361,7 @@ class Plugin(BasePlugin, ThreadJob):
         if not date:
             date = timestamp_to_datetime(0)
         for amount in [value, balance]:
-            text = self.historical_value_str(self.fiat_unit(), amount, date)
+            text = self.historical_value_str(self.ccy, amount, date)
             entry.append("%16s" % text)
 
     def settings_widget(self, window):
@@ -374,16 +380,11 @@ class Plugin(BasePlugin, ThreadJob):
         self.ccy_combo.currentIndexChanged.connect(self.on_ccy_combo_change)
         self.populate_ccy_combo()
 
-        def hist_checkbox_update():
-            hist_checkbox.setEnabled(self.fiat_unit() in
-                                     self.exchange.history_ccys())
-            hist_checkbox.setChecked(self.config_history())
-
         def on_change_ex(idx):
             exchange = str(combo_ex.currentText())
             if exchange != self.exchange.name():
                 self.set_exchange(exchange)
-                hist_checkbox_update()
+                self.hist_checkbox_update()
 
         def on_change_hist(checked):
             if checked:
@@ -402,26 +403,22 @@ class Plugin(BasePlugin, ThreadJob):
         combo_ex.setCurrentIndex(combo_ex.findText(self.config_exchange()))
         combo_ex.currentIndexChanged.connect(on_change_ex)
 
-        hist_checkbox = QCheckBox()
-        hist_checkbox_update()
-        hist_checkbox.stateChanged.connect(on_change_hist)
-        combo_ex.connect(d, SIGNAL('refresh_exchanges_combo()'), lambda: set_exchanges(combo_ex))
+        self.hist_checkbox = QCheckBox()
+        self.hist_checkbox.stateChanged.connect(on_change_hist)
+        self.hist_checkbox_update()
 
         ok_button = QPushButton(_("OK"))
         ok_button.clicked.connect(lambda: ok_clicked())
 
         layout.addWidget(self.ccy_combo,1,1)
         layout.addWidget(combo_ex,0,1)
-        layout.addWidget(hist_checkbox,2,1)
+        layout.addWidget(self.hist_checkbox,2,1)
         layout.addWidget(ok_button,3,1)
 
         result = d.exec_()
         self.ccy_combo = None
         return result
 
-    def fiat_unit(self):
-        return self.config.get("currency", "EUR")
-
     def refresh_fields(self):
         '''Update the display at the new rate'''
         for window in self.parent.windows:
@@ -429,13 +426,13 @@ class Plugin(BasePlugin, ThreadJob):
                 field.textEdited.emit(field.text())
 
     def add_send_edit(self, window):
-        window.send_fiat_e = AmountEdit(self.fiat_unit)
+        window.send_fiat_e = AmountEdit(self.config_ccy)
         self.connect_fields(window, True)
         window.send_grid.addWidget(window.send_fiat_e, 4, 3, Qt.AlignHCenter)
         window.amount_e.frozen.connect(lambda: window.send_fiat_e.setFrozen(window.amount_e.isReadOnly()))
 
     def add_receive_edit(self, window):
-        window.receive_fiat_e = AmountEdit(self.fiat_unit)
+        window.receive_fiat_e = AmountEdit(self.config_ccy)
         self.connect_fields(window, False)
         window.receive_grid.addWidget(window.receive_fiat_e, 2, 3, Qt.AlignHCenter)