     /// `Network` there will be `SystemEvent` which can be used by the App to create a
     /// `WalletManager`
     ///
-    /// @Note: This should only be called one.
-    ///
-    public func configure () {
+    /// - 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)

                            let defaults = System.defaultCurrencies
                                .filter { $0.blockchainID == blockchainModel.id }

                            let currencyModels = try! currencyResult
                                // On success, always merge `defaultCurrencies`
                                .map { $0.unionOf (defaults) { $0.id }}
                                // On error, use `defaults`
                                .recover { (error: BlockChainDB.QueryError) -> [BlockChainDB.Model.Currency] in
                                    return defaults
                                }.get()

                            var associations: [Currency : Network.Association] = [:]


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

    private 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:
