diff --git a/assets/gif/coins/bitcoin/kiss.gif b/assets/gif/coins/bitcoin/kiss.gif
index 8649f857d..4c645a8c2 100644
Binary files a/assets/gif/coins/bitcoin/kiss.gif and b/assets/gif/coins/bitcoin/kiss.gif differ
diff --git a/assets/gif/coins/bitcoin/plain.gif b/assets/gif/coins/bitcoin/plain.gif
index 5f3680219..f2fce4f49 100644
Binary files a/assets/gif/coins/bitcoin/plain.gif and b/assets/gif/coins/bitcoin/plain.gif differ
diff --git a/assets/gif/coins/bitcoincash/kiss.gif b/assets/gif/coins/bitcoincash/kiss.gif
index bbd5924b1..97013d1a1 100644
Binary files a/assets/gif/coins/bitcoincash/kiss.gif and b/assets/gif/coins/bitcoincash/kiss.gif differ
diff --git a/assets/gif/coins/bitcoincash/plain.gif b/assets/gif/coins/bitcoincash/plain.gif
index 4c8d29c77..1d764d132 100644
Binary files a/assets/gif/coins/bitcoincash/plain.gif and b/assets/gif/coins/bitcoincash/plain.gif differ
diff --git a/assets/gif/coins/dogecoin/kiss.gif b/assets/gif/coins/dogecoin/kiss.gif
index d0f1ffba4..1c0a7f57c 100644
Binary files a/assets/gif/coins/dogecoin/kiss.gif and b/assets/gif/coins/dogecoin/kiss.gif differ
diff --git a/assets/gif/coins/dogecoin/plain.gif b/assets/gif/coins/dogecoin/plain.gif
index 9ce1fbb7a..19ac9c474 100644
Binary files a/assets/gif/coins/dogecoin/plain.gif and b/assets/gif/coins/dogecoin/plain.gif differ
diff --git a/assets/gif/coins/epicCash/kiss.gif b/assets/gif/coins/epicCash/kiss.gif
index ef8f27fab..2b71c1291 100644
Binary files a/assets/gif/coins/epicCash/kiss.gif and b/assets/gif/coins/epicCash/kiss.gif differ
diff --git a/assets/gif/coins/epicCash/plain.gif b/assets/gif/coins/epicCash/plain.gif
index 4a05889af..3ad6ef13d 100644
Binary files a/assets/gif/coins/epicCash/plain.gif and b/assets/gif/coins/epicCash/plain.gif differ
diff --git a/assets/gif/coins/ethereum/kiss.gif b/assets/gif/coins/ethereum/kiss.gif
index 712834662..1399368e7 100644
Binary files a/assets/gif/coins/ethereum/kiss.gif and b/assets/gif/coins/ethereum/kiss.gif differ
diff --git a/assets/gif/coins/ethereum/plain.gif b/assets/gif/coins/ethereum/plain.gif
index 0da0eeb64..040f643ce 100644
Binary files a/assets/gif/coins/ethereum/plain.gif and b/assets/gif/coins/ethereum/plain.gif differ
diff --git a/assets/gif/coins/firo/kiss.gif b/assets/gif/coins/firo/kiss.gif
index 0225077db..b969feae5 100644
Binary files a/assets/gif/coins/firo/kiss.gif and b/assets/gif/coins/firo/kiss.gif differ
diff --git a/assets/gif/coins/firo/plain.gif b/assets/gif/coins/firo/plain.gif
index 3d2f9b620..535098f46 100644
Binary files a/assets/gif/coins/firo/plain.gif and b/assets/gif/coins/firo/plain.gif differ
diff --git a/assets/gif/coins/litecoin/kiss.gif b/assets/gif/coins/litecoin/kiss.gif
index 68272d06d..2e0ed64d4 100644
Binary files a/assets/gif/coins/litecoin/kiss.gif and b/assets/gif/coins/litecoin/kiss.gif differ
diff --git a/assets/gif/coins/litecoin/plain.gif b/assets/gif/coins/litecoin/plain.gif
index 5c12d94bf..0a1d55170 100644
Binary files a/assets/gif/coins/litecoin/plain.gif and b/assets/gif/coins/litecoin/plain.gif differ
diff --git a/assets/gif/coins/monero/kiss.gif b/assets/gif/coins/monero/kiss.gif
index b54fb2096..173bc8f9c 100644
Binary files a/assets/gif/coins/monero/kiss.gif and b/assets/gif/coins/monero/kiss.gif differ
diff --git a/assets/gif/coins/monero/plain.gif b/assets/gif/coins/monero/plain.gif
index 5090eefc2..7d93c50c8 100644
Binary files a/assets/gif/coins/monero/plain.gif and b/assets/gif/coins/monero/plain.gif differ
diff --git a/assets/gif/coins/namecoin/kiss.gif b/assets/gif/coins/namecoin/kiss.gif
index 10b74b356..5d773fa4c 100644
Binary files a/assets/gif/coins/namecoin/kiss.gif and b/assets/gif/coins/namecoin/kiss.gif differ
diff --git a/assets/gif/coins/namecoin/plain.gif b/assets/gif/coins/namecoin/plain.gif
index 954fa0046..f08720983 100644
Binary files a/assets/gif/coins/namecoin/plain.gif and b/assets/gif/coins/namecoin/plain.gif differ
diff --git a/assets/gif/coins/particl/kiss.gif b/assets/gif/coins/particl/kiss.gif
index 0cc80c1c8..da138ea07 100644
Binary files a/assets/gif/coins/particl/kiss.gif and b/assets/gif/coins/particl/kiss.gif differ
diff --git a/assets/gif/coins/particl/plain.gif b/assets/gif/coins/particl/plain.gif
index 99d36ef9c..adba9b545 100644
Binary files a/assets/gif/coins/particl/plain.gif and b/assets/gif/coins/particl/plain.gif differ
diff --git a/assets/gif/coins/wownero/kiss.gif b/assets/gif/coins/wownero/kiss.gif
index 16c1c1fdc..e3fd05fa3 100644
Binary files a/assets/gif/coins/wownero/kiss.gif and b/assets/gif/coins/wownero/kiss.gif differ
diff --git a/assets/gif/coins/wownero/plain.gif b/assets/gif/coins/wownero/plain.gif
index 0c30a857f..fd498a875 100644
Binary files a/assets/gif/coins/wownero/plain.gif and b/assets/gif/coins/wownero/plain.gif differ
diff --git a/assets/gif/stacy-plain.gif b/assets/gif/stacy-plain.gif
new file mode 100644
index 000000000..8fde2db6f
Binary files /dev/null and b/assets/gif/stacy-plain.gif differ
diff --git a/assets/svg/darkChansTheme.svg b/assets/svg/darkChansTheme.svg
new file mode 100644
index 000000000..5bcca42fd
--- /dev/null
+++ b/assets/svg/darkChansTheme.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 200 162" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
+    <defs>
+        <image id="_Image1" width="200px" height="162px" xlink:href="data:image/png;base64,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"/>
+    </defs>
+    <use id="Background" xlink:href="#_Image1" x="0" y="0" width="200px" height="162px"/>
+</svg>
diff --git a/assets/svg/oled-black-theme.svg b/assets/svg/oled-black-theme.svg
index 27cd50638..d52469e4b 100644
--- a/assets/svg/oled-black-theme.svg
+++ b/assets/svg/oled-black-theme.svg
@@ -1,23 +1,23 @@
 <svg width="200" height="162" viewBox="0 0 200 162" fill="none" xmlns="http://www.w3.org/2000/svg">
-<g clip-path="url(#clip0_489_21263)">
-<rect width="200" height="162" rx="8" fill="black"/>
-<rect x="10" y="10" width="180" height="20" rx="2" fill="#77A7F9"/>
+<g clip-path="url(#clip0_622_21287)">
+<rect width="200" height="162" rx="8" fill="#121212"/>
+<rect x="10" y="10" width="180" height="20" rx="2" fill="#F26822"/>
 <rect x="16" y="16" width="106" height="8" rx="1" fill="black"/>
-<rect x="10" y="40" width="180" height="20" rx="2" fill="#212F46"/>
-<rect x="16" y="46" width="106" height="8" rx="1" fill="black"/>
-<rect x="10" y="62" width="180" height="20" rx="2" fill="#212F46"/>
-<rect x="16" y="68" width="106" height="8" rx="1" fill="black"/>
-<rect x="10" y="84" width="180" height="20" rx="2" fill="#212F46"/>
-<rect x="16" y="90" width="106" height="8" rx="1" fill="black"/>
-<rect x="10" y="106" width="180" height="20" rx="2" fill="#212F46"/>
-<rect x="16" y="112" width="106" height="8" rx="1" fill="black"/>
-<rect x="10" y="128" width="180" height="20" rx="2" fill="#212F46"/>
-<rect x="16" y="134" width="106" height="8" rx="1" fill="black"/>
-<rect x="10" y="150" width="180" height="20" rx="2" fill="#212F46"/>
-<rect x="16" y="156" width="106" height="8" rx="1" fill="black"/>
+<rect x="10" y="40" width="180" height="20" rx="2" fill="#303030"/>
+<rect x="16" y="46" width="106" height="8" rx="1" fill="#121212"/>
+<rect x="10" y="62" width="180" height="20" rx="2" fill="#303030"/>
+<rect x="16" y="68" width="106" height="8" rx="1" fill="#121212"/>
+<rect x="10" y="84" width="180" height="20" rx="2" fill="#303030"/>
+<rect x="16" y="90" width="106" height="8" rx="1" fill="#121212"/>
+<rect x="10" y="106" width="180" height="20" rx="2" fill="#303030"/>
+<rect x="16" y="112" width="106" height="8" rx="1" fill="#121212"/>
+<rect x="10" y="128" width="180" height="20" rx="2" fill="#303030"/>
+<rect x="16" y="134" width="106" height="8" rx="1" fill="#121212"/>
+<rect x="10" y="150" width="180" height="20" rx="2" fill="#303030"/>
+<rect x="16" y="156" width="106" height="8" rx="1" fill="#121212"/>
 </g>
 <defs>
-<clipPath id="clip0_489_21263">
+<clipPath id="clip0_622_21287">
 <rect width="200" height="162" rx="8" fill="white"/>
 </clipPath>
 </defs>
diff --git a/lib/db/hive/db.dart b/lib/db/hive/db.dart
index 9f73a4962..1efa94cb2 100644
--- a/lib/db/hive/db.dart
+++ b/lib/db/hive/db.dart
@@ -31,7 +31,7 @@ class DB {
   static const String boxNameWalletsToDeleteOnStart = "walletsToDeleteOnStart";
   static const String boxNamePriceCache = "priceAPIPrice24hCache";
   static const String boxNameDBInfo = "dbInfo";
-  static const String boxNameTheme = "theme";
+  // static const String boxNameTheme = "theme";
   static const String boxNameDesktopData = "desktopData";
   static const String boxNameBuys = "buysBox";
 
diff --git a/lib/main.dart b/lib/main.dart
index 24184cf4b..6519a6596 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -56,15 +56,9 @@ import 'package:stackwallet/utilities/db_version_migration.dart';
 import 'package:stackwallet/utilities/enums/backup_frequency_type.dart';
 import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart';
 import 'package:stackwallet/utilities/logger.dart';
+import 'package:stackwallet/utilities/prefs.dart';
 import 'package:stackwallet/utilities/stack_file_system.dart';
-import 'package:stackwallet/utilities/theme/chan_colors.dart';
 import 'package:stackwallet/utilities/theme/color_theme.dart';
-import 'package:stackwallet/utilities/theme/dark_colors.dart';
-import 'package:stackwallet/utilities/theme/forest_colors.dart';
-import 'package:stackwallet/utilities/theme/fruit_sorbet_colors.dart';
-import 'package:stackwallet/utilities/theme/light_colors.dart';
-import 'package:stackwallet/utilities/theme/ocean_breeze_colors.dart';
-import 'package:stackwallet/utilities/theme/oled_black_colors.dart';
 import 'package:stackwallet/utilities/theme/stack_colors.dart';
 import 'package:stackwallet/utilities/util.dart';
 import 'package:window_size/window_size.dart';
@@ -160,6 +154,8 @@ void main() async {
       (await StackFileSystem.applicationHiveDirectory()).path);
 
   await Hive.openBox<dynamic>(DB.boxNameDBInfo);
+  await Hive.openBox<dynamic>(DB.boxNamePrefs);
+  await Prefs.instance.init();
 
   // Desktop migrate handled elsewhere (currently desktop_login_view.dart)
   if (!Util.isDesktop) {
@@ -185,8 +181,6 @@ void main() async {
   monero.onStartup();
   wownero.onStartup();
 
-  await Hive.openBox<dynamic>(DB.boxNameTheme);
-
   // SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
   //     overlays: [SystemUiOverlay.bottom]);
   await NotificationApi.init();
@@ -334,33 +328,27 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme>
 
   @override
   void initState() {
-    final colorScheme = DB.instance
-        .get<dynamic>(boxName: DB.boxNameTheme, key: "colorScheme") as String?;
-
     StackColorTheme colorTheme;
-    switch (colorScheme) {
-      case "dark":
-        colorTheme = DarkColors();
-        break;
-      case "oledBlack":
-        colorTheme = OledBlackColors();
-        break;
-      case "oceanBreeze":
-        colorTheme = OceanBreezeColors();
-        break;
-      case "fruitSorbet":
-        colorTheme = FruitSorbetColors();
-        break;
-      case "forest":
-        colorTheme = ForestColors();
-        break;
-      case "chan":
-        colorTheme = ChanColors();
-        break;
-      case "light":
-      default:
-        colorTheme = LightColors();
+    if (ref.read(prefsChangeNotifierProvider).enableSystemBrightness) {
+      final brightness = WidgetsBinding.instance.window.platformBrightness;
+      switch (brightness) {
+        case Brightness.dark:
+          colorTheme = ref
+              .read(prefsChangeNotifierProvider)
+              .systemBrightnessDarkTheme
+              .colorTheme;
+          break;
+        case Brightness.light:
+          colorTheme = ref
+              .read(prefsChangeNotifierProvider)
+              .systemBrightnessLightTheme
+              .colorTheme;
+          break;
+      }
+    } else {
+      colorTheme = ref.read(prefsChangeNotifierProvider).theme.colorTheme;
     }
+
     loadingCompleter = Completer();
     WidgetsBinding.instance.addObserver(this);
     // load locale and prefs
@@ -389,6 +377,31 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme>
       }
     });
 
+    WidgetsBinding.instance.window.onPlatformBrightnessChanged = () {
+      StackColorTheme colorTheme;
+      switch (WidgetsBinding.instance.window.platformBrightness) {
+        case Brightness.dark:
+          colorTheme = ref
+              .read(prefsChangeNotifierProvider)
+              .systemBrightnessDarkTheme
+              .colorTheme;
+          break;
+        case Brightness.light:
+          colorTheme = ref
+              .read(prefsChangeNotifierProvider)
+              .systemBrightnessLightTheme
+              .colorTheme;
+          break;
+      }
+
+      WidgetsBinding.instance.addPostFrameCallback((_) {
+        if (ref.read(prefsChangeNotifierProvider).enableSystemBrightness) {
+          ref.read(colorThemeProvider.notifier).state =
+              StackColors.fromStackColorTheme(colorTheme);
+        }
+      });
+    };
+
     super.initState();
   }
 
diff --git a/lib/models/isar/models/address_label.dart b/lib/models/isar/models/address_label.dart
index f3efa8acf..9988c83c0 100644
--- a/lib/models/isar/models/address_label.dart
+++ b/lib/models/isar/models/address_label.dart
@@ -8,6 +8,7 @@ class AddressLabel {
     required this.walletId,
     required this.addressString,
     required this.value,
+    required this.tags,
   });
 
   Id id = Isar.autoIncrement;
