                             let defaults = System.defaultCurrencies
                                 .filter { $0.blockchainID == blockchainModel.id }
 
-                            let currencyModels = try! currencyResult
-                                // On success, always merge `defaultCurrencies`
+                            // Find applicable application currencies by `blockchainID`
+                            let apps = applicationCurrencies
+                                .filter { $0.blockchainID == blockchainModel.id }
+
+                            // Merge in `defaults` with the result; but, on error, use apps
+                            let currencyModels = currencyResult
+                                // On success, always merge `default` INTO the result.  We merge
+                                // into `result` to always bias to the blockchainDB result.
                                 .map { $0.unionOf (defaults) { $0.id }}
-                                // On error, use `defaults`
-                                .recover { (error: BlockChainDB.QueryError) -> [BlockChainDB.Model.Currency] in
-                                    return defaults
-                                }.get()
+
+                                // On error, use `apps` merged INTO defaults.  We merge into
+                                // `defaults` to ensure that we get BTC, BCH, ETH, BRD and that
+                                // they are correct (don't rely on the App).
+                                .getWithRecovery { (_) in return defaults.unionOf(apps) { $0.id } }
 
                             var associations: [Currency : Network.Association] = [:]
 

        managers.forEach { $0.disconnect() }
    }

    public func configureMergeBlockchains (builtin: [BlockChainDB.Model.Blockchain],
                                           remote:  [BlockChainDB.Model.Blockchain]) -> [BlockChainDB.Model.Blockchain] {
        // Both `builtin` and `remote` have a non-null blockHeight -> supported.

        // For existing remotes:

    /// `Network` there will be `SystemEvent` which can be used by the App to create a
    /// `WalletManager`
    ///
    /// - Parameter applicationCurrencies: If the BlockChainDB does not return any currencies, then
    ///     use `applicationCurrencies` merged into the deafults.  Appropriate currencies can be
    ///     created from `System::asBlockChainDBModelCurrency` (see below)
    ///
    public func configure (withCurrencyModels applicationCurrencies: [BlockChainDB.Model.Currency]) {
        func currencyDenominationToBaseUnit (currency: Currency, model: BlockChainDB.Model.CurrencyDenomination) -> Unit {
            let uids = "\(currency.uids):\(model.code)"
            return Unit (currency: currency, uids: uids, name: model.name, symbol: model.symbol)