@@ -20,11 +21,14 @@ class AddressLabel {
 
   late final String value;
 
-  AddressLabel copyWith({String? label, Id? id}) {
+  late final List<String>? tags;
+
+  AddressLabel copyWith({String? label, Id? id, List<String>? tags}) {
     final addressLabel = AddressLabel(
       walletId: walletId,
       addressString: addressString,
       value: label ?? value,
+      tags: tags ?? this.tags,
     );
     addressLabel.id = id ?? this.id;
     return addressLabel;
diff --git a/lib/models/isar/models/address_label.g.dart b/lib/models/isar/models/address_label.g.dart
index 1cd21f035..2a6b41e70 100644
--- a/lib/models/isar/models/address_label.g.dart
+++ b/lib/models/isar/models/address_label.g.dart
@@ -22,13 +22,18 @@ const AddressLabelSchema = CollectionSchema(
       name: r'addressString',
       type: IsarType.string,
     ),
-    r'value': PropertySchema(
+    r'tags': PropertySchema(
       id: 1,
+      name: r'tags',
+      type: IsarType.stringList,
+    ),
+    r'value': PropertySchema(
+      id: 2,
       name: r'value',
       type: IsarType.string,
     ),
     r'walletId': PropertySchema(
-      id: 2,
+      id: 3,
       name: r'walletId',
       type: IsarType.string,
     )
@@ -86,6 +91,18 @@ int _addressLabelEstimateSize(
 ) {
   var bytesCount = offsets.last;
   bytesCount += 3 + object.addressString.length * 3;
+  {
+    final list = object.tags;
+    if (list != null) {
+      bytesCount += 3 + list.length * 3;
+      {
+        for (var i = 0; i < list.length; i++) {
+          final value = list[i];
+          bytesCount += value.length * 3;
+        }
+      }
+    }
+  }
   bytesCount += 3 + object.value.length * 3;
   bytesCount += 3 + object.walletId.length * 3;
   return bytesCount;
@@ -98,8 +115,9 @@ void _addressLabelSerialize(
   Map<Type, List<int>> allOffsets,
 ) {
   writer.writeString(offsets[0], object.addressString);
-  writer.writeString(offsets[1], object.value);
-  writer.writeString(offsets[2], object.walletId);
+  writer.writeStringList(offsets[1], object.tags);
+  writer.writeString(offsets[2], object.value);
+  writer.writeString(offsets[3], object.walletId);
 }
 
 AddressLabel _addressLabelDeserialize(
@@ -110,8 +128,9 @@ AddressLabel _addressLabelDeserialize(
 ) {
   final object = AddressLabel(
     addressString: reader.readString(offsets[0]),
-    value: reader.readString(offsets[1]),
-    walletId: reader.readString(offsets[2]),
+    tags: reader.readStringList(offsets[1]),
+    value: reader.readString(offsets[2]),
+    walletId: reader.readString(offsets[3]),
   );
   object.id = id;
   return object;
@@ -127,9 +146,11 @@ P _addressLabelDeserializeProp<P>(
     case 0:
       return (reader.readString(offset)) as P;
     case 1:
-      return (reader.readString(offset)) as P;
+      return (reader.readStringList(offset)) as P;
     case 2:
       return (reader.readString(offset)) as P;
+    case 3:
+      return (reader.readString(offset)) as P;
     default:
       throw IsarError('Unknown property with id $propertyId');
   }
@@ -649,6 +670,248 @@ extension AddressLabelQueryFilter
     });
   }
 
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition> tagsIsNull() {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(const FilterCondition.isNull(
+        property: r'tags',
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsIsNotNull() {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(const FilterCondition.isNotNull(
+        property: r'tags',
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementEqualTo(
+    String value, {
+    bool caseSensitive = true,
+  }) {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.equalTo(
+        property: r'tags',
+        value: value,
+        caseSensitive: caseSensitive,
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementGreaterThan(
+    String value, {
+    bool include = false,
+    bool caseSensitive = true,
+  }) {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.greaterThan(
+        include: include,
+        property: r'tags',
+        value: value,
+        caseSensitive: caseSensitive,
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementLessThan(
+    String value, {
+    bool include = false,
+    bool caseSensitive = true,
+  }) {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.lessThan(
+        include: include,
+        property: r'tags',
+        value: value,
+        caseSensitive: caseSensitive,
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementBetween(
+    String lower,
+    String upper, {
+    bool includeLower = true,
+    bool includeUpper = true,
+    bool caseSensitive = true,
+  }) {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.between(
+        property: r'tags',
+        lower: lower,
+        includeLower: includeLower,
+        upper: upper,
+        includeUpper: includeUpper,
+        caseSensitive: caseSensitive,
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementStartsWith(
+    String value, {
+    bool caseSensitive = true,
+  }) {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.startsWith(
+        property: r'tags',
+        value: value,
+        caseSensitive: caseSensitive,
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementEndsWith(
+    String value, {
+    bool caseSensitive = true,
+  }) {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.endsWith(
+        property: r'tags',
+        value: value,
+        caseSensitive: caseSensitive,
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementContains(String value, {bool caseSensitive = true}) {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.contains(
+        property: r'tags',
+        value: value,
+        caseSensitive: caseSensitive,
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementMatches(String pattern, {bool caseSensitive = true}) {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.matches(
+        property: r'tags',
+        wildcard: pattern,
+        caseSensitive: caseSensitive,
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementIsEmpty() {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.equalTo(
+        property: r'tags',
+        value: '',
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsElementIsNotEmpty() {
+    return QueryBuilder.apply(this, (query) {
+      return query.addFilterCondition(FilterCondition.greaterThan(
+        property: r'tags',
+        value: '',
+      ));
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsLengthEqualTo(int length) {
+    return QueryBuilder.apply(this, (query) {
+      return query.listLength(
+        r'tags',
+        length,
+        true,
+        length,
+        true,
+      );
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsIsEmpty() {
+    return QueryBuilder.apply(this, (query) {
+      return query.listLength(
+        r'tags',
+        0,
+        true,
+        0,
+        true,
+      );
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsIsNotEmpty() {
+    return QueryBuilder.apply(this, (query) {
+      return query.listLength(
+        r'tags',
+        0,
+        false,
+        999999,
+        true,
+      );
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsLengthLessThan(
+    int length, {
+    bool include = false,
+  }) {
+    return QueryBuilder.apply(this, (query) {
+      return query.listLength(
+        r'tags',
+        0,
+        true,
+        length,
+        include,
+      );
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsLengthGreaterThan(
+    int length, {
+    bool include = false,
+  }) {
+    return QueryBuilder.apply(this, (query) {
+      return query.listLength(
+        r'tags',
+        length,
+        include,
+        999999,
+        true,
+      );
+    });
+  }
+
+  QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition>
+      tagsLengthBetween(
+    int lower,
+    int upper, {
+    bool includeLower = true,
+    bool includeUpper = true,
+  }) {
+    return QueryBuilder.apply(this, (query) {
+      return query.listLength(
+        r'tags',
+        lower,
+        includeLower,
+        upper,
+        includeUpper,
+      );
+    });
+  }
+
   QueryBuilder<AddressLabel, AddressLabel, QAfterFilterCondition> valueEqualTo(
     String value, {
     bool caseSensitive = true,
@@ -1028,6 +1291,12 @@ extension AddressLabelQueryWhereDistinct
     });
   }
 
+  QueryBuilder<AddressLabel, AddressLabel, QDistinct> distinctByTags() {
+    return QueryBuilder.apply(this, (query) {
+      return query.addDistinctBy(r'tags');
+    });
+  }
+
   QueryBuilder<AddressLabel, AddressLabel, QDistinct> distinctByValue(
       {bool caseSensitive = true}) {
     return QueryBuilder.apply(this, (query) {
@@ -1057,6 +1326,12 @@ extension AddressLabelQueryProperty
     });
   }
 
+  QueryBuilder<AddressLabel, List<String>?, QQueryOperations> tagsProperty() {
+    return QueryBuilder.apply(this, (query) {
+      return query.addPropertyName(r'tags');
+    });
+  }
+
   QueryBuilder<AddressLabel, String, QQueryOperations> valueProperty() {
     return QueryBuilder.apply(this, (query) {
       return query.addPropertyName(r'value');
diff --git a/lib/models/isar/models/blockchain_data/address.dart b/lib/models/isar/models/blockchain_data/address.dart
index 1992cd051..80b3d8a98 100644
--- a/lib/models/isar/models/blockchain_data/address.dart
+++ b/lib/models/isar/models/blockchain_data/address.dart
@@ -123,7 +123,26 @@ enum AddressType {
   mimbleWimble,
   unknown,
   nonWallet,
-  ethereum,
+  ethereum;
+
+  String get readableName {
+    switch (this) {
+      case AddressType.p2pkh:
+        return "Legacy";
+      case AddressType.p2sh:
+        return "Wrapped segwit";
+      case AddressType.p2wpkh:
+        return "Segwit";
+      case AddressType.cryptonote:
+        return "Cryptonote";
+      case AddressType.mimbleWimble:
+        return "Mimble Wimble";
+      case AddressType.unknown:
+        return "Unknown";
+      case AddressType.nonWallet:
+        return "Non wallet/unknown";
+    }
+  }
 }
 
 // do not modify
@@ -134,7 +153,26 @@ enum AddressSubType {
   paynymSend,
   paynymReceive,
   unknown,
-  nonWallet,
+  nonWallet;
+
+  String get prettyName {
+    switch (this) {
+      case AddressSubType.receiving:
+        return "Receiving";
+      case AddressSubType.change:
+        return "Change";
+      case AddressSubType.paynymNotification:
+        return "PayNym Notification";
+      case AddressSubType.paynymSend:
+        return "PayNym Send";
+      case AddressSubType.paynymReceive:
+        return "PayNym Receiving";
+      case AddressSubType.unknown:
+        return "Unknown";
+      case AddressSubType.nonWallet:
+        return "Non wallet/unknown";
+    }
+  }
 }
 
 @Embedded(inheritance: false)
diff --git a/lib/pages/add_wallet_views/create_or_restore_wallet_view/create_or_restore_wallet_view.dart b/lib/pages/add_wallet_views/create_or_restore_wallet_view/create_or_restore_wallet_view.dart
index 565636a92..09cf78953 100644
--- a/lib/pages/add_wallet_views/create_or_restore_wallet_view/create_or_restore_wallet_view.dart
+++ b/lib/pages/add_wallet_views/create_or_restore_wallet_view/create_or_restore_wallet_view.dart
@@ -5,6 +5,8 @@ import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view
 import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/create_or_restore_wallet_title.dart';
 import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/create_wallet_button_group.dart';
 import 'package:stackwallet/pages_desktop_specific/my_stack_view/exit_to_my_stack_button.dart';
+import 'package:stackwallet/utilities/enums/coin_enum.dart';
+import 'package:stackwallet/utilities/theme/color_theme.dart';
 import 'package:stackwallet/utilities/theme/stack_colors.dart';
 import 'package:stackwallet/utilities/util.dart';
 import 'package:stackwallet/widgets/background.dart';
@@ -81,6 +83,11 @@ class CreateOrRestoreWalletView extends StatelessWidget {
         ),
       );
     } else {
+      final isChans = Theme.of(context).extension<StackColors>()!.themeType ==
+              ThemeType.chan ||
+          Theme.of(context).extension<StackColors>()!.themeType ==
+              ThemeType.darkChans;
+
       return Background(
         child: Scaffold(
           backgroundColor:
@@ -95,42 +102,59 @@ class CreateOrRestoreWalletView extends StatelessWidget {
           body: SafeArea(
             child: Container(
               color: Theme.of(context).extension<StackColors>()!.background,
-              child: Padding(
-                padding: const EdgeInsets.all(16),
-                child: Column(
-                  crossAxisAlignment: CrossAxisAlignment.stretch,
-                  children: [
-                    CoinImage(
-                      coin: entity.coin,
-                      width: isDesktop
-                          ? 324
-                          : MediaQuery.of(context).size.width / 1.6,
-                      height: isDesktop
-                          ? null
-                          : MediaQuery.of(context).size.width / 1.6,
+              child: LayoutBuilder(
+                builder: (context, constraints) {
+                  return SingleChildScrollView(
+                    child: ConstrainedBox(
+                      constraints: BoxConstraints(
+                        minHeight: constraints.maxHeight,
+                      ),
+                      child: IntrinsicHeight(
+                        child: Padding(
+                          padding: const EdgeInsets.all(16),
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.stretch,
+                            children: [
+                              if (!isChans)
+                                const Spacer(
+                                  flex: 2,
+                                ),
+                              CoinImage(
+                                coin: entity.coin,
+                                width: isDesktop
+                                    ? 324
+                                    : MediaQuery.of(context).size.width / 1.6,
+                                height: isDesktop
+                                    ? null
+                                    : MediaQuery.of(context).size.width / 1.6,
+                              ),
+                              const Spacer(
+                                flex: 2,
+                              ),
+                              CreateRestoreWalletTitle(
+                                coin: entity.coin,
+                                isDesktop: isDesktop,
+                              ),
+                              const SizedBox(
+                                height: 8,
+                              ),
+                              CreateRestoreWalletSubTitle(
+                                isDesktop: isDesktop,
+                              ),
+                              const Spacer(
+                                flex: 5,
+                              ),
+                              CreateWalletButtonGroup(
+                                coin: entity.coin,
+                                isDesktop: isDesktop,
+                              ),
+                            ],
+                          ),
+                        ),
+                      ),
                     ),
-                    const Spacer(
-                      flex: 2,
-                    ),
-                    CreateRestoreWalletTitle(
-                      coin: entity.coin,
-                      isDesktop: isDesktop,
-                    ),
-                    const SizedBox(
-                      height: 8,
-                    ),
-                    CreateRestoreWalletSubTitle(
-                      isDesktop: isDesktop,
-                    ),
-                    const Spacer(
-                      flex: 5,
-                    ),
-                    CreateWalletButtonGroup(
-                      coin: entity.coin,
-                      isDesktop: isDesktop,
-                    ),
-                  ],
-                ),
+                  );
+                },
               ),
             ),
           ),
diff --git a/lib/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/coin_image.dart b/lib/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/coin_image.dart
index fb282d9ca..4b8a18005 100644
--- a/lib/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/coin_image.dart
+++ b/lib/pages/add_wallet_views/create_or_restore_wallet_view/sub_widgets/coin_image.dart
@@ -6,6 +6,8 @@ import 'package:stackwallet/utilities/enums/coin_enum.dart';
 import 'package:stackwallet/utilities/theme/color_theme.dart';
 import 'package:stackwallet/utilities/theme/stack_colors.dart';
 
+import '../../../../utilities/util.dart';
+
 class CoinImage extends ConsumerWidget {
   const CoinImage({
     Key? key,
@@ -20,11 +22,17 @@ class CoinImage extends ConsumerWidget {
 
   @override
   Widget build(BuildContext context, WidgetRef ref) {
-    if (Theme.of(context).extension<StackColors>()!.themeType ==
-        ThemeType.chan) {
+    final isChans = Theme.of(context).extension<StackColors>()!.themeType ==
+            ThemeType.chan ||
+        Theme.of(context).extension<StackColors>()!.themeType ==
+            ThemeType.darkChans;
+
+    final isDesktop = Util.isDesktop;
+
+    if (isChans) {
       return SizedBox(
-        width: width,
-        height: height,
+        width: isDesktop ? width : MediaQuery.of(context).size.width,
+        height: isDesktop ? height : MediaQuery.of(context).size.width,
         child: Image(
           image: AssetImage(
             Assets.gif.plain(coin),
diff --git a/lib/pages/coin_control/utxo_details_view.dart b/lib/pages/coin_control/utxo_details_view.dart
index e5bcba57e..eabaf1ff0 100644
--- a/lib/pages/coin_control/utxo_details_view.dart
+++ b/lib/pages/coin_control/utxo_details_view.dart
@@ -111,6 +111,10 @@ class _UtxoDetailsViewState extends ConsumerState<UtxoDetailsView> {
                 Navigator.of(context).pop(_popWithRefresh ? "refresh" : null);
               },
             ),
+            title: Text(
+              "Output details",
+              style: STextStyles.navBarTitle(context),
+            ),
           ),
           body: SafeArea(
             child: LayoutBuilder(
diff --git a/lib/pages/generic/single_field_edit_view.dart b/lib/pages/generic/single_field_edit_view.dart
index c1049b006..5735a7754 100644
--- a/lib/pages/generic/single_field_edit_view.dart
+++ b/lib/pages/generic/single_field_edit_view.dart
@@ -196,7 +196,11 @@ class _SingleFieldEditViewState extends State<SingleFieldEditView> {
                 }
               },
             ),
-          )
+          ),
+          if (!isDesktop)
+            const SizedBox(
+              height: 16,
+            ),
         ],
       ),
     );
diff --git a/lib/pages/loading_view.dart b/lib/pages/loading_view.dart
index 6c4b611ee..2da507847 100644
--- a/lib/pages/loading_view.dart
+++ b/lib/pages/loading_view.dart
@@ -16,6 +16,12 @@ class LoadingView extends StatelessWidget {
   Widget build(BuildContext context) {
     final size = MediaQuery.of(context).size;
     final width = min(size.width, size.height) * 0.5;
+
+    final isChan = Theme.of(context).extension<StackColors>()!.themeType ==
+            ThemeType.chan ||
+        Theme.of(context).extension<StackColors>()!.themeType ==
+            ThemeType.darkChans;
+
     return Background(
       child: Scaffold(
         backgroundColor: Theme.of(context).extension<StackColors>()!.background,
@@ -35,11 +41,17 @@ class LoadingView extends StatelessWidget {
               ),
               child: SizedBox(
                 width: width,
-                child: Lottie.asset(
-                  Assets.lottie.test2,
-                  animate: true,
-                  repeat: true,
-                ),
+                child: isChan
+                    ? Image(
+                        image: AssetImage(
+                          Assets.gif.stacyPlain,
+                        ),
+                      )
+                    : Lottie.asset(
+                        Assets.lottie.test2,
+                        animate: true,
+                        repeat: true,
+                      ),
               ),
             ),
             // child: Image(
diff --git a/lib/pages/receive_view/addresses/address_card.dart b/lib/pages/receive_view/addresses/address_card.dart
index bd9e74902..69427d505 100644
--- a/lib/pages/receive_view/addresses/address_card.dart
+++ b/lib/pages/receive_view/addresses/address_card.dart
@@ -1,21 +1,13 @@
 import 'dart:async';
 
 import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
 import 'package:isar/isar.dart';
 import 'package:stackwallet/db/isar/main_db.dart';
 import 'package:stackwallet/models/isar/models/isar_models.dart';
-import 'package:stackwallet/notifications/show_flush_bar.dart';
-import 'package:stackwallet/pages/receive_view/addresses/address_qr_popup.dart';
-import 'package:stackwallet/pages/receive_view/addresses/edit_address_label_view.dart';
+import 'package:stackwallet/pages/receive_view/addresses/address_tag.dart';
 import 'package:stackwallet/utilities/clipboard_interface.dart';
 import 'package:stackwallet/utilities/enums/coin_enum.dart';
 import 'package:stackwallet/utilities/text_styles.dart';
-import 'package:stackwallet/utilities/theme/stack_colors.dart';
-import 'package:stackwallet/widgets/custom_buttons/blue_text_button.dart';
-import 'package:stackwallet/widgets/desktop/secondary_button.dart';
-import 'package:stackwallet/widgets/icon_widgets/copy_icon.dart';
-import 'package:stackwallet/widgets/icon_widgets/qrcode_icon.dart';
 import 'package:stackwallet/widgets/rounded_white_container.dart';
 
 class AddressCard extends StatefulWidget {
@@ -24,6 +16,7 @@ class AddressCard extends StatefulWidget {
     required this.addressId,
     required this.walletId,
     required this.coin,
+    this.onPressed,
     this.clipboard = const ClipboardWrapper(),
   }) : super(key: key);
 
@@ -31,6 +24,7 @@ class AddressCard extends StatefulWidget {
   final String walletId;
   final Coin coin;
   final ClipboardInterface clipboard;
+  final VoidCallback? onPressed;
 
   @override
   State<AddressCard> createState() => _AddressCardState();
@@ -56,6 +50,11 @@ class _AddressCardState extends State<AddressCard> {
         walletId: widget.walletId,
         addressString: address.value,
         value: "",
+        tags: address.subType == AddressSubType.receiving
+            ? ["receiving"]
+            : address.subType == AddressSubType.change
+                ? ["change"]
+                : null,
       );
       id = MainDB.instance.putAddressLabelSync(label!);
     }
@@ -67,106 +66,126 @@ class _AddressCardState extends State<AddressCard> {
   @override
   Widget build(BuildContext context) {
     return RoundedWhiteContainer(
+      onPressed: widget.onPressed,
       child: StreamBuilder<AddressLabel?>(
-          stream: stream,
-          builder: (context, snapshot) {
-            if (snapshot.hasData) {
-              label = snapshot.data!;
-            }
+        stream: stream,
+        builder: (context, snapshot) {
+          if (snapshot.hasData) {
+            label = snapshot.data!;
+          }
 
-            return Column(
-              children: [
-                Row(
-                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                  children: [
-                    Text(
-                      label!.value,
-                      style: STextStyles.itemSubtitle(context),
-                    ),
-                    CustomTextButton(
-                      text: "Edit label",
-                      textSize: 14,
-                      onTap: () {
-                        Navigator.of(context).pushNamed(
-                          EditAddressLabelView.routeName,
-                          arguments: label!.id,
-                        );
-                      },
-                    ),
-                  ],
+          return Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              if (label!.value.isNotEmpty)
+                Text(
+                  label!.value,
+                  style: STextStyles.itemSubtitle(context),
+                  textAlign: TextAlign.left,
                 ),
+              // Row(
+              //   mainAxisAlignment: MainAxisAlignment.spaceBetween,
+              //   children: [
+              //
+              //     CustomTextButton(
+              //       text: "Edit label",
+              //       textSize: 14,
+              //       onTap: () {
+              //         Navigator.of(context).pushNamed(
+              //           EditAddressLabelView.routeName,
+              //           arguments: label!.id,
+              //         );
+              //       },
+              //     ),
+              //   ],
+              // ),
+              if (label!.value.isNotEmpty)
                 const SizedBox(
                   height: 8,
                 ),
-                Row(
-                  children: [
-                    Expanded(
-                      child: SelectableText(
-                        address.value,
-                        style: STextStyles.itemSubtitle12(context),
-                      ),
-                    )
-                  ],
-                ),
-                const SizedBox(
-                  height: 10,
-                ),
-                Row(
-                  children: [
-                    Expanded(
-                      child: SecondaryButton(
-                        label: "Copy address",
-                        icon: CopyIcon(
-                          color: Theme.of(context)
-                              .extension<StackColors>()!
-                              .buttonTextSecondary,
+              Row(
+                children: [
+                  Expanded(
+                    child: Text(
+                      address.value,
+                      style: STextStyles.itemSubtitle12(context),
+                    ),
+                  ),
+                ],
+              ),
+              const SizedBox(
+                height: 10,
+              ),
+
+              if (label!.tags != null && label!.tags!.isNotEmpty)
+                Wrap(
+                  spacing: 10,
+                  runSpacing: 10,
+                  children: label!.tags!
+                      .map(
+                        (e) => AddressTag(
+                          tag: e,
                         ),
-                        onPressed: () async {
-                          await widget.clipboard.setData(
-                            ClipboardData(
-                              text: address.value,
-                            ),
-                          );
-                          if (mounted) {
-                            unawaited(
-                              showFloatingFlushBar(
-                                type: FlushBarType.info,
-                                message: "Copied to clipboard",
-                                context: context,
-                              ),
-                            );
-                          }
-                        },
-                      ),
-                    ),
-                    const SizedBox(
-                      width: 12,
-                    ),
-                    Expanded(
-                      child: SecondaryButton(
-                        label: "Show QR Code",
-                        icon: QrCodeIcon(
-                          color: Theme.of(context)
-                              .extension<StackColors>()!
-                              .buttonTextSecondary,
-                        ),
-                        onPressed: () {
-                          showDialog<void>(
-                            context: context,
-                            builder: (context) => AddressQrPopup(
-                              addressString: address.value,
-                              coin: widget.coin,
-                              clipboard: widget.clipboard,
-                            ),
-                          );
-                        },
-                      ),
-                    ),
-                  ],
-                )
-              ],
-            );
-          }),
+                      )
+                      .toList(),
+                ),
+              // Row(
+              //   children: [
+              //     Expanded(
+              //       child: SecondaryButton(
+              //         label: "Copy address",
+              //         icon: CopyIcon(
+              //           color: Theme.of(context)
+              //               .extension<StackColors>()!
+              //               .buttonTextSecondary,
+              //         ),
+              //         onPressed: () async {
+              //           await widget.clipboard.setData(
+              //             ClipboardData(
+              //               text: address.value,
+              //             ),
+              //           );
+              //           if (mounted) {
+              //             unawaited(
+              //               showFloatingFlushBar(
+              //                 type: FlushBarType.info,
+              //                 message: "Copied to clipboard",
+              //                 context: context,
+              //               ),
+              //             );
+              //           }
+              //         },
+              //       ),
+              //     ),
+              //     const SizedBox(
+              //       width: 12,
+              //     ),
+              //     Expanded(
+              //       child: SecondaryButton(
+              //         label: "Show QR Code",
+              //         icon: QrCodeIcon(
+              //           color: Theme.of(context)
+              //               .extension<StackColors>()!
+              //               .buttonTextSecondary,
+              //         ),
+              //         onPressed: () {
+              //           showDialog<void>(
+              //             context: context,
+              //             builder: (context) => AddressQrPopup(
+              //               addressString: address.value,
+              //               coin: widget.coin,
+              //               clipboard: widget.clipboard,
+              //             ),
+              //           );
+              //         },
+              //       ),
+              //     ),
+              //   ],
+              // )
+            ],
+          );
+        },
+      ),
     );
   }
 }
diff --git a/lib/pages/receive_view/addresses/address_details_view.dart b/lib/pages/receive_view/addresses/address_details_view.dart
new file mode 100644
index 000000000..1ddf2f666
--- /dev/null
+++ b/lib/pages/receive_view/addresses/address_details_view.dart
@@ -0,0 +1,350 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:isar/isar.dart';
+import 'package:qr_flutter/qr_flutter.dart';
+import 'package:stackwallet/db/main_db.dart';
+import 'package:stackwallet/models/isar/models/isar_models.dart';
+import 'package:stackwallet/pages/receive_view/addresses/address_tag.dart';
+import 'package:stackwallet/pages/wallet_view/sub_widgets/no_transactions_found.dart';
+import 'package:stackwallet/providers/global/wallets_provider.dart';
+import 'package:stackwallet/utilities/address_utils.dart';
+import 'package:stackwallet/utilities/text_styles.dart';
+import 'package:stackwallet/utilities/theme/stack_colors.dart';
+import 'package:stackwallet/utilities/util.dart';
+import 'package:stackwallet/widgets/background.dart';
+import 'package:stackwallet/widgets/conditional_parent.dart';
+import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
+import 'package:stackwallet/widgets/custom_buttons/simple_copy_button.dart';
+import 'package:stackwallet/widgets/custom_buttons/simple_edit_button.dart';
+import 'package:stackwallet/widgets/rounded_white_container.dart';
+import 'package:stackwallet/widgets/transaction_card.dart';
+
+class AddressDetailsView extends ConsumerStatefulWidget {
+  const AddressDetailsView({
+    Key? key,
+    required this.addressId,
+    required this.walletId,
+  }) : super(key: key);
+
+  static const String routeName = "/addressDetailsView";
+
+  final Id addressId;
+  final String walletId;
+
+  @override
+  ConsumerState<AddressDetailsView> createState() => _AddressDetailsViewState();
+}
+
+class _AddressDetailsViewState extends ConsumerState<AddressDetailsView> {
+  final _qrKey = GlobalKey();
+  final isDesktop = Util.isDesktop;
+
+  late Stream<AddressLabel?> stream;
+  late final Address address;
+
+  AddressLabel? label;
+
+  @override
+  void initState() {
+    address = MainDB.instance.isar.addresses
+        .where()
+        .idEqualTo(widget.addressId)
+        .findFirstSync()!;
+
+    label = MainDB.instance.getAddressLabelSync(widget.walletId, address.value);
+    Id? id = label?.id;
+    if (id == null) {
+      label = AddressLabel(
+        walletId: widget.walletId,
+        addressString: address.value,
+        value: "",
+        tags: address.subType == AddressSubType.receiving
+            ? ["receiving"]
+            : address.subType == AddressSubType.change
+                ? ["change"]
+                : null,
+      );
+      id = MainDB.instance.putAddressLabelSync(label!);
+    }
+    stream = MainDB.instance.watchAddressLabel(id: id);
+
+    super.initState();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final coin = ref.watch(walletsChangeNotifierProvider
+        .select((value) => value.getManager(widget.walletId).coin));
+    final query = MainDB.instance
+        .getTransactions(widget.walletId)
+        .filter()
+        .address((q) => q.valueEqualTo(address.value));
+
+    return ConditionalParent(
+      condition: !isDesktop,
+      builder: (child) => Background(
+        child: Scaffold(
+          backgroundColor:
+              Theme.of(context).extension<StackColors>()!.background,
+          appBar: AppBar(
+            backgroundColor:
+                Theme.of(context).extension<StackColors>()!.backgroundAppBar,
+            leading: AppBarBackButton(
+              onPressed: () {
+                Navigator.of(context).pop();
+              },
+            ),
+            titleSpacing: 0,
+            title: Text(
+              "Wallet addresses",
+              style: STextStyles.navBarTitle(context),
+            ),
+          ),
+          body: SafeArea(
+            child: LayoutBuilder(
+              builder: (builderContext, constraints) {
+                return SingleChildScrollView(
+                  child: ConstrainedBox(
+                    constraints: BoxConstraints(
+                      minHeight: constraints.maxHeight,
+                    ),
+                    child: Padding(
+                      padding: const EdgeInsets.all(16),
+                      child: child,
+                    ),
+                  ),
+                );
+              },
+            ),
+          ),
+        ),
+      ),
+      child: StreamBuilder<AddressLabel?>(
+        stream: stream,
+        builder: (context, snapshot) {
+          if (snapshot.hasData) {
+            label = snapshot.data!;
+          }
+
+          return Column(
+            crossAxisAlignment: CrossAxisAlignment.stretch,
+            children: [
+              Center(
+                child: RepaintBoundary(
+                  key: _qrKey,
+                  child: QrImage(
+                    data: AddressUtils.buildUriString(
+                      coin,
+                      address.value,
+                      {},
+                    ),
+                    size: 220,
+                    backgroundColor:
+                        Theme.of(context).extension<StackColors>()!.background,
+                    foregroundColor: Theme.of(context)
+                        .extension<StackColors>()!
+                        .accentColorDark,
+                  ),
+                ),
+              ),
+              const SizedBox(
+                height: 16,
+              ),
+              _Item(
+                title: "Address",
+                data: address.value,
+                button: SimpleCopyButton(
+                  data: address.value,
+                ),
+              ),
+              const SizedBox(
+                height: 12,
+              ),
+              _Item(
+                title: "Label",
+                data: label!.value,
+                button: SimpleEditButton(
+                  editValue: label!.value,
+                  editLabel: 'label',
+                  onValueChanged: (value) {
+                    MainDB.instance.putAddressLabel(
+                      label!.copyWith(
+                        label: value,
+                      ),
+                    );
+                  },
+                ),
+              ),
+              const SizedBox(
+                height: 12,
+              ),
+              _Tags(
+                tags: label!.tags,
+              ),
+              if (address.derivationPath != null)
+                const SizedBox(
+                  height: 12,
+                ),
+              if (address.derivationPath != null)
+                _Item(
+                  title: "Derivation path",
+                  data: address.derivationPath!.value,
+                  button: Container(),
+                ),
+              const SizedBox(
+                height: 12,
+              ),
+              _Item(
+                title: "Type",
+                data: address.type.readableName,
+                button: Container(),
+              ),
+              const SizedBox(
+                height: 12,
+              ),
+              _Item(
+                title: "Sub type",
+                data: address.subType.prettyName,
+                button: Container(),
+              ),
+              const SizedBox(
+                height: 20,
+              ),
+              Text(
+                "Transactions",
+                textAlign: TextAlign.left,
+                style: STextStyles.itemSubtitle(context).copyWith(
+                  color: Theme.of(context).extension<StackColors>()!.textDark3,
+                ),
+              ),
+              const SizedBox(
+                height: 12,
+              ),
+              if (query.countSync() == 0) const NoTransActionsFound(),
+              if (query.countSync() > 0)
+                RoundedWhiteContainer(
+                  padding: EdgeInsets.zero,
+                  child: Column(
+                    mainAxisSize: MainAxisSize.min,
+                    children: query
+                        .findAllSync()
+                        .map((e) => TransactionCard(
+                            transaction: e, walletId: widget.walletId))
+                        .toList(),
+                  ),
+                ),
+            ],
+          );
+        },
+      ),
+    );
+  }
+}
+
+class _Tags extends StatelessWidget {
+  const _Tags({
+    Key? key,
+    required this.tags,
+  }) : super(key: key);
+
+  final List<String>? tags;
+
+  @override
+  Widget build(BuildContext context) {
+    return RoundedWhiteContainer(
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Row(
+            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+            children: [
+              Text(
+                "Tags",
+                style: STextStyles.itemSubtitle(context),
+              ),
+              Container(),
+              // SimpleEditButton(
+              //   onPressedOverride: () {
+              //     // TODO edit tags
+              //   },
+              // ),
+            ],
+          ),
+          const SizedBox(
+            height: 8,
+          ),
+          tags != null && tags!.isNotEmpty
+              ? Wrap(
+                  spacing: 10,
+                  runSpacing: 10,
+                  children: tags!
+                      .map(
+                        (e) => AddressTag(
+                          tag: e,
+                        ),
+                      )
+                      .toList(),
+                )
+              : Text(
+                  "Tags will appear here",
+                  style: STextStyles.w500_14(context).copyWith(
+                    color: Theme.of(context)
+                        .extension<StackColors>()!
+                        .textSubtitle3,
+                  ),
+                ),
+        ],
+      ),
+    );
+  }
+}
+
+class _Item extends StatelessWidget {
+  const _Item({
+    Key? key,
+    required this.title,
+    required this.data,
+    required this.button,
+  }) : super(key: key);
+
+  final String title;
+  final String data;
+  final Widget button;
+
+  @override
+  Widget build(BuildContext context) {
+    return RoundedWhiteContainer(
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Row(
+            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+            children: [
+              Text(
+                title,
+                style: STextStyles.itemSubtitle(context),
+              ),
+              button,
+            ],
+          ),
+          const SizedBox(
+            height: 5,
+          ),
+          data.isNotEmpty
+              ? SelectableText(
+                  data,
+                  style: STextStyles.w500_14(context),
+                )
+              : Text(
+                  "$title will appear here",
+                  style: STextStyles.w500_14(context).copyWith(
+                    color: Theme.of(context)
+                        .extension<StackColors>()!
+                        .textSubtitle3,
+                  ),
+                ),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/pages/receive_view/addresses/address_tag.dart b/lib/pages/receive_view/addresses/address_tag.dart
new file mode 100644
index 000000000..df03dc405
--- /dev/null
+++ b/lib/pages/receive_view/addresses/address_tag.dart
@@ -0,0 +1,26 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_native_splash/cli_commands.dart';
+import 'package:stackwallet/utilities/text_styles.dart';
+import 'package:stackwallet/widgets/rounded_container.dart';
+
+class AddressTag extends StatelessWidget {
+  const AddressTag({Key? key, required this.tag}) : super(key: key);
+
+  final String tag;
+
+  @override
+  Widget build(BuildContext context) {
+    return RoundedContainer(
+      radiusMultiplier: 0.5,
+      padding: const EdgeInsets.symmetric(
+        vertical: 5,
+        horizontal: 7,
+      ),
+      color: Colors.black,
+      child: Text(
+        tag.capitalize(),
+        style: STextStyles.w500_14(context),
+      ),
+    );
+  }
+}
diff --git a/lib/pages/receive_view/addresses/wallet_addresses_view.dart b/lib/pages/receive_view/addresses/wallet_addresses_view.dart
index dad379988..be1ded23a 100644
--- a/lib/pages/receive_view/addresses/wallet_addresses_view.dart
+++ b/lib/pages/receive_view/addresses/wallet_addresses_view.dart
@@ -1,9 +1,11 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:flutter_svg/svg.dart';
 import 'package:isar/isar.dart';
 import 'package:stackwallet/db/isar/main_db.dart';
 import 'package:stackwallet/models/isar/models/isar_models.dart';
 import 'package:stackwallet/pages/receive_view/addresses/address_card.dart';
+import 'package:stackwallet/pages/receive_view/addresses/address_details_view.dart';
 import 'package:stackwallet/providers/global/wallets_provider.dart';
 import 'package:stackwallet/utilities/constants.dart';
 import 'package:stackwallet/utilities/text_styles.dart';
@@ -13,7 +15,12 @@ import 'package:stackwallet/widgets/background.dart';
 import 'package:stackwallet/widgets/conditional_parent.dart';
 import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
 import 'package:stackwallet/widgets/loading_indicator.dart';
-import 'package:stackwallet/widgets/toggle.dart';
+import 'package:stackwallet/widgets/stack_text_field.dart';
+import 'package:tuple/tuple.dart';
+
+import '../../../utilities/assets.dart';
+import '../../../widgets/icon_widgets/x_icon.dart';
+import '../../../widgets/textfield_icon_button.dart';
 
 class WalletAddressesView extends ConsumerStatefulWidget {
   const WalletAddressesView({
@@ -33,7 +40,88 @@ class WalletAddressesView extends ConsumerStatefulWidget {
 class _WalletAddressesViewState extends ConsumerState<WalletAddressesView> {
   final bool isDesktop = Util.isDesktop;
 
-  bool _showChange = false;
+  String _searchString = "";
+
+  late final TextEditingController _searchController;
+  final searchFieldFocusNode = FocusNode();
+
+  Future<List<int>> _search(String term) async {
+    if (term.isEmpty) {
+      return MainDB.instance
+          .getAddresses(widget.walletId)
+          .filter()
+          .group((q) => q
+              .subTypeEqualTo(AddressSubType.change)
+              .or()
+              .subTypeEqualTo(AddressSubType.receiving)
+              .or()
+              .subTypeEqualTo(AddressSubType.paynymReceive)
+              .or()
+              .subTypeEqualTo(AddressSubType.paynymNotification))
+          .and()
+          .not()
+          .typeEqualTo(AddressType.nonWallet)
+          .sortByDerivationIndex()
+          .idProperty()
+          .findAll();
+    }
+
+    final labels = await MainDB.instance
+        .getAddressLabels(widget.walletId)
+        .filter()
+        .group(
+          (q) => q
+              .valueContains(term, caseSensitive: false)
+              .or()
+              .addressStringContains(term, caseSensitive: false)
+              .or()
+              .group(
+                (q) => q
+                    .tagsIsNotNull()
+                    .and()
+                    .tagsElementContains(term, caseSensitive: false),
+              ),
+        )
+        .findAll();
+
+    if (labels.isEmpty) {
+      return [];
+    }
+
+    return MainDB.instance
+        .getAddresses(widget.walletId)
+        .filter()
+        .anyOf<AddressLabel, Address>(
+            labels, (q, e) => q.valueEqualTo(e.addressString))
+        .group((q) => q
+            .subTypeEqualTo(AddressSubType.change)
+            .or()
+            .subTypeEqualTo(AddressSubType.receiving)
+            .or()
+            .subTypeEqualTo(AddressSubType.paynymReceive)
+            .or()
+            .subTypeEqualTo(AddressSubType.paynymNotification))
+        .and()
+        .not()
+        .typeEqualTo(AddressType.nonWallet)
+        .sortByDerivationIndex()
+        .idProperty()
+        .findAll();
+  }
+
+  @override
+  void initState() {
+    _searchController = TextEditingController();
+
+    super.initState();
+  }
+
+  @override
+  void dispose() {
+    _searchController.dispose();
+    searchFieldFocusNode.dispose();
+    super.dispose();
+  }
 
   @override
   Widget build(BuildContext context) {
@@ -68,26 +156,66 @@ class _WalletAddressesViewState extends ConsumerState<WalletAddressesView> {
       child: Column(
         children: [
           SizedBox(
-            height: isDesktop ? 56 : 48,
             width: isDesktop ? 490 : null,
-            child: Toggle(
-              key: UniqueKey(),
-              onColor: Theme.of(context).extension<StackColors>()!.popupBG,
-              onText: "Receiving",
-              offColor: Theme.of(context)
-                  .extension<StackColors>()!
-                  .textFieldDefaultBG,
-              offText: "Change",
-              isOn: _showChange,
-              onValueChanged: (value) {
-                setState(() {
-                  _showChange = value;
-                });
-              },
-              decoration: BoxDecoration(
-                color: Colors.transparent,
-                borderRadius: BorderRadius.circular(
-                  Constants.size.circularBorderRadius,
+            child: ClipRRect(
+              borderRadius: BorderRadius.circular(
+                Constants.size.circularBorderRadius,
+              ),
+              child: TextField(
+                autocorrect: !isDesktop,
+                enableSuggestions: !isDesktop,
+                controller: _searchController,
+                focusNode: searchFieldFocusNode,
+                onChanged: (value) {
+                  setState(() {
+                    _searchString = value;
+                  });
+                },
+                style: isDesktop
+                    ? STextStyles.desktopTextExtraSmall(context).copyWith(
+                        color: Theme.of(context)
+                            .extension<StackColors>()!
+                            .textFieldActiveText,
+                        height: 1.8,
+                      )
+                    : STextStyles.field(context),
+                decoration: standardInputDecoration(
+                  "Search...",
+                  searchFieldFocusNode,
+                  context,
+                  desktopMed: isDesktop,
+                ).copyWith(
+                  prefixIcon: Padding(
+                    padding: EdgeInsets.symmetric(
+                      horizontal: isDesktop ? 12 : 10,
+                      vertical: isDesktop ? 18 : 16,
+                    ),
+                    child: SvgPicture.asset(
+                      Assets.svg.search,
+                      width: isDesktop ? 20 : 16,
+                      height: isDesktop ? 20 : 16,
+                    ),
+                  ),
+                  suffixIcon: _searchController.text.isNotEmpty
+                      ? Padding(
+                          padding: const EdgeInsets.only(right: 0),
+                          child: UnconstrainedBox(
+                            child: Row(
+                              children: [
+                                TextFieldIconButton(
+                                  child: const XIcon(),
+                                  onTap: () async {
+                                    setState(() {
+                                      _searchController.text = "";
+                                      _searchString = "";
+                                    });
+                                  },
+                                ),
+                              ],
+                            ),
+                          ),
+                        )
+                      : null,
                 ),
               ),
             ),
@@ -97,23 +225,7 @@ class _WalletAddressesViewState extends ConsumerState<WalletAddressesView> {
           ),
           Expanded(
             child: FutureBuilder(
-              future: MainDB.instance
-                  .getAddresses(widget.walletId)
-                  .filter()
-                  .group(
-                    (q) => _showChange
-                        ? q.subTypeEqualTo(AddressSubType.change)
-                        : q
-                            .subTypeEqualTo(AddressSubType.receiving)
-                            .or()
-                            .subTypeEqualTo(AddressSubType.paynymReceive),
-                  )
-                  .and()
-                  .not()
-                  .typeEqualTo(AddressType.nonWallet)
-                  .sortByDerivationIndex()
-                  .idProperty()
-                  .findAll(),
+              future: _search(_searchString),
               builder: (context, AsyncSnapshot<List<int>> snapshot) {
                 if (snapshot.connectionState == ConnectionState.done &&
                     snapshot.data != null) {
@@ -127,6 +239,15 @@ class _WalletAddressesViewState extends ConsumerState<WalletAddressesView> {
                       walletId: widget.walletId,
                       addressId: snapshot.data![index],
                       coin: coin,
+                      onPressed: () {
+                        Navigator.of(context).pushNamed(
+                          AddressDetailsView.routeName,
+                          arguments: Tuple2(
+                            snapshot.data![index],
+                            widget.walletId,
+                          ),
+                        );
+                      },
                     ),
                   );
                 } else {
diff --git a/lib/pages/send_view/send_view.dart b/lib/pages/send_view/send_view.dart
index c7c63bac7..508b9d6cc 100644
--- a/lib/pages/send_view/send_view.dart
+++ b/lib/pages/send_view/send_view.dart
@@ -588,7 +588,7 @@ class _SendViewState extends ConsumerState<SendView> {
         cryptoAmountController.text = _data!.amount!.toString();
       }
       sendToController.text = _data!.contactLabel;
-      _address = _data!.address;
+      _address = _data!.address.trim();
       _addressToggleFlag = true;
     }
 
@@ -689,7 +689,7 @@ class _SendViewState extends ConsumerState<SendView> {
     // add listener for epic cash to strip http:// and https:// prefixes if the address also ocntains an @ symbol (indicating an epicbox address)
     if (coin == Coin.epicCash) {
       sendToController.addListener(() {
-        _address = sendToController.text;
+        _address = sendToController.text.trim();
 
         if (_address != null && _address!.isNotEmpty) {
           _address = _address!.trim();
@@ -956,7 +956,7 @@ class _SendViewState extends ConsumerState<SendView> {
                                   selectAll: false,
                                 ),
                                 onChanged: (newValue) {
-                                  _address = newValue;
+                                  _address = newValue.trim();
                                   _updatePreviewButtonState(
                                       _address, _amountToSend);
 
@@ -1032,8 +1032,8 @@ class _SendViewState extends ConsumerState<SendView> {
                                                             content);
                                                       }
                                                       sendToController.text =
-                                                          content;
-                                                      _address = content;
+                                                          content.trim();
+                                                      _address = content.trim();
 
                                                       _updatePreviewButtonState(
                                                           _address,
@@ -1112,8 +1112,9 @@ class _SendViewState extends ConsumerState<SendView> {
                                                           coin.uriScheme) {
                                                     // auto fill address
                                                     _address =
-                                                        results["address"] ??
-                                                            "";
+                                                        (results["address"] ??
+                                                                "")
+                                                            .trim();
                                                     sendToController.text =
                                                         _address!;
 
@@ -1168,8 +1169,9 @@ class _SendViewState extends ConsumerState<SendView> {
                                                       .getManager(walletId)
                                                       .validateAddress(qrResult
                                                           .rawContent)) {
-                                                    _address =
-                                                        qrResult.rawContent;
+                                                    _address = qrResult
+                                                        .rawContent
+                                                        .trim();
                                                     sendToController.text =
                                                         _address ?? "";
 
diff --git a/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart b/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart
index 6915493d5..8bd800cad 100644
--- a/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart
+++ b/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart
@@ -57,6 +57,11 @@ class _RestoringDialogState extends State<BuildingTransactionDialog>
 
   @override
   Widget build(BuildContext context) {
+    final isChans = Theme.of(context).extension<StackColors>()!.themeType ==
+            ThemeType.chan ||
+        Theme.of(context).extension<StackColors>()!.themeType ==
+            ThemeType.darkChans;
+
     if (Util.isDesktop) {
       return Column(
         mainAxisSize: MainAxisSize.min,
@@ -68,15 +73,13 @@ class _RestoringDialogState extends State<BuildingTransactionDialog>
           const SizedBox(
             height: 40,
           ),
-          if (Theme.of(context).extension<StackColors>()!.themeType ==
-              ThemeType.chan)
+          if (isChans)
             Image(
               image: AssetImage(
                 Assets.gif.kiss(widget.coin),
               ),
             ),
-          if (Theme.of(context).extension<StackColors>()!.themeType !=
-              ThemeType.chan)
+          if (!isChans)
             RotationTransition(
               turns: _spinAnimation,
               child: SvgPicture.asset(
@@ -104,8 +107,7 @@ class _RestoringDialogState extends State<BuildingTransactionDialog>
         onWillPop: () async {
           return false;
         },
-        child: Theme.of(context).extension<StackColors>()!.themeType ==
-                ThemeType.chan
+        child: isChans
             ? StackDialogBase(
                 child: Column(
                   crossAxisAlignment: CrossAxisAlignment.stretch,
diff --git a/lib/pages/send_view/sub_widgets/sending_transaction_dialog.dart b/lib/pages/send_view/sub_widgets/sending_transaction_dialog.dart
index 3d9928c34..7c318a517 100644
--- a/lib/pages/send_view/sub_widgets/sending_transaction_dialog.dart
+++ b/lib/pages/send_view/sub_widgets/sending_transaction_dialog.dart
@@ -51,6 +51,11 @@ class _RestoringDialogState extends State<SendingTransactionDialog>
 
   @override
   Widget build(BuildContext context) {
+    final isChans = Theme.of(context).extension<StackColors>()!.themeType ==
+            ThemeType.chan ||
+        Theme.of(context).extension<StackColors>()!.themeType ==
+            ThemeType.darkChans;
+
     if (Util.isDesktop) {
       return DesktopDialog(
         child: Padding(
@@ -65,8 +70,7 @@ class _RestoringDialogState extends State<SendingTransactionDialog>
               const SizedBox(
                 height: 40,
               ),
-              Theme.of(context).extension<StackColors>()!.themeType ==
-                      ThemeType.chan
+              isChans
                   ? Image(
                       image: AssetImage(
                         Assets.gif.kiss(widget.coin),
@@ -92,8 +96,7 @@ class _RestoringDialogState extends State<SendingTransactionDialog>
         onWillPop: () async {
           return false;
         },
-        child: Theme.of(context).extension<StackColors>()!.themeType ==
-                ThemeType.chan
+        child: isChans
             ? StackDialogBase(
                 child: Column(
                   crossAxisAlignment: CrossAxisAlignment.stretch,
diff --git a/lib/pages/settings_views/global_settings_view/appearance_settings_view.dart b/lib/pages/settings_views/global_settings_view/appearance_settings_view.dart
index 8b4d5b1aa..adde8eb4a 100644
--- a/lib/pages/settings_views/global_settings_view/appearance_settings_view.dart
+++ b/lib/pages/settings_views/global_settings_view/appearance_settings_view.dart
@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_riverpod/flutter_riverpod.dart';
 import 'package:stackwallet/db/hive/db.dart';
+import 'package:flutter_svg/flutter_svg.dart';
 import 'package:stackwallet/providers/providers.dart';
 import 'package:stackwallet/providers/ui/color_theme_provider.dart';
 import 'package:stackwallet/utilities/assets.dart';
@@ -11,7 +12,10 @@ import 'package:stackwallet/utilities/theme/stack_colors.dart';
 import 'package:stackwallet/widgets/background.dart';
 import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
 import 'package:stackwallet/widgets/custom_buttons/draggable_switch_button.dart';
+import 'package:stackwallet/widgets/expandable.dart';
+import 'package:stackwallet/widgets/rounded_container.dart';
 import 'package:stackwallet/widgets/rounded_white_container.dart';
+import 'package:tuple/tuple.dart';
 
 class AppearanceSettingsView extends ConsumerWidget {
   const AppearanceSettingsView({Key? key}) : super(key: key);
@@ -101,43 +105,56 @@ class AppearanceSettingsView extends ConsumerWidget {
                         const SizedBox(
                           height: 10,
                         ),
-                        RoundedWhiteContainer(
-                          padding: const EdgeInsets.all(0),
-                          child: RawMaterialButton(
-                            // splashColor: Theme.of(context).extension<StackColors>()!.highlight,
+                        const SystemBrightnessToggle(),
+                        if (!ref.watch(
+                          prefsChangeNotifierProvider
+                              .select((value) => value.enableSystemBrightness),
+                        ))
+                          const SizedBox(
+                            height: 10,
+                          ),
+                        if (!ref.watch(
+                          prefsChangeNotifierProvider
+                              .select((value) => value.enableSystemBrightness),
+                        ))
+                          RoundedWhiteContainer(
                             padding: const EdgeInsets.all(0),
-                            materialTapTargetSize:
-                                MaterialTapTargetSize.shrinkWrap,
-                            shape: RoundedRectangleBorder(
-                              borderRadius: BorderRadius.circular(
-                                Constants.size.circularBorderRadius,
+                            child: RawMaterialButton(
+                              // splashColor: Theme.of(context).extension<StackColors>()!.highlight,
+                              padding: const EdgeInsets.all(0),
+                              materialTapTargetSize:
+                                  MaterialTapTargetSize.shrinkWrap,
+                              shape: RoundedRectangleBorder(
+                                borderRadius: BorderRadius.circular(
+                                  Constants.size.circularBorderRadius,
+                                ),
                               ),
-                            ),
-                            onPressed: null,
-                            child: Padding(
-                              padding: const EdgeInsets.all(12),
-                              child: Row(
-                                children: [
-                                  Column(
-                                    crossAxisAlignment:
-                                        CrossAxisAlignment.start,
-                                    children: [
-                                      Text(
-                                        "Choose Theme",
-                                        style: STextStyles.titleBold12(context),
-                                        textAlign: TextAlign.left,
-                                      ),
-                                      const Padding(
-                                        padding: EdgeInsets.all(10),
-                                        child: ThemeOptionsView(),
-                                      ),
-                                    ],
-                                  ),
-                                ],
+                              onPressed: null,
+                              child: Padding(
+                                padding: const EdgeInsets.all(12),
+                                child: Row(
+                                  children: [
+                                    Column(
+                                      crossAxisAlignment:
+                                          CrossAxisAlignment.start,
+                                      children: [
+                                        Text(
+                                          "Choose Theme",
+                                          style:
+                                              STextStyles.titleBold12(context),
+                                          textAlign: TextAlign.left,
+                                        ),
+                                        const Padding(
+                                          padding: EdgeInsets.all(10),
+                                          child: ThemeOptionsView(),
+                                        ),
+                                      ],
+                                    ),
+                                  ],
+                                ),
                               ),
                             ),
                           ),
-                        ),
                       ],
                     ),
                   ),
@@ -151,6 +168,238 @@ class AppearanceSettingsView extends ConsumerWidget {
   }
 }
 
+class SystemBrightnessToggle extends ConsumerStatefulWidget {
+  const SystemBrightnessToggle({Key? key}) : super(key: key);
+
+  @override
+  ConsumerState<SystemBrightnessToggle> createState() =>
+      _SystemBrightnessToggleState();
+}
+
+class _SystemBrightnessToggleState
+    extends ConsumerState<SystemBrightnessToggle> {
+  final controller = ExpandableController();
+
+  void _toggle(bool enable) {
+    ref.read(prefsChangeNotifierProvider).enableSystemBrightness = enable;
+
+    if (enable && controller.state == ExpandableState.collapsed) {
+      controller.toggle?.call();
+    } else if (!enable && controller.state == ExpandableState.expanded) {
+      controller.toggle?.call();
+    }
+
+    if (enable) {
+      final ThemeType type;
+      switch (MediaQuery.of(context).platformBrightness) {
+        case Brightness.dark:
+          type = ref
+              .read(prefsChangeNotifierProvider.notifier)
+              .systemBrightnessDarkTheme;
+          break;
+        case Brightness.light:
+          type = ref
+              .read(prefsChangeNotifierProvider.notifier)
+              .systemBrightnessLightTheme;
+          break;
+      }
+      ref.read(colorThemeProvider.notifier).state =
+          StackColors.fromStackColorTheme(
+        type.colorTheme,
+      );
+    } else {
+      ref.read(prefsChangeNotifierProvider.notifier).theme =
+          ref.read(colorThemeProvider.notifier).state.themeType;
+    }
+  }
+
+  @override
+  void initState() {
+    if (ref.read(prefsChangeNotifierProvider).enableSystemBrightness) {
+      WidgetsBinding.instance.addPostFrameCallback((_) {
+        controller.toggle?.call();
+      });
+    }
+    super.initState();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final enable = ref.watch(
+      prefsChangeNotifierProvider
+          .select((value) => value.enableSystemBrightness),
+    );
+
+    return RoundedWhiteContainer(
+      child: Expandable(
+        controller: controller,
+        expandOverride: () {
+          _toggle(
+              !ref.read(prefsChangeNotifierProvider).enableSystemBrightness);
+        },
+        header: RawMaterialButton(
+          splashColor: Theme.of(context).extension<StackColors>()!.highlight,
+          materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
+          shape: RoundedRectangleBorder(
+            borderRadius: BorderRadius.circular(
+              Constants.size.circularBorderRadius,
+            ),
+          ),
+          onPressed: null,
+          child: Padding(
+            padding: const EdgeInsets.symmetric(vertical: 8),
+            child: Row(
+              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+              children: [
+                Text(
+                  "System brightness",
+                  style: STextStyles.titleBold12(context),
+                  textAlign: TextAlign.left,
+                ),
+                SizedBox(
+                  key: Key("${enable}enableSystemBrightnessToggleKey"),
+                  height: 20,
+                  width: 40,
+                  child: DraggableSwitchButton(
+                    isOn: enable,
+                    onValueChanged: _toggle,
+                  ),
+                )
+              ],
+            ),
+          ),
+        ),
+        body: Column(
+          children: [
+            RoundedContainer(
+              color: Colors.transparent,
+              padding: EdgeInsets.zero,
+              onPressed: () async {
+                final result = await Navigator.of(context).pushNamed(
+                  SystemBrightnessThemeSelectionView.routeName,
+                  arguments: Tuple2(
+                      "light",
+                      ref
+                          .read(prefsChangeNotifierProvider)
+                          .systemBrightnessLightTheme),
+                );
+                if (result is ThemeType) {
+                  ref
+                      .read(prefsChangeNotifierProvider)
+                      .systemBrightnessLightTheme = result;
+                  if (ref
+                      .read(prefsChangeNotifierProvider)
+                      .enableSystemBrightness) {
+                    if (mounted &&
+                        MediaQuery.of(context).platformBrightness ==
+                            Brightness.light) {
+                      ref.read(colorThemeProvider.notifier).state =
+                          StackColors.fromStackColorTheme(result.colorTheme);
+                    }
+                  }
+                }
+              },
+              child: Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: [
+                  Padding(
+                    padding: const EdgeInsets.all(8.0),
+                    child: Column(
+                      crossAxisAlignment: CrossAxisAlignment.start,
+                      children: [
+                        Text(
+                          "Light theme",
+                          style: STextStyles.itemSubtitle(context),
+                        ),
+                        const SizedBox(
+                          height: 2,
+                        ),
+                        Text(
+                          ref
+                              .watch(
+                                prefsChangeNotifierProvider.select((value) =>
+                                    value.systemBrightnessLightTheme),
+                              )
+                              .prettyName,
+                          style: STextStyles.itemSubtitle12(context),
+                        ),
+                      ],
+                    ),
+                  ),
+                  SvgPicture.asset(
+                    Assets.svg.chevronRight,
+                    color: Theme.of(context).extension<StackColors>()!.textDark,
+                  ),
+                ],
+              ),
+            ),
+            RoundedContainer(
+              color: Colors.transparent,
+              padding: EdgeInsets.zero,
+              onPressed: () async {
+                final result = await Navigator.of(context).pushNamed(
+                  SystemBrightnessThemeSelectionView.routeName,
+                  arguments: Tuple2(
+                      "dark",
+                      ref
+                          .read(prefsChangeNotifierProvider)
+                          .systemBrightnessDarkTheme),
+                );
+                if (result is ThemeType) {
+                  ref
+                      .read(prefsChangeNotifierProvider)
+                      .systemBrightnessDarkTheme = result;
+                  if (ref
+                      .read(prefsChangeNotifierProvider)
+                      .enableSystemBrightness) {
+                    if (mounted &&
+                        MediaQuery.of(context).platformBrightness ==
+                            Brightness.dark) {
+                      ref.read(colorThemeProvider.notifier).state =
+                          StackColors.fromStackColorTheme(result.colorTheme);
+                    }
+                  }
+                }
+              },
+              child: Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: [
+                  Padding(
+                    padding: const EdgeInsets.all(8.0),
+                    child: Column(
+                      crossAxisAlignment: CrossAxisAlignment.start,
+                      children: [
+                        Text(
+                          "Dark theme",
+                          style: STextStyles.itemSubtitle(context),
+                        ),
+                        const SizedBox(
+                          height: 2,
+                        ),
+                        Text(
+                          ref.watch(
+                            prefsChangeNotifierProvider.select((value) =>
+                                value.systemBrightnessDarkTheme.prettyName),
+                          ),
+                          style: STextStyles.itemSubtitle12(context),
+                        ),
+                      ],
+                    ),
+                  ),
+                  SvgPicture.asset(
+                    Assets.svg.chevronRight,
+                    color: Theme.of(context).extension<StackColors>()!.textDark,
+                  ),
+                ],
+              ),
+            )
+          ],
+        ),
+      ),
+    );
+  }
+}
+
 class ThemeOptionsView extends ConsumerWidget {
   const ThemeOptionsView({Key? key}) : super(key: key);
 
@@ -165,12 +414,9 @@ class ThemeOptionsView extends ConsumerWidget {
                 )
               : ThemeOption(
                   onPressed: () {
-                    DB.instance.put<dynamic>(
-                      boxName: DB.boxNameTheme,
-                      key: "colorScheme",
-                      value: ThemeType.values[i ~/ 2].name,
-                    );
-                    ref.read(colorThemeProvider.state).state =
+                    ref.read(prefsChangeNotifierProvider.notifier).theme =
+                        ThemeType.values[i ~/ 2];
+                    ref.read(colorThemeProvider.notifier).state =
                         StackColors.fromStackColorTheme(
                       ThemeType.values[i ~/ 2].colorTheme,
                     );
@@ -178,12 +424,9 @@ class ThemeOptionsView extends ConsumerWidget {
                   },
                   onChanged: (newValue) {
                     if (newValue == ThemeType.values[i ~/ 2]) {
-                      DB.instance.put<dynamic>(
-                        boxName: DB.boxNameTheme,
-                        key: "colorScheme",
-                        value: ThemeType.values[i ~/ 2].name,
-                      );
-                      ref.read(colorThemeProvider.state).state =
+                      ref.read(prefsChangeNotifierProvider.notifier).theme =
+                          ThemeType.values[i ~/ 2];
+                      ref.read(colorThemeProvider.notifier).state =
                           StackColors.fromStackColorTheme(
                         ThemeType.values[i ~/ 2].colorTheme,
                       );
@@ -263,3 +506,124 @@ class ThemeOption extends StatelessWidget {
     );
   }
 }
+
+class SystemBrightnessThemeSelectionView extends StatelessWidget {
+  const SystemBrightnessThemeSelectionView({
+    Key? key,
+    required this.brightness,
+    required this.current,
+  }) : super(key: key);
+
+  final String brightness;
+  final ThemeType current;
+
+  static const String routeName = "/chooseSystemTheme";
+
+  @override
+  Widget build(BuildContext context) {
+    return Background(
+      child: Scaffold(
+        backgroundColor: Theme.of(context).extension<StackColors>()!.background,
+        appBar: AppBar(
+          leading: AppBarBackButton(
+            onPressed: () async {
+              Navigator.of(context).pop();
+            },
+          ),
+          title: Text(
+            "Choose $brightness theme",
+            style: STextStyles.navBarTitle(context),
+          ),
+        ),
+        body: Padding(
+          padding: const EdgeInsets.all(16),
+          child: LayoutBuilder(
+            builder: (context, constraints) {
+              return SingleChildScrollView(
+                child: ConstrainedBox(
+                  constraints: BoxConstraints(
+                    minHeight: constraints.maxHeight,
+                  ),
+                  child: IntrinsicHeight(
+                    child: Column(
+                      crossAxisAlignment: CrossAxisAlignment.stretch,
+                      children: [
+                        RoundedWhiteContainer(
+                          padding: const EdgeInsets.all(0),
+                          child: RawMaterialButton(
+                            // splashColor: Theme.of(context).extension<StackColors>()!.highlight,
+                            padding: const EdgeInsets.all(0),
+                            materialTapTargetSize:
+                                MaterialTapTargetSize.shrinkWrap,
+                            shape: RoundedRectangleBorder(
+                              borderRadius: BorderRadius.circular(
+                                Constants.size.circularBorderRadius,
+                              ),
+                            ),
+                            onPressed: null,
+                            child: Padding(
+                              padding: const EdgeInsets.all(12),
+                              child: Row(
+                                children: [
+                                  Column(
+                                    crossAxisAlignment:
+                                        CrossAxisAlignment.start,
+                                    children: [
+                                      Padding(
+                                        padding: const EdgeInsets.all(10),
+                                        child: Column(
+                                          children: [
+                                            for (int i = 0;
+                                                i <
+                                                    (2 *
+                                                            ThemeType.values
+                                                                .length) -
+                                                        1;
+                                                i++)
+                                              (i % 2 == 1)
+                                                  ? const SizedBox(
+                                                      height: 10,
+                                                    )
+                                                  : ThemeOption(
+                                                      onPressed: () {
+                                                        Navigator.of(context)
+                                                            .pop(ThemeType
+                                                                    .values[
+                                                                i ~/ 2]);
+                                                      },
+                                                      onChanged: (newValue) {
+                                                        if (newValue ==
+                                                            ThemeType.values[
+                                                                i ~/ 2]) {
+                                                          Navigator.of(context)
+                                                              .pop(ThemeType
+                                                                      .values[
+                                                                  i ~/ 2]);
+                                                        }
+                                                      },
+                                                      value: ThemeType
+                                                          .values[i ~/ 2],
+                                                      groupValue: current,
+                                                    ),
+                                          ],
+                                        ),
+                                      ),
+                                    ],
+                                  ),
+                                ],
+                              ),
+                            ),
+                          ),
+                        ),
+                      ],
+                    ),
+                  ),
+                ),
+              );
+            },
+          ),
+        ),
+      ),
+    );
+  }
+}
diff --git a/lib/pages/settings_views/global_settings_view/startup_preferences/startup_preferences_view.dart b/lib/pages/settings_views/global_settings_view/startup_preferences/startup_preferences_view.dart
index 186b9b293..c6e26c4b8 100644
--- a/lib/pages/settings_views/global_settings_view/startup_preferences/startup_preferences_view.dart
+++ b/lib/pages/settings_views/global_settings_view/startup_preferences/startup_preferences_view.dart
@@ -1,7 +1,9 @@
 import 'package:flutter/material.dart';
 import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:flutter_svg/flutter_svg.dart';
 import 'package:stackwallet/pages/settings_views/global_settings_view/startup_preferences/startup_wallet_selection_view.dart';
-import 'package:stackwallet/providers/global/prefs_provider.dart';
+import 'package:stackwallet/providers/providers.dart';
+import 'package:stackwallet/utilities/assets.dart';
 import 'package:stackwallet/utilities/constants.dart';
 import 'package:stackwallet/utilities/text_styles.dart';
 import 'package:stackwallet/utilities/theme/stack_colors.dart';
@@ -21,6 +23,31 @@ class StartupPreferencesView extends ConsumerStatefulWidget {
 
 class _StartupPreferencesViewState
     extends ConsumerState<StartupPreferencesView> {
+  bool safe = true;
+
+  @override
+  void initState() {
+    final possibleWalletId =
+        ref.read(prefsChangeNotifierProvider).startupWalletId;
+
+    // check if wallet exists (hasn't been deleted or otherwise missing)
+    if (possibleWalletId != null) {
+      try {
+        ref.read(walletsChangeNotifierProvider).getManager(possibleWalletId);
+      } catch (_) {
+        safe = false;
+        WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
+          ref.read(prefsChangeNotifierProvider).startupWalletId = null;
+          setState(() {
+            safe = true;
+          });
+        });
+      }
+    }
+
+    super.initState();
+  }
+
   @override
   Widget build(BuildContext context) {
     return Background(
@@ -195,13 +222,73 @@ class _StartupPreferencesViewState
                                                           context),
                                                   textAlign: TextAlign.left,
                                                 ),
-                                                Text(
-                                                  "Select a specific wallet to load into on startup",
-                                                  style:
-                                                      STextStyles.itemSubtitle(
-                                                          context),
-                                                  textAlign: TextAlign.left,
-                                                ),
+                                                (safe &&
+                                                        ref.watch(
+                                                              prefsChangeNotifierProvider
+                                                                  .select((value) =>
+                                                                      value
+                                                                          .startupWalletId),
+                                                            ) !=
+                                                            null)
+                                                    ? Padding(
+                                                        padding:
+                                                            const EdgeInsets
+                                                                .only(top: 12),
+                                                        child: Row(
+                                                          children: [
+                                                            SvgPicture.asset(
+                                                              Assets.svg
+                                                                  .iconFor(
+                                                                coin: ref
+                                                                    .watch(
+                                                                      walletsChangeNotifierProvider
+                                                                          .select(
+                                                                        (value) =>
+                                                                            value.getManager(
+                                                                          ref.watch(
+                                                                            prefsChangeNotifierProvider.select((value) =>
+                                                                                value.startupWalletId!),
+                                                                          ),
+                                                                        ),
+                                                                      ),
+                                                                    )
+                                                                    .coin,
+                                                              ),
+                                                            ),
+                                                            const SizedBox(
+                                                              width: 10,
+                                                            ),
+                                                            Text(
+                                                              ref
+                                                                  .watch(
+                                                                    walletsChangeNotifierProvider
+                                                                        .select(
+                                                                      (value) =>
+                                                                          value
+                                                                              .getManager(
+                                                                        ref.watch(
+                                                                          prefsChangeNotifierProvider.select((value) =>
+                                                                              value.startupWalletId!),
+                                                                        ),
+                                                                      ),
+                                                                    ),
+                                                                  )
+                                                                  .walletName,
+                                                              style: STextStyles
+                                                                  .itemSubtitle(
+                                                                      context),
+                                                            ),
+                                                          ],
+                                                        ),
+                                                      )
+                                                    : Text(
+                                                        "Select a specific wallet to load into on startup",
+                                                        style: STextStyles
+                                                            .itemSubtitle(
+                                                                context),
+                                                        textAlign:
+                                                            TextAlign.left,
+                                                      ),
                                               ],
                                             ),
                                           ),
diff --git a/lib/pages_desktop_specific/settings/settings_menu/appearance_settings.dart b/lib/pages_desktop_specific/settings/settings_menu/appearance_settings.dart
index 014093f56..f3250fe23 100644
--- a/lib/pages_desktop_specific/settings/settings_menu/appearance_settings.dart
+++ b/lib/pages_desktop_specific/settings/settings_menu/appearance_settings.dart
@@ -112,6 +112,44 @@ class _AppearanceOptionSettings
                         ],
                       ),
                     ),
+                    // const Padding(
+                    //   padding: EdgeInsets.all(10.0),
+                    //   child: Divider(
+                    //     thickness: 0.5,
+                    //   ),
+                    // ),
+                    // Padding(
+                    //   padding: const EdgeInsets.all(10.0),
+                    //   child: Row(
+                    //     mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                    //     children: [
+                    //       Text(
+                    //         "System brightness",
+                    //         style: STextStyles.desktopTextExtraSmall(context)
+                    //             .copyWith(
+                    //                 color: Theme.of(context)
+                    //                     .extension<StackColors>()!
+                    //                     .textDark),
+                    //         textAlign: TextAlign.left,
+                    //       ),
+                    //       SizedBox(
+                    //         height: 20,
+                    //         width: 40,
+                    //         child: DraggableSwitchButton(
+                    //           isOn: ref.watch(
+                    //             prefsChangeNotifierProvider.select(
+                    //                 (value) => value.enableSystemBrightness),
+                    //           ),
+                    //           onValueChanged: (newValue) {
+                    //             ref
+                    //                 .read(prefsChangeNotifierProvider)
+                    //                 .enableSystemBrightness = newValue;
+                    //           },
+                    //         ),
+                    //       )
+                    //     ],
+                    //   ),
+                    // ),
                     const Padding(
                       padding: EdgeInsets.all(10.0),
                       child: Divider(
@@ -166,6 +204,8 @@ class _ThemeToggle extends ConsumerState<ThemeToggle> {
         return Assets.svg.themeLight;
       case ThemeType.dark:
         return Assets.svg.themeDark;
+      case ThemeType.darkChans:
+        return Assets.svg.themeDarkChan;
       case ThemeType.oceanBreeze:
         return Assets.svg.themeOcean;
       case ThemeType.oledBlack:
@@ -192,14 +232,12 @@ class _ThemeToggle extends ConsumerState<ThemeToggle> {
               cursor: SystemMouseCursors.click,
               child: GestureDetector(
                 onTap: () {
-                  if (ref.read(colorThemeProvider.state).state.themeType !=
+                  if (ref.read(colorThemeProvider.notifier).state.themeType !=
                       ThemeType.values[i]) {
-                    DB.instance.put<dynamic>(
-                      boxName: DB.boxNameTheme,
-                      key: "colorScheme",
-                      value: ThemeType.values[i].name,
-                    );
-                    ref.read(colorThemeProvider.state).state =
+                    ref.read(prefsChangeNotifierProvider.notifier).theme =
+                        ThemeType.values[i];
+
+                    ref.read(colorThemeProvider.notifier).state =
                         StackColors.fromStackColorTheme(
                             ThemeType.values[i].colorTheme);
                   }
@@ -215,7 +253,7 @@ class _ThemeToggle extends ConsumerState<ThemeToggle> {
                           border: Border.all(
                             width: 2.5,
                             color: ref
-                                        .read(colorThemeProvider.state)
+                                        .read(colorThemeProvider.notifier)
                                         .state
                                         .themeType ==
                                     ThemeType.values[i]
diff --git a/lib/route_generator.dart b/lib/route_generator.dart
index a6e69f8d6..7903b1796 100644
--- a/lib/route_generator.dart
+++ b/lib/route_generator.dart
@@ -51,6 +51,7 @@ import 'package:stackwallet/pages/paynym/add_new_paynym_follow_view.dart';
 import 'package:stackwallet/pages/paynym/paynym_claim_view.dart';
 import 'package:stackwallet/pages/paynym/paynym_home_view.dart';
 import 'package:stackwallet/pages/pinpad_views/create_pin_view.dart';
+import 'package:stackwallet/pages/receive_view/addresses/address_details_view.dart';
 import 'package:stackwallet/pages/receive_view/addresses/edit_address_label_view.dart';
 import 'package:stackwallet/pages/receive_view/addresses/wallet_addresses_view.dart';
 import 'package:stackwallet/pages/receive_view/generate_receiving_uri_qr_code_view.dart';
@@ -139,6 +140,7 @@ import 'package:stackwallet/services/event_bus/events/global/node_connection_sta
 import 'package:stackwallet/services/event_bus/events/global/wallet_sync_status_changed_event.dart';
 import 'package:stackwallet/utilities/enums/add_wallet_type_enum.dart';
 import 'package:stackwallet/utilities/enums/coin_enum.dart';
+import 'package:stackwallet/utilities/theme/color_theme.dart';
 import 'package:tuple/tuple.dart';
 
 class RouteGenerator {
@@ -684,6 +686,21 @@ class RouteGenerator {
         }
         return _routeError("${settings.name} invalid args: ${args.toString()}");
 
+      case SystemBrightnessThemeSelectionView.routeName:
+        if (args is Tuple2<String, ThemeType>) {
+          return getRoute(
+            shouldUseMaterialRoute: useMaterialPageRoute,
+            builder: (_) => SystemBrightnessThemeSelectionView(
+              brightness: args.item1,
+              current: args.item2,
+            ),
+            settings: RouteSettings(
+              name: settings.name,
+            ),
+          );
+        }
+        return _routeError("${settings.name} invalid args: ${args.toString()}");
+
       case WalletNetworkSettingsView.routeName:
         if (args is Tuple3<String, WalletSyncStatus, NodeConnectionStatus>) {
           return getRoute(
@@ -956,6 +973,21 @@ class RouteGenerator {
         }
         return _routeError("${settings.name} invalid args: ${args.toString()}");
 
+      case AddressDetailsView.routeName:
+        if (args is Tuple2<Id, String>) {
+          return getRoute(
+            shouldUseMaterialRoute: useMaterialPageRoute,
+            builder: (_) => AddressDetailsView(
+              walletId: args.item2,
+              addressId: args.item1,
+            ),
+            settings: RouteSettings(
+              name: settings.name,
+            ),
+          );
+        }
+        return _routeError("${settings.name} invalid args: ${args.toString()}");
+
       case SendView.routeName:
         if (args is Tuple2<String, Coin>) {
           return getRoute(
diff --git a/lib/services/coins/bitcoin/bitcoin_wallet.dart b/lib/services/coins/bitcoin/bitcoin_wallet.dart
index d3a1e8495..ed969bf5d 100644
--- a/lib/services/coins/bitcoin/bitcoin_wallet.dart
+++ b/lib/services/coins/bitcoin/bitcoin_wallet.dart
@@ -1842,6 +1842,7 @@ class BitcoinWallet extends CoinServiceAPI
 
           bool shouldBlock = false;
           String? blockReason;
+          String? label;
 
           if (storedTx?.subType ==
               isar_models.TransactionSubType.bip47Notification) {
@@ -1849,10 +1850,11 @@ class BitcoinWallet extends CoinServiceAPI
               shouldBlock = true;
               blockReason = "Incoming paynym notification transaction.";
             } else if (storedTx?.type == isar_models.TransactionType.outgoing) {
-              shouldBlock = true;
+              shouldBlock = false;
               blockReason = "Paynym notification change output. Incautious "
                   "handling of change outputs from notification transactions "
                   "may cause unintended loss of privacy.";
+              label = blockReason;
             }
           }
 
@@ -1875,7 +1877,7 @@ class BitcoinWallet extends CoinServiceAPI
             txid: txn["txid"] as String,
             vout: vout,
             value: jsonUTXO["value"] as int,
-            name: "",
+            name: label ?? "",
             isBlocked: shouldBlock,
             blockedReason: blockReason,
             isCoinbase: txn["is_coinbase"] as bool? ?? false,
diff --git a/lib/services/coins/dogecoin/dogecoin_wallet.dart b/lib/services/coins/dogecoin/dogecoin_wallet.dart
index a86d6fcd6..1c21407c8 100644
--- a/lib/services/coins/dogecoin/dogecoin_wallet.dart
+++ b/lib/services/coins/dogecoin/dogecoin_wallet.dart
@@ -1587,6 +1587,7 @@ class DogecoinWallet extends CoinServiceAPI
 
           bool shouldBlock = false;
           String? blockReason;
+          String? label;
 
           if (storedTx?.subType ==
               isar_models.TransactionSubType.bip47Notification) {
@@ -1594,10 +1595,11 @@ class DogecoinWallet extends CoinServiceAPI
               shouldBlock = true;
               blockReason = "Incoming paynym notification transaction.";
             } else if (storedTx?.type == isar_models.TransactionType.outgoing) {
-              shouldBlock = true;
+              shouldBlock = false;
               blockReason = "Paynym notification change output. Incautious "
                   "handling of change outputs from notification transactions "
                   "may cause unintended loss of privacy.";
+              label = blockReason;
             }
           }
 
@@ -1620,7 +1622,7 @@ class DogecoinWallet extends CoinServiceAPI
             txid: txn["txid"] as String,
             vout: vout,
             value: jsonUTXO["value"] as int,
-            name: "",
+            name: label ?? "",
             isBlocked: shouldBlock,
             blockedReason: blockReason,
             isCoinbase: txn["is_coinbase"] as bool? ?? false,
diff --git a/lib/services/coins/firo/firo_wallet.dart b/lib/services/coins/firo/firo_wallet.dart
index ca94db6e3..83d718fb0 100644
--- a/lib/services/coins/firo/firo_wallet.dart
+++ b/lib/services/coins/firo/firo_wallet.dart
@@ -2460,7 +2460,14 @@ class FiroWallet extends CoinServiceAPI with WalletCache, WalletDB, FiroHive {
 
           // Logging.instance.log("$value $tx $ltx");
           if (!jindexes!.contains(value.index) && tx == null) {
+            if (!value.isUsed &&
+                ltx != null &&
+                ltx.isConfirmed(currentChainHeight, MINIMUM_CONFIRMATIONS)) {
+              // mint tx, add value to balance
+              intLelantusBalance += value.value;
+            } /* else {
             // This coin is not confirmed and may be replaced
+            }*/
           } else if (jindexes.contains(value.index) &&
               tx == null &&
               !value.isUsed &&
@@ -2654,7 +2661,7 @@ class FiroWallet extends CoinServiceAPI with WalletCache, WalletDB, FiroHive {
 
   Future<List<Map<String, dynamic>>> createMintsFromAmount(int total) async {
     var tmpTotal = total;
-    var index = 0;
+    var index = 1;
     var mints = <Map<String, dynamic>>[];
     final nextFreeMintIndex = firoGetMintIndex()!;
     while (tmpTotal > 0) {
diff --git a/lib/utilities/assets.dart b/lib/utilities/assets.dart
index 5d5f97feb..450474e25 100644
--- a/lib/utilities/assets.dart
+++ b/lib/utilities/assets.dart
@@ -27,6 +27,7 @@ abstract class Assets {
 
     if (Util.isDesktop) {
       assets.add(svg.themeChan);
+      assets.add(svg.themeDarkChan);
     }
 
     final futures = assets.map(
@@ -71,6 +72,7 @@ class _BUY {
     switch (Theme.of(context).extension<StackColors>()!.themeType) {
       case ThemeType.dark:
       case ThemeType.oledBlack:
+      case ThemeType.darkChans:
         return "assets/svg/buy/Simplex-Nuvei-Logo-light.svg";
 
       case ThemeType.fruitSorbet:
@@ -102,6 +104,9 @@ class _SVG {
       // chan theme uses all the same assets as the light theme
       case ThemeType.chan:
         return "assets/svg/themed/${ThemeType.light.name}";
+      case ThemeType.darkChans:
+        return "assets/svg/themed/${ThemeType.dark.name}";
+
       default:
         return "assets/svg/themed/${Theme.of(context).extension<StackColors>()!.themeType.name}";
     }
@@ -115,6 +120,7 @@ class _SVG {
       case ThemeType.chan:
       case ThemeType.dark:
       case ThemeType.oledBlack:
+      case ThemeType.darkChans:
         return null;
 
       case ThemeType.oceanBreeze:
@@ -163,6 +169,7 @@ class _SVG {
   String get themeLight => "assets/svg/light-mode.svg";
   String get themeDark => "assets/svg/dark-theme.svg";
   String get themeChan => "assets/svg/chanstheme.svg";
+  String get themeDarkChan => "assets/svg/darkChansTheme.svg";
 
   String get circleSliders => "assets/svg/configuration.svg";
   String get circlePlus => "assets/svg/plus-circle.svg";
@@ -414,6 +421,8 @@ class _ANIMATIONS {
 class _GIF {
   const _GIF();
 
+  String get stacyPlain => "assets/gif/stacy-plain.gif";
+
   String plain(Coin coin) {
     return "assets/gif/coins/${coin.mainNetVersion.name}/plain.gif";
   }
diff --git a/lib/utilities/constants.dart b/lib/utilities/constants.dart
index 242992233..c11dbcd01 100644
--- a/lib/utilities/constants.dart
+++ b/lib/utilities/constants.dart
@@ -42,7 +42,7 @@ abstract class Constants {
   // Enable Logger.print statements
   static const bool disableLogger = false;
 
-  static const int currentHiveDbVersion = 5;
+  static const int currentHiveDbVersion = 7;
 
   static const int rescanV1 = 1;
 
diff --git a/lib/utilities/db_version_migration.dart b/lib/utilities/db_version_migration.dart
index 97b3630df..44e3682c8 100644
--- a/lib/utilities/db_version_migration.dart
+++ b/lib/utilities/db_version_migration.dart
@@ -1,9 +1,11 @@
 import 'package:hive/hive.dart';
 import 'package:stackwallet/db/hive/db.dart';
 import 'package:stackwallet/db/isar/main_db.dart';
+import 'package:isar/isar.dart';
 import 'package:stackwallet/electrumx_rpc/electrumx.dart';
 import 'package:stackwallet/models/exchange/change_now/exchange_transaction.dart';
 import 'package:stackwallet/models/exchange/response_objects/trade.dart';
+import 'package:stackwallet/models/isar/models/blockchain_data/address.dart';
 import 'package:stackwallet/models/isar/models/isar_models.dart' as isar_models;
 import 'package:stackwallet/models/models.dart';
 import 'package:stackwallet/models/node_model.dart';
@@ -185,6 +187,97 @@ class DbVersionMigrator with WalletDB {
         // try to continue migrating
         return await migrate(5, secureStore: secureStore);
 
+      case 5:
+        // migrate
+        await Hive.openBox<dynamic>("theme");
+        await Hive.openBox<dynamic>(DB.boxNamePrefs);
+
+        final themeName =
+            DB.instance.get<dynamic>(boxName: "theme", key: "colorScheme")
+                    as String? ??
+                "light";
+
+        await DB.instance.put<dynamic>(
+            boxName: DB.boxNamePrefs, key: "theme", value: themeName);
+
+        // update version
+        await DB.instance.put<dynamic>(
+            boxName: DB.boxNameDBInfo, key: "hive_data_version", value: 6);
+
+        // try to continue migrating
+        return await migrate(6, secureStore: secureStore);
+
+      case 6:
+        // migrate
+        await MainDB.instance.initMainDB();
+        final count = await MainDB.instance.isar.addresses.count();
+        // add change/receiving tags to address labels
+        for (var i = 0; i < count; i += 50) {
+          final addresses = await MainDB.instance.isar.addresses
+              .where()
+              .offset(i)
+              .limit(50)
+              .findAll();
+
+          final List<isar_models.AddressLabel> labels = [];
+          for (final address in addresses) {
+            List<String>? tags;
+            switch (address.subType) {
+              case AddressSubType.receiving:
+                tags = ["receiving"];
+                break;
+              case AddressSubType.change:
+                tags = ["change"];
+                break;
+              case AddressSubType.paynymNotification:
+                tags = ["paynym notification"];
+                break;
+              case AddressSubType.paynymSend:
+                break;
+              case AddressSubType.paynymReceive:
+                tags = ["paynym receiving"];
+                break;
+              case AddressSubType.unknown:
+                break;
+              case AddressSubType.nonWallet:
+                break;
+            }
+
+            // update/create label if tags is not empty
+            if (tags != null) {
+              isar_models.AddressLabel? label = await MainDB
+                  .instance.isar.addressLabels
+                  .where()
+                  .addressStringWalletIdEqualTo(address.value, address.walletId)
+                  .findFirst();
+              if (label == null) {
+                label = isar_models.AddressLabel(
+                  walletId: address.walletId,
+                  value: "",
+                  addressString: address.value,
+                  tags: tags,
+                );
+              } else if (label.tags == null) {
+                label = label.copyWith(tags: tags);
+              }
+              labels.add(label);
+            }
+          }
+
+          if (labels.isNotEmpty) {
+            await MainDB.instance.isar.writeTxn(() async {
+              await MainDB.instance.isar.addressLabels.putAll(labels);
+            });
+          }
+        }
+
+        // update version
+        await DB.instance.put<dynamic>(
+            boxName: DB.boxNameDBInfo, key: "hive_data_version", value: 7);
+
+        // try to continue migrating
+        return await migrate(7, secureStore: secureStore);
+
       default:
         // finally return
         return;
diff --git a/lib/utilities/delete_everything.dart b/lib/utilities/delete_everything.dart
index 446f43b3a..3c12fba85 100644
--- a/lib/utilities/delete_everything.dart
+++ b/lib/utilities/delete_everything.dart
@@ -21,7 +21,7 @@ Future<bool> deleteEverything() async {
         .deleteBoxFromDisk(boxName: DB.boxNameWalletsToDeleteOnStart);
     await DB.instance.deleteBoxFromDisk(boxName: DB.boxNamePriceCache);
     await DB.instance.deleteBoxFromDisk(boxName: DB.boxNameDBInfo);
-    await DB.instance.deleteBoxFromDisk(boxName: DB.boxNameTheme);
+    await DB.instance.deleteBoxFromDisk(boxName: "theme");
     return true;
   } catch (e, s) {
     Logging.instance.log("$e $s", level: LogLevel.Error);
diff --git a/lib/utilities/prefs.dart b/lib/utilities/prefs.dart
index fc511ff10..7dd17e2ad 100644
--- a/lib/utilities/prefs.dart
+++ b/lib/utilities/prefs.dart
@@ -4,6 +4,7 @@ import 'package:stackwallet/utilities/constants.dart';
 import 'package:stackwallet/utilities/enums/backup_frequency_type.dart';
 import 'package:stackwallet/utilities/enums/languages_enum.dart';
 import 'package:stackwallet/utilities/enums/sync_type_enum.dart';
+import 'package:stackwallet/utilities/theme/color_theme.dart';
 import 'package:uuid/uuid.dart';
 
 class Prefs extends ChangeNotifier {
@@ -41,6 +42,10 @@ class Prefs extends ChangeNotifier {
       _userId = await _getUserId();
       _signupEpoch = await _getSignupEpoch();
       _enableCoinControl = await _getEnableCoinControl();
+      _enableSystemBrightness = await _getEnableSystemBrightness();
+      _theme = await _getTheme();
+      _systemBrightnessLightTheme = await _getSystemBrightnessLightTheme();
+      _systemBrightnessDarkTheme = await _getSystemBrightnessDarkTheme();
 
       _initialized = true;
     }
@@ -669,4 +674,96 @@ class Prefs extends ChangeNotifier {
             boxName: DB.boxNamePrefs, key: "enableCoinControl") as bool? ??
         false;
   }
+
+  // follow system brightness
+
+  bool _enableSystemBrightness = false;
+
+  bool get enableSystemBrightness => _enableSystemBrightness;
+
+  set enableSystemBrightness(bool enableSystemBrightness) {
+    if (_enableSystemBrightness != enableSystemBrightness) {
+      DB.instance.put<dynamic>(
+          boxName: DB.boxNamePrefs,
+          key: "enableSystemBrightness",
+          value: enableSystemBrightness);
+      _enableSystemBrightness = enableSystemBrightness;
+      notifyListeners();
+    }
+  }
+
+  Future<bool> _getEnableSystemBrightness() async {
+    return await DB.instance.get<dynamic>(
+            boxName: DB.boxNamePrefs, key: "enableSystemBrightness") as bool? ??
+        false;
+  }
+
+  // system brightness light theme name
+
+  ThemeType _theme = ThemeType.light;
+
+  ThemeType get theme => _theme;
+
+  set theme(ThemeType theme) {
+    if (this.theme != theme) {
+      DB.instance.put<dynamic>(
+          boxName: DB.boxNamePrefs, key: "theme", value: theme.name);
+      _theme = theme;
+      notifyListeners();
+    }
+  }
+
+  Future<ThemeType> _getTheme() async {
+    return ThemeTypeExt.fromName(await DB.instance
+            .get<dynamic>(boxName: DB.boxNamePrefs, key: "theme") as String? ??
+        ThemeType.light.name);
+  }
+
+  // system brightness light theme name
+
+  ThemeType _systemBrightnessLightTheme = ThemeType.light;
+
+  ThemeType get systemBrightnessLightTheme => _systemBrightnessLightTheme;
+
+  set systemBrightnessLightTheme(ThemeType systemBrightnessLightTheme) {
+    if (this.systemBrightnessLightTheme != systemBrightnessLightTheme) {
+      DB.instance.put<dynamic>(
+          boxName: DB.boxNamePrefs,
+          key: "systemBrightnessLightTheme",
+          value: systemBrightnessLightTheme.name);
+      _systemBrightnessLightTheme = systemBrightnessLightTheme;
+      notifyListeners();
+    }
+  }
+
+  Future<ThemeType> _getSystemBrightnessLightTheme() async {
+    return ThemeTypeExt.fromName(await DB.instance.get<dynamic>(
+            boxName: DB.boxNamePrefs,
+            key: "systemBrightnessLightTheme") as String? ??
+        ThemeType.light.name);
+  }
+
+  // system brightness dark theme name
+
+  ThemeType _systemBrightnessDarkTheme = ThemeType.dark;
+
+  ThemeType get systemBrightnessDarkTheme => _systemBrightnessDarkTheme;
+
+  set systemBrightnessDarkTheme(ThemeType systemBrightnessDarkTheme) {
+    if (this.systemBrightnessDarkTheme != systemBrightnessDarkTheme) {
+      DB.instance.put<dynamic>(
+          boxName: DB.boxNamePrefs,
+          key: "systemBrightnessDarkTheme",
+          value: systemBrightnessDarkTheme.name);
+      _systemBrightnessDarkTheme = systemBrightnessDarkTheme;
+      notifyListeners();
+    }
+  }
+
+  Future<ThemeType> _getSystemBrightnessDarkTheme() async {
+    return ThemeTypeExt.fromName(await DB.instance.get<dynamic>(
+            boxName: DB.boxNamePrefs,
+            key: "systemBrightnessDarkTheme") as String? ??
+        ThemeType.dark.name);
+  }
 }
diff --git a/lib/utilities/theme/color_theme.dart b/lib/utilities/theme/color_theme.dart
index 99df536ac..fcdb6c8c7 100644
--- a/lib/utilities/theme/color_theme.dart
+++ b/lib/utilities/theme/color_theme.dart
@@ -6,6 +6,7 @@ import 'package:stackwallet/utilities/theme/fruit_sorbet_colors.dart';
 import 'package:stackwallet/utilities/theme/light_colors.dart';
 import 'package:stackwallet/utilities/theme/ocean_breeze_colors.dart';
 import 'package:stackwallet/utilities/theme/oled_black_colors.dart';
+import 'package:stackwallet/utilities/theme/oled_chans_colors.dart';
 
 import 'chan_colors.dart';
 
@@ -16,12 +17,36 @@ enum ThemeType {
   oledBlack,
   fruitSorbet,
   forest,
-  chan;
+  chan,
+  darkChans;
 }
 
 // adjust this file
 
 extension ThemeTypeExt on ThemeType {
+  static ThemeType fromName(String name) {
+    switch (name) {
+      case "light":
+        return ThemeType.light;
+      case "chan":
+        return ThemeType.chan;
+      case "dark":
+        return ThemeType.dark;
+      case "oceanBreeze":
+        return ThemeType.oceanBreeze;
+      case "oledBlack":
+        return ThemeType.oledBlack;
+      case "fruitSorbet":
+        return ThemeType.fruitSorbet;
+      case "forest":
+        return ThemeType.forest;
+      case "darkChans":
+        return ThemeType.darkChans;
+      default:
+        throw ArgumentError("Invalid theme name");
+    }
+  }
+
   StackColorTheme get colorTheme {
     switch (this) {
       case ThemeType.light:
@@ -38,6 +63,8 @@ extension ThemeTypeExt on ThemeType {
         return FruitSorbetColors();
       case ThemeType.forest:
         return ForestColors();
+      case ThemeType.darkChans:
+        return DarkChansColors();
     }
   }
 
@@ -57,6 +84,8 @@ extension ThemeTypeExt on ThemeType {
         return "Fruit Sorbet";
       case ThemeType.forest:
         return "Forest";
+      case ThemeType.darkChans:
+        return "Dark Chans";
     }
   }
 }
diff --git a/lib/utilities/theme/oled_black_colors.dart b/lib/utilities/theme/oled_black_colors.dart
index 71d4b2361..4f273eeff 100644
--- a/lib/utilities/theme/oled_black_colors.dart
+++ b/lib/utilities/theme/oled_black_colors.dart
@@ -326,7 +326,7 @@ class OledBlackColors extends StackColorTheme {
   Color get textConfirmTotalAmount =>
       textFieldSuccessLabel; //const Color(0xFF144D35);
   @override
-  Color get textSelectedWordTableItem => const Color(0xFF143D8E);
+  Color get textSelectedWordTableItem => const Color(0xFFF26822);
 
   //rate type toggle
   @override
diff --git a/lib/utilities/theme/oled_chans_colors.dart b/lib/utilities/theme/oled_chans_colors.dart
new file mode 100644
index 000000000..83600d5d5
--- /dev/null
+++ b/lib/utilities/theme/oled_chans_colors.dart
@@ -0,0 +1,351 @@
+import 'package:flutter/material.dart';
+import 'package:stackwallet/utilities/theme/color_theme.dart';
+
+class DarkChansColors extends StackColorTheme {
+  @override
+  ThemeType get themeType => ThemeType.darkChans;
+  @override
+  Brightness get brightness => Brightness.dark;
+
+  @override
+  Color get background => const Color(0xFF2A2D34);
+  @override
+  Color get backgroundAppBar => background;
+  @override
+  Gradient? get gradientBackground => null;
+
+  @override
+  Color get overlay => const Color(0xFF111215);
+
+  @override
+  Color get accentColorBlue => const Color(0xFF4C86E9);
+  @override
+  Color get accentColorGreen => const Color(0xFF4CC0A0);
+  @override
+  Color get accentColorYellow => const Color(0xFFF7D65D);
+  @override
+  Color get accentColorRed => const Color(0xFFD34E50);
+  @override
+  Color get accentColorOrange => const Color(0xFFFEA68D);
+  @override
+  Color get accentColorDark => const Color(0xFFF3F3F3);
+
+  @override
+  Color get shadow => const Color(0x0F2D3132);
+
+  @override
+  Color get textDark => const Color(0xFFF3F3F3);
+  @override
+  Color get textDark2 => const Color(0xFFDBDBDB);
+  @override
+  Color get textDark3 => const Color(0xFFEEEFF1);
+  @override
+  Color get textSubtitle1 => const Color(0xFF9E9E9E);
+  @override
+  Color get textSubtitle2 => const Color(0xFF969696);
+  @override
+  Color get textSubtitle3 => const Color(0xFFA9ACAC);
+  @override
+  Color get textSubtitle4 => const Color(0xFF8E9192);
+  @override
+  Color get textSubtitle5 => const Color(0xFF747778);
+  @override
+  Color get textSubtitle6 => const Color(0xFF414141);
+  @override
+  Color get textWhite => const Color(0xFF232323);
+  @override
+  Color get textFavoriteCard => const Color(0xFF232323);
+  @override
+  Color get textError => const Color(0xFFF37475);
+  @override
+  Color get textRestore => overlay;
+
+  // button background
+  @override
+  Color get buttonBackPrimary => const Color(0xFF4C86E9);
+  @override
+  Color get buttonBackSecondary => const Color(0xFF444E5C);
+  @override
+  Color get buttonBackPrimaryDisabled => const Color(0xFF38517C);
+  @override
+  Color get buttonBackSecondaryDisabled => const Color(0xFF3B3F46);
+  @override
+  Color get buttonBackBorder => const Color(0xFF4C86E9);
+  @override
+  Color get buttonBackBorderDisabled => const Color(0xFF314265);
+  @override
+  Color get buttonBackBorderSecondary => buttonBackSecondary;
+  @override
+  Color get buttonBackBorderSecondaryDisabled => buttonBackSecondaryDisabled;
+
+  @override
+  Color get numberBackDefault => const Color(0xFF484B51);
+  @override
+  Color get numpadBackDefault => const Color(0xFF4C86E9);
+  @override
+  Color get bottomNavBack => const Color(0xFF3E4148);
+
+  // button text/element
+  @override
+  Color get buttonTextPrimary => const Color(0xFFFFFFFF);
+  @override
+  Color get buttonTextSecondary => const Color(0xFFFFFFFF);
+  @override
+  Color get buttonTextPrimaryDisabled => const Color(0xFFFFFFFF);
+  @override
+  Color get buttonTextSecondaryDisabled => const Color(0xFF6A6C71);
+  @override
+  Color get buttonTextBorder => const Color(0xFF4C86E9);
+  @override
+  Color get buttonTextDisabled => const Color(0xFF314265);
+  @override
+  Color get buttonTextBorderless => const Color(0xFF4C86E9);
+  @override
+  Color get buttonTextBorderlessDisabled => const Color(0xFFB6B6B6);
+  @override
+  Color get numberTextDefault => const Color(0xFFFFFFFF);
+  @override
+  Color get numpadTextDefault => const Color(0xFFFFFFFF);
+  @override
+  Color get bottomNavText => const Color(0xFFFFFFFF);
+  @override
+  Color get customTextButtonEnabledText => buttonTextBorderless;
+  @override
+  Color get customTextButtonDisabledText => textSubtitle1;
+
+  // switch
+  @override
+  Color get switchBGOn => const Color(0xFF4C86E9);
+  @override
+  Color get switchBGOff => const Color(0xFFC1D9FF);
+  @override
+  Color get switchBGDisabled => const Color(0xFFB5B7BA);
+  @override
+  Color get switchCircleOn => const Color(0xFFC9DDFF);
+  @override
+  Color get switchCircleOff => const Color(0xFFFFFFFF);
+  @override
+  Color get switchCircleDisabled => const Color(0xFFFFFFFF);
+
+  // step indicator background
+  @override
+  Color get stepIndicatorBGCheck => const Color(0xFF4C86E9);
+  @override
+  Color get stepIndicatorBGNumber => const Color(0xFF4C86E9);
+  @override
+  Color get stepIndicatorBGInactive => const Color(0xFF3B3F46);
+  @override
+  Color get stepIndicatorBGLines => const Color(0xFF4C86E9);
+  @override
+  Color get stepIndicatorBGLinesInactive => const Color(0xFF3B3F46);
+  @override
+  Color get stepIndicatorIconText => const Color(0xFFFFFFFF);
+  @override
+  Color get stepIndicatorIconNumber => const Color(0xFFFFFFFF);
+  @override
+  Color get stepIndicatorIconInactive => const Color(0xFF747474);
+
+  // checkbox
+  @override
+  Color get checkboxBGChecked => const Color(0xFF4C86E9);
+  @override
+  Color get checkboxBorderEmpty => const Color(0xFF8E9192);
+  @override
+  Color get checkboxBGDisabled => const Color(0xFFADC7EC);
+  @override
+  Color get checkboxIconChecked => const Color(0xFFFFFFFF);
+  @override
+  Color get checkboxIconDisabled => const Color(0xFFFFFFFF);
+  @override
+  Color get checkboxTextLabel => const Color(0xFFFFFFFF);
+
+  // snack bar
+  @override
+  Color get snackBarBackSuccess => const Color(0xFF8EF5C3);
+  @override
+  Color get snackBarBackError => const Color(0xFFFFB4A9);
+  @override
+  Color get snackBarBackInfo => const Color(0xFFB4C4FF);
+  @override
+  Color get snackBarTextSuccess => const Color(0xFF003921);
+  @override
+  Color get snackBarTextError => const Color(0xFF690001);
+  @override
+  Color get snackBarTextInfo => const Color(0xFF00297A);
+
+  // icons
+  @override
+  Color get bottomNavIconBack => const Color(0xFF7F8185);
+  @override
+  Color get bottomNavIconIcon => const Color(0xFFFFFFFF);
+
+  @override
+  Color get topNavIconPrimary => const Color(0xFFFFFFFF);
+  @override
+  Color get topNavIconGreen => const Color(0xFF4CC0A0);
+  @override
+  Color get topNavIconYellow => const Color(0xFFF7D65D);
+  @override
+  Color get topNavIconRed => const Color(0xFFD34E50);
+
+  @override
+  Color get settingsIconBack => const Color(0xFFE0E3E3);
+  @override
+  Color get settingsIconIcon => const Color(0xFF232323);
+  @override
+  Color get settingsIconBack2 => const Color(0xFF94D6C4);
+  @override
+  Color get settingsIconElement => const Color(0xFF00A578);
+
+  // text field
+  @override
+  Color get textFieldActiveBG => const Color(0xFF4C5360);
+  @override
+  Color get textFieldDefaultBG => const Color(0xFF444953);
+  @override
+  Color get textFieldErrorBG => const Color(0xFFFFB4A9);
+  @override
+  Color get textFieldSuccessBG => const Color(0xFF8EF5C3);
+  @override
+  Color get textFieldErrorBorder => textFieldErrorBG;
+  @override
+  Color get textFieldSuccessBorder => textFieldSuccessBG;
+
+  @override
+  Color get textFieldActiveSearchIconLeft => const Color(0xFFA9ACAC);
+  @override
+  Color get textFieldDefaultSearchIconLeft => const Color(0xFFA9ACAC);
+  @override
+  Color get textFieldErrorSearchIconLeft => const Color(0xFF690001);
+  @override
+  Color get textFieldSuccessSearchIconLeft => const Color(0xFF003921);
+
+  @override
+  Color get textFieldActiveText => const Color(0xFFFFFFFF);
+  @override
+  Color get textFieldDefaultText => const Color(0xFFA9ACAC);
+  @override
+  Color get textFieldErrorText => const Color(0xFF000000);
+  @override
+  Color get textFieldSuccessText => const Color(0xFF000000);
+
+  @override
+  Color get textFieldActiveLabel => const Color(0xFFA9ACAC);
+  @override
+  Color get textFieldErrorLabel => const Color(0xFF690001);
+  @override
+  Color get textFieldSuccessLabel => const Color(0xFF003921);
+
+  @override
+  Color get textFieldActiveSearchIconRight => const Color(0xFFC4C7C7);
+  @override
+  Color get textFieldDefaultSearchIconRight => const Color(0xFF747778);
+  @override
+  Color get textFieldErrorSearchIconRight => const Color(0xFF690001);
+  @override
+  Color get textFieldSuccessSearchIconRight => const Color(0xFF003921);
+
+  // settings item level2
+  @override
+  Color get settingsItem2ActiveBG => const Color(0xFF484B51);
+  @override
+  Color get settingsItem2ActiveText => const Color(0xFFFFFFFF);
+  @override
+  Color get settingsItem2ActiveSub => const Color(0xFF9E9E9E);
+
+  // radio buttons
+  @override
+  Color get radioButtonIconBorder => const Color(0xFF4C86E9);
+  @override
+  Color get radioButtonIconBorderDisabled => const Color(0xFF9E9E9E);
+  @override
+  Color get radioButtonBorderEnabled => const Color(0xFF4C86E9);
+  @override
+  Color get radioButtonBorderDisabled => const Color(0xFFCDCDCD);
+  @override
+  Color get radioButtonIconCircle => const Color(0xFF9E9E9E);
+  @override
+  Color get radioButtonIconEnabled => const Color(0xFF4C86E9);
+  @override
+  Color get radioButtonTextEnabled => const Color(0xFF44464E);
+  @override
+  Color get radioButtonTextDisabled => const Color(0xFF44464E);
+  @override
+  Color get radioButtonLabelEnabled => const Color(0xFF8E9192);
+  @override
+  Color get radioButtonLabelDisabled => const Color(0xFF8E9192);
+
+  // info text
+  @override
+  Color get infoItemBG => const Color(0xFF333942);
+  @override
+  Color get infoItemLabel => const Color(0xFF9E9E9E);
+  @override
+  Color get infoItemText => const Color(0xFFFFFFFF);
+  @override
+  Color get infoItemIcons => const Color(0xFF4C86E9);
+
+  // popup
+  @override
+  Color get popupBG => const Color(0xFF333942);
+
+  // currency list
+  @override
+  Color get currencyListItemBG => const Color(0xFF484B51);
+
+  // bottom nav
+  @override
+  Color get stackWalletBG => const Color(0xFF35383D);
+  @override
+  Color get stackWalletMid => const Color(0xFF292D34);
+  @override
+  Color get stackWalletBottom => const Color(0xFFFFFFFF);
+  @override
+  Color get bottomNavShadow => const Color(0xFF282E33);
+
+  @override
+  Color get favoriteStarActive => accentColorYellow;
+  @override
+  Color get favoriteStarInactive => textSubtitle2;
+
+  @override
+  Color get splash => const Color(0x358E9192);
+  @override
+  Color get highlight => const Color(0x44A9ACAC);
+  @override
+  Color get warningForeground => snackBarTextError;
+  @override
+  Color get warningBackground => const Color(0xFFFFB4A9);
+  @override
+  Color get loadingOverlayTextColor => const Color(0xFFF7F7F7);
+  @override
+  Color get myStackContactIconBG => const Color(0x88747778);
+  @override
+  Color get textConfirmTotalAmount => const Color(0xFF003921);
+  @override
+  Color get textSelectedWordTableItem => const Color(0xFF00297A);
+
+  //rate type toggle
+  @override
+  Color get rateTypeToggleColorOn => textFieldDefaultBG;
+  @override
+  Color get rateTypeToggleColorOff => popupBG;
+  @override
+  Color get rateTypeToggleDesktopColorOn => textFieldDefaultBG;
+  @override
+  Color get rateTypeToggleDesktopColorOff => buttonBackSecondary;
+
+  @override
+  BoxShadow get standardBoxShadow => BoxShadow(
+        color: shadow,
+        spreadRadius: 3,
+        blurRadius: 4,
+      );
+
+  @override
+  BoxShadow? get homeViewButtonBarBoxShadow => BoxShadow(
+        color: shadow,
+        spreadRadius: 3,
+        blurRadius: 4,
+      );
+}
diff --git a/lib/widgets/custom_buttons/simple_edit_button.dart b/lib/widgets/custom_buttons/simple_edit_button.dart
index 931de7aa4..3bebeb4d0 100644
--- a/lib/widgets/custom_buttons/simple_edit_button.dart
+++ b/lib/widgets/custom_buttons/simple_edit_button.dart
@@ -13,14 +13,23 @@ import '../icon_widgets/pencil_icon.dart';
 class SimpleEditButton extends StatelessWidget {
   const SimpleEditButton({
     Key? key,
-    required this.editValue,
-    required this.editLabel,
-    required this.onValueChanged,
-  }) : super(key: key);
+    this.editValue,
+    this.editLabel,
+    this.onValueChanged,
+    this.onPressedOverride,
+  })  : assert(
+          (editLabel != null && editValue != null && onValueChanged != null) ||
+              (editLabel == null &&
+                  editValue == null &&
+                  onValueChanged == null &&
+                  onPressedOverride != null),
+        ),
+        super(key: key);
 
-  final String editValue;
-  final String editLabel;
-  final void Function(String) onValueChanged;
+  final String? editValue;
+  final String? editLabel;
+  final void Function(String)? onValueChanged;
+  final VoidCallback? onPressedOverride;
 
   @override
   Widget build(BuildContext context) {
@@ -36,24 +45,25 @@ class SimpleEditButton extends StatelessWidget {
           shape: RoundedRectangleBorder(
             borderRadius: BorderRadius.circular(6),
           ),
-          onPressed: () async {
-            final result = await showDialog<String?>(
-              context: context,
-              builder: (context) {
-                return DesktopDialog(
-                  maxWidth: 580,
-                  maxHeight: 360,
-                  child: SingleFieldEditView(
-                    initialValue: editValue,
-                    label: editLabel,
-                  ),
+          onPressed: onPressedOverride ??
+              () async {
+                final result = await showDialog<String?>(
+                  context: context,
+                  builder: (context) {
+                    return DesktopDialog(
+                      maxWidth: 580,
+                      maxHeight: 360,
+                      child: SingleFieldEditView(
+                        initialValue: editValue!,
+                        label: editLabel!,
+                      ),
+                    );
+                  },
                 );
+                if (result is String && result != editValue!) {
+                  onValueChanged?.call(result);
+                }
               },
-            );
-            if (result is String && result != editValue) {
-              onValueChanged(result);
-            }
-          },
           child: Padding(
             padding: const EdgeInsets.all(5),
             child: PencilIcon(
@@ -66,18 +76,19 @@ class SimpleEditButton extends StatelessWidget {
       );
     } else {
       return GestureDetector(
-        onTap: () async {
-          final result = await Navigator.of(context).pushNamed(
-            SingleFieldEditView.routeName,
-            arguments: Tuple2(
-              editValue,
-              editLabel,
-            ),
-          );
-          if (result is String && result != editValue) {
-            onValueChanged(result);
-          }
-        },
+        onTap: onPressedOverride ??
+            () async {
+              final result = await Navigator.of(context).pushNamed(
+                SingleFieldEditView.routeName,
+                arguments: Tuple2(
+                  editValue!,
+                  editLabel!,
+                ),
+              );
+              if (result is String && result != editValue!) {
+                onValueChanged?.call(result);
+              }
+            },
         child: Row(
           children: [
             SvgPicture.asset(
diff --git a/lib/widgets/rounded_white_container.dart b/lib/widgets/rounded_white_container.dart
index 2ade9b729..8208d69ca 100644
--- a/lib/widgets/rounded_white_container.dart
+++ b/lib/widgets/rounded_white_container.dart
@@ -12,6 +12,7 @@ class RoundedWhiteContainer extends StatelessWidget {
     this.height,
     this.borderColor,
     this.boxShadow,
+    this.onPressed,
   }) : super(key: key);
 
   final Widget? child;
@@ -21,6 +22,7 @@ class RoundedWhiteContainer extends StatelessWidget {
   final double? height;
   final Color? borderColor;
   final List<BoxShadow>? boxShadow;
+  final VoidCallback? onPressed;
 
   @override
   Widget build(BuildContext context) {
@@ -32,6 +34,7 @@ class RoundedWhiteContainer extends StatelessWidget {
       height: height,
       borderColor: borderColor,
       boxShadow: boxShadow,
+      onPressed: onPressed,
       child: child,
     );
   }
diff --git a/pubspec.yaml b/pubspec.yaml
index 570b85cdf..1db8de99b 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -11,7 +11,7 @@ description: Stack Wallet
 # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
 # Read more about iOS versioning at
 # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-version: 1.6.3+145
+version: 1.6.4+146
 
 environment:
   sdk: ">=2.17.0 <3.0.0"
@@ -347,6 +347,7 @@ flutter:
     - assets/svg/fruit-sorbet-theme.svg
     - assets/svg/forest-theme.svg
     - assets/svg/chanstheme.svg
+    - assets/svg/darkChansTheme.svg
 
     # light theme specific
     - assets/svg/themed/light/
@@ -374,6 +375,9 @@ flutter:
     # basic
     - assets/lottie/test2.json
 
+    # gifs
+    - assets/gif/
+
     # coin gifs
     - assets/gif/coins/bitcoin/
     - assets/gif/coins/bitcoincash/
diff --git a/test/cached_electrumx_test.mocks.dart b/test/cached_electrumx_test.mocks.dart
index ca8544cc4..6f96a5875 100644
--- a/test/cached_electrumx_test.mocks.dart
+++ b/test/cached_electrumx_test.mocks.dart
@@ -4,7 +4,7 @@
 
 // ignore_for_file: no_leading_underscores_for_library_prefixes
 import 'dart:async' as _i4;
-import 'dart:ui' as _i8;
+import 'dart:ui' as _i9;
 
 import 'package:decimal/decimal.dart' as _i2;
 import 'package:mockito/mockito.dart' as _i1;
@@ -12,6 +12,7 @@ import 'package:stackwallet/electrumx_rpc/electrumx.dart' as _i3;
 import 'package:stackwallet/utilities/enums/backup_frequency_type.dart' as _i7;
 import 'package:stackwallet/utilities/enums/sync_type_enum.dart' as _i6;
 import 'package:stackwallet/utilities/prefs.dart' as _i5;
+import 'package:stackwallet/utilities/theme/color_theme.dart' as _i8;
 
 // ignore_for_file: type=lint
 // ignore_for_file: avoid_redundant_argument_values
@@ -665,6 +666,61 @@ class MockPrefs extends _i1.Mock implements _i5.Prefs {
         returnValueForMissingStub: null,
       );
   @override
+  bool get enableSystemBrightness => (super.noSuchMethod(
+        Invocation.getter(#enableSystemBrightness),
+        returnValue: false,
+      ) as bool);
+  @override
+  set enableSystemBrightness(bool? enableSystemBrightness) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #enableSystemBrightness,
+          enableSystemBrightness,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i8.ThemeType get theme => (super.noSuchMethod(
+        Invocation.getter(#theme),
+        returnValue: _i8.ThemeType.light,
+      ) as _i8.ThemeType);
+  @override
+  set theme(_i8.ThemeType? theme) => super.noSuchMethod(
+        Invocation.setter(
+          #theme,
+          theme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i8.ThemeType get systemBrightnessLightTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessLightTheme),
+        returnValue: _i8.ThemeType.light,
+      ) as _i8.ThemeType);
+  @override
+  set systemBrightnessLightTheme(_i8.ThemeType? systemBrightnessLightTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessLightTheme,
+          systemBrightnessLightTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i8.ThemeType get systemBrightnessDarkTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessDarkTheme),
+        returnValue: _i8.ThemeType.light,
+      ) as _i8.ThemeType);
+  @override
+  set systemBrightnessDarkTheme(_i8.ThemeType? systemBrightnessDarkTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessDarkTheme,
+          systemBrightnessDarkTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
   bool get hasListeners => (super.noSuchMethod(
         Invocation.getter(#hasListeners),
         returnValue: false,
@@ -714,7 +770,7 @@ class MockPrefs extends _i1.Mock implements _i5.Prefs {
         returnValueForMissingStub: _i4.Future<void>.value(),
       ) as _i4.Future<void>);
   @override
-  void addListener(_i8.VoidCallback? listener) => super.noSuchMethod(
+  void addListener(_i9.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #addListener,
           [listener],
@@ -722,7 +778,7 @@ class MockPrefs extends _i1.Mock implements _i5.Prefs {
         returnValueForMissingStub: null,
       );
   @override
-  void removeListener(_i8.VoidCallback? listener) => super.noSuchMethod(
+  void removeListener(_i9.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #removeListener,
           [listener],
diff --git a/test/electrumx_test.mocks.dart b/test/electrumx_test.mocks.dart
index b7147a3b8..e18e0aedf 100644
--- a/test/electrumx_test.mocks.dart
+++ b/test/electrumx_test.mocks.dart
@@ -4,13 +4,14 @@
 
 // ignore_for_file: no_leading_underscores_for_library_prefixes
 import 'dart:async' as _i3;
-import 'dart:ui' as _i7;
+import 'dart:ui' as _i8;
 
 import 'package:mockito/mockito.dart' as _i1;
 import 'package:stackwallet/electrumx_rpc/rpc.dart' as _i2;
 import 'package:stackwallet/utilities/enums/backup_frequency_type.dart' as _i6;
 import 'package:stackwallet/utilities/enums/sync_type_enum.dart' as _i5;
 import 'package:stackwallet/utilities/prefs.dart' as _i4;
+import 'package:stackwallet/utilities/theme/color_theme.dart' as _i7;
 
 // ignore_for_file: type=lint
 // ignore_for_file: avoid_redundant_argument_values
@@ -386,6 +387,61 @@ class MockPrefs extends _i1.Mock implements _i4.Prefs {
         returnValueForMissingStub: null,
       );
   @override
+  bool get enableSystemBrightness => (super.noSuchMethod(
+        Invocation.getter(#enableSystemBrightness),
+        returnValue: false,
+      ) as bool);
+  @override
+  set enableSystemBrightness(bool? enableSystemBrightness) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #enableSystemBrightness,
+          enableSystemBrightness,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i7.ThemeType get theme => (super.noSuchMethod(
+        Invocation.getter(#theme),
+        returnValue: _i7.ThemeType.light,
+      ) as _i7.ThemeType);
+  @override
+  set theme(_i7.ThemeType? theme) => super.noSuchMethod(
+        Invocation.setter(
+          #theme,
+          theme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i7.ThemeType get systemBrightnessLightTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessLightTheme),
+        returnValue: _i7.ThemeType.light,
+      ) as _i7.ThemeType);
+  @override
+  set systemBrightnessLightTheme(_i7.ThemeType? systemBrightnessLightTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessLightTheme,
+          systemBrightnessLightTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i7.ThemeType get systemBrightnessDarkTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessDarkTheme),
+        returnValue: _i7.ThemeType.light,
+      ) as _i7.ThemeType);
+  @override
+  set systemBrightnessDarkTheme(_i7.ThemeType? systemBrightnessDarkTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessDarkTheme,
+          systemBrightnessDarkTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
   bool get hasListeners => (super.noSuchMethod(
         Invocation.getter(#hasListeners),
         returnValue: false,
@@ -435,7 +491,7 @@ class MockPrefs extends _i1.Mock implements _i4.Prefs {
         returnValueForMissingStub: _i3.Future<void>.value(),
       ) as _i3.Future<void>);
   @override
-  void addListener(_i7.VoidCallback? listener) => super.noSuchMethod(
+  void addListener(_i8.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #addListener,
           [listener],
@@ -443,7 +499,7 @@ class MockPrefs extends _i1.Mock implements _i4.Prefs {
         returnValueForMissingStub: null,
       );
   @override
-  void removeListener(_i7.VoidCallback? listener) => super.noSuchMethod(
+  void removeListener(_i8.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #removeListener,
           [listener],
diff --git a/test/pages/send_view/send_view_test.mocks.dart b/test/pages/send_view/send_view_test.mocks.dart
index 77f714322..149d690b1 100644
--- a/test/pages/send_view/send_view_test.mocks.dart
+++ b/test/pages/send_view/send_view_test.mocks.dart
@@ -13,7 +13,7 @@ import 'package:bitcoindart/bitcoindart.dart' as _i14;
 import 'package:flutter/foundation.dart' as _i4;
 import 'package:flutter_riverpod/flutter_riverpod.dart' as _i5;
 import 'package:mockito/mockito.dart' as _i1;
-import 'package:stackwallet/db/isar/main_db.dart' as _i13;
+import 'package:stackwallet/db/main_db.dart' as _i13;
 import 'package:stackwallet/electrumx_rpc/cached_electrumx.dart' as _i11;
 import 'package:stackwallet/electrumx_rpc/electrumx.dart' as _i10;
 import 'package:stackwallet/models/balance.dart' as _i12;
@@ -37,6 +37,7 @@ import 'package:stackwallet/utilities/enums/sync_type_enum.dart' as _i31;
 import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart'
     as _i7;
 import 'package:stackwallet/utilities/prefs.dart' as _i23;
+import 'package:stackwallet/utilities/theme/color_theme.dart' as _i33;
 import 'package:tuple/tuple.dart' as _i15;
 
 // ignore_for_file: type=lint
@@ -1640,25 +1641,6 @@ class MockBitcoinWallet extends _i1.Mock implements _i26.BitcoinWallet {
         returnValueForMissingStub: _i22.Future<void>.value(),
       ) as _i22.Future<void>);
   @override
-  List<String> getWalletTokenContractAddresses() => (super.noSuchMethod(
-        Invocation.method(
-          #getWalletTokenContractAddresses,
-          [],
-        ),
-        returnValue: <String>[],
-      ) as List<String>);
-  @override
-  _i22.Future<void> updateWalletTokenContractAddresses(
-          List<String>? contractAddresses) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #updateWalletTokenContractAddresses,
-          [contractAddresses],
-        ),
-        returnValue: _i22.Future<void>.value(),
-        returnValueForMissingStub: _i22.Future<void>.value(),
-      ) as _i22.Future<void>);
-  @override
   void initWalletDB({_i13.MainDB? mockableOverride}) => super.noSuchMethod(
         Invocation.method(
           #initWalletDB,
@@ -2566,6 +2548,61 @@ class MockPrefs extends _i1.Mock implements _i23.Prefs {
         returnValueForMissingStub: null,
       );
   @override
+  bool get enableSystemBrightness => (super.noSuchMethod(
+        Invocation.getter(#enableSystemBrightness),
+        returnValue: false,
+      ) as bool);
+  @override
+  set enableSystemBrightness(bool? enableSystemBrightness) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #enableSystemBrightness,
+          enableSystemBrightness,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i33.ThemeType get theme => (super.noSuchMethod(
+        Invocation.getter(#theme),
+        returnValue: _i33.ThemeType.light,
+      ) as _i33.ThemeType);
+  @override
+  set theme(_i33.ThemeType? theme) => super.noSuchMethod(
+        Invocation.setter(
+          #theme,
+          theme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i33.ThemeType get systemBrightnessLightTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessLightTheme),
+        returnValue: _i33.ThemeType.light,
+      ) as _i33.ThemeType);
+  @override
+  set systemBrightnessLightTheme(_i33.ThemeType? systemBrightnessLightTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessLightTheme,
+          systemBrightnessLightTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i33.ThemeType get systemBrightnessDarkTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessDarkTheme),
+        returnValue: _i33.ThemeType.light,
+      ) as _i33.ThemeType);
+  @override
+  set systemBrightnessDarkTheme(_i33.ThemeType? systemBrightnessDarkTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessDarkTheme,
+          systemBrightnessDarkTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
   bool get hasListeners => (super.noSuchMethod(
         Invocation.getter(#hasListeners),
         returnValue: false,
@@ -2800,11 +2837,6 @@ class MockManager extends _i1.Mock implements _i6.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/address_book_view/subviews/add_address_book_view_screen_test.mocks.dart b/test/screen_tests/address_book_view/subviews/add_address_book_view_screen_test.mocks.dart
index 7d01dfbba..a36548d2d 100644
--- a/test/screen_tests/address_book_view/subviews/add_address_book_view_screen_test.mocks.dart
+++ b/test/screen_tests/address_book_view/subviews/add_address_book_view_screen_test.mocks.dart
@@ -378,11 +378,6 @@ class MockManager extends _i1.Mock implements _i11.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/address_book_view/subviews/address_book_entry_details_view_screen_test.mocks.dart b/test/screen_tests/address_book_view/subviews/address_book_entry_details_view_screen_test.mocks.dart
index e82f51d64..b78f3f23e 100644
--- a/test/screen_tests/address_book_view/subviews/address_book_entry_details_view_screen_test.mocks.dart
+++ b/test/screen_tests/address_book_view/subviews/address_book_entry_details_view_screen_test.mocks.dart
@@ -339,11 +339,6 @@ class MockManager extends _i1.Mock implements _i9.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/address_book_view/subviews/edit_address_book_entry_view_screen_test.mocks.dart b/test/screen_tests/address_book_view/subviews/edit_address_book_entry_view_screen_test.mocks.dart
index d150ff23d..68697c039 100644
--- a/test/screen_tests/address_book_view/subviews/edit_address_book_entry_view_screen_test.mocks.dart
+++ b/test/screen_tests/address_book_view/subviews/edit_address_book_entry_view_screen_test.mocks.dart
@@ -337,11 +337,6 @@ class MockManager extends _i1.Mock implements _i9.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/exchange/exchange_view_test.mocks.dart b/test/screen_tests/exchange/exchange_view_test.mocks.dart
index b692ea887..d926e9e5b 100644
--- a/test/screen_tests/exchange/exchange_view_test.mocks.dart
+++ b/test/screen_tests/exchange/exchange_view_test.mocks.dart
@@ -3,35 +3,37 @@
 // Do not manually edit this file.
 
 // ignore_for_file: no_leading_underscores_for_library_prefixes
-import 'dart:async' as _i6;
-import 'dart:ui' as _i7;
+import 'dart:async' as _i7;
+import 'dart:ui' as _i8;
 
-import 'package:decimal/decimal.dart' as _i14;
-import 'package:http/http.dart' as _i12;
+import 'package:decimal/decimal.dart' as _i15;
+import 'package:http/http.dart' as _i13;
 import 'package:mockito/mockito.dart' as _i1;
 import 'package:stackwallet/models/exchange/change_now/cn_exchange_estimate.dart'
-    as _i17;
-import 'package:stackwallet/models/exchange/change_now/exchange_transaction.dart'
-    as _i19;
-import 'package:stackwallet/models/exchange/change_now/exchange_transaction_status.dart'
-    as _i20;
-import 'package:stackwallet/models/exchange/response_objects/estimate.dart'
-    as _i16;
-import 'package:stackwallet/models/exchange/response_objects/fixed_rate_market.dart'
     as _i18;
+import 'package:stackwallet/models/exchange/change_now/exchange_transaction.dart'
+    as _i20;
+import 'package:stackwallet/models/exchange/change_now/exchange_transaction_status.dart'
+    as _i21;
+import 'package:stackwallet/models/exchange/response_objects/estimate.dart'
+    as _i17;
+import 'package:stackwallet/models/exchange/response_objects/fixed_rate_market.dart'
+    as _i19;
 import 'package:stackwallet/models/exchange/response_objects/range.dart'
-    as _i15;
-import 'package:stackwallet/models/exchange/response_objects/trade.dart' as _i9;
-import 'package:stackwallet/models/isar/exchange_cache/currency.dart' as _i13;
-import 'package:stackwallet/models/isar/exchange_cache/pair.dart' as _i21;
+    as _i16;
+import 'package:stackwallet/models/exchange/response_objects/trade.dart'
+    as _i10;
+import 'package:stackwallet/models/isar/exchange_cache/currency.dart' as _i14;
+import 'package:stackwallet/models/isar/exchange_cache/pair.dart' as _i22;
 import 'package:stackwallet/services/exchange/change_now/change_now_api.dart'
-    as _i11;
+    as _i12;
 import 'package:stackwallet/services/exchange/exchange_response.dart' as _i2;
-import 'package:stackwallet/services/trade_notes_service.dart' as _i10;
-import 'package:stackwallet/services/trade_service.dart' as _i8;
+import 'package:stackwallet/services/trade_notes_service.dart' as _i11;
+import 'package:stackwallet/services/trade_service.dart' as _i9;
 import 'package:stackwallet/utilities/enums/backup_frequency_type.dart' as _i5;
 import 'package:stackwallet/utilities/enums/sync_type_enum.dart' as _i4;
 import 'package:stackwallet/utilities/prefs.dart' as _i3;
+import 'package:stackwallet/utilities/theme/color_theme.dart' as _i6;
 
 // ignore_for_file: type=lint
 // ignore_for_file: avoid_redundant_argument_values
@@ -335,56 +337,111 @@ class MockPrefs extends _i1.Mock implements _i3.Prefs {
         returnValueForMissingStub: null,
       );
   @override
+  bool get enableSystemBrightness => (super.noSuchMethod(
+        Invocation.getter(#enableSystemBrightness),
+        returnValue: false,
+      ) as bool);
+  @override
+  set enableSystemBrightness(bool? enableSystemBrightness) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #enableSystemBrightness,
+          enableSystemBrightness,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i6.ThemeType get theme => (super.noSuchMethod(
+        Invocation.getter(#theme),
+        returnValue: _i6.ThemeType.light,
+      ) as _i6.ThemeType);
+  @override
+  set theme(_i6.ThemeType? theme) => super.noSuchMethod(
+        Invocation.setter(
+          #theme,
+          theme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i6.ThemeType get systemBrightnessLightTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessLightTheme),
+        returnValue: _i6.ThemeType.light,
+      ) as _i6.ThemeType);
+  @override
+  set systemBrightnessLightTheme(_i6.ThemeType? systemBrightnessLightTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessLightTheme,
+          systemBrightnessLightTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i6.ThemeType get systemBrightnessDarkTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessDarkTheme),
+        returnValue: _i6.ThemeType.light,
+      ) as _i6.ThemeType);
+  @override
+  set systemBrightnessDarkTheme(_i6.ThemeType? systemBrightnessDarkTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessDarkTheme,
+          systemBrightnessDarkTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
   bool get hasListeners => (super.noSuchMethod(
         Invocation.getter(#hasListeners),
         returnValue: false,
       ) as bool);
   @override
-  _i6.Future<void> init() => (super.noSuchMethod(
+  _i7.Future<void> init() => (super.noSuchMethod(
         Invocation.method(
           #init,
           [],
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  _i6.Future<void> incrementCurrentNotificationIndex() => (super.noSuchMethod(
+  _i7.Future<void> incrementCurrentNotificationIndex() => (super.noSuchMethod(
         Invocation.method(
           #incrementCurrentNotificationIndex,
           [],
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  _i6.Future<bool> isExternalCallsSet() => (super.noSuchMethod(
+  _i7.Future<bool> isExternalCallsSet() => (super.noSuchMethod(
         Invocation.method(
           #isExternalCallsSet,
           [],
         ),
-        returnValue: _i6.Future<bool>.value(false),
-      ) as _i6.Future<bool>);
+        returnValue: _i7.Future<bool>.value(false),
+      ) as _i7.Future<bool>);
   @override
-  _i6.Future<void> saveUserID(String? userId) => (super.noSuchMethod(
+  _i7.Future<void> saveUserID(String? userId) => (super.noSuchMethod(
         Invocation.method(
           #saveUserID,
           [userId],
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  _i6.Future<void> saveSignupEpoch(int? signupEpoch) => (super.noSuchMethod(
+  _i7.Future<void> saveSignupEpoch(int? signupEpoch) => (super.noSuchMethod(
         Invocation.method(
           #saveSignupEpoch,
           [signupEpoch],
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  void addListener(_i7.VoidCallback? listener) => super.noSuchMethod(
+  void addListener(_i8.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #addListener,
           [listener],
@@ -392,7 +449,7 @@ class MockPrefs extends _i1.Mock implements _i3.Prefs {
         returnValueForMissingStub: null,
       );
   @override
-  void removeListener(_i7.VoidCallback? listener) => super.noSuchMethod(
+  void removeListener(_i8.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #removeListener,
           [listener],
@@ -420,29 +477,29 @@ class MockPrefs extends _i1.Mock implements _i3.Prefs {
 /// A class which mocks [TradesService].
 ///
 /// See the documentation for Mockito's code generation for more information.
-class MockTradesService extends _i1.Mock implements _i8.TradesService {
+class MockTradesService extends _i1.Mock implements _i9.TradesService {
   MockTradesService() {
     _i1.throwOnMissingStub(this);
   }
 
   @override
-  List<_i9.Trade> get trades => (super.noSuchMethod(
+  List<_i10.Trade> get trades => (super.noSuchMethod(
         Invocation.getter(#trades),
-        returnValue: <_i9.Trade>[],
-      ) as List<_i9.Trade>);
+        returnValue: <_i10.Trade>[],
+      ) as List<_i10.Trade>);
   @override
   bool get hasListeners => (super.noSuchMethod(
         Invocation.getter(#hasListeners),
         returnValue: false,
       ) as bool);
   @override
-  _i9.Trade? get(String? tradeId) => (super.noSuchMethod(Invocation.method(
+  _i10.Trade? get(String? tradeId) => (super.noSuchMethod(Invocation.method(
         #get,
         [tradeId],
-      )) as _i9.Trade?);
+      )) as _i10.Trade?);
   @override
-  _i6.Future<void> add({
-    required _i9.Trade? trade,
+  _i7.Future<void> add({
+    required _i10.Trade? trade,
     required bool? shouldNotifyListeners,
   }) =>
       (super.noSuchMethod(
@@ -454,12 +511,12 @@ class MockTradesService extends _i1.Mock implements _i8.TradesService {
             #shouldNotifyListeners: shouldNotifyListeners,
           },
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  _i6.Future<void> edit({
-    required _i9.Trade? trade,
+  _i7.Future<void> edit({
+    required _i10.Trade? trade,
     required bool? shouldNotifyListeners,
   }) =>
       (super.noSuchMethod(
@@ -471,12 +528,12 @@ class MockTradesService extends _i1.Mock implements _i8.TradesService {
             #shouldNotifyListeners: shouldNotifyListeners,
           },
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  _i6.Future<void> delete({
-    required _i9.Trade? trade,
+  _i7.Future<void> delete({
+    required _i10.Trade? trade,
     required bool? shouldNotifyListeners,
   }) =>
       (super.noSuchMethod(
@@ -488,11 +545,11 @@ class MockTradesService extends _i1.Mock implements _i8.TradesService {
             #shouldNotifyListeners: shouldNotifyListeners,
           },
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  _i6.Future<void> deleteByUuid({
+  _i7.Future<void> deleteByUuid({
     required String? uuid,
     required bool? shouldNotifyListeners,
   }) =>
@@ -505,11 +562,11 @@ class MockTradesService extends _i1.Mock implements _i8.TradesService {
             #shouldNotifyListeners: shouldNotifyListeners,
           },
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  void addListener(_i7.VoidCallback? listener) => super.noSuchMethod(
+  void addListener(_i8.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #addListener,
           [listener],
@@ -517,7 +574,7 @@ class MockTradesService extends _i1.Mock implements _i8.TradesService {
         returnValueForMissingStub: null,
       );
   @override
-  void removeListener(_i7.VoidCallback? listener) => super.noSuchMethod(
+  void removeListener(_i8.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #removeListener,
           [listener],
@@ -545,7 +602,7 @@ class MockTradesService extends _i1.Mock implements _i8.TradesService {
 /// A class which mocks [TradeNotesService].
 ///
 /// See the documentation for Mockito's code generation for more information.
-class MockTradeNotesService extends _i1.Mock implements _i10.TradeNotesService {
+class MockTradeNotesService extends _i1.Mock implements _i11.TradeNotesService {
   MockTradeNotesService() {
     _i1.throwOnMissingStub(this);
   }
@@ -570,7 +627,7 @@ class MockTradeNotesService extends _i1.Mock implements _i10.TradeNotesService {
         returnValue: '',
       ) as String);
   @override
-  _i6.Future<void> set({
+  _i7.Future<void> set({
     required String? tradeId,
     required String? note,
   }) =>
@@ -583,21 +640,21 @@ class MockTradeNotesService extends _i1.Mock implements _i10.TradeNotesService {
             #note: note,
           },
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  _i6.Future<void> delete({required String? tradeId}) => (super.noSuchMethod(
+  _i7.Future<void> delete({required String? tradeId}) => (super.noSuchMethod(
         Invocation.method(
           #delete,
           [],
           {#tradeId: tradeId},
         ),
-        returnValue: _i6.Future<void>.value(),
-        returnValueForMissingStub: _i6.Future<void>.value(),
-      ) as _i6.Future<void>);
+        returnValue: _i7.Future<void>.value(),
+        returnValueForMissingStub: _i7.Future<void>.value(),
+      ) as _i7.Future<void>);
   @override
-  void addListener(_i7.VoidCallback? listener) => super.noSuchMethod(
+  void addListener(_i8.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #addListener,
           [listener],
@@ -605,7 +662,7 @@ class MockTradeNotesService extends _i1.Mock implements _i10.TradeNotesService {
         returnValueForMissingStub: null,
       );
   @override
-  void removeListener(_i7.VoidCallback? listener) => super.noSuchMethod(
+  void removeListener(_i8.VoidCallback? listener) => super.noSuchMethod(
         Invocation.method(
           #removeListener,
           [listener],
@@ -633,13 +690,13 @@ class MockTradeNotesService extends _i1.Mock implements _i10.TradeNotesService {
 /// A class which mocks [ChangeNowAPI].
 ///
 /// See the documentation for Mockito's code generation for more information.
-class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
+class MockChangeNowAPI extends _i1.Mock implements _i12.ChangeNowAPI {
   MockChangeNowAPI() {
     _i1.throwOnMissingStub(this);
   }
 
   @override
-  set client(_i12.Client? _client) => super.noSuchMethod(
+  set client(_i13.Client? _client) => super.noSuchMethod(
         Invocation.setter(
           #client,
           _client,
@@ -647,7 +704,7 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
         returnValueForMissingStub: null,
       );
   @override
-  _i6.Future<_i2.ExchangeResponse<List<_i13.Currency>>> getAvailableCurrencies({
+  _i7.Future<_i2.ExchangeResponse<List<_i14.Currency>>> getAvailableCurrencies({
     bool? fixedRate,
     bool? active,
   }) =>
@@ -661,8 +718,8 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
           },
         ),
         returnValue:
-            _i6.Future<_i2.ExchangeResponse<List<_i13.Currency>>>.value(
-                _FakeExchangeResponse_0<List<_i13.Currency>>(
+            _i7.Future<_i2.ExchangeResponse<List<_i14.Currency>>>.value(
+                _FakeExchangeResponse_0<List<_i14.Currency>>(
           this,
           Invocation.method(
             #getAvailableCurrencies,
@@ -673,26 +730,9 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
             },
           ),
         )),
-      ) as _i6.Future<_i2.ExchangeResponse<List<_i13.Currency>>>);
+      ) as _i7.Future<_i2.ExchangeResponse<List<_i14.Currency>>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<List<_i13.Currency>>> getCurrenciesV2() =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #getCurrenciesV2,
-          [],
-        ),
-        returnValue:
-            _i6.Future<_i2.ExchangeResponse<List<_i13.Currency>>>.value(
-                _FakeExchangeResponse_0<List<_i13.Currency>>(
-          this,
-          Invocation.method(
-            #getCurrenciesV2,
-            [],
-          ),
-        )),
-      ) as _i6.Future<_i2.ExchangeResponse<List<_i13.Currency>>>);
-  @override
-  _i6.Future<_i2.ExchangeResponse<List<_i13.Currency>>> getPairedCurrencies({
+  _i7.Future<_i2.ExchangeResponse<List<_i14.Currency>>> getPairedCurrencies({
     required String? ticker,
     bool? fixedRate,
   }) =>
@@ -706,8 +746,8 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
           },
         ),
         returnValue:
-            _i6.Future<_i2.ExchangeResponse<List<_i13.Currency>>>.value(
-                _FakeExchangeResponse_0<List<_i13.Currency>>(
+            _i7.Future<_i2.ExchangeResponse<List<_i14.Currency>>>.value(
+                _FakeExchangeResponse_0<List<_i14.Currency>>(
           this,
           Invocation.method(
             #getPairedCurrencies,
@@ -718,9 +758,9 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
             },
           ),
         )),
-      ) as _i6.Future<_i2.ExchangeResponse<List<_i13.Currency>>>);
+      ) as _i7.Future<_i2.ExchangeResponse<List<_i14.Currency>>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<_i14.Decimal>> getMinimalExchangeAmount({
+  _i7.Future<_i2.ExchangeResponse<_i15.Decimal>> getMinimalExchangeAmount({
     required String? fromTicker,
     required String? toTicker,
     String? apiKey,
@@ -735,8 +775,8 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
             #apiKey: apiKey,
           },
         ),
-        returnValue: _i6.Future<_i2.ExchangeResponse<_i14.Decimal>>.value(
-            _FakeExchangeResponse_0<_i14.Decimal>(
+        returnValue: _i7.Future<_i2.ExchangeResponse<_i15.Decimal>>.value(
+            _FakeExchangeResponse_0<_i15.Decimal>(
           this,
           Invocation.method(
             #getMinimalExchangeAmount,
@@ -748,9 +788,9 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
             },
           ),
         )),
-      ) as _i6.Future<_i2.ExchangeResponse<_i14.Decimal>>);
+      ) as _i7.Future<_i2.ExchangeResponse<_i15.Decimal>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<_i15.Range>> getRange({
+  _i7.Future<_i2.ExchangeResponse<_i16.Range>> getRange({
     required String? fromTicker,
     required String? toTicker,
     required bool? isFixedRate,
@@ -767,8 +807,8 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
             #apiKey: apiKey,
           },
         ),
-        returnValue: _i6.Future<_i2.ExchangeResponse<_i15.Range>>.value(
-            _FakeExchangeResponse_0<_i15.Range>(
+        returnValue: _i7.Future<_i2.ExchangeResponse<_i16.Range>>.value(
+            _FakeExchangeResponse_0<_i16.Range>(
           this,
           Invocation.method(
             #getRange,
@@ -781,12 +821,12 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
             },
           ),
         )),
-      ) as _i6.Future<_i2.ExchangeResponse<_i15.Range>>);
+      ) as _i7.Future<_i2.ExchangeResponse<_i16.Range>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<_i16.Estimate>> getEstimatedExchangeAmount({
+  _i7.Future<_i2.ExchangeResponse<_i17.Estimate>> getEstimatedExchangeAmount({
     required String? fromTicker,
     required String? toTicker,
-    required _i14.Decimal? fromAmount,
+    required _i15.Decimal? fromAmount,
     String? apiKey,
   }) =>
       (super.noSuchMethod(
@@ -800,8 +840,8 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
             #apiKey: apiKey,
           },
         ),
-        returnValue: _i6.Future<_i2.ExchangeResponse<_i16.Estimate>>.value(
-            _FakeExchangeResponse_0<_i16.Estimate>(
+        returnValue: _i7.Future<_i2.ExchangeResponse<_i17.Estimate>>.value(
+            _FakeExchangeResponse_0<_i17.Estimate>(
           this,
           Invocation.method(
             #getEstimatedExchangeAmount,
@@ -814,13 +854,13 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
             },
           ),
         )),
-      ) as _i6.Future<_i2.ExchangeResponse<_i16.Estimate>>);
+      ) as _i7.Future<_i2.ExchangeResponse<_i17.Estimate>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<_i16.Estimate>>
+  _i7.Future<_i2.ExchangeResponse<_i17.Estimate>>
       getEstimatedExchangeAmountFixedRate({
     required String? fromTicker,
     required String? toTicker,
-    required _i14.Decimal? fromAmount,
+    required _i15.Decimal? fromAmount,
     required bool? reversed,
     bool? useRateId = true,
     String? apiKey,
@@ -838,8 +878,8 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 #apiKey: apiKey,
               },
             ),
-            returnValue: _i6.Future<_i2.ExchangeResponse<_i16.Estimate>>.value(
-                _FakeExchangeResponse_0<_i16.Estimate>(
+            returnValue: _i7.Future<_i2.ExchangeResponse<_i17.Estimate>>.value(
+                _FakeExchangeResponse_0<_i17.Estimate>(
               this,
               Invocation.method(
                 #getEstimatedExchangeAmountFixedRate,
@@ -854,17 +894,17 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 },
               ),
             )),
-          ) as _i6.Future<_i2.ExchangeResponse<_i16.Estimate>>);
+          ) as _i7.Future<_i2.ExchangeResponse<_i17.Estimate>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<_i17.CNExchangeEstimate>>
+  _i7.Future<_i2.ExchangeResponse<_i18.CNExchangeEstimate>>
       getEstimatedExchangeAmountV2({
     required String? fromTicker,
     required String? toTicker,
-    required _i17.CNEstimateType? fromOrTo,
-    required _i14.Decimal? amount,
+    required _i18.CNEstimateType? fromOrTo,
+    required _i15.Decimal? amount,
     String? fromNetwork,
     String? toNetwork,
-    _i17.CNFlowType? flow = _i17.CNFlowType.standard,
+    _i18.CNFlowType? flow = _i18.CNFlowType.standard,
     String? apiKey,
   }) =>
           (super.noSuchMethod(
@@ -883,8 +923,8 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
               },
             ),
             returnValue:
-                _i6.Future<_i2.ExchangeResponse<_i17.CNExchangeEstimate>>.value(
-                    _FakeExchangeResponse_0<_i17.CNExchangeEstimate>(
+                _i7.Future<_i2.ExchangeResponse<_i18.CNExchangeEstimate>>.value(
+                    _FakeExchangeResponse_0<_i18.CNExchangeEstimate>(
               this,
               Invocation.method(
                 #getEstimatedExchangeAmountV2,
@@ -901,18 +941,18 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 },
               ),
             )),
-          ) as _i6.Future<_i2.ExchangeResponse<_i17.CNExchangeEstimate>>);
+          ) as _i7.Future<_i2.ExchangeResponse<_i18.CNExchangeEstimate>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<List<_i18.FixedRateMarket>>>
+  _i7.Future<_i2.ExchangeResponse<List<_i19.FixedRateMarket>>>
       getAvailableFixedRateMarkets({String? apiKey}) => (super.noSuchMethod(
             Invocation.method(
               #getAvailableFixedRateMarkets,
               [],
               {#apiKey: apiKey},
             ),
-            returnValue: _i6.Future<
-                    _i2.ExchangeResponse<List<_i18.FixedRateMarket>>>.value(
-                _FakeExchangeResponse_0<List<_i18.FixedRateMarket>>(
+            returnValue: _i7.Future<
+                    _i2.ExchangeResponse<List<_i19.FixedRateMarket>>>.value(
+                _FakeExchangeResponse_0<List<_i19.FixedRateMarket>>(
               this,
               Invocation.method(
                 #getAvailableFixedRateMarkets,
@@ -920,14 +960,14 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 {#apiKey: apiKey},
               ),
             )),
-          ) as _i6.Future<_i2.ExchangeResponse<List<_i18.FixedRateMarket>>>);
+          ) as _i7.Future<_i2.ExchangeResponse<List<_i19.FixedRateMarket>>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<_i19.ExchangeTransaction>>
+  _i7.Future<_i2.ExchangeResponse<_i20.ExchangeTransaction>>
       createStandardExchangeTransaction({
     required String? fromTicker,
     required String? toTicker,
     required String? receivingAddress,
-    required _i14.Decimal? amount,
+    required _i15.Decimal? amount,
     String? extraId = r'',
     String? userId = r'',
     String? contactEmail = r'',
@@ -952,9 +992,9 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 #apiKey: apiKey,
               },
             ),
-            returnValue: _i6.Future<
-                    _i2.ExchangeResponse<_i19.ExchangeTransaction>>.value(
-                _FakeExchangeResponse_0<_i19.ExchangeTransaction>(
+            returnValue: _i7.Future<
+                    _i2.ExchangeResponse<_i20.ExchangeTransaction>>.value(
+                _FakeExchangeResponse_0<_i20.ExchangeTransaction>(
               this,
               Invocation.method(
                 #createStandardExchangeTransaction,
@@ -973,14 +1013,14 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 },
               ),
             )),
-          ) as _i6.Future<_i2.ExchangeResponse<_i19.ExchangeTransaction>>);
+          ) as _i7.Future<_i2.ExchangeResponse<_i20.ExchangeTransaction>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<_i19.ExchangeTransaction>>
+  _i7.Future<_i2.ExchangeResponse<_i20.ExchangeTransaction>>
       createFixedRateExchangeTransaction({
     required String? fromTicker,
     required String? toTicker,
     required String? receivingAddress,
-    required _i14.Decimal? amount,
+    required _i15.Decimal? amount,
     required String? rateId,
     required bool? reversed,
     String? extraId = r'',
@@ -1009,9 +1049,9 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 #apiKey: apiKey,
               },
             ),
-            returnValue: _i6.Future<
-                    _i2.ExchangeResponse<_i19.ExchangeTransaction>>.value(
-                _FakeExchangeResponse_0<_i19.ExchangeTransaction>(
+            returnValue: _i7.Future<
+                    _i2.ExchangeResponse<_i20.ExchangeTransaction>>.value(
+                _FakeExchangeResponse_0<_i20.ExchangeTransaction>(
               this,
               Invocation.method(
                 #createFixedRateExchangeTransaction,
@@ -1032,9 +1072,9 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 },
               ),
             )),
-          ) as _i6.Future<_i2.ExchangeResponse<_i19.ExchangeTransaction>>);
+          ) as _i7.Future<_i2.ExchangeResponse<_i20.ExchangeTransaction>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<_i20.ExchangeTransactionStatus>>
+  _i7.Future<_i2.ExchangeResponse<_i21.ExchangeTransactionStatus>>
       getTransactionStatus({
     required String? id,
     String? apiKey,
@@ -1048,9 +1088,9 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 #apiKey: apiKey,
               },
             ),
-            returnValue: _i6.Future<
-                    _i2.ExchangeResponse<_i20.ExchangeTransactionStatus>>.value(
-                _FakeExchangeResponse_0<_i20.ExchangeTransactionStatus>(
+            returnValue: _i7.Future<
+                    _i2.ExchangeResponse<_i21.ExchangeTransactionStatus>>.value(
+                _FakeExchangeResponse_0<_i21.ExchangeTransactionStatus>(
               this,
               Invocation.method(
                 #getTransactionStatus,
@@ -1061,10 +1101,10 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 },
               ),
             )),
-          ) as _i6
-              .Future<_i2.ExchangeResponse<_i20.ExchangeTransactionStatus>>);
+          ) as _i7
+              .Future<_i2.ExchangeResponse<_i21.ExchangeTransactionStatus>>);
   @override
-  _i6.Future<_i2.ExchangeResponse<List<_i21.Pair>>>
+  _i7.Future<_i2.ExchangeResponse<List<_i22.Pair>>>
       getAvailableFloatingRatePairs({bool? includePartners = false}) =>
           (super.noSuchMethod(
             Invocation.method(
@@ -1073,8 +1113,8 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
               {#includePartners: includePartners},
             ),
             returnValue:
-                _i6.Future<_i2.ExchangeResponse<List<_i21.Pair>>>.value(
-                    _FakeExchangeResponse_0<List<_i21.Pair>>(
+                _i7.Future<_i2.ExchangeResponse<List<_i22.Pair>>>.value(
+                    _FakeExchangeResponse_0<List<_i22.Pair>>(
               this,
               Invocation.method(
                 #getAvailableFloatingRatePairs,
@@ -1082,5 +1122,5 @@ class MockChangeNowAPI extends _i1.Mock implements _i11.ChangeNowAPI {
                 {#includePartners: includePartners},
               ),
             )),
-          ) as _i6.Future<_i2.ExchangeResponse<List<_i21.Pair>>>);
+          ) as _i7.Future<_i2.ExchangeResponse<List<_i22.Pair>>>);
 }
diff --git a/test/screen_tests/lockscreen_view_screen_test.mocks.dart b/test/screen_tests/lockscreen_view_screen_test.mocks.dart
index 1a535475b..439ecd5c9 100644
--- a/test/screen_tests/lockscreen_view_screen_test.mocks.dart
+++ b/test/screen_tests/lockscreen_view_screen_test.mocks.dart
@@ -646,11 +646,6 @@ class MockManager extends _i1.Mock implements _i12.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/main_view_tests/main_view_screen_testA_test.mocks.dart b/test/screen_tests/main_view_tests/main_view_screen_testA_test.mocks.dart
index 4833c56ee..d624d4171 100644
--- a/test/screen_tests/main_view_tests/main_view_screen_testA_test.mocks.dart
+++ b/test/screen_tests/main_view_tests/main_view_screen_testA_test.mocks.dart
@@ -433,11 +433,6 @@ class MockManager extends _i1.Mock implements _i9.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/main_view_tests/main_view_screen_testB_test.mocks.dart b/test/screen_tests/main_view_tests/main_view_screen_testB_test.mocks.dart
index 33c356d74..70c08470b 100644
--- a/test/screen_tests/main_view_tests/main_view_screen_testB_test.mocks.dart
+++ b/test/screen_tests/main_view_tests/main_view_screen_testB_test.mocks.dart
@@ -433,11 +433,6 @@ class MockManager extends _i1.Mock implements _i9.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/main_view_tests/main_view_screen_testC_test.mocks.dart b/test/screen_tests/main_view_tests/main_view_screen_testC_test.mocks.dart
index b19d16114..1f2176350 100644
--- a/test/screen_tests/main_view_tests/main_view_screen_testC_test.mocks.dart
+++ b/test/screen_tests/main_view_tests/main_view_screen_testC_test.mocks.dart
@@ -433,11 +433,6 @@ class MockManager extends _i1.Mock implements _i9.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/onboarding/backup_key_view_screen_test.mocks.dart b/test/screen_tests/onboarding/backup_key_view_screen_test.mocks.dart
index 34a6a36fe..7377d155e 100644
--- a/test/screen_tests/onboarding/backup_key_view_screen_test.mocks.dart
+++ b/test/screen_tests/onboarding/backup_key_view_screen_test.mocks.dart
@@ -208,11 +208,6 @@ class MockManager extends _i1.Mock implements _i5.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/onboarding/backup_key_warning_view_screen_test.mocks.dart b/test/screen_tests/onboarding/backup_key_warning_view_screen_test.mocks.dart
index f3967ade5..2b31cb96c 100644
--- a/test/screen_tests/onboarding/backup_key_warning_view_screen_test.mocks.dart
+++ b/test/screen_tests/onboarding/backup_key_warning_view_screen_test.mocks.dart
@@ -431,11 +431,6 @@ class MockManager extends _i1.Mock implements _i9.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/onboarding/create_pin_view_screen_test.mocks.dart b/test/screen_tests/onboarding/create_pin_view_screen_test.mocks.dart
index f1d3b0c4b..54eec30cf 100644
--- a/test/screen_tests/onboarding/create_pin_view_screen_test.mocks.dart
+++ b/test/screen_tests/onboarding/create_pin_view_screen_test.mocks.dart
@@ -646,11 +646,6 @@ class MockManager extends _i1.Mock implements _i12.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/onboarding/restore_wallet_view_screen_test.mocks.dart b/test/screen_tests/onboarding/restore_wallet_view_screen_test.mocks.dart
index 20ac25812..e92f4d289 100644
--- a/test/screen_tests/onboarding/restore_wallet_view_screen_test.mocks.dart
+++ b/test/screen_tests/onboarding/restore_wallet_view_screen_test.mocks.dart
@@ -487,11 +487,6 @@ class MockManager extends _i1.Mock implements _i12.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/onboarding/verify_backup_key_view_screen_test.mocks.dart b/test/screen_tests/onboarding/verify_backup_key_view_screen_test.mocks.dart
index 93d4f4874..13a6568c8 100644
--- a/test/screen_tests/onboarding/verify_backup_key_view_screen_test.mocks.dart
+++ b/test/screen_tests/onboarding/verify_backup_key_view_screen_test.mocks.dart
@@ -208,11 +208,6 @@ class MockManager extends _i1.Mock implements _i5.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/settings_view/settings_subviews/currency_view_screen_test.mocks.dart b/test/screen_tests/settings_view/settings_subviews/currency_view_screen_test.mocks.dart
index cfe9cd50e..82f4bcd3e 100644
--- a/test/screen_tests/settings_view/settings_subviews/currency_view_screen_test.mocks.dart
+++ b/test/screen_tests/settings_view/settings_subviews/currency_view_screen_test.mocks.dart
@@ -208,11 +208,6 @@ class MockManager extends _i1.Mock implements _i5.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/settings_view/settings_subviews/network_settings_subviews/add_custom_node_view_screen_test.mocks.dart b/test/screen_tests/settings_view/settings_subviews/network_settings_subviews/add_custom_node_view_screen_test.mocks.dart
index 8e5c07700..fc4171b63 100644
--- a/test/screen_tests/settings_view/settings_subviews/network_settings_subviews/add_custom_node_view_screen_test.mocks.dart
+++ b/test/screen_tests/settings_view/settings_subviews/network_settings_subviews/add_custom_node_view_screen_test.mocks.dart
@@ -423,11 +423,6 @@ class MockManager extends _i1.Mock implements _i11.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/settings_view/settings_subviews/network_settings_subviews/node_details_view_screen_test.mocks.dart b/test/screen_tests/settings_view/settings_subviews/network_settings_subviews/node_details_view_screen_test.mocks.dart
index c3d4a7279..f990ec83a 100644
--- a/test/screen_tests/settings_view/settings_subviews/network_settings_subviews/node_details_view_screen_test.mocks.dart
+++ b/test/screen_tests/settings_view/settings_subviews/network_settings_subviews/node_details_view_screen_test.mocks.dart
@@ -423,11 +423,6 @@ class MockManager extends _i1.Mock implements _i11.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/settings_view/settings_subviews/wallet_backup_view_screen_test.mocks.dart b/test/screen_tests/settings_view/settings_subviews/wallet_backup_view_screen_test.mocks.dart
index 8efc17d42..44dd68cee 100644
--- a/test/screen_tests/settings_view/settings_subviews/wallet_backup_view_screen_test.mocks.dart
+++ b/test/screen_tests/settings_view/settings_subviews/wallet_backup_view_screen_test.mocks.dart
@@ -208,11 +208,6 @@ class MockManager extends _i1.Mock implements _i5.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/rescan_warning_view_screen_test.mocks.dart b/test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/rescan_warning_view_screen_test.mocks.dart
index 5f5c9ee97..a7764e149 100644
--- a/test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/rescan_warning_view_screen_test.mocks.dart
+++ b/test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/rescan_warning_view_screen_test.mocks.dart
@@ -208,11 +208,6 @@ class MockManager extends _i1.Mock implements _i5.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/wallet_delete_mnemonic_view_screen_test.mocks.dart b/test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/wallet_delete_mnemonic_view_screen_test.mocks.dart
index c39df921e..4c7dbfd7a 100644
--- a/test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/wallet_delete_mnemonic_view_screen_test.mocks.dart
+++ b/test/screen_tests/settings_view/settings_subviews/wallet_settings_subviews/wallet_delete_mnemonic_view_screen_test.mocks.dart
@@ -431,11 +431,6 @@ class MockManager extends _i1.Mock implements _i9.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/settings_view/settings_subviews/wallet_settings_view_screen_test.mocks.dart b/test/screen_tests/settings_view/settings_subviews/wallet_settings_view_screen_test.mocks.dart
index 6f3828684..e736cfdd8 100644
--- a/test/screen_tests/settings_view/settings_subviews/wallet_settings_view_screen_test.mocks.dart
+++ b/test/screen_tests/settings_view/settings_subviews/wallet_settings_view_screen_test.mocks.dart
@@ -688,11 +688,6 @@ class MockManager extends _i1.Mock implements _i15.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/settings_view/settings_view_screen_test.mocks.dart b/test/screen_tests/settings_view/settings_view_screen_test.mocks.dart
index ea371aad5..be1b24bcb 100644
--- a/test/screen_tests/settings_view/settings_view_screen_test.mocks.dart
+++ b/test/screen_tests/settings_view/settings_view_screen_test.mocks.dart
@@ -431,11 +431,6 @@ class MockManager extends _i1.Mock implements _i9.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/transaction_subviews/transaction_search_results_view_screen_test.mocks.dart b/test/screen_tests/transaction_subviews/transaction_search_results_view_screen_test.mocks.dart
index 9b4056348..7cf8968b1 100644
--- a/test/screen_tests/transaction_subviews/transaction_search_results_view_screen_test.mocks.dart
+++ b/test/screen_tests/transaction_subviews/transaction_search_results_view_screen_test.mocks.dart
@@ -210,11 +210,6 @@ class MockManager extends _i1.Mock implements _i5.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/wallet_view/confirm_send_view_screen_test.mocks.dart b/test/screen_tests/wallet_view/confirm_send_view_screen_test.mocks.dart
index b0e4bcc7d..81980dca0 100644
--- a/test/screen_tests/wallet_view/confirm_send_view_screen_test.mocks.dart
+++ b/test/screen_tests/wallet_view/confirm_send_view_screen_test.mocks.dart
@@ -209,11 +209,6 @@ class MockManager extends _i1.Mock implements _i5.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/wallet_view/receive_view_screen_test.mocks.dart b/test/screen_tests/wallet_view/receive_view_screen_test.mocks.dart
index 6c02b46e1..3055cf6c6 100644
--- a/test/screen_tests/wallet_view/receive_view_screen_test.mocks.dart
+++ b/test/screen_tests/wallet_view/receive_view_screen_test.mocks.dart
@@ -208,11 +208,6 @@ class MockManager extends _i1.Mock implements _i5.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/wallet_view/send_view_screen_test.mocks.dart b/test/screen_tests/wallet_view/send_view_screen_test.mocks.dart
index b3fcf528f..533578e6c 100644
--- a/test/screen_tests/wallet_view/send_view_screen_test.mocks.dart
+++ b/test/screen_tests/wallet_view/send_view_screen_test.mocks.dart
@@ -250,11 +250,6 @@ class MockManager extends _i1.Mock implements _i8.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/screen_tests/wallet_view/wallet_view_screen_test.mocks.dart b/test/screen_tests/wallet_view/wallet_view_screen_test.mocks.dart
index 5cbb93bc1..f71a62d92 100644
--- a/test/screen_tests/wallet_view/wallet_view_screen_test.mocks.dart
+++ b/test/screen_tests/wallet_view/wallet_view_screen_test.mocks.dart
@@ -210,11 +210,6 @@ class MockManager extends _i1.Mock implements _i5.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/widget_tests/managed_favorite_test.mocks.dart b/test/widget_tests/managed_favorite_test.mocks.dart
index 5abf517b7..f8bda0845 100644
--- a/test/widget_tests/managed_favorite_test.mocks.dart
+++ b/test/widget_tests/managed_favorite_test.mocks.dart
@@ -13,7 +13,7 @@ import 'package:bitcoindart/bitcoindart.dart' as _i13;
 import 'package:flutter/foundation.dart' as _i4;
 import 'package:flutter_riverpod/flutter_riverpod.dart' as _i5;
 import 'package:mockito/mockito.dart' as _i1;
-import 'package:stackwallet/db/isar/main_db.dart' as _i12;
+import 'package:stackwallet/db/main_db.dart' as _i12;
 import 'package:stackwallet/electrumx_rpc/cached_electrumx.dart' as _i10;
 import 'package:stackwallet/electrumx_rpc/electrumx.dart' as _i9;
 import 'package:stackwallet/models/balance.dart' as _i11;
@@ -1432,25 +1432,6 @@ class MockBitcoinWallet extends _i1.Mock implements _i25.BitcoinWallet {
         returnValueForMissingStub: _i22.Future<void>.value(),
       ) as _i22.Future<void>);
   @override
-  List<String> getWalletTokenContractAddresses() => (super.noSuchMethod(
-        Invocation.method(
-          #getWalletTokenContractAddresses,
-          [],
-        ),
-        returnValue: <String>[],
-      ) as List<String>);
-  @override
-  _i22.Future<void> updateWalletTokenContractAddresses(
-          List<String>? contractAddresses) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #updateWalletTokenContractAddresses,
-          [contractAddresses],
-        ),
-        returnValue: _i22.Future<void>.value(),
-        returnValueForMissingStub: _i22.Future<void>.value(),
-      ) as _i22.Future<void>);
-  @override
   void initWalletDB({_i12.MainDB? mockableOverride}) => super.noSuchMethod(
         Invocation.method(
           #initWalletDB,
@@ -2430,11 +2411,6 @@ class MockManager extends _i1.Mock implements _i6.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/widget_tests/node_options_sheet_test.mocks.dart b/test/widget_tests/node_options_sheet_test.mocks.dart
index 862afbb16..84f013ddb 100644
--- a/test/widget_tests/node_options_sheet_test.mocks.dart
+++ b/test/widget_tests/node_options_sheet_test.mocks.dart
@@ -9,7 +9,7 @@ import 'dart:ui' as _i13;
 import 'package:flutter/foundation.dart' as _i4;
 import 'package:flutter_riverpod/flutter_riverpod.dart' as _i5;
 import 'package:mockito/mockito.dart' as _i1;
-import 'package:stackwallet/models/node_model.dart' as _i16;
+import 'package:stackwallet/models/node_model.dart' as _i17;
 import 'package:stackwallet/services/coins/manager.dart' as _i6;
 import 'package:stackwallet/services/node_service.dart' as _i3;
 import 'package:stackwallet/services/wallets.dart' as _i8;
@@ -20,6 +20,7 @@ import 'package:stackwallet/utilities/enums/sync_type_enum.dart' as _i14;
 import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart'
     as _i7;
 import 'package:stackwallet/utilities/prefs.dart' as _i12;
+import 'package:stackwallet/utilities/theme/color_theme.dart' as _i16;
 import 'package:tuple/tuple.dart' as _i10;
 
 // ignore_for_file: type=lint
@@ -574,6 +575,61 @@ class MockPrefs extends _i1.Mock implements _i12.Prefs {
         returnValueForMissingStub: null,
       );
   @override
+  bool get enableSystemBrightness => (super.noSuchMethod(
+        Invocation.getter(#enableSystemBrightness),
+        returnValue: false,
+      ) as bool);
+  @override
+  set enableSystemBrightness(bool? enableSystemBrightness) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #enableSystemBrightness,
+          enableSystemBrightness,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i16.ThemeType get theme => (super.noSuchMethod(
+        Invocation.getter(#theme),
+        returnValue: _i16.ThemeType.light,
+      ) as _i16.ThemeType);
+  @override
+  set theme(_i16.ThemeType? theme) => super.noSuchMethod(
+        Invocation.setter(
+          #theme,
+          theme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i16.ThemeType get systemBrightnessLightTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessLightTheme),
+        returnValue: _i16.ThemeType.light,
+      ) as _i16.ThemeType);
+  @override
+  set systemBrightnessLightTheme(_i16.ThemeType? systemBrightnessLightTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessLightTheme,
+          systemBrightnessLightTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i16.ThemeType get systemBrightnessDarkTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessDarkTheme),
+        returnValue: _i16.ThemeType.light,
+      ) as _i16.ThemeType);
+  @override
+  set systemBrightnessDarkTheme(_i16.ThemeType? systemBrightnessDarkTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessDarkTheme,
+          systemBrightnessDarkTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
   bool get hasListeners => (super.noSuchMethod(
         Invocation.getter(#hasListeners),
         returnValue: false,
@@ -673,15 +729,15 @@ class MockNodeService extends _i1.Mock implements _i3.NodeService {
         ),
       ) as _i7.SecureStorageInterface);
   @override
-  List<_i16.NodeModel> get primaryNodes => (super.noSuchMethod(
+  List<_i17.NodeModel> get primaryNodes => (super.noSuchMethod(
         Invocation.getter(#primaryNodes),
-        returnValue: <_i16.NodeModel>[],
-      ) as List<_i16.NodeModel>);
+        returnValue: <_i17.NodeModel>[],
+      ) as List<_i17.NodeModel>);
   @override
-  List<_i16.NodeModel> get nodes => (super.noSuchMethod(
+  List<_i17.NodeModel> get nodes => (super.noSuchMethod(
         Invocation.getter(#nodes),
-        returnValue: <_i16.NodeModel>[],
-      ) as List<_i16.NodeModel>);
+        returnValue: <_i17.NodeModel>[],
+      ) as List<_i17.NodeModel>);
   @override
   bool get hasListeners => (super.noSuchMethod(
         Invocation.getter(#hasListeners),
@@ -699,7 +755,7 @@ class MockNodeService extends _i1.Mock implements _i3.NodeService {
   @override
   _i11.Future<void> setPrimaryNodeFor({
     required _i9.Coin? coin,
-    required _i16.NodeModel? node,
+    required _i17.NodeModel? node,
     bool? shouldNotifyListeners = false,
   }) =>
       (super.noSuchMethod(
@@ -716,40 +772,40 @@ class MockNodeService extends _i1.Mock implements _i3.NodeService {
         returnValueForMissingStub: _i11.Future<void>.value(),
       ) as _i11.Future<void>);
   @override
-  _i16.NodeModel? getPrimaryNodeFor({required _i9.Coin? coin}) =>
+  _i17.NodeModel? getPrimaryNodeFor({required _i9.Coin? coin}) =>
       (super.noSuchMethod(Invocation.method(
         #getPrimaryNodeFor,
         [],
         {#coin: coin},
-      )) as _i16.NodeModel?);
+      )) as _i17.NodeModel?);
   @override
-  List<_i16.NodeModel> getNodesFor(_i9.Coin? coin) => (super.noSuchMethod(
+  List<_i17.NodeModel> getNodesFor(_i9.Coin? coin) => (super.noSuchMethod(
         Invocation.method(
           #getNodesFor,
           [coin],
         ),
-        returnValue: <_i16.NodeModel>[],
-      ) as List<_i16.NodeModel>);
+        returnValue: <_i17.NodeModel>[],
+      ) as List<_i17.NodeModel>);
   @override
-  _i16.NodeModel? getNodeById({required String? id}) =>
+  _i17.NodeModel? getNodeById({required String? id}) =>
       (super.noSuchMethod(Invocation.method(
         #getNodeById,
         [],
         {#id: id},
-      )) as _i16.NodeModel?);
+      )) as _i17.NodeModel?);
   @override
-  List<_i16.NodeModel> failoverNodesFor({required _i9.Coin? coin}) =>
+  List<_i17.NodeModel> failoverNodesFor({required _i9.Coin? coin}) =>
       (super.noSuchMethod(
         Invocation.method(
           #failoverNodesFor,
           [],
           {#coin: coin},
         ),
-        returnValue: <_i16.NodeModel>[],
-      ) as List<_i16.NodeModel>);
+        returnValue: <_i17.NodeModel>[],
+      ) as List<_i17.NodeModel>);
   @override
   _i11.Future<void> add(
-    _i16.NodeModel? node,
+    _i17.NodeModel? node,
     String? password,
     bool? shouldNotifyListeners,
   ) =>
@@ -801,7 +857,7 @@ class MockNodeService extends _i1.Mock implements _i3.NodeService {
       ) as _i11.Future<void>);
   @override
   _i11.Future<void> edit(
-    _i16.NodeModel? editedNode,
+    _i17.NodeModel? editedNode,
     String? password,
     bool? shouldNotifyListeners,
   ) =>
diff --git a/test/widget_tests/table_view/table_view_row_test.mocks.dart b/test/widget_tests/table_view/table_view_row_test.mocks.dart
index cc022b12e..84cfac4c8 100644
--- a/test/widget_tests/table_view/table_view_row_test.mocks.dart
+++ b/test/widget_tests/table_view/table_view_row_test.mocks.dart
@@ -13,7 +13,7 @@ import 'package:bitcoindart/bitcoindart.dart' as _i13;
 import 'package:flutter/foundation.dart' as _i4;
 import 'package:flutter_riverpod/flutter_riverpod.dart' as _i5;
 import 'package:mockito/mockito.dart' as _i1;
-import 'package:stackwallet/db/isar/main_db.dart' as _i12;
+import 'package:stackwallet/db/main_db.dart' as _i12;
 import 'package:stackwallet/electrumx_rpc/cached_electrumx.dart' as _i10;
 import 'package:stackwallet/electrumx_rpc/electrumx.dart' as _i9;
 import 'package:stackwallet/models/balance.dart' as _i11;
@@ -1419,25 +1419,6 @@ class MockBitcoinWallet extends _i1.Mock implements _i24.BitcoinWallet {
         returnValueForMissingStub: _i21.Future<void>.value(),
       ) as _i21.Future<void>);
   @override
-  List<String> getWalletTokenContractAddresses() => (super.noSuchMethod(
-        Invocation.method(
-          #getWalletTokenContractAddresses,
-          [],
-        ),
-        returnValue: <String>[],
-      ) as List<String>);
-  @override
-  _i21.Future<void> updateWalletTokenContractAddresses(
-          List<String>? contractAddresses) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #updateWalletTokenContractAddresses,
-          [contractAddresses],
-        ),
-        returnValue: _i21.Future<void>.value(),
-        returnValueForMissingStub: _i21.Future<void>.value(),
-      ) as _i21.Future<void>);
-  @override
   void initWalletDB({_i12.MainDB? mockableOverride}) => super.noSuchMethod(
         Invocation.method(
           #initWalletDB,
@@ -2155,11 +2136,6 @@ class MockManager extends _i1.Mock implements _i6.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/widget_tests/transaction_card_test.mocks.dart b/test/widget_tests/transaction_card_test.mocks.dart
index ba9b854b5..51afbec22 100644
--- a/test/widget_tests/transaction_card_test.mocks.dart
+++ b/test/widget_tests/transaction_card_test.mocks.dart
@@ -10,7 +10,7 @@ import 'package:decimal/decimal.dart' as _i14;
 import 'package:flutter/foundation.dart' as _i4;
 import 'package:flutter_riverpod/flutter_riverpod.dart' as _i5;
 import 'package:mockito/mockito.dart' as _i1;
-import 'package:stackwallet/db/isar/main_db.dart' as _i13;
+import 'package:stackwallet/db/main_db.dart' as _i13;
 import 'package:stackwallet/electrumx_rpc/cached_electrumx.dart' as _i12;
 import 'package:stackwallet/electrumx_rpc/electrumx.dart' as _i11;
 import 'package:stackwallet/models/balance.dart' as _i9;
@@ -22,8 +22,8 @@ import 'package:stackwallet/services/coins/firo/firo_wallet.dart' as _i22;
 import 'package:stackwallet/services/coins/manager.dart' as _i6;
 import 'package:stackwallet/services/locale_service.dart' as _i24;
 import 'package:stackwallet/services/node_service.dart' as _i3;
-import 'package:stackwallet/services/notes_service.dart' as _i28;
-import 'package:stackwallet/services/price_service.dart' as _i27;
+import 'package:stackwallet/services/notes_service.dart' as _i29;
+import 'package:stackwallet/services/price_service.dart' as _i28;
 import 'package:stackwallet/services/transaction_notification_tracker.dart'
     as _i10;
 import 'package:stackwallet/services/wallets.dart' as _i16;
@@ -32,6 +32,7 @@ import 'package:stackwallet/utilities/enums/backup_frequency_type.dart' as _i26;
 import 'package:stackwallet/utilities/enums/coin_enum.dart' as _i17;
 import 'package:stackwallet/utilities/enums/sync_type_enum.dart' as _i25;
 import 'package:stackwallet/utilities/prefs.dart' as _i19;
+import 'package:stackwallet/utilities/theme/color_theme.dart' as _i27;
 import 'package:tuple/tuple.dart' as _i15;
 
 // ignore_for_file: type=lint
@@ -555,11 +556,6 @@ class MockManager extends _i1.Mock implements _i6.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
@@ -1960,25 +1956,6 @@ class MockFiroWallet extends _i1.Mock implements _i22.FiroWallet {
         returnValueForMissingStub: _i18.Future<void>.value(),
       ) as _i18.Future<void>);
   @override
-  List<String> getWalletTokenContractAddresses() => (super.noSuchMethod(
-        Invocation.method(
-          #getWalletTokenContractAddresses,
-          [],
-        ),
-        returnValue: <String>[],
-      ) as List<String>);
-  @override
-  _i18.Future<void> updateWalletTokenContractAddresses(
-          List<String>? contractAddresses) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #updateWalletTokenContractAddresses,
-          [contractAddresses],
-        ),
-        returnValue: _i18.Future<void>.value(),
-        returnValueForMissingStub: _i18.Future<void>.value(),
-      ) as _i18.Future<void>);
-  @override
   void initWalletDB({_i13.MainDB? mockableOverride}) => super.noSuchMethod(
         Invocation.method(
           #initWalletDB,
@@ -2368,6 +2345,61 @@ class MockPrefs extends _i1.Mock implements _i19.Prefs {
         returnValueForMissingStub: null,
       );
   @override
+  bool get enableSystemBrightness => (super.noSuchMethod(
+        Invocation.getter(#enableSystemBrightness),
+        returnValue: false,
+      ) as bool);
+  @override
+  set enableSystemBrightness(bool? enableSystemBrightness) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #enableSystemBrightness,
+          enableSystemBrightness,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i27.ThemeType get theme => (super.noSuchMethod(
+        Invocation.getter(#theme),
+        returnValue: _i27.ThemeType.light,
+      ) as _i27.ThemeType);
+  @override
+  set theme(_i27.ThemeType? theme) => super.noSuchMethod(
+        Invocation.setter(
+          #theme,
+          theme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i27.ThemeType get systemBrightnessLightTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessLightTheme),
+        returnValue: _i27.ThemeType.light,
+      ) as _i27.ThemeType);
+  @override
+  set systemBrightnessLightTheme(_i27.ThemeType? systemBrightnessLightTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessLightTheme,
+          systemBrightnessLightTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
+  _i27.ThemeType get systemBrightnessDarkTheme => (super.noSuchMethod(
+        Invocation.getter(#systemBrightnessDarkTheme),
+        returnValue: _i27.ThemeType.light,
+      ) as _i27.ThemeType);
+  @override
+  set systemBrightnessDarkTheme(_i27.ThemeType? systemBrightnessDarkTheme) =>
+      super.noSuchMethod(
+        Invocation.setter(
+          #systemBrightnessDarkTheme,
+          systemBrightnessDarkTheme,
+        ),
+        returnValueForMissingStub: null,
+      );
+  @override
   bool get hasListeners => (super.noSuchMethod(
         Invocation.getter(#hasListeners),
         returnValue: false,
@@ -2453,7 +2485,7 @@ class MockPrefs extends _i1.Mock implements _i19.Prefs {
 /// A class which mocks [PriceService].
 ///
 /// See the documentation for Mockito's code generation for more information.
-class MockPriceService extends _i1.Mock implements _i27.PriceService {
+class MockPriceService extends _i1.Mock implements _i28.PriceService {
   MockPriceService() {
     _i1.throwOnMissingStub(this);
   }
@@ -2500,21 +2532,6 @@ class MockPriceService extends _i1.Mock implements _i27.PriceService {
         ),
       ) as _i15.Tuple2<_i14.Decimal, double>);
   @override
-  _i15.Tuple2<_i14.Decimal, double> getTokenPrice(String? contractAddress) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #getTokenPrice,
-          [contractAddress],
-        ),
-        returnValue: _FakeTuple2_13<_i14.Decimal, double>(
-          this,
-          Invocation.method(
-            #getTokenPrice,
-            [contractAddress],
-          ),
-        ),
-      ) as _i15.Tuple2<_i14.Decimal, double>);
-  @override
   _i18.Future<void> updatePrice() => (super.noSuchMethod(
         Invocation.method(
           #updatePrice,
@@ -2576,7 +2593,7 @@ class MockPriceService extends _i1.Mock implements _i27.PriceService {
 /// A class which mocks [NotesService].
 ///
 /// See the documentation for Mockito's code generation for more information.
-class MockNotesService extends _i1.Mock implements _i28.NotesService {
+class MockNotesService extends _i1.Mock implements _i29.NotesService {
   MockNotesService() {
     _i1.throwOnMissingStub(this);
   }
diff --git a/test/widget_tests/wallet_info_row/sub_widgets/wallet_info_row_balance_future_test.mocks.dart b/test/widget_tests/wallet_info_row/sub_widgets/wallet_info_row_balance_future_test.mocks.dart
index 5c2641dbb..028cd047e 100644
--- a/test/widget_tests/wallet_info_row/sub_widgets/wallet_info_row_balance_future_test.mocks.dart
+++ b/test/widget_tests/wallet_info_row/sub_widgets/wallet_info_row_balance_future_test.mocks.dart
@@ -13,7 +13,7 @@ import 'package:bitcoindart/bitcoindart.dart' as _i13;
 import 'package:flutter/foundation.dart' as _i4;
 import 'package:flutter_riverpod/flutter_riverpod.dart' as _i5;
 import 'package:mockito/mockito.dart' as _i1;
-import 'package:stackwallet/db/isar/main_db.dart' as _i12;
+import 'package:stackwallet/db/main_db.dart' as _i12;
 import 'package:stackwallet/electrumx_rpc/cached_electrumx.dart' as _i10;
 import 'package:stackwallet/electrumx_rpc/electrumx.dart' as _i9;
 import 'package:stackwallet/models/balance.dart' as _i11;
@@ -1431,25 +1431,6 @@ class MockBitcoinWallet extends _i1.Mock implements _i25.BitcoinWallet {
         returnValueForMissingStub: _i22.Future<void>.value(),
       ) as _i22.Future<void>);
   @override
-  List<String> getWalletTokenContractAddresses() => (super.noSuchMethod(
-        Invocation.method(
-          #getWalletTokenContractAddresses,
-          [],
-        ),
-        returnValue: <String>[],
-      ) as List<String>);
-  @override
-  _i22.Future<void> updateWalletTokenContractAddresses(
-          List<String>? contractAddresses) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #updateWalletTokenContractAddresses,
-          [contractAddresses],
-        ),
-        returnValue: _i22.Future<void>.value(),
-        returnValueForMissingStub: _i22.Future<void>.value(),
-      ) as _i22.Future<void>);
-  @override
   void initWalletDB({_i12.MainDB? mockableOverride}) => super.noSuchMethod(
         Invocation.method(
           #initWalletDB,
@@ -2367,11 +2348,6 @@ class MockManager extends _i1.Mock implements _i6.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,
diff --git a/test/widget_tests/wallet_info_row/wallet_info_row_test.mocks.dart b/test/widget_tests/wallet_info_row/wallet_info_row_test.mocks.dart
index 1f786dbab..8b75cb42e 100644
--- a/test/widget_tests/wallet_info_row/wallet_info_row_test.mocks.dart
+++ b/test/widget_tests/wallet_info_row/wallet_info_row_test.mocks.dart
@@ -13,7 +13,7 @@ import 'package:bitcoindart/bitcoindart.dart' as _i13;
 import 'package:flutter/foundation.dart' as _i4;
 import 'package:flutter_riverpod/flutter_riverpod.dart' as _i5;
 import 'package:mockito/mockito.dart' as _i1;
-import 'package:stackwallet/db/isar/main_db.dart' as _i12;
+import 'package:stackwallet/db/main_db.dart' as _i12;
 import 'package:stackwallet/electrumx_rpc/cached_electrumx.dart' as _i10;
 import 'package:stackwallet/electrumx_rpc/electrumx.dart' as _i9;
 import 'package:stackwallet/models/balance.dart' as _i11;
@@ -1431,25 +1431,6 @@ class MockBitcoinWallet extends _i1.Mock implements _i25.BitcoinWallet {
         returnValueForMissingStub: _i22.Future<void>.value(),
       ) as _i22.Future<void>);
   @override
-  List<String> getWalletTokenContractAddresses() => (super.noSuchMethod(
-        Invocation.method(
-          #getWalletTokenContractAddresses,
-          [],
-        ),
-        returnValue: <String>[],
-      ) as List<String>);
-  @override
-  _i22.Future<void> updateWalletTokenContractAddresses(
-          List<String>? contractAddresses) =>
-      (super.noSuchMethod(
-        Invocation.method(
-          #updateWalletTokenContractAddresses,
-          [contractAddresses],
-        ),
-        returnValue: _i22.Future<void>.value(),
-        returnValueForMissingStub: _i22.Future<void>.value(),
-      ) as _i22.Future<void>);
-  @override
   void initWalletDB({_i12.MainDB? mockableOverride}) => super.noSuchMethod(
         Invocation.method(
           #initWalletDB,
@@ -2367,11 +2348,6 @@ class MockManager extends _i1.Mock implements _i6.Manager {
         returnValue: false,
       ) as bool);
   @override
-  bool get hasTokenSupport => (super.noSuchMethod(
-        Invocation.getter(#hasTokenSupport),
-        returnValue: false,
-      ) as bool);
-  @override
   bool get hasWhirlpoolSupport => (super.noSuchMethod(
         Invocation.getter(#hasWhirlpoolSupport),
         returnValue: false,