diff --git a/cw_haven/.gitignore b/cw_haven/.gitignore
deleted file mode 100644
index e9dc58d3d..000000000
--- a/cw_haven/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.DS_Store
-.dart_tool/
-
-.packages
-.pub/
-
-build/
diff --git a/cw_haven/.metadata b/cw_haven/.metadata
deleted file mode 100644
index cb1a29e7c..000000000
--- a/cw_haven/.metadata
+++ /dev/null
@@ -1,10 +0,0 @@
-# This file tracks properties of this Flutter project.
-# Used by Flutter tool to assess capabilities and perform upgrades etc.
-#
-# This file should be version controlled and should not be manually edited.
-
-version:
-  revision: 4d7946a68d26794349189cf21b3f68cc6fe61dcb
-  channel: stable
-
-project_type: plugin
diff --git a/cw_haven/CHANGELOG.md b/cw_haven/CHANGELOG.md
deleted file mode 100644
index 41cc7d819..000000000
--- a/cw_haven/CHANGELOG.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## 0.0.1
-
-* TODO: Describe initial release.
diff --git a/cw_haven/LICENSE b/cw_haven/LICENSE
deleted file mode 100644
index ba75c69f7..000000000
--- a/cw_haven/LICENSE
+++ /dev/null
@@ -1 +0,0 @@
-TODO: Add your license here.
diff --git a/cw_haven/README.md b/cw_haven/README.md
deleted file mode 100644
index 150aebc42..000000000
--- a/cw_haven/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# cw_haven
-
-A new flutter plugin project.
-
-## Getting Started
-
-This project is a starting point for a Flutter
-[plug-in package](https://flutter.dev/developing-packages/),
-a specialized package that includes platform-specific implementation code for
-Android and/or iOS.
-
-For help getting started with Flutter, view our
-[online documentation](https://flutter.dev/docs), which offers tutorials,
-samples, guidance on mobile development, and a full API reference.
-
diff --git a/cw_haven/android/.gitignore b/cw_haven/android/.gitignore
deleted file mode 100644
index c6cbe562a..000000000
--- a/cw_haven/android/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-*.iml
-.gradle
-/local.properties
-/.idea/workspace.xml
-/.idea/libraries
-.DS_Store
-/build
-/captures
diff --git a/cw_haven/android/CMakeLists.txt b/cw_haven/android/CMakeLists.txt
deleted file mode 100644
index 04faca0e6..000000000
--- a/cw_haven/android/CMakeLists.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-cmake_minimum_required(VERSION 3.4.1)
-
-add_library( cw_haven
-             SHARED
-             ../ios/Classes/haven_api.cpp)
-
-             find_library( log-lib log )
-
-set(EXTERNAL_LIBS_DIR ${CMAKE_SOURCE_DIR}/../../cw_shared_external/ios/External/android)
-
-############
-# libsodium
-############
-
-add_library(sodium STATIC IMPORTED)
-set_target_properties(sodium PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libsodium.a)
-
-############
-# OpenSSL
-############
-
-add_library(crypto STATIC IMPORTED)
-set_target_properties(crypto PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libcrypto.a)
-
-add_library(ssl STATIC IMPORTED)
-set_target_properties(ssl PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libssl.a)
-
-############
-# Boost
-############
-
-add_library(boost_chrono STATIC IMPORTED)
-set_target_properties(boost_chrono PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_chrono.a)
-
-add_library(boost_date_time STATIC IMPORTED)
-set_target_properties(boost_date_time PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_date_time.a)
-
-add_library(boost_filesystem STATIC IMPORTED)
-set_target_properties(boost_filesystem PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_filesystem.a)
-
-add_library(boost_program_options STATIC IMPORTED)
-set_target_properties(boost_program_options PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_program_options.a)
-
-add_library(boost_regex STATIC IMPORTED)
-set_target_properties(boost_regex PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_regex.a)
-
-add_library(boost_serialization STATIC IMPORTED)
-set_target_properties(boost_serialization PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_serialization.a)
-
-add_library(boost_system STATIC IMPORTED)
-set_target_properties(boost_system PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_system.a)
-
-add_library(boost_thread STATIC IMPORTED)
-set_target_properties(boost_thread PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_thread.a)
-
-add_library(boost_wserialization STATIC IMPORTED)
-set_target_properties(boost_wserialization PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_wserialization.a)
-
-#############
-# Haven
-#############
-
-add_library(wallet_api STATIC IMPORTED)
-set_target_properties(wallet_api PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libwallet_api.a)
-
-add_library(wallet STATIC IMPORTED)
-set_target_properties(wallet PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libwallet.a)
-
-add_library(cryptonote_core STATIC IMPORTED)
-set_target_properties(cryptonote_core PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libcryptonote_core.a)
-
-add_library(cryptonote_basic STATIC IMPORTED)
-set_target_properties(cryptonote_basic PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libcryptonote_basic.a)
-
-add_library(mnemonics STATIC IMPORTED)
-set_target_properties(mnemonics PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libmnemonics.a)
-
-add_library(common STATIC IMPORTED)
-set_target_properties(common PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libcommon.a)
-
-add_library(cncrypto STATIC IMPORTED)
-set_target_properties(cncrypto PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libcncrypto.a)
-
-add_library(ringct STATIC IMPORTED)
-set_target_properties(ringct PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libringct.a)
-
-add_library(ringct_basic STATIC IMPORTED)
-set_target_properties(ringct_basic PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libringct_basic.a)
-
-add_library(blockchain_db STATIC IMPORTED)
-set_target_properties(blockchain_db PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libblockchain_db.a)
-
-add_library(lmdb STATIC IMPORTED)
-set_target_properties(lmdb PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/liblmdb.a)
-
-add_library(easylogging STATIC IMPORTED)
-set_target_properties(easylogging PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libeasylogging.a)
-
-add_library(unbound STATIC IMPORTED)
-set_target_properties(unbound PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libunbound.a)
-
-add_library(epee STATIC IMPORTED)
-set_target_properties(epee PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libepee.a)
-
-add_library(checkpoints STATIC IMPORTED)
-set_target_properties(checkpoints PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libcheckpoints.a)
-
-add_library(device STATIC IMPORTED)
-set_target_properties(device PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libdevice.a)
-
-add_library(device_trezor STATIC IMPORTED)
-set_target_properties(device_trezor PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libdevice_trezor.a)
-
-add_library(multisig STATIC IMPORTED)
-set_target_properties(multisig PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libmultisig.a)
-
-add_library(version STATIC IMPORTED)
-set_target_properties(version PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libversion.a)
-
-add_library(net STATIC IMPORTED)
-set_target_properties(net PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libnet.a)
-        
-add_library(hardforks STATIC IMPORTED)
-set_target_properties(hardforks PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libhardforks.a)
-
-add_library(randomx STATIC IMPORTED)
-set_target_properties(randomx PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/librandomx.a)
-        
-add_library(offshore STATIC IMPORTED)
-set_target_properties(offshore PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/liboffshore.a)
-
-
-add_library(rpc_base STATIC IMPORTED)
-set_target_properties(rpc_base PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/librpc_base.a)
-
-add_library(wallet-crypto STATIC IMPORTED)
-set_target_properties(wallet-crypto PROPERTIES IMPORTED_LOCATION
-        ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/haven/libwallet-crypto.a)
-
-include_directories( ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/include )
-
-target_link_libraries(  cw_haven
-                       
-                        wallet_api
-                        wallet
-                        cryptonote_core
-                        cryptonote_basic
-                        mnemonics
-                        ringct
-                        ringct_basic
-                        net
-                        common
-                        cncrypto
-                        blockchain_db
-                        lmdb
-                        easylogging
-                        unbound
-                        epee
-                        checkpoints
-                        device
-                        device_trezor
-                        multisig
-                        version
-                        randomx
-                        offshore
-                        hardforks
-                        rpc_base
-
-                        boost_chrono
-                        boost_date_time
-                        boost_filesystem
-                        boost_program_options
-                        boost_regex
-                        boost_serialization
-                        boost_system
-                        boost_thread
-                        boost_wserialization
-
-                        ssl
-                        crypto
-
-                        sodium
-
-                        ${log-lib} )
\ No newline at end of file
diff --git a/cw_haven/android/build.gradle b/cw_haven/android/build.gradle
deleted file mode 100644
index 8eb728a67..000000000
--- a/cw_haven/android/build.gradle
+++ /dev/null
@@ -1,56 +0,0 @@
-group 'com.cakewallet.cw_haven'
-version '1.0-SNAPSHOT'
-
-buildscript {
-    ext.kotlin_version = '2.0.21'
-    repositories {
-        google()
-        mavenCentral()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:8.7.1'
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-    }
-}
-
-rootProject.allprojects {
-    repositories {
-        google()
-        mavenCentral()
-    }
-}
-
-apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
-
-android {
-    compileSdkVersion 33
-
-    if (project.android.hasProperty("namespace")) {
-        namespace 'com.cakewallet.cw_haven'
-    }
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_17
-        targetCompatibility JavaVersion.VERSION_17
-    }
-
-    kotlinOptions {
-        jvmTarget = '17'
-    }
-    sourceSets {
-        main.java.srcDirs += 'src/main/kotlin'
-    }
-    defaultConfig {
-        minSdkVersion 21
-    }
-    externalNativeBuild {
-        cmake {
-        }
-    }
-}
-
-dependencies {
-    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
-}
diff --git a/cw_haven/android/gradle.properties b/cw_haven/android/gradle.properties
deleted file mode 100644
index 94adc3a3f..000000000
--- a/cw_haven/android/gradle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-org.gradle.jvmargs=-Xmx1536M
-android.useAndroidX=true
-android.enableJetifier=true
diff --git a/cw_haven/android/gradle/wrapper/gradle-wrapper.properties b/cw_haven/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 3c9d0852b..000000000
--- a/cw_haven/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
diff --git a/cw_haven/android/settings.gradle b/cw_haven/android/settings.gradle
deleted file mode 100644
index 2a0a2fea8..000000000
--- a/cw_haven/android/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-rootProject.name = 'cw_haven'
diff --git a/cw_haven/android/src/main/AndroidManifest.xml b/cw_haven/android/src/main/AndroidManifest.xml
deleted file mode 100644
index b72b21d5d..000000000
--- a/cw_haven/android/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-  package="com.cakewallet.cw_haven">
-</manifest>
diff --git a/cw_haven/android/src/main/kotlin/com/cakewallet/cw_haven/CwHavenPlugin.kt b/cw_haven/android/src/main/kotlin/com/cakewallet/cw_haven/CwHavenPlugin.kt
deleted file mode 100644
index b31493c6e..000000000
--- a/cw_haven/android/src/main/kotlin/com/cakewallet/cw_haven/CwHavenPlugin.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.cakewallet.cw_haven
-
-import androidx.annotation.NonNull
-
-import io.flutter.embedding.engine.plugins.FlutterPlugin
-import io.flutter.plugin.common.MethodCall
-import io.flutter.plugin.common.MethodChannel
-import io.flutter.plugin.common.MethodChannel.MethodCallHandler
-import io.flutter.plugin.common.MethodChannel.Result
-import io.flutter.plugin.common.PluginRegistry.Registrar
-
-/** CwHavenPlugin */
-class CwHavenPlugin: FlutterPlugin, MethodCallHandler {
-  /// The MethodChannel that will the communication between Flutter and native Android
-  ///
-  /// This local reference serves to register the plugin with the Flutter Engine and unregister it
-  /// when the Flutter Engine is detached from the Activity
-  private lateinit var channel : MethodChannel
-
-  override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
-    channel = MethodChannel(flutterPluginBinding.binaryMessenger, "cw_haven")
-    channel.setMethodCallHandler(this)
-  }
-
-  override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
-    if (call.method == "getPlatformVersion") {
-      result.success("Android ${android.os.Build.VERSION.RELEASE}")
-    } else {
-      result.notImplemented()
-    }
-  }
-
-  override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
-    channel.setMethodCallHandler(null)
-  }
-}
diff --git a/cw_haven/ios/.gitignore b/cw_haven/ios/.gitignore
deleted file mode 100644
index aa479fd3c..000000000
--- a/cw_haven/ios/.gitignore
+++ /dev/null
@@ -1,37 +0,0 @@
-.idea/
-.vagrant/
-.sconsign.dblite
-.svn/
-
-.DS_Store
-*.swp
-profile
-
-DerivedData/
-build/
-GeneratedPluginRegistrant.h
-GeneratedPluginRegistrant.m
-
-.generated/
-
-*.pbxuser
-*.mode1v3
-*.mode2v3
-*.perspectivev3
-
-!default.pbxuser
-!default.mode1v3
-!default.mode2v3
-!default.perspectivev3
-
-xcuserdata
-
-*.moved-aside
-
-*.pyc
-*sync/
-Icon?
-.tags*
-
-/Flutter/Generated.xcconfig
-/Flutter/flutter_export_environment.sh
\ No newline at end of file
diff --git a/cw_haven/ios/Assets/.gitkeep b/cw_haven/ios/Assets/.gitkeep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/cw_haven/ios/Classes/CwHavenPlugin.h b/cw_haven/ios/Classes/CwHavenPlugin.h
deleted file mode 100644
index 8a4195232..000000000
--- a/cw_haven/ios/Classes/CwHavenPlugin.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#import <Flutter/Flutter.h>
-
-@interface CwHavenPlugin : NSObject<FlutterPlugin>
-@end
diff --git a/cw_haven/ios/Classes/CwHavenPlugin.m b/cw_haven/ios/Classes/CwHavenPlugin.m
deleted file mode 100644
index 4683f4b68..000000000
--- a/cw_haven/ios/Classes/CwHavenPlugin.m
+++ /dev/null
@@ -1,15 +0,0 @@
-#import "CwHavenPlugin.h"
-#if __has_include(<cw_haven/cw_haven-Swift.h>)
-#import <cw_haven/cw_haven-Swift.h>
-#else
-// Support project import fallback if the generated compatibility header
-// is not copied when this plugin is created as a library.
-// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816
-#import "cw_haven-Swift.h"
-#endif
-
-@implementation CwHavenPlugin
-+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
-  [SwiftCwHavenPlugin registerWithRegistrar:registrar];
-}
-@end
diff --git a/cw_haven/ios/Classes/SwiftCwHavenPlugin.swift b/cw_haven/ios/Classes/SwiftCwHavenPlugin.swift
deleted file mode 100644
index ddee88ae7..000000000
--- a/cw_haven/ios/Classes/SwiftCwHavenPlugin.swift
+++ /dev/null
@@ -1,14 +0,0 @@
-import Flutter
-import UIKit
-
-public class SwiftCwHavenPlugin: NSObject, FlutterPlugin {
-  public static func register(with registrar: FlutterPluginRegistrar) {
-    let channel = FlutterMethodChannel(name: "cw_haven", binaryMessenger: registrar.messenger())
-    let instance = SwiftCwHavenPlugin()
-    registrar.addMethodCallDelegate(instance, channel: channel)
-  }
-
-  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
-    result("iOS " + UIDevice.current.systemVersion)
-  }
-}
diff --git a/cw_haven/ios/Classes/haven_api.cpp b/cw_haven/ios/Classes/haven_api.cpp
deleted file mode 100644
index aecaf0016..000000000
--- a/cw_haven/ios/Classes/haven_api.cpp
+++ /dev/null
@@ -1,942 +0,0 @@
-#include <stdint.h>
-#include "cstdlib"
-#include <chrono>
-#include <functional>
-#include <iostream>
-#include <unistd.h>
-#include <mutex>
-#include "thread"
-#if __APPLE__
-// Fix for randomx on ios
-void __clear_cache(void* start, void* end) { }
-#include "../External/ios/include/wallet2_api.h"
-#else
-#include "../External/android/include/wallet2_api.h"
-#endif
-
-using namespace std::chrono_literals;
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-    const uint64_t MONERO_BLOCK_SIZE = 1000;
-
-    struct Utf8Box
-    {
-        char *value;
-
-        Utf8Box(char *_value)
-        {
-            value = _value;
-        }
-    };
-
-
-    struct SubaddressRow
-    {
-        uint64_t id;
-        char *address;
-        char *label;
-
-        SubaddressRow(std::size_t _id, char *_address, char *_label)
-        {
-            id = static_cast<uint64_t>(_id);
-            address = _address;
-            label = _label;
-        }
-    };
-
-    struct AccountRow
-    {
-        uint64_t id;
-        char *label;
-
-        AccountRow(std::size_t _id, char *_label)
-        {
-            id = static_cast<uint64_t>(_id);
-            label = _label;
-        }
-    };
-
-    struct HavenBalance
-    {
-        uint64_t amount;
-        char *assetType;
-
-        HavenBalance(char *_assetType, uint64_t _amount)
-        {
-            amount = _amount;
-            assetType = _assetType;
-        }
-    };
-
-    struct HavenRate
-    {
-        uint64_t rate;
-        char *assetType;
-
-        HavenRate(char *_assetType, uint64_t _rate)
-        {
-            rate = _rate;
-            assetType = _assetType;
-        }
-    };
-
-    struct MoneroWalletListener : Monero::WalletListener
-    {
-        uint64_t m_height;
-        bool m_need_to_refresh;
-        bool m_new_transaction;
-
-        MoneroWalletListener()
-        {
-            m_height = 0;
-            m_need_to_refresh = false;
-            m_new_transaction = false;
-        }
-
-        void moneySpent(const std::string &txId, uint64_t amount, std::string assetType)
-        {
-            m_new_transaction = true;
-        }
-
-        void moneyReceived(const std::string &txId, uint64_t amount, std::string assetType)
-        {
-            m_new_transaction = true;
-        }
-
-        void unconfirmedMoneyReceived(const std::string &txId, uint64_t amount)
-        {
-            m_new_transaction = true;
-        }
-
-        void newBlock(uint64_t height)
-        {
-            m_height = height;
-        }
-
-        void updated()
-        {
-            m_new_transaction = true;
-        }
-
-        void refreshed()
-        {
-            m_need_to_refresh = true;
-        }
-
-        void resetNeedToRefresh()
-        {
-            m_need_to_refresh = false;
-        }
-
-        bool isNeedToRefresh()
-        {
-            return m_need_to_refresh;
-        }
-
-        bool isNewTransactionExist()
-        {
-            return m_new_transaction;
-        }
-
-        void resetIsNewTransactionExist()
-        {
-            m_new_transaction = false;
-        }
-
-        uint64_t height()
-        {
-            return m_height;
-        }
-    };
-
-    struct TransactionInfoRow
-    {
-        uint64_t amount;
-        uint64_t fee;
-        uint64_t blockHeight;
-        uint64_t confirmations;
-        uint32_t subaddrAccount;
-        int8_t direction;
-        int8_t isPending;
-        uint32_t subaddrIndex;
-        
-        char *hash;
-        char *paymentId;
-        char *assetType;
-
-        int64_t datetime;
-
-        TransactionInfoRow(Monero::TransactionInfo *transaction)
-        {
-            amount = transaction->amount();
-            fee = transaction->fee();
-            blockHeight = transaction->blockHeight();
-            subaddrAccount = transaction->subaddrAccount();
-            std::set<uint32_t>::iterator it = transaction->subaddrIndex().begin();
-            subaddrIndex = *it;
-            confirmations = transaction->confirmations();
-            datetime = static_cast<int64_t>(transaction->timestamp());            
-            direction = transaction->direction();
-            isPending = static_cast<int8_t>(transaction->isPending());
-            std::string *hash_str = new std::string(transaction->hash());
-            hash = strdup(hash_str->c_str());
-            paymentId = strdup(transaction->paymentId().c_str());
-            assetType = strdup(transaction->assetType().c_str());
-        }
-    };
-
-    struct PendingTransactionRaw
-    {
-        uint64_t amount;
-        uint64_t fee;
-        char *hash;
-        Monero::PendingTransaction *transaction;
-
-        PendingTransactionRaw(Monero::PendingTransaction *_transaction)
-        {
-            transaction = _transaction;
-            amount = _transaction->amount();
-            fee = _transaction->fee();
-            hash = strdup(_transaction->txid()[0].c_str());
-        }
-    };
-
-    Monero::Wallet *m_wallet;
-    Monero::TransactionHistory *m_transaction_history;
-    MoneroWalletListener *m_listener;
-    Monero::Subaddress *m_subaddress;
-    Monero::SubaddressAccount *m_account;
-    uint64_t m_last_known_wallet_height;
-    uint64_t m_cached_syncing_blockchain_height = 0;
-    std::mutex store_lock;
-    bool is_storing = false;
-
-    void change_current_wallet(Monero::Wallet *wallet)
-    {
-        m_wallet = wallet;
-        m_listener = nullptr;
-        
-
-        if (wallet != nullptr)
-        {
-            m_transaction_history = wallet->history();
-        }
-        else
-        {
-            m_transaction_history = nullptr;
-        }
-
-        if (wallet != nullptr)
-        {
-            m_account = wallet->subaddressAccount();
-        }
-        else
-        {
-            m_account = nullptr;
-        }
-
-        if (wallet != nullptr)
-        {
-            m_subaddress = wallet->subaddress();
-        }
-        else
-        {
-            m_subaddress = nullptr;
-        }
-    }
-
-    Monero::Wallet *get_current_wallet()
-    {
-        return m_wallet;
-    }
-
-    bool create_wallet(char *path, char *password, char *language, int32_t networkType, char *error)
-    {
-        Monero::WalletManagerFactory::setLogLevel(4);
-
-        Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
-        Monero::WalletManager *walletManager = Monero::WalletManagerFactory::getWalletManager();
-        Monero::Wallet *wallet = walletManager->createWallet(path, password, language, _networkType);
-
-        int status;
-        std::string errorString;
-
-        wallet->statusWithErrorString(status, errorString);
-
-        if (wallet->status() != Monero::Wallet::Status_Ok)
-        {
-            error = strdup(wallet->errorString().c_str());
-            return false;
-        }
-
-        change_current_wallet(wallet);
-
-        return true;
-    }
-
-    bool restore_wallet_from_seed(char *path, char *password, char *seed, int32_t networkType, uint64_t restoreHeight, char *error)
-    {
-        Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
-        Monero::Wallet *wallet = Monero::WalletManagerFactory::getWalletManager()->recoveryWallet(
-            std::string(path),
-            std::string(password),
-            std::string(seed),
-            _networkType,
-            (uint64_t)restoreHeight);
-
-        int status;
-        std::string errorString;
-
-        wallet->statusWithErrorString(status, errorString);
-
-        if (status != Monero::Wallet::Status_Ok || !errorString.empty())
-        {
-            error = strdup(errorString.c_str());
-            return false;
-        }
-
-        change_current_wallet(wallet);
-        return true;
-    }
-
-    bool restore_wallet_from_keys(char *path, char *password, char *language, char *address, char *viewKey, char *spendKey, int32_t networkType, uint64_t restoreHeight, char *error)
-    {
-        Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
-        Monero::Wallet *wallet = Monero::WalletManagerFactory::getWalletManager()->createWalletFromKeys(
-            std::string(path),
-            std::string(password),
-            std::string(language),
-            _networkType,
-            (uint64_t)restoreHeight,
-            std::string(address),
-            std::string(viewKey),
-            std::string(spendKey));
-
-        int status;
-        std::string errorString;
-
-        wallet->statusWithErrorString(status, errorString);
-
-        if (status != Monero::Wallet::Status_Ok || !errorString.empty())
-        {
-            error = strdup(errorString.c_str());
-            return false;
-        }
-
-        change_current_wallet(wallet);
-        return true;
-    }
-
-    bool load_wallet(char *path, char *password, int32_t nettype)
-    {
-        nice(19);
-        Monero::NetworkType networkType = static_cast<Monero::NetworkType>(nettype);
-        Monero::WalletManager *walletManager = Monero::WalletManagerFactory::getWalletManager();
-        Monero::Wallet *wallet = walletManager->openWallet(std::string(path), std::string(password), networkType);
-        int status;
-        std::string errorString;
-
-        wallet->statusWithErrorString(status, errorString);
-        change_current_wallet(wallet);
-
-        return !(status != Monero::Wallet::Status_Ok || !errorString.empty());
-    }
-
-    char *error_string() {
-        return strdup(get_current_wallet()->errorString().c_str());
-    }
-
-
-    bool is_wallet_exist(char *path)
-    {
-        return Monero::WalletManagerFactory::getWalletManager()->walletExists(std::string(path));
-    }
-
-    void close_current_wallet()
-    {
-        Monero::WalletManagerFactory::getWalletManager()->closeWallet(get_current_wallet());
-        change_current_wallet(nullptr);
-    }
-
-    char *get_filename()
-    {
-        return strdup(get_current_wallet()->filename().c_str());
-    }
-
-    char *secret_view_key()
-    {
-        return strdup(get_current_wallet()->secretViewKey().c_str());
-    }
-
-    char *public_view_key()
-    {
-        return strdup(get_current_wallet()->publicViewKey().c_str());
-    }
-
-    char *secret_spend_key()
-    {
-        return strdup(get_current_wallet()->secretSpendKey().c_str());
-    }
-
-    char *public_spend_key()
-    {
-        return strdup(get_current_wallet()->publicSpendKey().c_str());
-    }
-
-    char *get_address(uint32_t account_index, uint32_t address_index)
-    {
-        return strdup(get_current_wallet()->address(account_index, address_index).c_str());
-    }
-
-
-    const char *seed()
-    {
-        return strdup(get_current_wallet()->seed().c_str());
-    }
-
-    int64_t *get_full_balance(uint32_t account_index)
-    {
-        std::map<std::string, uint64_t> accountBalance;
-        std::map<uint32_t, std::map<std::string, uint64_t>> balanceSubaddresses = get_current_wallet()->balance(account_index);
-        std::vector<std::string> assetList = Monero::Assets::list();
-        //prefill balances
-        for (const auto &asset_type : assetList) {
-
-            accountBalance[asset_type] = 0;
-        }
-        // balances are mapped to their subaddress
-        // we compute total balances of account
-        for (auto const& balanceSubaddress : balanceSubaddresses)
-            {
-                
-                std::map<std::string, uint64_t> balanceOfSubaddress = balanceSubaddress.second;
-
-                 for (auto const& balance : balanceOfSubaddress)
-                    {
-                
-                        const std::string &assetType = balance.first;
-                        const uint64_t &amount = balance.second;
-                        accountBalance[assetType] +=amount;
-                    }
-            }
-
-        size_t size = accountBalance.size();
-        int64_t *balanceAddresses = (int64_t *)malloc(size * sizeof(int64_t));
-        int i = 0;
-
-        for (auto const& balance : accountBalance)
-        {
-            char *assetType = strdup(balance.first.c_str());
-            HavenBalance *hb = new HavenBalance(assetType, balance.second);
-            balanceAddresses[i] = reinterpret_cast<int64_t>(hb);
-            i++;
-        }
-        return balanceAddresses;
-    }
-
-    int64_t *get_unlocked_balance(uint32_t account_index)
-    {
-        std::map<std::string, uint64_t> accountBalance;
-        std::map<uint32_t, std::map<std::string, uint64_t>> balanceSubaddresses = get_current_wallet()->unlockedBalance(account_index);
-        std::vector<std::string> assetList = Monero::Assets::list();
-
-        //prefill balances
-        for (const auto &asset_type : assetList) {
-
-            accountBalance[asset_type] = 0;
-        }
-        // balances are mapped to their subaddress
-        // we compute total balances of account
-        for (auto const& balanceSubaddress : balanceSubaddresses)
-            {
-                
-                std::map<std::string, uint64_t> balanceOfSubaddress = balanceSubaddress.second;
-
-                 for (auto const& balance : balanceOfSubaddress)
-                    {
-                
-                        const std::string &assetType = balance.first;
-                        const uint64_t &amount = balance.second;
-                        accountBalance[assetType] +=amount;
-                    }
-            }
-
-        size_t size = accountBalance.size();
-        int64_t *balanceAddresses = (int64_t *)malloc(size * sizeof(int64_t));
-        int i = 0;
-
-        for (auto const& balance : accountBalance)
-        {
-            char *assetType = strdup(balance.first.c_str());
-            HavenBalance *hb = new HavenBalance(assetType, balance.second);
-            balanceAddresses[i] = reinterpret_cast<int64_t>(hb);
-            i++;
-        }
-        return balanceAddresses;
-    }
-
-    uint64_t get_current_height()
-    {
-        return get_current_wallet()->blockChainHeight();
-    }
-
-    uint64_t get_node_height()
-    {
-        return get_current_wallet()->daemonBlockChainHeight();
-    }
-
-    bool connect_to_node(char *error)
-    {
-        nice(19);
-        bool is_connected = get_current_wallet()->connectToDaemon();
-
-        if (!is_connected)
-        {
-            error = strdup(get_current_wallet()->errorString().c_str());
-        }
-
-        return is_connected;
-    }
-
-    bool setup_node(char *address, char *login, char *password, bool use_ssl, bool is_light_wallet, char *error)
-    {
-        nice(19);
-        Monero::Wallet *wallet = get_current_wallet();
-        
-        std::string _login = "";
-        std::string _password = "";
-
-        if (login != nullptr)
-        {
-            _login = std::string(login);
-        }
-
-        if (password != nullptr)
-        {
-            _password = std::string(password);
-        }
-
-        bool inited = wallet->init(std::string(address), 0, _login, _password, use_ssl, is_light_wallet);
-
-        if (!inited)
-        {
-            error = strdup(wallet->errorString().c_str());
-        } else if (!wallet->connectToDaemon()) {
-            error = strdup(wallet->errorString().c_str());
-        }
-
-        return inited;
-    }
-
-    bool is_connected()
-    {
-        return get_current_wallet()->connected();
-    }
-
-    void start_refresh()
-    {
-        get_current_wallet()->refreshAsync();
-        get_current_wallet()->startRefresh();
-    }
-
-    void set_refresh_from_block_height(uint64_t height)
-    {
-        get_current_wallet()->setRefreshFromBlockHeight(height);
-    }
-
-    void set_recovering_from_seed(bool is_recovery)
-    {
-        get_current_wallet()->setRecoveringFromSeed(is_recovery);
-    }
-
-    void store(char *path)
-    {
-        store_lock.lock();
-        if (is_storing) {
-            return;
-        }
-
-        is_storing = true;
-        get_current_wallet()->store(std::string(path));
-        is_storing = false;
-        store_lock.unlock();
-    }
-
-    bool set_password(char *password, Utf8Box &error) {
-        bool is_changed = get_current_wallet()->setPassword(std::string(password));
-
-        if (!is_changed) {
-            error = Utf8Box(strdup(get_current_wallet()->errorString().c_str()));
-        }
-
-        return is_changed;
-    }
-
-    bool transaction_create(char *address, char *asset_type, char *payment_id, char *amount,
-                                              uint8_t priority_raw, uint32_t subaddr_account, Utf8Box &error, PendingTransactionRaw &pendingTransaction)
-    {
-        nice(19);
-        
-        auto priority = static_cast<Monero::PendingTransaction::Priority>(priority_raw);
-        std::string _payment_id;
-        Monero::PendingTransaction *transaction;
-
-        if (payment_id != nullptr)
-        {
-            _payment_id = std::string(payment_id);
-        }
-
-        if (amount != nullptr)
-        {
-            uint64_t _amount = Monero::Wallet::amountFromString(std::string(amount));
-            transaction = m_wallet->createTransaction(std::string(address), _payment_id, _amount, std::string(asset_type), std::string(asset_type), m_wallet->defaultMixin(), priority, subaddr_account, {});
-        }
-        else
-        {
-            transaction = m_wallet->createTransaction(std::string(address), _payment_id, Monero::optional<uint64_t>(),std::string(asset_type), std::string(asset_type), m_wallet->defaultMixin(), priority, subaddr_account, {});
-        }
-        
-        int status = transaction->status();
-
-        if (status == Monero::PendingTransaction::Status::Status_Error || status == Monero::PendingTransaction::Status::Status_Critical)
-        {
-            error = Utf8Box(strdup(transaction->errorString().c_str()));
-            return false;
-        }
-
-        if (m_listener != nullptr) {
-            m_listener->m_new_transaction = true;
-        }
-
-        pendingTransaction = PendingTransactionRaw(transaction);
-        return true;
-    }
-
-    bool transaction_create_mult_dest(char **addresses, char *asset_type, char *payment_id, char **amounts, uint32_t size,
-                                                  uint8_t priority_raw, uint32_t subaddr_account, Utf8Box &error, PendingTransactionRaw &pendingTransaction)
-    {
-        nice(19);
-
-        std::vector<std::string> _addresses;
-        std::vector<uint64_t> _amounts;
-
-        for (int i = 0; i < size; i++) {
-            _addresses.push_back(std::string(*addresses));
-            _amounts.push_back(Monero::Wallet::amountFromString(std::string(*amounts)));
-            addresses++;
-            amounts++;
-        }
-
-        auto priority = static_cast<Monero::PendingTransaction::Priority>(priority_raw);
-        std::string _payment_id;
-        Monero::PendingTransaction *transaction;
-
-        if (payment_id != nullptr)
-        {
-            _payment_id = std::string(payment_id);
-        }
-
-        transaction = m_wallet->createTransactionMultDest(_addresses, _payment_id, _amounts,
-        std::string(asset_type), std::string(asset_type), m_wallet->defaultMixin(), priority, subaddr_account,{});
-
-        int status = transaction->status();
-
-        if (status == Monero::PendingTransaction::Status::Status_Error || status == Monero::PendingTransaction::Status::Status_Critical)
-        {
-            error = Utf8Box(strdup(transaction->errorString().c_str()));
-            return false;
-        }
-
-        if (m_listener != nullptr) {
-            m_listener->m_new_transaction = true;
-        }
-
-        pendingTransaction = PendingTransactionRaw(transaction);
-        return true;
-    }
-
-    bool transaction_commit(PendingTransactionRaw *transaction, Utf8Box &error)
-    {
-        bool committed = transaction->transaction->commit();
-
-        if (!committed)
-        {
-            error = Utf8Box(strdup(transaction->transaction->errorString().c_str()));
-        } else if (m_listener != nullptr) {
-            m_listener->m_new_transaction = true;
-        }
-
-        return committed;
-    }
-
-    uint64_t get_node_height_or_update(uint64_t base_eight)
-    {
-        if (m_cached_syncing_blockchain_height < base_eight) {
-            m_cached_syncing_blockchain_height = base_eight;
-        }
-
-        return m_cached_syncing_blockchain_height;
-    }
-
-    uint64_t get_syncing_height()
-    {
-        if (m_listener == nullptr) {
-            return 0;
-        }
-
-        uint64_t height = m_listener->height();
-
-        if (height <= 1) {
-            return 0;
-        }
-
-        if (height != m_last_known_wallet_height)
-        {
-            m_last_known_wallet_height = height;
-        }
-
-        return height;
-    }
-
-    uint64_t is_needed_to_refresh()
-    {
-        if (m_listener == nullptr) {
-            return false;
-        }
-
-        bool should_refresh = m_listener->isNeedToRefresh();
-
-        if (should_refresh) {
-            m_listener->resetNeedToRefresh();
-        }
-
-        return should_refresh;
-    }
-
-    uint8_t is_new_transaction_exist()
-    {
-        if (m_listener == nullptr) {
-            return false;
-        }
-
-        bool is_new_transaction_exist = m_listener->isNewTransactionExist();
-
-        if (is_new_transaction_exist)
-        {
-            m_listener->resetIsNewTransactionExist();
-        }
-
-        return is_new_transaction_exist;
-    }
-
-    void set_listener()
-    {
-        m_last_known_wallet_height = 0;
-
-        if (m_listener != nullptr)
-        {
-             free(m_listener);
-        }
-
-        m_listener = new MoneroWalletListener();
-        get_current_wallet()->setListener(m_listener);
-    }
-
-    int64_t *subaddrress_get_all()
-    {
-        std::vector<Monero::SubaddressRow *> _subaddresses = m_subaddress->getAll();
-        size_t size = _subaddresses.size();
-        int64_t *subaddresses = (int64_t *)malloc(size * sizeof(int64_t));
-
-        for (int i = 0; i < size; i++)
-        {
-            Monero::SubaddressRow *row = _subaddresses[i];
-            SubaddressRow *_row = new SubaddressRow(row->getRowId(), strdup(row->getAddress().c_str()), strdup(row->getLabel().c_str()));
-            subaddresses[i] = reinterpret_cast<int64_t>(_row);
-        }
-
-        return subaddresses;
-    }
-
-    int32_t subaddrress_size()
-    {
-        std::vector<Monero::SubaddressRow *> _subaddresses = m_subaddress->getAll();
-        return _subaddresses.size();
-    }
-
-    void subaddress_add_row(uint32_t accountIndex, char *label)
-    {
-        m_subaddress->addRow(accountIndex, std::string(label));
-    }
-
-    void subaddress_set_label(uint32_t accountIndex, uint32_t addressIndex, char *label)
-    {
-        m_subaddress->setLabel(accountIndex, addressIndex, std::string(label));
-    }
-
-    void subaddress_refresh(uint32_t accountIndex)
-    {
-        m_subaddress->refresh(accountIndex);
-    }
-
-    int32_t account_size()
-    {
-        std::vector<Monero::SubaddressAccountRow *> _accocunts = m_account->getAll();
-        return _accocunts.size();
-    }
-
-    int64_t *account_get_all()
-    {
-        std::vector<Monero::SubaddressAccountRow *> _accocunts = m_account->getAll();
-        size_t size = _accocunts.size();
-        int64_t *accocunts = (int64_t *)malloc(size * sizeof(int64_t));
-
-        for (int i = 0; i < size; i++)
-        {
-            Monero::SubaddressAccountRow *row = _accocunts[i];
-            AccountRow *_row = new AccountRow(row->getRowId(), strdup(row->getLabel().c_str()));
-            accocunts[i] = reinterpret_cast<int64_t>(_row);
-        }
-
-        return accocunts;
-    }
-
-    void account_add_row(char *label)
-    {
-        m_account->addRow(std::string(label));
-    }
-
-    void account_set_label_row(uint32_t account_index, char *label)
-    {
-        m_account->setLabel(account_index, label);
-    }
-
-    void account_refresh()
-    {
-        m_account->refresh();
-    }
-
-    int64_t *transactions_get_all()
-    {
-        std::vector<Monero::TransactionInfo *> transactions = m_transaction_history->getAll();
-        size_t size = transactions.size();
-        int64_t *transactionAddresses = (int64_t *)malloc(size * sizeof(int64_t));
-
-        for (int i = 0; i < size; i++)
-        {
-            Monero::TransactionInfo *row = transactions[i];
-            TransactionInfoRow *tx = new TransactionInfoRow(row);
-            transactionAddresses[i] = reinterpret_cast<int64_t>(tx);
-        }
-
-        return transactionAddresses;
-    }
-
-    void transactions_refresh()
-    {
-        m_transaction_history->refresh();
-    }
-
-    int64_t transactions_count()
-    {
-        return m_transaction_history->count();
-    }
-
-    int LedgerExchange(
-        unsigned char *command,
-        unsigned int cmd_len,
-        unsigned char *response,
-        unsigned int max_resp_len)
-    {
-        return -1;
-    }
-
-    int LedgerFind(char *buffer, size_t len)
-    {
-        return -1;
-    }
-
-    void on_startup()
-    {
-        Monero::Utils::onStartup();
-        Monero::WalletManagerFactory::setLogLevel(4);
-    }
-
-    void rescan_blockchain()
-    {
-        m_wallet->rescanBlockchainAsync();
-    }
-
-    char * get_tx_key(char * txId)
-    {
-        return strdup(m_wallet->getTxKey(std::string(txId)).c_str());
-    }
-
-    int32_t asset_types_size() 
-    {
-        return Monero::Assets::list().size();
-    }
-
-    char **asset_types() 
-    {
-        size_t size = Monero::Assets::list().size();
-        std::vector<std::string> assetList = Monero::Assets::list();
-        char **assetTypesPts;
-        assetTypesPts = (char **) malloc( size * sizeof(char*));
-
-        for (int i = 0; i < size; i++)
-        {
-
-            std::string asset = assetList[i];
-            //assetTypes[i] = (char *)malloc( 5 * sizeof(char));
-            assetTypesPts[i] = strdup(asset.c_str());
-        }
-
-        return assetTypesPts;
-    }
-
-    std::map<std::string, uint64_t> rates;
-
-    void update_rate()
-    {
-        rates = get_current_wallet()->oracleRates();
-    }
-
-    int64_t *get_rate()
-    {
-        size_t size = rates.size();
-        int64_t *havenRates = (int64_t *)malloc(size * sizeof(int64_t));
-        int i = 0;
-
-        for (auto const& rate : rates)
-        {   
-            char *assetType = strdup(rate.first.c_str());
-            HavenRate *havenRate = new HavenRate(assetType, rate.second);
-            havenRates[i] = reinterpret_cast<int64_t>(havenRate);
-            i++;
-        }
-
-        return havenRates;
-    }
-
-    int32_t size_of_rate()
-    {
-        return static_cast<int32_t>(rates.size());
-    }
-
-    void set_trusted_daemon(bool arg)
-    {
-        m_wallet->setTrustedDaemon(arg);
-    }
-
-    bool trusted_daemon()
-    {
-        return m_wallet->trustedDaemon();
-    }
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/cw_haven/ios/cw_haven.podspec b/cw_haven/ios/cw_haven.podspec
deleted file mode 100644
index 4a9267d15..000000000
--- a/cw_haven/ios/cw_haven.podspec
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
-# Run `pod lib lint cw_haven.podspec` to validate before publishing.
-#
-Pod::Spec.new do |s|
-  s.name             = 'cw_haven'
-  s.version          = '0.0.1'
-  s.summary          = 'Cake Wallet Haven'
-  s.description      = 'Cake Wallet wrapper over Haven project'
-  s.homepage         = 'http://cakewallet.com'
-  s.license          = { :file => '../LICENSE' }
-  s.author           = { 'Cake Wallet' => 'support@cakewallet.com' }
-  s.source           = { :path => '.' }
-  s.source_files = 'Classes/**/*'
-  s.public_header_files = 'Classes/**/*.h, Classes/*.h, ../shared_external/ios/libs/monero/include/src/**/*.h, ../shared_external/ios/libs/monero/include/contrib/**/*.h, ../shared_external/ios/libs/monero/include/../shared_external/ios/**/*.h'
-  s.dependency 'Flutter'
-  s.dependency 'cw_shared_external'
-  s.platform = :ios, '10.0'
-  s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS' => 'arm64', 'ENABLE_BITCODE' => 'NO' }
-  s.swift_version = '5.0'
-  s.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/Classes/*.h" }
-
-  s.subspec 'OpenSSL' do |openssl|
-    openssl.preserve_paths = '../../../../../cw_shared_external/ios/External/ios/include/**/*.h'
-    openssl.vendored_libraries = '../../../../../cw_shared_external/ios/External/ios/lib/libcrypto.a', '../../../../../cw_shared_external/ios/External/ios/lib/libssl.a'
-    openssl.libraries = 'ssl', 'crypto'
-    openssl.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include/**" }
-  end
-
-  s.subspec 'Sodium' do |sodium|
-    sodium.preserve_paths = '../../../../../cw_shared_external/ios/External/ios/include/**/*.h'
-    sodium.vendored_libraries = '../../../../../cw_shared_external/ios/External/ios/lib/libsodium.a'
-    sodium.libraries = 'sodium'
-    sodium.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include/**" }
-  end
-
-  s.subspec 'Boost' do |boost|
-    boost.preserve_paths = '../../../../../cw_shared_external/ios/External/ios/include/**/*.h',
-    boost.vendored_libraries =  '../../../../../cw_shared_external/ios/External/ios/lib/libboost.a',
-    boost.libraries = 'boost'
-    boost.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include/**" }
-  end
-
-  s.subspec 'Haven' do |haven|
-    haven.preserve_paths = 'External/ios/include/**/*.h'
-    haven.vendored_libraries = 'External/ios/lib/libhaven.a'
-    haven.libraries = 'haven'
-    haven.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include" }
-  end
-end
diff --git a/cw_haven/lib/api/account_list.dart b/cw_haven/lib/api/account_list.dart
deleted file mode 100644
index 87f036206..000000000
--- a/cw_haven/lib/api/account_list.dart
+++ /dev/null
@@ -1,81 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-import 'package:cw_haven/api/signatures.dart';
-import 'package:cw_haven/api/types.dart';
-import 'package:cw_haven/api/haven_api.dart';
-import 'package:cw_haven/api/structs/account_row.dart';
-import 'package:cw_haven/api/wallet.dart';
-
-final accountSizeNative = havenApi
-    .lookup<NativeFunction<account_size>>('account_size')
-    .asFunction<SubaddressSize>();
-
-final accountRefreshNative = havenApi
-    .lookup<NativeFunction<account_refresh>>('account_refresh')
-    .asFunction<AccountRefresh>();
-
-final accountGetAllNative = havenApi
-    .lookup<NativeFunction<account_get_all>>('account_get_all')
-    .asFunction<AccountGetAll>();
-
-final accountAddNewNative = havenApi
-    .lookup<NativeFunction<account_add_new>>('account_add_row')
-    .asFunction<AccountAddNew>();
-
-final accountSetLabelNative = havenApi
-    .lookup<NativeFunction<account_set_label>>('account_set_label_row')
-    .asFunction<AccountSetLabel>();
-
-bool isUpdating = false;
-
-void refreshAccounts() {
-  try {
-    isUpdating = true;
-    accountRefreshNative();
-    isUpdating = false;
-  } catch (e) {
-    isUpdating = false;
-    rethrow;
-  }
-}
-
-List<AccountRow> getAllAccount() {
-  final size = accountSizeNative();
-  final accountAddressesPointer = accountGetAllNative();
-  final accountAddresses = accountAddressesPointer.asTypedList(size);
-
-  return accountAddresses
-      .map((addr) => Pointer<AccountRow>.fromAddress(addr).ref)
-      .toList();
-}
-
-void addAccountSync({required String label}) {
-  final labelPointer = label.toNativeUtf8();
-  accountAddNewNative(labelPointer);
-  calloc.free(labelPointer);
-}
-
-void setLabelForAccountSync({required int accountIndex, required String label}) {
-  final labelPointer = label.toNativeUtf8();
-  accountSetLabelNative(accountIndex, labelPointer);
-  calloc.free(labelPointer);
-}
-
-void _addAccount(String label) => addAccountSync(label: label);
-
-void _setLabelForAccount(Map<String, dynamic> args) {
-  final label = args['label'] as String;
-  final accountIndex = args['accountIndex'] as int;
-
-  setLabelForAccountSync(label: label, accountIndex: accountIndex);
-}
-
-Future<void> addAccount({required String label}) async {
-  _addAccount(label);
-  await store();
-}
-
-Future<void> setLabelForAccount({required int accountIndex, required String label}) async {
-    _setLabelForAccount({'accountIndex': accountIndex, 'label': label});
-    await store();
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/asset_types.dart b/cw_haven/lib/api/asset_types.dart
deleted file mode 100644
index f57b10f78..000000000
--- a/cw_haven/lib/api/asset_types.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-import 'dart:ffi';
-import 'package:cw_haven/api/convert_utf8_to_string.dart';
-import 'package:cw_haven/api/signatures.dart';
-import 'package:cw_haven/api/types.dart';
-import 'package:cw_haven/api/haven_api.dart';
-import 'package:ffi/ffi.dart';
-
-final assetTypesSizeNative = havenApi
-    .lookup<NativeFunction<account_size>>('asset_types_size')
-    .asFunction<SubaddressSize>();
-
-final getAssetTypesNative = havenApi
-    .lookup<NativeFunction<asset_types>>('asset_types')
-    .asFunction<AssetTypes>();
-
-List<String> getAssetTypes() {
-  List<String> assetTypes = [];
-  Pointer<Pointer<Utf8>> assetTypePointers = getAssetTypesNative();
-  Pointer<Utf8> assetpointer = assetTypePointers.elementAt(0)[0];
-  String asset = convertUTF8ToString(pointer: assetpointer);
-
-  return assetTypes;
-}
diff --git a/cw_haven/lib/api/balance_list.dart b/cw_haven/lib/api/balance_list.dart
deleted file mode 100644
index 3488a6583..000000000
--- a/cw_haven/lib/api/balance_list.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-import 'dart:ffi';
-import 'package:cw_haven/api/signatures.dart';
-import 'package:cw_haven/api/types.dart';
-import 'package:cw_haven/api/haven_api.dart';
-import 'package:cw_haven/api/structs/haven_balance_row.dart';
-import 'package:cw_haven/api/structs/haven_rate.dart';
-import 'asset_types.dart';
-
-List<HavenBalanceRow> getHavenFullBalance({int accountIndex = 0}) {
-  final size = assetTypesSizeNative();
-  final balanceAddressesPointer = getHavenFullBalanceNative(accountIndex);
-  final balanceAddresses = balanceAddressesPointer.asTypedList(size);
-
-  return balanceAddresses
-      .map((addr) => Pointer<HavenBalanceRow>.fromAddress(addr).ref)
-      .toList();
-}
-
-List<HavenBalanceRow> getHavenUnlockedBalance({int accountIndex = 0}) {
-  final size = assetTypesSizeNative();
-  final balanceAddressesPointer = getHavenUnlockedBalanceNative(accountIndex);
-  final balanceAddresses = balanceAddressesPointer.asTypedList(size);
-
-  return balanceAddresses
-      .map((addr) => Pointer<HavenBalanceRow>.fromAddress(addr).ref)
-      .toList();
-}
-
-List<HavenRate> getRate() {
-  updateRateNative();
-  final size = sizeOfRateNative();
-  final ratePointer = getRateNative();
-  final rate = ratePointer.asTypedList(size);
-
-  return rate
-      .map((addr) => Pointer<HavenRate>.fromAddress(addr).ref)
-      .toList();
-}
-
-final getHavenFullBalanceNative = havenApi
-    .lookup<NativeFunction<get_full_balance>>('get_full_balance')
-    .asFunction<GetHavenFullBalance>();
-
-final getHavenUnlockedBalanceNative = havenApi
-    .lookup<NativeFunction<get_unlocked_balance>>('get_unlocked_balance')
-    .asFunction<GetHavenUnlockedBalance>();
-
-final getRateNative = havenApi
-    .lookup<NativeFunction<get_rate>>('get_rate')
-    .asFunction<GetRate>();
-
-final sizeOfRateNative = havenApi
-    .lookup<NativeFunction<size_of_rate>>('size_of_rate')
-    .asFunction<SizeOfRate>();
-
-final updateRateNative = havenApi
-    .lookup<NativeFunction<update_rate>>('update_rate')
-    .asFunction<UpdateRate>();
\ No newline at end of file
diff --git a/cw_haven/lib/api/convert_utf8_to_string.dart b/cw_haven/lib/api/convert_utf8_to_string.dart
deleted file mode 100644
index 41a6b648a..000000000
--- a/cw_haven/lib/api/convert_utf8_to_string.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-
-String convertUTF8ToString({required Pointer<Utf8> pointer}) {
-  final str = pointer.toDartString();
-  calloc.free(pointer);
-  return str;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/cw_haven.dart b/cw_haven/lib/api/cw_haven.dart
deleted file mode 100644
index 0e48276d9..000000000
--- a/cw_haven/lib/api/cw_haven.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-
-import 'dart:async';
-
-import 'package:flutter/services.dart';
-
-class CwHaven {
-  static const MethodChannel _channel =
-      const MethodChannel('cw_haven');
-
-  static Future<String> get platformVersion async {
-    final String version = await _channel.invokeMethod<String>('getPlatformVersion') ?? '';
-    return version;
-  }
-}
diff --git a/cw_haven/lib/api/exceptions/connection_to_node_exception.dart b/cw_haven/lib/api/exceptions/connection_to_node_exception.dart
deleted file mode 100644
index 483b0a174..000000000
--- a/cw_haven/lib/api/exceptions/connection_to_node_exception.dart
+++ /dev/null
@@ -1,5 +0,0 @@
-class ConnectionToNodeException implements Exception {
-  ConnectionToNodeException({required this.message});
-
-  final String message;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/exceptions/creation_transaction_exception.dart b/cw_haven/lib/api/exceptions/creation_transaction_exception.dart
deleted file mode 100644
index 7b55ec074..000000000
--- a/cw_haven/lib/api/exceptions/creation_transaction_exception.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-class CreationTransactionException implements Exception {
-  CreationTransactionException({required this.message});
-  
-  final String message;
-
-  @override
-  String toString() => message;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/exceptions/setup_wallet_exception.dart b/cw_haven/lib/api/exceptions/setup_wallet_exception.dart
deleted file mode 100644
index 9d985665b..000000000
--- a/cw_haven/lib/api/exceptions/setup_wallet_exception.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-class SetupWalletException implements Exception {
-  SetupWalletException({required this.message});
-  
-  final String message;
-
-  @override
-  String toString() {
-    return message;
-  }
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/exceptions/wallet_creation_exception.dart b/cw_haven/lib/api/exceptions/wallet_creation_exception.dart
deleted file mode 100644
index 6052366b9..000000000
--- a/cw_haven/lib/api/exceptions/wallet_creation_exception.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-class WalletCreationException implements Exception {
-  WalletCreationException({required this.message});
-
-  final String message;
-
-  @override
-  String toString() => message;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/exceptions/wallet_opening_exception.dart b/cw_haven/lib/api/exceptions/wallet_opening_exception.dart
deleted file mode 100644
index df7a850a4..000000000
--- a/cw_haven/lib/api/exceptions/wallet_opening_exception.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-class WalletOpeningException implements Exception {
-  WalletOpeningException({required this.message});
-
-  final String message;
-
-  @override
-  String toString() => message;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/exceptions/wallet_restore_from_keys_exception.dart b/cw_haven/lib/api/exceptions/wallet_restore_from_keys_exception.dart
deleted file mode 100644
index 3ff5f2438..000000000
--- a/cw_haven/lib/api/exceptions/wallet_restore_from_keys_exception.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-class WalletRestoreFromKeysException implements Exception {
-  WalletRestoreFromKeysException({required this.message});
-  
-  final String message;
-
-  @override
-  String toString() {
-    return message;
-  }
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/exceptions/wallet_restore_from_seed_exception.dart b/cw_haven/lib/api/exceptions/wallet_restore_from_seed_exception.dart
deleted file mode 100644
index 004cd7958..000000000
--- a/cw_haven/lib/api/exceptions/wallet_restore_from_seed_exception.dart
+++ /dev/null
@@ -1,5 +0,0 @@
-class WalletRestoreFromSeedException implements Exception {
-  WalletRestoreFromSeedException({required this.message});
-  
-  final String message;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/haven_api.dart b/cw_haven/lib/api/haven_api.dart
deleted file mode 100644
index 41b50d9bc..000000000
--- a/cw_haven/lib/api/haven_api.dart
+++ /dev/null
@@ -1,6 +0,0 @@
-import 'dart:ffi';
-import 'dart:io';
-
-final DynamicLibrary havenApi = Platform.isAndroid
-    ? DynamicLibrary.open("libcw_haven.so")
-    : DynamicLibrary.open("cw_haven.framework/cw_haven");
\ No newline at end of file
diff --git a/cw_haven/lib/api/monero_output.dart b/cw_haven/lib/api/monero_output.dart
deleted file mode 100644
index a6d735bd3..000000000
--- a/cw_haven/lib/api/monero_output.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-import 'package:flutter/foundation.dart';
-
-class MoneroOutput {
-  MoneroOutput({required this.address, required this.amount});
-
-  final String address;
-  final String amount;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/signatures.dart b/cw_haven/lib/api/signatures.dart
deleted file mode 100644
index ae95b62dd..000000000
--- a/cw_haven/lib/api/signatures.dart
+++ /dev/null
@@ -1,144 +0,0 @@
-import 'dart:ffi';
-import 'package:cw_haven/api/structs/pending_transaction.dart';
-import 'package:cw_haven/api/structs/ut8_box.dart';
-import 'package:ffi/ffi.dart';
-
-typedef create_wallet = Int8 Function(
-    Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Int32, Pointer<Utf8>);
-
-typedef restore_wallet_from_seed = Int8 Function(
-    Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Int32, Int64, Pointer<Utf8>);
-
-typedef restore_wallet_from_keys = Int8 Function(Pointer<Utf8>, Pointer<Utf8>,
-    Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Int32, Int64, Pointer<Utf8>);
-
-typedef is_wallet_exist = Int8 Function(Pointer<Utf8>);
-
-typedef load_wallet = Int8 Function(Pointer<Utf8>, Pointer<Utf8>, Int8);
-
-typedef error_string = Pointer<Utf8> Function();
-
-typedef get_filename = Pointer<Utf8> Function();
-
-typedef get_seed = Pointer<Utf8> Function();
-
-typedef get_address = Pointer<Utf8> Function(Int32, Int32);
-
-typedef get_full_balance = Pointer<Int64> Function(Int32);
-
-typedef get_unlocked_balance = Pointer<Int64> Function(Int32);
-
-typedef get_full_balanace = Int64 Function(Int32);
-
-typedef get_unlocked_balanace = Int64 Function(Int32);
-
-typedef get_current_height = Int64 Function();
-
-typedef get_node_height = Int64 Function();
-
-typedef is_connected = Int8 Function();
-
-typedef setup_node = Int8 Function(
-    Pointer<Utf8>, Pointer<Utf8>?, Pointer<Utf8>?, Int8, Int8, Pointer<Utf8>?, Pointer<Utf8>);
-
-typedef start_refresh = Void Function();
-
-typedef connect_to_node = Int8 Function();
-
-typedef set_refresh_from_block_height = Void Function(Int64);
-
-typedef set_recovering_from_seed = Void Function(Int8);
-
-typedef store_c = Void Function(Pointer<Utf8>);
-
-typedef set_password = Int8 Function(Pointer<Utf8> password, Pointer<Utf8Box> error);
-
-typedef set_listener = Void Function();
-
-typedef get_syncing_height = Int64 Function();
-
-typedef is_needed_to_refresh = Int8 Function();
-
-typedef is_new_transaction_exist = Int8 Function();
-
-typedef subaddrress_size = Int32 Function();
-
-typedef subaddrress_refresh = Void Function(Int32);
-
-typedef subaddress_get_all = Pointer<Int64> Function();
-
-typedef subaddress_add_new = Void Function(
-    Int32 accountIndex, Pointer<Utf8> label);
-
-typedef subaddress_set_label = Void Function(
-    Int32 accountIndex, Int32 addressIndex, Pointer<Utf8> label);
-
-typedef account_size = Int32 Function();
-
-typedef account_refresh = Void Function();
-
-typedef account_get_all = Pointer<Int64> Function();
-
-typedef account_add_new = Void Function(Pointer<Utf8> label);
-
-typedef account_set_label = Void Function(
-    Int32 accountIndex, Pointer<Utf8> label);
-
-typedef transactions_refresh = Void Function();
-
-typedef get_tx_key = Pointer<Utf8>? Function(Pointer<Utf8> txId);
-
-typedef transactions_count = Int64 Function();
-
-typedef transactions_get_all = Pointer<Int64> Function();
-
-typedef transaction_create = Int8 Function(
-    Pointer<Utf8> address,
-    Pointer<Utf8> assetType,
-    Pointer<Utf8> paymentId,
-    Pointer<Utf8> amount,
-    Int8 priorityRaw,
-    Int32 subaddrAccount,
-    Pointer<Utf8Box> error,
-    Pointer<PendingTransactionRaw> pendingTransaction);
-
-typedef transaction_create_mult_dest = Int8 Function(
-    Pointer<Pointer<Utf8>> addresses,
-    Pointer<Utf8> assetType,
-    Pointer<Utf8> paymentId,
-    Pointer<Pointer<Utf8>> amounts,
-    Int32 size,
-    Int8 priorityRaw,
-    Int32 subaddrAccount,
-    Pointer<Utf8Box> error,
-    Pointer<PendingTransactionRaw> pendingTransaction);
-
-typedef transaction_commit = Int8 Function(Pointer<PendingTransactionRaw>, Pointer<Utf8Box>);
-
-typedef secret_view_key = Pointer<Utf8> Function();
-
-typedef public_view_key = Pointer<Utf8> Function();
-
-typedef secret_spend_key = Pointer<Utf8> Function();
-
-typedef public_spend_key = Pointer<Utf8> Function();
-
-typedef close_current_wallet = Void Function();
-
-typedef on_startup = Void Function();
-
-typedef rescan_blockchain = Void Function();
-
-typedef asset_types = Pointer<Pointer<Utf8>> Function();
-
-typedef asset_types_size = Int32 Function();
-
-typedef get_rate = Pointer<Int64> Function();
-
-typedef size_of_rate = Int32 Function();
-
-typedef update_rate = Void Function();
-
-typedef set_trusted_daemon = Void Function(Int8 trusted);
-
-typedef trusted_daemon = Int8 Function();
\ No newline at end of file
diff --git a/cw_haven/lib/api/structs/account_row.dart b/cw_haven/lib/api/structs/account_row.dart
deleted file mode 100644
index aa492ee0f..000000000
--- a/cw_haven/lib/api/structs/account_row.dart
+++ /dev/null
@@ -1,12 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-
-class AccountRow extends Struct {
-  @Int64()
-  external int id;
-  
-  external Pointer<Utf8> label;
-
-  String getLabel() => label.toDartString();
-  int getId() => id;
-}
diff --git a/cw_haven/lib/api/structs/haven_balance_row.dart b/cw_haven/lib/api/structs/haven_balance_row.dart
deleted file mode 100644
index b0f657bca..000000000
--- a/cw_haven/lib/api/structs/haven_balance_row.dart
+++ /dev/null
@@ -1,12 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-
-class HavenBalanceRow extends Struct {
-  @Int64()
-  external int amount;
-  
-  external Pointer<Utf8> assetType;
-
-  int getAmount() => amount;
-  String getAssetType() => assetType.toDartString();
-}
diff --git a/cw_haven/lib/api/structs/haven_rate.dart b/cw_haven/lib/api/structs/haven_rate.dart
deleted file mode 100644
index 48f188135..000000000
--- a/cw_haven/lib/api/structs/haven_rate.dart
+++ /dev/null
@@ -1,12 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-
-class HavenRate extends Struct {
-  @Int64()
-  external int rate;
-  
-  external Pointer<Utf8> assetType;
-
-  int getRate() => rate;
-  String getAssetType() => assetType.toDartString();
-}
diff --git a/cw_haven/lib/api/structs/pending_transaction.dart b/cw_haven/lib/api/structs/pending_transaction.dart
deleted file mode 100644
index 12e5233f1..000000000
--- a/cw_haven/lib/api/structs/pending_transaction.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-
-class PendingTransactionRaw extends Struct {
-  @Int64()
-  external int amount;
-
-  @Int64()
-  external int fee;
-
-  external Pointer<Utf8> hash;
-
-  String getHash() => hash.toDartString();
-}
-
-class PendingTransactionDescription {
-  PendingTransactionDescription({
-    required this.amount,
-    required this.fee,
-    required this.hash,
-    required this.pointerAddress});
-
-  final int amount;
-  final int fee;
-  final String hash;
-  final int pointerAddress;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/structs/subaddress_row.dart b/cw_haven/lib/api/structs/subaddress_row.dart
deleted file mode 100644
index d593a793d..000000000
--- a/cw_haven/lib/api/structs/subaddress_row.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-
-class SubaddressRow extends Struct {
-  @Int64()
-  external int id;
-  
-  external Pointer<Utf8> address;
-  
-  external Pointer<Utf8> label;
-
-  String getLabel() => label.toDartString();
-  String getAddress() => address.toDartString();
-  int getId() => id;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/api/structs/transaction_info_row.dart b/cw_haven/lib/api/structs/transaction_info_row.dart
deleted file mode 100644
index 177cdfde7..000000000
--- a/cw_haven/lib/api/structs/transaction_info_row.dart
+++ /dev/null
@@ -1,44 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-
-class TransactionInfoRow extends Struct {
-  @Uint64()
-  external int amount;
-
-  @Uint64()
-  external int fee;
-
-  @Uint64()
-  external int blockHeight;
-
-  @Uint64()
-  external int confirmations;
-
-  @Uint32()
-  external int subaddrAccount;
-
-  @Int8()
-  external int direction;
-
-  @Int8()
-  external int isPending;
-
-  @Uint32()
-  external int subaddrIndex;
-
-  external Pointer<Utf8> hash;
-
-  external Pointer<Utf8> paymentId;
-
-  external Pointer<Utf8> assetType;
-
-  @Int64()
-  external int datetime;
-
-  int getDatetime() => datetime;
-  int getAmount() => amount >= 0 ? amount : amount * -1;
-  bool getIsPending() => isPending != 0;
-  String getHash() => hash.toDartString();
-  String getPaymentId() => paymentId.toDartString();
-  String getAssetType() => assetType.toDartString();
-}
diff --git a/cw_haven/lib/api/structs/ut8_box.dart b/cw_haven/lib/api/structs/ut8_box.dart
deleted file mode 100644
index 53e678c88..000000000
--- a/cw_haven/lib/api/structs/ut8_box.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-
-class Utf8Box extends Struct {
-  external Pointer<Utf8> value;
-
-  String getValue() => value.toDartString();
-}
diff --git a/cw_haven/lib/api/subaddress_list.dart b/cw_haven/lib/api/subaddress_list.dart
deleted file mode 100644
index 39dbeab78..000000000
--- a/cw_haven/lib/api/subaddress_list.dart
+++ /dev/null
@@ -1,97 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-import 'package:flutter/foundation.dart';
-import 'package:cw_haven/api/signatures.dart';
-import 'package:cw_haven/api/types.dart';
-import 'package:cw_haven/api/haven_api.dart';
-import 'package:cw_haven/api/structs/subaddress_row.dart';
-import 'package:cw_haven/api/wallet.dart';
-
-final subaddressSizeNative = havenApi
-    .lookup<NativeFunction<subaddrress_size>>('subaddrress_size')
-    .asFunction<SubaddressSize>();
-
-final subaddressRefreshNative = havenApi
-    .lookup<NativeFunction<subaddrress_refresh>>('subaddress_refresh')
-    .asFunction<SubaddressRefresh>();
-
-final subaddrressGetAllNative = havenApi
-    .lookup<NativeFunction<subaddress_get_all>>('subaddrress_get_all')
-    .asFunction<SubaddressGetAll>();
-
-final subaddrressAddNewNative = havenApi
-    .lookup<NativeFunction<subaddress_add_new>>('subaddress_add_row')
-    .asFunction<SubaddressAddNew>();
-
-final subaddrressSetLabelNative = havenApi
-    .lookup<NativeFunction<subaddress_set_label>>('subaddress_set_label')
-    .asFunction<SubaddressSetLabel>();
-
-bool isUpdating = false;
-
-void refreshSubaddresses({required int accountIndex}) {
-  try {
-    isUpdating = true;
-    subaddressRefreshNative(accountIndex);
-    isUpdating = false;
-  } catch (e) {
-    isUpdating = false;
-    rethrow;
-  }
-}
-
-List<SubaddressRow> getAllSubaddresses() {
-  final size = subaddressSizeNative();
-  final subaddressAddressesPointer = subaddrressGetAllNative();
-  final subaddressAddresses = subaddressAddressesPointer.asTypedList(size);
-
-  return subaddressAddresses
-      .map((addr) => Pointer<SubaddressRow>.fromAddress(addr).ref)
-      .toList();
-}
-
-void addSubaddressSync({required int accountIndex, required String label}) {
-  final labelPointer = label.toNativeUtf8();
-  subaddrressAddNewNative(accountIndex, labelPointer);
-  calloc.free(labelPointer);
-}
-
-void setLabelForSubaddressSync(
-    {required int accountIndex, required int addressIndex, required String label}) {
-  final labelPointer = label.toNativeUtf8();
-
-  subaddrressSetLabelNative(accountIndex, addressIndex, labelPointer);
-  calloc.free(labelPointer);
-}
-
-void _addSubaddress(Map<String, dynamic> args) {
-  final label = args['label'] as String;
-  final accountIndex = args['accountIndex'] as int;
-
-  addSubaddressSync(accountIndex: accountIndex, label: label);
-}
-
-void _setLabelForSubaddress(Map<String, dynamic> args) {
-  final label = args['label'] as String;
-  final accountIndex = args['accountIndex'] as int;
-  final addressIndex = args['addressIndex'] as int;
-
-  setLabelForSubaddressSync(
-      accountIndex: accountIndex, addressIndex: addressIndex, label: label);
-}
-
-Future addSubaddress({required int accountIndex, required String label}) async {
-    await compute<Map<String, Object>, void>(
-        _addSubaddress, {'accountIndex': accountIndex, 'label': label});
-    await store();
-}
-
-Future setLabelForSubaddress(
-        {required int accountIndex, required int addressIndex, required String label}) async {
-  await compute<Map<String, Object>, void>(_setLabelForSubaddress, {
-    'accountIndex': accountIndex,
-    'addressIndex': addressIndex,
-    'label': label
-  });
-  await store();
-}
diff --git a/cw_haven/lib/api/transaction_history.dart b/cw_haven/lib/api/transaction_history.dart
deleted file mode 100644
index f658133e1..000000000
--- a/cw_haven/lib/api/transaction_history.dart
+++ /dev/null
@@ -1,246 +0,0 @@
-import 'dart:ffi';
-import 'package:cw_haven/api/convert_utf8_to_string.dart';
-import 'package:cw_haven/api/monero_output.dart';
-import 'package:cw_haven/api/structs/ut8_box.dart';
-import 'package:ffi/ffi.dart';
-import 'package:flutter/foundation.dart';
-import 'package:cw_haven/api/signatures.dart';
-import 'package:cw_haven/api/types.dart';
-import 'package:cw_haven/api/haven_api.dart';
-import 'package:cw_haven/api/structs/transaction_info_row.dart';
-import 'package:cw_haven/api/structs/pending_transaction.dart';
-import 'package:cw_haven/api/exceptions/creation_transaction_exception.dart';
-
-final transactionsRefreshNative = havenApi
-    .lookup<NativeFunction<transactions_refresh>>('transactions_refresh')
-    .asFunction<TransactionsRefresh>();
-
-final transactionsCountNative = havenApi
-    .lookup<NativeFunction<transactions_count>>('transactions_count')
-    .asFunction<TransactionsCount>();
-
-final transactionsGetAllNative = havenApi
-    .lookup<NativeFunction<transactions_get_all>>('transactions_get_all')
-    .asFunction<TransactionsGetAll>();
-
-final transactionCreateNative = havenApi
-    .lookup<NativeFunction<transaction_create>>('transaction_create')
-    .asFunction<TransactionCreate>();
-
-final transactionCreateMultDestNative = havenApi
-    .lookup<NativeFunction<transaction_create_mult_dest>>('transaction_create_mult_dest')
-    .asFunction<TransactionCreateMultDest>();
-
-final transactionCommitNative = havenApi
-    .lookup<NativeFunction<transaction_commit>>('transaction_commit')
-    .asFunction<TransactionCommit>();
-
-final getTxKeyNative = havenApi
-    .lookup<NativeFunction<get_tx_key>>('get_tx_key')
-    .asFunction<GetTxKey>();
-
-String getTxKey(String txId) {
-  final txIdPointer = txId.toNativeUtf8();
-  final keyPointer = getTxKeyNative(txIdPointer);
-
-  calloc.free(txIdPointer);
-
-  if (keyPointer != null) {
-    return convertUTF8ToString(pointer: keyPointer);
-  }
-
-  return '';
-}
-
-void refreshTransactions() => transactionsRefreshNative();
-
-int countOfTransactions() => transactionsCountNative();
-
-List<TransactionInfoRow> getAllTransations() {
-  final size = transactionsCountNative();
-  final transactionsPointer = transactionsGetAllNative();
-  final transactionsAddresses = transactionsPointer.asTypedList(size);
-
-  return transactionsAddresses
-      .map((addr) => Pointer<TransactionInfoRow>.fromAddress(addr).ref)
-      .toList();
-}
-
-PendingTransactionDescription createTransactionSync(
-    {required String address,
-    required String assetType,
-    required String paymentId,
-    required int priorityRaw,
-    String? amount,
-    int accountIndex = 0}) {
-  final addressPointer = address.toNativeUtf8();
-  final assetTypePointer = assetType.toNativeUtf8();
-  final paymentIdPointer = paymentId.toNativeUtf8();
-  final amountPointer = amount != null ? amount.toNativeUtf8() : nullptr;
-  final errorMessagePointer = calloc<Utf8Box>();
-  final pendingTransactionRawPointer = calloc<PendingTransactionRaw>();
-  final created = transactionCreateNative(
-          addressPointer,
-          assetTypePointer,
-          paymentIdPointer,
-          amountPointer,
-          priorityRaw,
-          accountIndex,
-          errorMessagePointer,
-          pendingTransactionRawPointer) !=
-      0;
-
-  calloc.free(addressPointer);
-  calloc.free(assetTypePointer);
-  calloc.free(paymentIdPointer);
-
-  if (amountPointer != nullptr) {
-    calloc.free(amountPointer);
-  }
-
-  if (!created) {
-    final message = errorMessagePointer.ref.getValue();
-    calloc.free(errorMessagePointer);
-    throw CreationTransactionException(message: message);
-  }
-
-  return PendingTransactionDescription(
-      amount: pendingTransactionRawPointer.ref.amount,
-      fee: pendingTransactionRawPointer.ref.fee,
-      hash: pendingTransactionRawPointer.ref.getHash(),
-      pointerAddress: pendingTransactionRawPointer.address);
-}
-
-PendingTransactionDescription createTransactionMultDestSync(
-    {required List<MoneroOutput> outputs,
-      required String assetType,
-      required String paymentId,
-      required int priorityRaw,
-      int accountIndex = 0}) {
-  final int size = outputs.length;
-  final List<Pointer<Utf8>> addressesPointers = outputs.map((output) =>
-      output.address.toNativeUtf8()).toList();
-  final Pointer<Pointer<Utf8>> addressesPointerPointer = calloc(size);
-  final List<Pointer<Utf8>> amountsPointers = outputs.map((output) =>
-      output.amount.toNativeUtf8()).toList();
-  final Pointer<Pointer<Utf8>> amountsPointerPointer = calloc( size);
-
-  for (int i = 0; i < size; i++) {
-    addressesPointerPointer[i] = addressesPointers[i];
-    amountsPointerPointer[i] = amountsPointers[i];
-  }
-
-  final assetTypePointer = assetType.toNativeUtf8();
-  final paymentIdPointer = paymentId.toNativeUtf8();
-  final errorMessagePointer = calloc<Utf8Box>();
-  final pendingTransactionRawPointer = calloc<PendingTransactionRaw>();
-  final created = transactionCreateMultDestNative(
-      addressesPointerPointer,
-      assetTypePointer,
-      paymentIdPointer,
-      amountsPointerPointer,
-      size,
-      priorityRaw,
-      accountIndex,
-      errorMessagePointer,
-      pendingTransactionRawPointer) !=
-      0;
-
-  calloc.free(addressesPointerPointer);
-  calloc.free(assetTypePointer);
-  calloc.free(amountsPointerPointer);
-
-  addressesPointers.forEach((element) => calloc.free(element));
-  amountsPointers.forEach((element) => calloc.free(element));
-
-  calloc.free(paymentIdPointer);
-
-  if (!created) {
-    final message = errorMessagePointer.ref.getValue();
-    calloc.free(errorMessagePointer);
-    throw CreationTransactionException(message: message);
-  }
-
-  return PendingTransactionDescription(
-      amount: pendingTransactionRawPointer.ref.amount,
-      fee: pendingTransactionRawPointer.ref.fee,
-      hash: pendingTransactionRawPointer.ref.getHash(),
-      pointerAddress: pendingTransactionRawPointer.address);
-}
-
-void commitTransactionFromPointerAddress({required int address}) => commitTransaction(
-    transactionPointer: Pointer<PendingTransactionRaw>.fromAddress(address));
-
-void commitTransaction({required Pointer<PendingTransactionRaw> transactionPointer}) {
-  final errorMessagePointer = calloc<Utf8Box>();
-  final isCommited =
-      transactionCommitNative(transactionPointer, errorMessagePointer) != 0;
-
-  if (!isCommited) {
-    final message = errorMessagePointer.ref.getValue();
-    calloc.free(errorMessagePointer);
-    throw CreationTransactionException(message: message);
-  }
-}
-
-PendingTransactionDescription _createTransactionSync(Map args) {
-  final address = args['address'] as String;
-  final assetType = args['assetType'] as String;
-  final paymentId = args['paymentId'] as String;
-  final amount = args['amount'] as String;
-  final priorityRaw = args['priorityRaw'] as int;
-  final accountIndex = args['accountIndex'] as int;
-
-  return createTransactionSync(
-      address: address,
-      assetType: assetType,
-      paymentId: paymentId,
-      amount: amount,
-      priorityRaw: priorityRaw,
-      accountIndex: accountIndex);
-}
-
-PendingTransactionDescription _createTransactionMultDestSync(Map args) {
-  final outputs = args['outputs'] as List<MoneroOutput>;
-  final assetType = args['assetType'] as String;
-  final paymentId = args['paymentId'] as String;
-  final priorityRaw = args['priorityRaw'] as int;
-  final accountIndex = args['accountIndex'] as int;
-
-  return createTransactionMultDestSync(
-      outputs: outputs,
-      assetType: assetType,
-      paymentId: paymentId,
-      priorityRaw: priorityRaw,
-      accountIndex: accountIndex);
-}
-
-Future<PendingTransactionDescription> createTransaction(
-        {required String address,
-         required String assetType,
-        required int priorityRaw,
-        String? amount,
-        String paymentId = '',
-        int accountIndex = 0}) =>
-    compute(_createTransactionSync, {
-      'address': address,
-      'assetType': assetType,
-      'paymentId': paymentId,
-      'amount': amount,
-      'priorityRaw': priorityRaw,
-      'accountIndex': accountIndex
-    });
-
-Future<PendingTransactionDescription> createTransactionMultDest(
-    {required List<MoneroOutput> outputs,
-      required int priorityRaw,
-      String? assetType,
-      String paymentId = '',
-      int accountIndex = 0}) =>
-    compute(_createTransactionMultDestSync, {
-      'outputs': outputs,
-      'assetType': assetType,
-      'paymentId': paymentId,
-      'priorityRaw': priorityRaw,
-      'accountIndex': accountIndex
-    });
diff --git a/cw_haven/lib/api/types.dart b/cw_haven/lib/api/types.dart
deleted file mode 100644
index 8c9dfdab2..000000000
--- a/cw_haven/lib/api/types.dart
+++ /dev/null
@@ -1,142 +0,0 @@
-import 'dart:ffi';
-import 'package:cw_haven/api/structs/pending_transaction.dart';
-import 'package:cw_haven/api/structs/ut8_box.dart';
-import 'package:ffi/ffi.dart';
-
-typedef CreateWallet = int Function(
-    Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, int, Pointer<Utf8>);
-
-typedef RestoreWalletFromSeed = int Function(
-    Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, int, int, Pointer<Utf8>);
-
-typedef RestoreWalletFromKeys = int Function(Pointer<Utf8>, Pointer<Utf8>,
-    Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, int, int, Pointer<Utf8>);
-
-typedef IsWalletExist = int Function(Pointer<Utf8>);
-
-typedef LoadWallet = int Function(Pointer<Utf8>, Pointer<Utf8>, int);
-
-typedef ErrorString = Pointer<Utf8> Function();
-
-typedef GetFilename = Pointer<Utf8> Function();
-
-typedef GetSeed = Pointer<Utf8> Function();
-
-typedef GetAddress = Pointer<Utf8> Function(int, int);
-
-typedef GetHavenFullBalance = Pointer<Int64> Function(int);
-
-typedef GetHavenUnlockedBalance = Pointer<Int64> Function(int);
-
-typedef GetFullBalance = int Function(int);
-
-typedef GetUnlockedBalance = int Function(int);
-
-typedef GetCurrentHeight = int Function();
-
-typedef GetNodeHeight = int Function();
-
-typedef IsConnected = int Function();
-
-typedef SetupNode = int Function(
-    Pointer<Utf8>, Pointer<Utf8>?, Pointer<Utf8>?, int, int, Pointer<Utf8>?, Pointer<Utf8>);
-
-typedef StartRefresh = void Function();
-
-typedef ConnectToNode = int Function();
-
-typedef SetRefreshFromBlockHeight = void Function(int);
-
-typedef SetRecoveringFromSeed = void Function(int);
-
-typedef Store = void Function(Pointer<Utf8>);
-
-typedef SetPassword = int Function(Pointer<Utf8> password, Pointer<Utf8Box> error);
-
-typedef SetListener = void Function();
-
-typedef GetSyncingHeight = int Function();
-
-typedef IsNeededToRefresh = int Function();
-
-typedef IsNewTransactionExist = int Function();
-
-typedef SubaddressSize = int Function();
-
-typedef SubaddressRefresh = void Function(int);
-
-typedef SubaddressGetAll = Pointer<Int64> Function();
-
-typedef SubaddressAddNew = void Function(int accountIndex, Pointer<Utf8> label);
-
-typedef SubaddressSetLabel = void Function(
-    int accountIndex, int addressIndex, Pointer<Utf8> label);
-
-typedef AccountSize = int Function();
-
-typedef AccountRefresh = void Function();
-
-typedef AccountGetAll = Pointer<Int64> Function();
-
-typedef AccountAddNew = void Function(Pointer<Utf8> label);
-
-typedef AccountSetLabel = void Function(int accountIndex, Pointer<Utf8> label);
-
-typedef TransactionsRefresh = void Function();
-
-typedef GetTxKey = Pointer<Utf8>? Function(Pointer<Utf8> txId);
-
-typedef TransactionsCount = int Function();
-
-typedef TransactionsGetAll = Pointer<Int64> Function();
-
-typedef TransactionCreate = int Function(
-    Pointer<Utf8> address,
-    Pointer<Utf8> assetType,
-    Pointer<Utf8> paymentId,
-    Pointer<Utf8> amount,
-    int priorityRaw,
-    int subaddrAccount,
-    Pointer<Utf8Box> error,
-    Pointer<PendingTransactionRaw> pendingTransaction);
-
-typedef TransactionCreateMultDest = int Function(
-    Pointer<Pointer<Utf8>> addresses,
-    Pointer<Utf8> assetType,
-    Pointer<Utf8> paymentId,
-    Pointer<Pointer<Utf8>> amounts,
-    int size,
-    int priorityRaw,
-    int subaddrAccount,
-    Pointer<Utf8Box> error,
-    Pointer<PendingTransactionRaw> pendingTransaction);
-
-typedef TransactionCommit = int Function(Pointer<PendingTransactionRaw>, Pointer<Utf8Box>);
-
-typedef SecretViewKey = Pointer<Utf8> Function();
-
-typedef PublicViewKey = Pointer<Utf8> Function();
-
-typedef SecretSpendKey = Pointer<Utf8> Function();
-
-typedef PublicSpendKey = Pointer<Utf8> Function();
-
-typedef CloseCurrentWallet = void Function();
-
-typedef OnStartup = void Function();
-
-typedef RescanBlockchainAsync = void Function();
-
-typedef AssetTypes = Pointer<Pointer<Utf8>> Function();
-
-typedef AssetTypesSize = int Function();
-
-typedef GetRate = Pointer<Int64> Function();
-
-typedef SizeOfRate = int Function();
-
-typedef UpdateRate = void Function();
-
-typedef SetTrustedDaemon = void Function(int);
-
-typedef TrustedDaemon = int Function();
\ No newline at end of file
diff --git a/cw_haven/lib/api/wallet.dart b/cw_haven/lib/api/wallet.dart
deleted file mode 100644
index e6b75c0cc..000000000
--- a/cw_haven/lib/api/wallet.dart
+++ /dev/null
@@ -1,376 +0,0 @@
-import 'dart:async';
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-import 'package:cw_haven/api/structs/ut8_box.dart';
-import 'package:cw_haven/api/convert_utf8_to_string.dart';
-import 'package:cw_haven/api/signatures.dart';
-import 'package:cw_haven/api/types.dart';
-import 'package:cw_haven/api/haven_api.dart';
-import 'package:cw_haven/api/exceptions/setup_wallet_exception.dart';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/services.dart';
-
-int _boolToInt(bool value) => value ? 1 : 0;
-
-final getFileNameNative = havenApi
-    .lookup<NativeFunction<get_filename>>('get_filename')
-    .asFunction<GetFilename>();
-
-final getSeedNative =
-    havenApi.lookup<NativeFunction<get_seed>>('seed').asFunction<GetSeed>();
-
-final getAddressNative = havenApi
-    .lookup<NativeFunction<get_address>>('get_address')
-    .asFunction<GetAddress>();
-
-final getFullBalanceNative = havenApi
-    .lookup<NativeFunction<get_full_balanace>>('get_full_balance')
-    .asFunction<GetFullBalance>();
-
-final getUnlockedBalanceNative = havenApi
-    .lookup<NativeFunction<get_unlocked_balanace>>('get_unlocked_balance')
-    .asFunction<GetUnlockedBalance>();
-
-final getCurrentHeightNative = havenApi
-    .lookup<NativeFunction<get_current_height>>('get_current_height')
-    .asFunction<GetCurrentHeight>();
-
-final getNodeHeightNative = havenApi
-    .lookup<NativeFunction<get_node_height>>('get_node_height')
-    .asFunction<GetNodeHeight>();
-
-final isConnectedNative = havenApi
-    .lookup<NativeFunction<is_connected>>('is_connected')
-    .asFunction<IsConnected>();
-
-final setupNodeNative = havenApi
-    .lookup<NativeFunction<setup_node>>('setup_node')
-    .asFunction<SetupNode>();
-
-final startRefreshNative = havenApi
-    .lookup<NativeFunction<start_refresh>>('start_refresh')
-    .asFunction<StartRefresh>();
-
-final connecToNodeNative = havenApi
-    .lookup<NativeFunction<connect_to_node>>('connect_to_node')
-    .asFunction<ConnectToNode>();
-
-final setRefreshFromBlockHeightNative = havenApi
-    .lookup<NativeFunction<set_refresh_from_block_height>>(
-        'set_refresh_from_block_height')
-    .asFunction<SetRefreshFromBlockHeight>();
-
-final setRecoveringFromSeedNative = havenApi
-    .lookup<NativeFunction<set_recovering_from_seed>>(
-        'set_recovering_from_seed')
-    .asFunction<SetRecoveringFromSeed>();
-
-final storeNative =
-    havenApi.lookup<NativeFunction<store_c>>('store').asFunction<Store>();
-
-final setPasswordNative =
-    havenApi.lookup<NativeFunction<set_password>>('set_password').asFunction<SetPassword>();
-
-final setListenerNative = havenApi
-    .lookup<NativeFunction<set_listener>>('set_listener')
-    .asFunction<SetListener>();
-
-final getSyncingHeightNative = havenApi
-    .lookup<NativeFunction<get_syncing_height>>('get_syncing_height')
-    .asFunction<GetSyncingHeight>();
-
-final isNeededToRefreshNative = havenApi
-    .lookup<NativeFunction<is_needed_to_refresh>>('is_needed_to_refresh')
-    .asFunction<IsNeededToRefresh>();
-
-final isNewTransactionExistNative = havenApi
-    .lookup<NativeFunction<is_new_transaction_exist>>(
-        'is_new_transaction_exist')
-    .asFunction<IsNewTransactionExist>();
-
-final getSecretViewKeyNative = havenApi
-    .lookup<NativeFunction<secret_view_key>>('secret_view_key')
-    .asFunction<SecretViewKey>();
-
-final getPublicViewKeyNative = havenApi
-    .lookup<NativeFunction<public_view_key>>('public_view_key')
-    .asFunction<PublicViewKey>();
-
-final getSecretSpendKeyNative = havenApi
-    .lookup<NativeFunction<secret_spend_key>>('secret_spend_key')
-    .asFunction<SecretSpendKey>();
-
-final getPublicSpendKeyNative = havenApi
-    .lookup<NativeFunction<secret_view_key>>('public_spend_key')
-    .asFunction<PublicSpendKey>();
-
-final closeCurrentWalletNative = havenApi
-    .lookup<NativeFunction<close_current_wallet>>('close_current_wallet')
-    .asFunction<CloseCurrentWallet>();
-
-final onStartupNative = havenApi
-    .lookup<NativeFunction<on_startup>>('on_startup')
-    .asFunction<OnStartup>();
-
-final rescanBlockchainAsyncNative = havenApi
-    .lookup<NativeFunction<rescan_blockchain>>('rescan_blockchain')
-    .asFunction<RescanBlockchainAsync>();
-
-final setTrustedDaemonNative = havenApi
-    .lookup<NativeFunction<set_trusted_daemon>>('set_trusted_daemon')
-    .asFunction<SetTrustedDaemon>();
-
-final trustedDaemonNative = havenApi
-    .lookup<NativeFunction<trusted_daemon>>('trusted_daemon')
-    .asFunction<TrustedDaemon>();
-
-int getSyncingHeight() => getSyncingHeightNative();
-
-bool isNeededToRefresh() => isNeededToRefreshNative() != 0;
-
-bool isNewTransactionExist() => isNewTransactionExistNative() != 0;
-
-String getFilename() => convertUTF8ToString(pointer: getFileNameNative());
-
-String getSeed() => convertUTF8ToString(pointer: getSeedNative());
-
-String getAddress({int accountIndex = 0, int addressIndex = 0}) =>
-    convertUTF8ToString(pointer: getAddressNative(accountIndex, addressIndex));
-
-int getFullBalance({int accountIndex = 0}) =>
-    getFullBalanceNative(accountIndex);
-
-int getUnlockedBalance({int accountIndex = 0}) =>
-    getUnlockedBalanceNative(accountIndex);
-
-int getCurrentHeight() => getCurrentHeightNative();
-
-int getNodeHeightSync() => getNodeHeightNative();
-
-bool isConnectedSync() => isConnectedNative() != 0;
-
-bool setupNodeSync(
-    {required String address,
-    String? login,
-    String? password,
-    bool useSSL = false,
-    bool isLightWallet = false,
-    String? socksProxyAddress}) {
-  final addressPointer = address.toNativeUtf8();
-  Pointer<Utf8>? loginPointer;
-  Pointer<Utf8>? socksProxyAddressPointer;
-  Pointer<Utf8>? passwordPointer;
-
-  if (login != null) {
-    loginPointer = login.toNativeUtf8();
-  }
-
-  if (password != null) {
-    passwordPointer = password.toNativeUtf8();
-  }
-
-  if (socksProxyAddress != null) {
-    socksProxyAddressPointer = socksProxyAddress.toNativeUtf8();
-  }
-
-  final errorMessagePointer = ''.toNativeUtf8();
-  final isSetupNode = setupNodeNative(
-          addressPointer,
-          loginPointer,
-          passwordPointer,
-          _boolToInt(useSSL),
-          _boolToInt(isLightWallet),
-      socksProxyAddressPointer,
-          errorMessagePointer) !=
-      0;
-
-  calloc.free(addressPointer);
-
-  if (loginPointer != null) {
-    calloc.free(loginPointer);
-  }
-
-  if (passwordPointer != null) {
-    calloc.free(passwordPointer);
-  }
-
-  if (!isSetupNode) {
-    throw SetupWalletException(
-        message: convertUTF8ToString(pointer: errorMessagePointer));
-  }
-
-  return isSetupNode;
-}
-
-void startRefreshSync() => startRefreshNative();
-
-Future<bool> connectToNode() async => connecToNodeNative() != 0;
-
-void setRefreshFromBlockHeight({required int height}) =>
-    setRefreshFromBlockHeightNative(height);
-
-void setRecoveringFromSeed({required bool isRecovery}) =>
-    setRecoveringFromSeedNative(_boolToInt(isRecovery));
-
-void storeSync() {
-  final pathPointer = ''.toNativeUtf8();
-  storeNative(pathPointer);
-  calloc.free(pathPointer);
-}
-
-void setPasswordSync(String password) {
-  final passwordPointer = password.toNativeUtf8();
-  final errorMessagePointer = calloc<Utf8Box>();
-  final changed = setPasswordNative(passwordPointer, errorMessagePointer) != 0;
-  calloc.free(passwordPointer);
-  
-  if (!changed) {
-    final message = errorMessagePointer.ref.getValue();
-    calloc.free(errorMessagePointer);
-    throw Exception(message);
-  }
-
-  calloc.free(errorMessagePointer);
-}
-
-void closeCurrentWallet() => closeCurrentWalletNative();
-
-String getSecretViewKey() =>
-    convertUTF8ToString(pointer: getSecretViewKeyNative());
-
-String getPublicViewKey() =>
-    convertUTF8ToString(pointer: getPublicViewKeyNative());
-
-String getSecretSpendKey() =>
-    convertUTF8ToString(pointer: getSecretSpendKeyNative());
-
-String getPublicSpendKey() =>
-    convertUTF8ToString(pointer: getPublicSpendKeyNative());
-
-class SyncListener {
-  SyncListener(this.onNewBlock, this.onNewTransaction)
-    : _cachedBlockchainHeight = 0,
-      _lastKnownBlockHeight = 0,
-      _initialSyncHeight = 0;
-
-  void Function(int, int, double) onNewBlock;
-  void Function() onNewTransaction;
-
-  Timer? _updateSyncInfoTimer;
-  int _cachedBlockchainHeight;
-  int _lastKnownBlockHeight;
-  int _initialSyncHeight;
-
-  Future<int> getNodeHeightOrUpdate(int baseHeight) async {
-    if (_cachedBlockchainHeight < baseHeight || _cachedBlockchainHeight == 0) {
-      _cachedBlockchainHeight = await getNodeHeight();
-    }
-
-    return _cachedBlockchainHeight;
-  }
-
-  void start() {
-    _cachedBlockchainHeight = 0;
-    _lastKnownBlockHeight = 0;
-    _initialSyncHeight = 0;
-    _updateSyncInfoTimer ??=
-        Timer.periodic(Duration(milliseconds: 1200), (_) async {
-      if (isNewTransactionExist()) {
-        onNewTransaction?.call();
-      }
-
-      var syncHeight = getSyncingHeight();
-
-      if (syncHeight <= 0) {
-        syncHeight = getCurrentHeight();
-      }
-
-      if (_initialSyncHeight <= 0) {
-        _initialSyncHeight = syncHeight;
-      }
-
-      final bchHeight = await getNodeHeightOrUpdate(syncHeight);
-
-      if (_lastKnownBlockHeight == syncHeight || syncHeight == null) {
-        return;
-      }
-
-      _lastKnownBlockHeight = syncHeight;
-      final track = bchHeight - _initialSyncHeight;
-      final diff = track - (bchHeight - syncHeight);
-      final ptc = diff <= 0 ? 0.0 : diff / track;
-      final left = bchHeight - syncHeight;
-
-      if (syncHeight < 0 || left < 0) {
-        return;
-      }
-
-      // 1. Actual new height; 2. Blocks left to finish; 3. Progress in percents;
-      onNewBlock?.call(syncHeight, left, ptc);
-    });
-  }
-
-  void stop() => _updateSyncInfoTimer?.cancel();
-}
-
-SyncListener setListeners(void Function(int, int, double) onNewBlock,
-    void Function() onNewTransaction) {
-  final listener = SyncListener(onNewBlock, onNewTransaction);
-  setListenerNative();
-  return listener;
-}
-
-void onStartup() => onStartupNative();
-
-void _storeSync(Object _) => storeSync();
-
-bool _setupNodeSync(Map args) {
-  final address = args['address'] as String;
-  final login = (args['login'] ?? '') as String;
-  final password = (args['password'] ?? '') as String;
-  final useSSL = args['useSSL'] as bool;
-  final isLightWallet = args['isLightWallet'] as bool;
-  final socksProxyAddress = (args['socksProxyAddress'] ?? '') as String;
-
-  return setupNodeSync(
-      address: address,
-      login: login,
-      password: password,
-      useSSL: useSSL,
-      isLightWallet: isLightWallet,
-      socksProxyAddress: socksProxyAddress);
-}
-
-bool _isConnected(Object _) => isConnectedSync();
-
-int _getNodeHeight(Object _) => getNodeHeightSync();
-
-void startRefresh() => startRefreshSync();
-
-Future<void> setupNode(
-        {required String address,
-        String? login,
-        String? password,
-        bool useSSL = false,
-        String? socksProxyAddress,
-        bool isLightWallet = false}) =>
-    compute<Map<String, Object?>, void>(_setupNodeSync, {
-      'address': address,
-      'login': login,
-      'password': password,
-      'useSSL': useSSL,
-      'isLightWallet': isLightWallet,
-      'socksProxyAddress': socksProxyAddress
-    });
-
-Future<void> store() => compute<int, void>(_storeSync, 0);
-
-Future<bool> isConnected() => compute(_isConnected, 0);
-
-Future<int> getNodeHeight() => compute(_getNodeHeight, 0);
-
-void rescanBlockchainAsync() => rescanBlockchainAsyncNative();
-
-Future setTrustedDaemon(bool trusted) async => setTrustedDaemonNative(_boolToInt(trusted));
-
-Future<bool> trustedDaemon() async => trustedDaemonNative() != 0;
diff --git a/cw_haven/lib/api/wallet_manager.dart b/cw_haven/lib/api/wallet_manager.dart
deleted file mode 100644
index 627fc226a..000000000
--- a/cw_haven/lib/api/wallet_manager.dart
+++ /dev/null
@@ -1,248 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-import 'package:flutter/foundation.dart';
-import 'package:cw_haven/api/convert_utf8_to_string.dart';
-import 'package:cw_haven/api/signatures.dart';
-import 'package:cw_haven/api/types.dart';
-import 'package:cw_haven/api/haven_api.dart';
-import 'package:cw_haven/api/wallet.dart';
-import 'package:cw_haven/api/exceptions/wallet_opening_exception.dart';
-import 'package:cw_haven/api/exceptions/wallet_creation_exception.dart';
-import 'package:cw_haven/api/exceptions/wallet_restore_from_keys_exception.dart';
-import 'package:cw_haven/api/exceptions/wallet_restore_from_seed_exception.dart';
-
-final createWalletNative = havenApi
-    .lookup<NativeFunction<create_wallet>>('create_wallet')
-    .asFunction<CreateWallet>();
-
-final restoreWalletFromSeedNative = havenApi
-    .lookup<NativeFunction<restore_wallet_from_seed>>(
-        'restore_wallet_from_seed')
-    .asFunction<RestoreWalletFromSeed>();
-
-final restoreWalletFromKeysNative = havenApi
-    .lookup<NativeFunction<restore_wallet_from_keys>>(
-        'restore_wallet_from_keys')
-    .asFunction<RestoreWalletFromKeys>();
-
-final isWalletExistNative = havenApi
-    .lookup<NativeFunction<is_wallet_exist>>('is_wallet_exist')
-    .asFunction<IsWalletExist>();
-
-final loadWalletNative = havenApi
-    .lookup<NativeFunction<load_wallet>>('load_wallet')
-    .asFunction<LoadWallet>();
-
-final errorStringNative = havenApi
-    .lookup<NativeFunction<error_string>>('error_string')
-    .asFunction<ErrorString>();
-
-void createWalletSync(
-    {required String path, required String password, required String language, int nettype = 0}) {
-  final pathPointer = path.toNativeUtf8();
-  final passwordPointer = password.toNativeUtf8();
-  final languagePointer = language.toNativeUtf8();
-  final errorMessagePointer = ''.toNativeUtf8();
-  final isWalletCreated = createWalletNative(pathPointer, passwordPointer,
-          languagePointer, nettype, errorMessagePointer) !=
-      0;
-
-  calloc.free(pathPointer);
-  calloc.free(passwordPointer);
-  calloc.free(languagePointer);
-
-  if (!isWalletCreated) {
-    throw WalletCreationException(
-        message: convertUTF8ToString(pointer: errorMessagePointer));
-  }
-
-  // setupNodeSync(address: "node.moneroworld.com:18089");
-}
-
-bool isWalletExistSync({required String path}) {
-  final pathPointer = path.toNativeUtf8();
-  final isExist = isWalletExistNative(pathPointer) != 0;
-
-  calloc.free(pathPointer);
-
-  return isExist;
-}
-
-void restoreWalletFromSeedSync(
-    {required String path,
-    required String password,
-    required String seed,
-    int nettype = 0,
-    int restoreHeight = 0}) {
-  final pathPointer = path.toNativeUtf8();
-  final passwordPointer = password.toNativeUtf8();
-  final seedPointer = seed.toNativeUtf8();
-  final errorMessagePointer = ''.toNativeUtf8();
-  final isWalletRestored = restoreWalletFromSeedNative(
-          pathPointer,
-          passwordPointer,
-          seedPointer,
-          nettype,
-          restoreHeight,
-          errorMessagePointer) !=
-      0;
-
-  calloc.free(pathPointer);
-  calloc.free(passwordPointer);
-  calloc.free(seedPointer);
-
-  if (!isWalletRestored) {
-    throw WalletRestoreFromSeedException(
-        message: convertUTF8ToString(pointer: errorMessagePointer));
-  }
-}
-
-void restoreWalletFromKeysSync(
-    {required String path,
-    required String password,
-    required String language,
-    required String address,
-    required String viewKey,
-    required String spendKey,
-    int nettype = 0,
-    int restoreHeight = 0}) {
-  final pathPointer = path.toNativeUtf8();
-  final passwordPointer = password.toNativeUtf8();
-  final languagePointer = language.toNativeUtf8();
-  final addressPointer = address.toNativeUtf8();
-  final viewKeyPointer = viewKey.toNativeUtf8();
-  final spendKeyPointer = spendKey.toNativeUtf8();
-  final errorMessagePointer = ''.toNativeUtf8();
-  final isWalletRestored = restoreWalletFromKeysNative(
-          pathPointer,
-          passwordPointer,
-          languagePointer,
-          addressPointer,
-          viewKeyPointer,
-          spendKeyPointer,
-          nettype,
-          restoreHeight,
-          errorMessagePointer) !=
-      0;
-
-  calloc.free(pathPointer);
-  calloc.free(passwordPointer);
-  calloc.free(languagePointer);
-  calloc.free(addressPointer);
-  calloc.free(viewKeyPointer);
-  calloc.free(spendKeyPointer);
-
-  if (!isWalletRestored) {
-    throw WalletRestoreFromKeysException(
-        message: convertUTF8ToString(pointer: errorMessagePointer));
-  }
-}
-
-void loadWallet({required String path, required String password, int nettype = 0}) {
-  final pathPointer = path.toNativeUtf8();
-  final passwordPointer = password.toNativeUtf8();
-  final loaded = loadWalletNative(pathPointer, passwordPointer, nettype) != 0;
-  calloc.free(pathPointer);
-  calloc.free(passwordPointer);
-
-  if (!loaded) {
-    throw WalletOpeningException(
-        message: convertUTF8ToString(pointer: errorStringNative()));
-  }
-}
-
-void _createWallet(Map<String, dynamic> args) {
-  final path = args['path'] as String;
-  final password = args['password'] as String;
-  final language = args['language'] as String;
-
-  createWalletSync(path: path, password: password, language: language);
-}
-
-void _restoreFromSeed(Map<String, dynamic> args) {
-  final path = args['path'] as String;
-  final password = args['password'] as String;
-  final seed = args['seed'] as String;
-  final restoreHeight = args['restoreHeight'] as int;
-
-  restoreWalletFromSeedSync(
-      path: path, password: password, seed: seed, restoreHeight: restoreHeight);
-}
-
-void _restoreFromKeys(Map<String, dynamic> args) {
-  final path = args['path'] as String;
-  final password = args['password'] as String;
-  final language = args['language'] as String;
-  final restoreHeight = args['restoreHeight'] as int;
-  final address = args['address'] as String;
-  final viewKey = args['viewKey'] as String;
-  final spendKey = args['spendKey'] as String;
-
-  restoreWalletFromKeysSync(
-      path: path,
-      password: password,
-      language: language,
-      restoreHeight: restoreHeight,
-      address: address,
-      viewKey: viewKey,
-      spendKey: spendKey);
-}
-
-Future<void> _openWallet(Map<String, String> args) async =>
-    loadWallet(path: args['path'] as String, password: args['password'] as String);
-
-bool _isWalletExist(String path) => isWalletExistSync(path: path);
-
-void openWallet({required String path, required String password, int nettype = 0}) async =>
-    loadWallet(path: path, password: password, nettype: nettype);
-
-Future<void> openWalletAsync(Map<String, String> args) async =>
-    compute(_openWallet, args);
-
-Future<void> createWallet(
-        {required String path,
-        required String password,
-        required String language,
-        int nettype = 0}) async =>
-    compute(_createWallet, {
-      'path': path,
-      'password': password,
-      'language': language,
-      'nettype': nettype
-    });
-
-Future<void> restoreFromSeed(
-        {required String path,
-        required String password,
-        required String seed,
-        int nettype = 0,
-        int restoreHeight = 0}) async =>
-    compute<Map<String, Object>, void>(_restoreFromSeed, {
-      'path': path,
-      'password': password,
-      'seed': seed,
-      'nettype': nettype,
-      'restoreHeight': restoreHeight
-    });
-
-Future<void> restoreFromKeys(
-        {required String path,
-        required String password,
-        required String language,
-        required String address,
-        required String viewKey,
-        required String spendKey,
-        int nettype = 0,
-        int restoreHeight = 0}) async =>
-    compute<Map<String, Object>, void>(_restoreFromKeys, {
-      'path': path,
-      'password': password,
-      'language': language,
-      'address': address,
-      'viewKey': viewKey,
-      'spendKey': spendKey,
-      'nettype': nettype,
-      'restoreHeight': restoreHeight
-    });
-
-Future<bool> isWalletExist({required String path}) => compute(_isWalletExist, path);
diff --git a/cw_haven/lib/haven_account_list.dart b/cw_haven/lib/haven_account_list.dart
deleted file mode 100644
index 41e3bbf57..000000000
--- a/cw_haven/lib/haven_account_list.dart
+++ /dev/null
@@ -1,85 +0,0 @@
-import 'package:cw_core/utils/print_verbose.dart';
-import 'package:mobx/mobx.dart';
-import 'package:cw_core/account.dart';
-import 'package:cw_core/account_list.dart';
-import 'package:cw_haven/api/account_list.dart' as account_list;
-
-part 'haven_account_list.g.dart';
-
-class HavenAccountList = HavenAccountListBase with _$HavenAccountList;
-
-abstract class HavenAccountListBase extends AccountList<Account> with Store {
-  HavenAccountListBase()
-      : accounts = ObservableList<Account>(),
-        _isRefreshing = false,
-        _isUpdating = false {
-    refresh();
-  }
-
-  @override
-  @observable
-  ObservableList<Account> accounts;
-  bool _isRefreshing;
-  bool _isUpdating;
-
-  @override
-  void update() async {
-    if (_isUpdating) {
-      return;
-    }
-
-    try {
-      _isUpdating = true;
-      refresh();
-      final accounts = getAll();
-
-      if (accounts.isNotEmpty) {
-        this.accounts.clear();
-        this.accounts.addAll(accounts);
-      }
-
-      _isUpdating = false;
-    } catch (e) {
-      _isUpdating = false;
-      rethrow;
-    }
-  }
-
-  @override
-  List<Account> getAll() => account_list
-      .getAllAccount()
-      .map((accountRow) => Account(
-        id: accountRow.getId(),
-        label: accountRow.getLabel()))
-      .toList();
-  
-  @override
-  Future<void> addAccount({required String label}) async {
-    await account_list.addAccount(label: label);
-    update();
-  }
-
-  @override
-  Future<void> setLabelAccount({required int accountIndex, required String label}) async {
-    await account_list.setLabelForAccount(
-        accountIndex: accountIndex, label: label);
-    update();
-  }
-
-  @override
-  void refresh() {
-    if (_isRefreshing) {
-      return;
-    }
-
-    try {
-      _isRefreshing = true;
-      account_list.refreshAccounts();
-      _isRefreshing = false;
-    } catch (e) {
-      _isRefreshing = false;
-      printV(e);
-      rethrow;
-    }
-  }
-}
diff --git a/cw_haven/lib/haven_balance.dart b/cw_haven/lib/haven_balance.dart
deleted file mode 100644
index 7d257ded9..000000000
--- a/cw_haven/lib/haven_balance.dart
+++ /dev/null
@@ -1,34 +0,0 @@
-import 'package:cw_core/crypto_currency.dart';
-import 'package:cw_core/monero_balance.dart';
-import 'package:cw_haven/api/balance_list.dart';
-import 'package:cw_haven/api/structs/haven_balance_row.dart';
-
-const inactiveBalances = [
-  CryptoCurrency.xcad,
-  CryptoCurrency.xjpy,
-  CryptoCurrency.xnok,
-  CryptoCurrency.xnzd]; 
-
-Map<CryptoCurrency, MoneroBalance> getHavenBalance({required int accountIndex}) {
-  final fullBalances = getHavenFullBalance(accountIndex: accountIndex);
-  final unlockedBalances = getHavenUnlockedBalance(accountIndex: accountIndex);
-  final havenBalances = <CryptoCurrency, MoneroBalance>{};
-  final balancesLength = fullBalances.length;
-  
-  for (int i = 0; i < balancesLength; i++) {
-    final assetType = fullBalances[i].getAssetType();
-    final fullBalance = fullBalances[i].getAmount();
-    final unlockedBalance = unlockedBalances[i].getAmount();
-    final moneroBalance = MoneroBalance(
-        fullBalance: fullBalance, unlockedBalance: unlockedBalance);
-    final currency = CryptoCurrency.fromString(assetType);
-
-    if (inactiveBalances.indexOf(currency) >= 0) {
-      continue;
-    }
-
-    havenBalances[currency] = moneroBalance;
-  }
-
-  return havenBalances;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/haven_subaddress_list.dart b/cw_haven/lib/haven_subaddress_list.dart
deleted file mode 100644
index 8a5125a55..000000000
--- a/cw_haven/lib/haven_subaddress_list.dart
+++ /dev/null
@@ -1,87 +0,0 @@
-import 'package:cw_core/utils/print_verbose.dart';
-import 'package:cw_haven/api/structs/subaddress_row.dart';
-import 'package:flutter/services.dart';
-import 'package:mobx/mobx.dart';
-import 'package:cw_haven/api/subaddress_list.dart' as subaddress_list;
-import 'package:cw_core/subaddress.dart';
-
-part 'haven_subaddress_list.g.dart';
-
-class HavenSubaddressList = HavenSubaddressListBase
-    with _$HavenSubaddressList;
-
-abstract class HavenSubaddressListBase with Store {
-  HavenSubaddressListBase()
-  : _isRefreshing = false,
-    _isUpdating = false,
-    subaddresses = ObservableList<Subaddress>();
-
-  @observable
-  ObservableList<Subaddress> subaddresses;
-
-  bool _isRefreshing;
-  bool _isUpdating;
-
-  void update({required int accountIndex}) {
-    if (_isUpdating) {
-      return;
-    }
-
-    try {
-      _isUpdating = true;
-      refresh(accountIndex: accountIndex);
-      subaddresses.clear();
-      subaddresses.addAll(getAll());
-      _isUpdating = false;
-    } catch (e) {
-      _isUpdating = false;
-      rethrow;
-    }
-  }
-
-  List<Subaddress> getAll() {
-    var subaddresses = subaddress_list.getAllSubaddresses();
-
-    if (subaddresses.length > 2) {
-      final primary = subaddresses.first;
-      final rest = subaddresses.sublist(1).reversed;
-      subaddresses = [primary] + rest.toList();
-    }
-
-    return subaddresses
-        .map((subaddressRow) => Subaddress(
-          id: subaddressRow.getId(),
-          address: subaddressRow.getAddress(),
-          label: subaddressRow.getLabel()))
-        .toList();
-  }
-
-  Future<void> addSubaddress({required int accountIndex, required String label}) async {
-    await subaddress_list.addSubaddress(
-        accountIndex: accountIndex, label: label);
-    update(accountIndex: accountIndex);
-  }
-
-  Future<void> setLabelSubaddress(
-      {required int accountIndex, required int addressIndex, required String label}) async {
-    await subaddress_list.setLabelForSubaddress(
-        accountIndex: accountIndex, addressIndex: addressIndex, label: label);
-    update(accountIndex: accountIndex);
-  }
-
-  void refresh({required int accountIndex}) {
-    if (_isRefreshing) {
-      return;
-    }
-
-    try {
-      _isRefreshing = true;
-      subaddress_list.refreshSubaddresses(accountIndex: accountIndex);
-      _isRefreshing = false;
-    } on PlatformException catch (e) {
-      _isRefreshing = false;
-      printV(e);
-      rethrow;
-    }
-  }
-}
diff --git a/cw_haven/lib/haven_transaction_creation_credentials.dart b/cw_haven/lib/haven_transaction_creation_credentials.dart
deleted file mode 100644
index 4de41a504..000000000
--- a/cw_haven/lib/haven_transaction_creation_credentials.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-import 'package:cw_core/monero_transaction_priority.dart';
-import 'package:cw_core/output_info.dart';
-
-class HavenTransactionCreationCredentials {
-  HavenTransactionCreationCredentials({
-    required this.outputs,
-    required this.priority,
-    required this.assetType});
-
-  final List<OutputInfo> outputs;
-  final MoneroTransactionPriority priority;
-  final String assetType;
-}
diff --git a/cw_haven/lib/haven_transaction_creation_exception.dart b/cw_haven/lib/haven_transaction_creation_exception.dart
deleted file mode 100644
index 768abe7fa..000000000
--- a/cw_haven/lib/haven_transaction_creation_exception.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-class HavenTransactionCreationException implements Exception {
-  HavenTransactionCreationException(this.message);
-
-  final String message;
-
-  @override
-  String toString() => message;
-}
\ No newline at end of file
diff --git a/cw_haven/lib/haven_transaction_history.dart b/cw_haven/lib/haven_transaction_history.dart
deleted file mode 100644
index b456174fe..000000000
--- a/cw_haven/lib/haven_transaction_history.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-import 'dart:core';
-import 'package:mobx/mobx.dart';
-import 'package:cw_core/transaction_history.dart';
-import 'package:cw_haven/haven_transaction_info.dart';
-
-part 'haven_transaction_history.g.dart';
-
-class HavenTransactionHistory = HavenTransactionHistoryBase
-    with _$HavenTransactionHistory;
-
-abstract class HavenTransactionHistoryBase
-    extends TransactionHistoryBase<HavenTransactionInfo> with Store {
-  HavenTransactionHistoryBase() {
-    transactions = ObservableMap<String, HavenTransactionInfo>();
-  }
-
-  @override
-  Future<void> save() async {}
-
-  @override
-  void addOne(HavenTransactionInfo transaction) =>
-      transactions[transaction.id] = transaction;
-
-  @override
-  void addMany(Map<String, HavenTransactionInfo> transactions) =>
-      this.transactions.addAll(transactions);
-}
diff --git a/cw_haven/lib/haven_transaction_info.dart b/cw_haven/lib/haven_transaction_info.dart
deleted file mode 100644
index 6ffb60e6b..000000000
--- a/cw_haven/lib/haven_transaction_info.dart
+++ /dev/null
@@ -1,73 +0,0 @@
-import 'package:cw_core/transaction_info.dart';
-import 'package:cw_core/monero_amount_format.dart';
-import 'package:cw_haven/api/structs/transaction_info_row.dart';
-import 'package:cw_core/parseBoolFromString.dart';
-import 'package:cw_core/transaction_direction.dart';
-import 'package:cw_core/format_amount.dart';
-import 'package:cw_haven/api/transaction_history.dart';
-
-class HavenTransactionInfo extends TransactionInfo {
-  HavenTransactionInfo(this.id, this.height, this.direction, this.date,
-      this.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee,
-      this.confirmations);
-
-  HavenTransactionInfo.fromMap(Map<String, Object> map)
-      : id = (map['hash'] ?? '') as String,
-        height = (map['height'] ?? 0) as int,
-        direction =
-            parseTransactionDirectionFromNumber(map['direction'] as String) ??
-                TransactionDirection.incoming,
-        date = DateTime.fromMillisecondsSinceEpoch(
-            int.parse(map['timestamp'] as String? ?? '0') * 1000),
-        isPending = parseBoolFromString(map['isPending'] as String),
-        amount = map['amount'] as int,
-        accountIndex = int.parse(map['accountIndex'] as String),
-        addressIndex = map['addressIndex'] as int,
-        confirmations = map['confirmations'] as int,
-        key = getTxKey((map['hash'] ?? '') as String),
-        fee = map['fee'] as int? ?? 0;
-
-    HavenTransactionInfo.fromRow(TransactionInfoRow row)
-      : id = row.getHash(),
-        height = row.blockHeight,
-        direction = parseTransactionDirectionFromInt(row.direction) ??
-            TransactionDirection.incoming,
-        date = DateTime.fromMillisecondsSinceEpoch(row.getDatetime() * 1000),
-        isPending = row.isPending != 0,
-        amount = row.getAmount(),
-        accountIndex = row.subaddrAccount,
-        addressIndex = row.subaddrIndex,
-        confirmations = row.confirmations,
-        key = null, //getTxKey(row.getHash()),
-        fee = row.fee,
-        assetType = row.getAssetType();
-
-  final String id;
-  final int height;
-  final TransactionDirection direction;
-  final DateTime date;
-  final int accountIndex;
-  final bool isPending;
-  final int amount;
-  final int fee;
-  final int addressIndex;
-  final int confirmations;
-  late String recipientAddress;
-  late String assetType;
-  String? _fiatAmount;
-  String? key;
-
-  @override
-  String amountFormatted() =>
-      '${formatAmount(moneroAmountToString(amount: amount))} $assetType';
-
-  @override
-  String fiatAmount() => _fiatAmount ?? '';
-
-  @override
-  void changeFiatAmount(String amount) => _fiatAmount = formatAmount(amount);
-
-  @override
-  String feeFormatted() =>
-      '${formatAmount(moneroAmountToString(amount: fee))} $assetType';
-}
diff --git a/cw_haven/lib/haven_wallet.dart b/cw_haven/lib/haven_wallet.dart
deleted file mode 100644
index 6316f5a62..000000000
--- a/cw_haven/lib/haven_wallet.dart
+++ /dev/null
@@ -1,435 +0,0 @@
-import 'dart:async';
-import 'dart:io';
-import 'package:cw_core/crypto_currency.dart';
-import 'package:cw_core/pathForWallet.dart';
-import 'package:cw_core/transaction_priority.dart';
-import 'package:cw_core/utils/print_verbose.dart';
-import 'package:cw_haven/haven_transaction_creation_credentials.dart';
-import 'package:cw_core/monero_amount_format.dart';
-import 'package:cw_haven/haven_transaction_creation_exception.dart';
-import 'package:cw_haven/haven_transaction_info.dart';
-import 'package:cw_haven/haven_wallet_addresses.dart';
-import 'package:cw_core/monero_wallet_utils.dart';
-import 'package:cw_haven/api/structs/pending_transaction.dart';
-import 'package:mobx/mobx.dart';
-import 'package:cw_haven/api/transaction_history.dart' as haven_transaction_history;
-import 'package:cw_haven/api/wallet.dart' as haven_wallet;
-import 'package:cw_haven/api/transaction_history.dart' as transaction_history;
-import 'package:cw_haven/api/monero_output.dart';
-import 'package:cw_haven/pending_haven_transaction.dart';
-import 'package:cw_core/monero_wallet_keys.dart';
-import 'package:cw_core/monero_balance.dart';
-import 'package:cw_haven/haven_transaction_history.dart';
-import 'package:cw_core/account.dart';
-import 'package:cw_core/pending_transaction.dart';
-import 'package:cw_core/wallet_base.dart';
-import 'package:cw_core/sync_status.dart';
-import 'package:cw_core/wallet_info.dart';
-import 'package:cw_core/node.dart';
-import 'package:cw_core/monero_transaction_priority.dart';
-import 'package:cw_haven/haven_balance.dart';
-
-part 'haven_wallet.g.dart';
-
-const moneroBlockSize = 1000;
-
-class HavenWallet = HavenWalletBase with _$HavenWallet;
-
-abstract class HavenWalletBase
-    extends WalletBase<MoneroBalance, HavenTransactionHistory, HavenTransactionInfo> with Store {
-  HavenWalletBase({required WalletInfo walletInfo, String? password})
-      : balance = ObservableMap.of(getHavenBalance(accountIndex: 0)),
-        _isTransactionUpdating = false,
-        _password = password ?? '',
-        _hasSyncAfterStartup = false,
-        walletAddresses = HavenWalletAddresses(walletInfo),
-        syncStatus = NotConnectedSyncStatus(),
-        super(walletInfo) {
-    transactionHistory = HavenTransactionHistory();
-    _onAccountChangeReaction = reaction((_) => walletAddresses.account, (Account? account) {
-      if (account == null) {
-        return;
-      }
-      balance.addAll(getHavenBalance(accountIndex: account.id));
-      walletAddresses.updateSubaddressList(accountIndex: account.id);
-    });
-  }
-
-  static const int _autoSaveInterval = 30;
-  final String _password;
-
-  @override
-  HavenWalletAddresses walletAddresses;
-
-  @override
-  @observable
-  SyncStatus syncStatus;
-
-  @override
-  @observable
-  ObservableMap<CryptoCurrency, MoneroBalance> balance;
-
-  @override
-  String get seed => haven_wallet.getSeed();
-
-  @override
-  bool get hasRescan => true;
-
-  @override
-  MoneroWalletKeys get keys => MoneroWalletKeys(
-      primaryAddress: haven_wallet.getAddress(accountIndex: 0, addressIndex: 0),
-      privateSpendKey: haven_wallet.getSecretSpendKey(),
-      privateViewKey: haven_wallet.getSecretViewKey(),
-      publicSpendKey: haven_wallet.getPublicSpendKey(),
-      publicViewKey: haven_wallet.getPublicViewKey(),
-      passphrase: "");
-
-  haven_wallet.SyncListener? _listener;
-  ReactionDisposer? _onAccountChangeReaction;
-  bool _isTransactionUpdating;
-  bool _hasSyncAfterStartup;
-  Timer? _autoSaveTimer;
-
-  Future<void> init() async {
-    await walletAddresses.init();
-    balance.addAll(getHavenBalance(accountIndex: walletAddresses.account?.id ?? 0));
-    _setListeners();
-    await updateTransactions();
-
-    if (walletInfo.isRecovery) {
-      haven_wallet.setRecoveringFromSeed(isRecovery: walletInfo.isRecovery);
-
-      if (haven_wallet.getCurrentHeight() <= 1) {
-        haven_wallet.setRefreshFromBlockHeight(height: walletInfo.restoreHeight);
-      }
-    }
-
-    _autoSaveTimer =
-        Timer.periodic(Duration(seconds: _autoSaveInterval), (_) async => await save());
-  }
-
-  @override
-  Future<void>? updateBalance() => null;
-
-  @override
-  Future<void> close({bool shouldCleanup = false}) async {
-    _listener?.stop();
-    _onAccountChangeReaction?.reaction.dispose();
-    _autoSaveTimer?.cancel();
-  }
-
-  @override
-  Future<void> connectToNode({required Node node}) async {
-    try {
-      syncStatus = ConnectingSyncStatus();
-      await haven_wallet.setupNode(
-          address: node.uriRaw,
-          login: node.login,
-          password: node.password,
-          useSSL: node.useSSL ?? false,
-          isLightWallet: false,
-          // FIXME: hardcoded value
-          socksProxyAddress: node.socksProxyAddress);
-
-      haven_wallet.setTrustedDaemon(node.trusted);
-      syncStatus = ConnectedSyncStatus();
-    } catch (e) {
-      syncStatus = FailedSyncStatus();
-      printV(e);
-    }
-  }
-
-  @override
-  Future<void> startSync() async {
-    try {
-      _setInitialHeight();
-    } catch (_) {}
-
-    try {
-      syncStatus = AttemptingSyncStatus();
-      haven_wallet.startRefresh();
-      _setListeners();
-      _listener?.start();
-    } catch (e) {
-      syncStatus = FailedSyncStatus();
-      printV(e);
-      rethrow;
-    }
-  }
-
-  @override
-  Future<PendingTransaction> createTransaction(Object credentials) async {
-    final _credentials = credentials as HavenTransactionCreationCredentials;
-    final outputs = _credentials.outputs;
-    final hasMultiDestination = outputs.length > 1;
-    final assetType = CryptoCurrency.fromString(_credentials.assetType.toLowerCase());
-    final balances = getHavenBalance(accountIndex: walletAddresses.account!.id);
-    final unlockedBalance = balances[assetType]!.unlockedBalance;
-
-    PendingTransactionDescription pendingTransactionDescription;
-
-    if (!(syncStatus is SyncedSyncStatus)) {
-      throw HavenTransactionCreationException('The wallet is not synced.');
-    }
-
-    if (hasMultiDestination) {
-      if (outputs.any((item) => item.sendAll || (item.formattedCryptoAmount ?? 0) <= 0)) {
-        throw HavenTransactionCreationException(
-            'You do not have enough coins to send this amount.');
-      }
-
-      final int totalAmount =
-          outputs.fold(0, (acc, value) => acc + (value.formattedCryptoAmount ?? 0));
-
-      if (unlockedBalance < totalAmount) {
-        throw HavenTransactionCreationException(
-            'You do not have enough coins to send this amount.');
-      }
-
-      final moneroOutputs = outputs
-          .map((output) => MoneroOutput(
-              address: output.address, amount: output.cryptoAmount!.replaceAll(',', '.')))
-          .toList();
-
-      pendingTransactionDescription = await transaction_history.createTransactionMultDest(
-          outputs: moneroOutputs,
-          priorityRaw: _credentials.priority.serialize(),
-          accountIndex: walletAddresses.account!.id);
-    } else {
-      final output = outputs.first;
-      final address = output.isParsedAddress && (output.extractedAddress?.isNotEmpty ?? false)
-          ? output.extractedAddress!
-          : output.address;
-      final amount = output.sendAll ? null : output.cryptoAmount!.replaceAll(',', '.');
-      final int? formattedAmount = output.sendAll ? null : output.formattedCryptoAmount;
-
-      if ((formattedAmount != null && unlockedBalance < formattedAmount) ||
-          (formattedAmount == null && unlockedBalance <= 0)) {
-        final formattedBalance = moneroAmountToString(amount: unlockedBalance);
-
-        throw HavenTransactionCreationException(
-            'You do not have enough unlocked balance. Unlocked: $formattedBalance. Transaction amount: ${output.cryptoAmount}.');
-      }
-
-      pendingTransactionDescription = await transaction_history.createTransaction(
-          address: address,
-          assetType: _credentials.assetType,
-          amount: amount,
-          priorityRaw: _credentials.priority.serialize(),
-          accountIndex: walletAddresses.account!.id);
-    }
-
-    return PendingHavenTransaction(pendingTransactionDescription, assetType);
-  }
-
-  @override
-  int calculateEstimatedFee(TransactionPriority priority, int? amount) {
-    // FIXME: hardcoded value;
-
-    if (priority is MoneroTransactionPriority) {
-      switch (priority) {
-        case MoneroTransactionPriority.slow:
-          return 24590000;
-        case MoneroTransactionPriority.automatic:
-          return 123050000;
-        case MoneroTransactionPriority.medium:
-          return 245029999;
-        case MoneroTransactionPriority.fast:
-          return 614530000;
-        case MoneroTransactionPriority.fastest:
-          return 26021600000;
-      }
-    }
-
-    return 0;
-  }
-
-  @override
-  Future<void> save() async {
-    await walletAddresses.updateAddressesInBox();
-    await backupWalletFiles(name);
-    await haven_wallet.store();
-  }
-
-  @override
-  Future<void> renameWalletFiles(String newWalletName) async {
-    final currentWalletPath = await pathForWallet(name: name, type: type);
-    final currentCacheFile = File(currentWalletPath);
-    final currentKeysFile = File('$currentWalletPath.keys');
-    final currentAddressListFile = File('$currentWalletPath.address.txt');
-
-    final newWalletPath = await pathForWallet(name: newWalletName, type: type);
-
-    // Copies current wallet files into new wallet name's dir and files
-    if (currentCacheFile.existsSync()) {
-      await currentCacheFile.copy(newWalletPath);
-    }
-    if (currentKeysFile.existsSync()) {
-      await currentKeysFile.copy('$newWalletPath.keys');
-    }
-    if (currentAddressListFile.existsSync()) {
-      await currentAddressListFile.copy('$newWalletPath.address.txt');
-    }
-
-    // Delete old name's dir and files
-    await Directory(currentWalletPath).delete(recursive: true);
-  }
-
-  @override
-  Future<void> changePassword(String password) async {
-    haven_wallet.setPasswordSync(password);
-  }
-
-  Future<int> getNodeHeight() async => haven_wallet.getNodeHeight();
-
-  Future<bool> isConnected() async => haven_wallet.isConnected();
-
-  Future<void> setAsRecovered() async {
-    walletInfo.isRecovery = false;
-    await walletInfo.save();
-  }
-
-  @override
-  Future<void> rescan({required int height}) async {
-    walletInfo.restoreHeight = height;
-    walletInfo.isRecovery = true;
-    haven_wallet.setRefreshFromBlockHeight(height: height);
-    haven_wallet.rescanBlockchainAsync();
-    await startSync();
-    _askForUpdateBalance();
-    walletAddresses.accountList.update();
-    await _askForUpdateTransactionHistory();
-    await save();
-    await walletInfo.save();
-  }
-
-  String getTransactionAddress(int accountIndex, int addressIndex) =>
-      haven_wallet.getAddress(accountIndex: accountIndex, addressIndex: addressIndex);
-
-  @override
-  Future<Map<String, HavenTransactionInfo>> fetchTransactions() async {
-    haven_transaction_history.refreshTransactions();
-    return _getAllTransactions(null)
-        .fold<Map<String, HavenTransactionInfo>>(<String, HavenTransactionInfo>{},
-            (Map<String, HavenTransactionInfo> acc, HavenTransactionInfo tx) {
-      acc[tx.id] = tx;
-      return acc;
-    });
-  }
-
-  Future<void> updateTransactions() async {
-    try {
-      if (_isTransactionUpdating) {
-        return;
-      }
-
-      _isTransactionUpdating = true;
-      final transactions = await fetchTransactions();
-      transactionHistory.addMany(transactions);
-      await transactionHistory.save();
-      _isTransactionUpdating = false;
-    } catch (e) {
-      printV(e);
-      _isTransactionUpdating = false;
-    }
-  }
-
-  List<HavenTransactionInfo> _getAllTransactions(dynamic _) => haven_transaction_history
-      .getAllTransations()
-      .map((row) => HavenTransactionInfo.fromRow(row))
-      .toList();
-
-  void _setListeners() {
-    _listener?.stop();
-    _listener = haven_wallet.setListeners(_onNewBlock, _onNewTransaction);
-  }
-
-  void _setInitialHeight() {
-    if (walletInfo.isRecovery) {
-      return;
-    }
-
-    final currentHeight = haven_wallet.getCurrentHeight();
-
-    if (currentHeight <= 1) {
-      final height = _getHeightByDate(walletInfo.date);
-      haven_wallet.setRecoveringFromSeed(isRecovery: true);
-      haven_wallet.setRefreshFromBlockHeight(height: height);
-    }
-  }
-
-  int _getHeightDistance(DateTime date) {
-    final distance = DateTime.now().millisecondsSinceEpoch - date.millisecondsSinceEpoch;
-    final daysTmp = (distance / 86400).round();
-    final days = daysTmp < 1 ? 1 : daysTmp;
-
-    return days * 1000;
-  }
-
-  int _getHeightByDate(DateTime date) {
-    final nodeHeight = haven_wallet.getNodeHeightSync();
-    final heightDistance = _getHeightDistance(date);
-
-    if (nodeHeight <= 0) {
-      return 0;
-    }
-
-    return nodeHeight - heightDistance;
-  }
-
-  void _askForUpdateBalance() =>
-      balance.addAll(getHavenBalance(accountIndex: walletAddresses.account!.id));
-
-  Future<void> _askForUpdateTransactionHistory() async => await updateTransactions();
-
-  void _onNewBlock(int height, int blocksLeft, double ptc) async {
-    try {
-      if (walletInfo.isRecovery) {
-        await _askForUpdateTransactionHistory();
-        _askForUpdateBalance();
-        walletAddresses.accountList.update();
-      }
-
-      if (blocksLeft < 1000) {
-        await _askForUpdateTransactionHistory();
-        _askForUpdateBalance();
-        walletAddresses.accountList.update();
-        syncStatus = SyncedSyncStatus();
-
-        if (!_hasSyncAfterStartup) {
-          _hasSyncAfterStartup = true;
-          await save();
-        }
-
-        if (walletInfo.isRecovery) {
-          await setAsRecovered();
-        }
-      } else {
-        syncStatus = SyncingSyncStatus(blocksLeft, ptc);
-      }
-    } catch (e) {
-      printV(e.toString());
-    }
-  }
-
-  void _onNewTransaction() async {
-    try {
-      await _askForUpdateTransactionHistory();
-      _askForUpdateBalance();
-      await Future<void>.delayed(Duration(seconds: 1));
-    } catch (e) {
-      printV(e.toString());
-    }
-  }
-
-  @override
-  String get password => _password;
-
-  @override
-  Future<String> signMessage(String message, {String? address = null}) =>
-      throw UnimplementedError();
-
-  @override
-  Future<bool> verifyMessage(String message, String signature, {String? address = null}) =>
-      throw UnimplementedError();
-}
diff --git a/cw_haven/lib/haven_wallet_addresses.dart b/cw_haven/lib/haven_wallet_addresses.dart
deleted file mode 100644
index 192c09ef7..000000000
--- a/cw_haven/lib/haven_wallet_addresses.dart
+++ /dev/null
@@ -1,96 +0,0 @@
-import 'package:cw_core/utils/print_verbose.dart';
-import 'package:cw_core/wallet_addresses_with_account.dart';
-import 'package:cw_core/wallet_info.dart';
-import 'package:cw_core/account.dart';
-import 'package:cw_haven/api/wallet.dart';
-import 'package:cw_haven/haven_account_list.dart';
-import 'package:cw_haven/haven_subaddress_list.dart';
-import 'package:cw_core/subaddress.dart';
-import 'package:mobx/mobx.dart';
-
-part 'haven_wallet_addresses.g.dart';
-
-class HavenWalletAddresses = HavenWalletAddressesBase
-    with _$HavenWalletAddresses;
-
-abstract class HavenWalletAddressesBase extends WalletAddressesWithAccount<Account> with Store {
-  HavenWalletAddressesBase(WalletInfo walletInfo)
-    : accountList = HavenAccountList(),
-      subaddressList = HavenSubaddressList(),
-      address = '',
-      super(walletInfo);
-
-  @override
-  @observable
-  String address;
-  
-  String get primaryAddress => address;
-  
-  // @override
-  @observable
-  Account? account;
-
-  @observable
-  Subaddress? subaddress;
-
-  HavenSubaddressList subaddressList;
-  
-  HavenAccountList accountList;
-
-  @override
-  Future<void> init() async {
-    accountList.update();
-    account = accountList.accounts.isEmpty ? Account(id: 0, label: "Primary address") : accountList.accounts.first;
-    updateSubaddressList(accountIndex: account?.id ?? 0);
-    await updateAddressesInBox();
-  }
-
-  @override
-  Future<void> updateAddressesInBox() async {
-    try {
-      final _subaddressList = HavenSubaddressList();
-
-      addressesMap.clear();
-
-      accountList.accounts.forEach((account) {
-        _subaddressList.update(accountIndex: account.id);
-        _subaddressList.subaddresses.forEach((subaddress) {
-          addressesMap[subaddress.address] = subaddress.label;
-        });
-      });
-
-      await saveAddressesInBox();
-    } catch (e) {
-      printV(e.toString());
-    }
-  }
-
-  bool validate() {
-    accountList.update();
-    final accountListLength = accountList.accounts.length;
-
-    if (accountListLength <= 0) {
-      return false;
-    }
-
-    subaddressList.update(accountIndex: accountList.accounts.first.id);
-    final subaddressListLength = subaddressList.subaddresses.length;
-
-    if (subaddressListLength <= 0) {
-      return false;
-    }
-
-    return true;
-  }
-
-  void updateSubaddressList({required int accountIndex}) {
-    subaddressList.update(accountIndex: accountIndex);
-    address = subaddressList.subaddresses.isNotEmpty
-        ? subaddressList.subaddresses.first.address
-        : getAddress();
-  }
-
-  @override
-  bool containsAddress(String address) =>
-      addressInfos[account?.id ?? 0]?.any((it) => it.address == address) ?? false;
-}
diff --git a/cw_haven/lib/haven_wallet_service.dart b/cw_haven/lib/haven_wallet_service.dart
deleted file mode 100644
index dec5f5564..000000000
--- a/cw_haven/lib/haven_wallet_service.dart
+++ /dev/null
@@ -1,259 +0,0 @@
-import 'dart:io';
-import 'package:collection/collection.dart';
-import 'package:cw_core/utils/print_verbose.dart';
-import 'package:cw_core/wallet_base.dart';
-import 'package:cw_core/monero_wallet_utils.dart';
-import 'package:hive/hive.dart';
-import 'package:cw_haven/api/wallet_manager.dart' as haven_wallet_manager;
-import 'package:cw_haven/api/wallet.dart' as haven_wallet;
-import 'package:cw_haven/api/exceptions/wallet_opening_exception.dart';
-import 'package:cw_haven/haven_wallet.dart';
-import 'package:cw_core/wallet_credentials.dart';
-import 'package:cw_core/wallet_service.dart';
-import 'package:cw_core/pathForWallet.dart';
-import 'package:cw_core/wallet_info.dart';
-import 'package:cw_core/wallet_type.dart';
-
-class HavenNewWalletCredentials extends WalletCredentials {
-  HavenNewWalletCredentials({required String name, required this.language, String? password})
-      : super(name: name, password: password);
-
-  final String language;
-}
-
-class HavenRestoreWalletFromSeedCredentials extends WalletCredentials {
-  HavenRestoreWalletFromSeedCredentials(
-      {required String name,
-      required String password,
-      required int height,
-      required this.mnemonic})
-      : super(name: name, password: password, height: height);
-
-  final String mnemonic;
-}
-
-class HavenWalletLoadingException implements Exception {
-  @override
-  String toString() => 'Failure to load the wallet.';
-}
-
-class HavenRestoreWalletFromKeysCredentials extends WalletCredentials {
-  HavenRestoreWalletFromKeysCredentials(
-      {required String name,
-      required String password,
-      required this.language,
-      required this.address,
-      required this.viewKey,
-      required this.spendKey,
-      required int height})
-      : super(name: name, password: password, height: height);
-
-  final String language;
-  final String address;
-  final String viewKey;
-  final String spendKey;
-}
-
-class HavenWalletService extends WalletService<
-    HavenNewWalletCredentials,
-    HavenRestoreWalletFromSeedCredentials,
-    HavenRestoreWalletFromKeysCredentials,
-    HavenNewWalletCredentials> {
-  HavenWalletService(this.walletInfoSource);
-
-  final Box<WalletInfo> walletInfoSource;
-  
-  static bool walletFilesExist(String path) =>
-      !File(path).existsSync() && !File('$path.keys').existsSync();
-
-  @override
-  WalletType getType() => WalletType.haven;
-
-  @override
-  Future<HavenWallet> create(HavenNewWalletCredentials credentials, {bool? isTestnet}) async {
-    try {
-      final path = await pathForWallet(name: credentials.name, type: getType());
-      await haven_wallet_manager.createWallet(
-          path: path,
-          password: credentials.password!,
-          language: credentials.language);
-      final wallet = HavenWallet(walletInfo: credentials.walletInfo!);
-      await wallet.init();
-      return wallet;
-    } catch (e) {
-      // TODO: Implement Exception for wallet list service.
-      printV('HavenWalletsManager Error: ${e.toString()}');
-      rethrow;
-    }
-  }
-
-  @override
-  Future<bool> isWalletExit(String name) async {
-    try {
-      final path = await pathForWallet(name: name, type: getType());
-      return haven_wallet_manager.isWalletExist(path: path);
-    } catch (e) {
-      // TODO: Implement Exception for wallet list service.
-      printV('HavenWalletsManager Error: $e');
-      rethrow;
-    }
-  }
-
-  @override
-  Future<HavenWallet> openWallet(String name, String password) async {
-    try {
-      final path = await pathForWallet(name: name, type: getType());
-
-      if (walletFilesExist(path)) {
-        await repairOldAndroidWallet(name);
-      }
-
-      await haven_wallet_manager
-          .openWalletAsync({'path': path, 'password': password});
-      final walletInfo = walletInfoSource.values.firstWhereOrNull(
-          (info) => info.id == WalletBase.idFor(name, getType()))!;
-      final wallet = HavenWallet(walletInfo: walletInfo);
-      final isValid = wallet.walletAddresses.validate();
-
-      if (!isValid) {
-        await restoreOrResetWalletFiles(name);
-        wallet.close(shouldCleanup: false);
-        return openWallet(name, password);
-      }
-
-      await wallet.init();
-
-      return wallet;
-    } catch (e) {
-      // TODO: Implement Exception for wallet list service.
-
-      if ((e.toString().contains('bad_alloc') ||
-          (e is WalletOpeningException &&
-              (e.message == 'std::bad_alloc' ||
-                  e.message.contains('bad_alloc')))) ||
-          (e.toString().contains('does not correspond') ||
-          (e is WalletOpeningException &&
-            e.message.contains('does not correspond')))) {
-        await restoreOrResetWalletFiles(name);
-        return openWallet(name, password);
-      }
-
-      rethrow;
-    }
-  }
-
-  @override
-  Future<void> remove(String wallet) async {
-    final path = await pathForWalletDir(name: wallet, type: getType());
-    final file = Directory(path);
-    final isExist = file.existsSync();
-
-    if (isExist) {
-      await file.delete(recursive: true);
-    }
-
-    final walletInfo = walletInfoSource.values
-        .firstWhere((info) => info.id == WalletBase.idFor(wallet, getType()));
-    await walletInfoSource.delete(walletInfo.key);
-  }
-
-  @override
-  Future<void> rename(
-      String currentName, String password, String newName) async {
-    final currentWalletInfo = walletInfoSource.values.firstWhere(
-        (info) => info.id == WalletBase.idFor(currentName, getType()));
-    final currentWallet = HavenWallet(walletInfo: currentWalletInfo);
-
-    await currentWallet.renameWalletFiles(newName);
-    await saveBackup(newName);
-
-    final newWalletInfo = currentWalletInfo;
-    newWalletInfo.id = WalletBase.idFor(newName, getType());
-    newWalletInfo.name = newName;
-
-    await walletInfoSource.put(currentWalletInfo.key, newWalletInfo);
-  }
-
-  @override
-  Future<HavenWallet> restoreFromHardwareWallet(HavenNewWalletCredentials credentials) {
-    throw UnimplementedError("Restoring a Haven wallet from a hardware wallet is not yet supported!");
-  }
-
-  @override
-  Future<HavenWallet> restoreFromKeys(
-      HavenRestoreWalletFromKeysCredentials credentials, {bool? isTestnet}) async {
-    try {
-      final path = await pathForWallet(name: credentials.name, type: getType());
-      await haven_wallet_manager.restoreFromKeys(
-          path: path,
-          password: credentials.password!,
-          language: credentials.language,
-          restoreHeight: credentials.height!,
-          address: credentials.address,
-          viewKey: credentials.viewKey,
-          spendKey: credentials.spendKey);
-      final wallet = HavenWallet(walletInfo: credentials.walletInfo!);
-      await wallet.init();
-
-      return wallet;
-    } catch (e) {
-      // TODO: Implement Exception for wallet list service.
-      printV('HavenWalletsManager Error: $e');
-      rethrow;
-    }
-  }
-
-  @override
-  Future<HavenWallet> restoreFromSeed(
-      HavenRestoreWalletFromSeedCredentials credentials, {bool? isTestnet}) async {
-    try {
-      final path = await pathForWallet(name: credentials.name, type: getType());
-      await haven_wallet_manager.restoreFromSeed(
-          path: path,
-          password: credentials.password!,
-          seed: credentials.mnemonic,
-          restoreHeight: credentials.height!);
-      final wallet = HavenWallet(walletInfo: credentials.walletInfo!);
-      await wallet.init();
-
-      return wallet;
-    } catch (e) {
-      // TODO: Implement Exception for wallet list service.
-      printV('HavenWalletsManager Error: $e');
-      rethrow;
-    }
-  }
-
-  Future<void> repairOldAndroidWallet(String name) async {
-    try {
-      if (!Platform.isAndroid) {
-        return;
-      }
-
-      final oldAndroidWalletDirPath =
-          await outdatedAndroidPathForWalletDir(name: name);
-      final dir = Directory(oldAndroidWalletDirPath);
-
-      if (!dir.existsSync()) {
-        return;
-      }
-
-      final newWalletDirPath =
-          await pathForWalletDir(name: name, type: getType());
-
-      dir.listSync().forEach((f) {
-        final file = File(f.path);
-        final name = f.path.split('/').last;
-        final newPath = newWalletDirPath + '/$name';
-        final newFile = File(newPath);
-
-        if (!newFile.existsSync()) {
-          newFile.createSync();
-        }
-        newFile.writeAsBytesSync(file.readAsBytesSync());
-      });
-    } catch (e) {
-      printV(e.toString());
-    }
-  }
-}
diff --git a/cw_haven/lib/mnemonics/chinese_simplified.dart b/cw_haven/lib/mnemonics/chinese_simplified.dart
deleted file mode 100644
index da3225041..000000000
--- a/cw_haven/lib/mnemonics/chinese_simplified.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class ChineseSimplifiedMnemonics {
-  static const words = [
-    "的",
-    "一",
-    "是",
-    "在",
-    "不",
-    "了",
-    "有",
-    "和",
-    "人",
-    "这",
-    "中",
-    "大",
-    "为",
-    "上",
-    "个",
-    "国",
-    "我",
-    "以",
-    "要",
-    "他",
-    "时",
-    "来",
-    "用",
-    "们",
-    "生",
-    "到",
-    "作",
-    "地",
-    "于",
-    "出",
-    "就",
-    "分",
-    "对",
-    "成",
-    "会",
-    "可",
-    "主",
-    "发",
-    "年",
-    "动",
-    "同",
-    "工",
-    "也",
-    "能",
-    "下",
-    "过",
-    "子",
-    "说",
-    "产",
-    "种",
-    "面",
-    "而",
-    "方",
-    "后",
-    "多",
-    "定",
-    "行",
-    "学",
-    "法",
-    "所",
-    "民",
-    "得",
-    "经",
-    "十",
-    "三",
-    "之",
-    "进",
-    "着",
-    "等",
-    "部",
-    "度",
-    "家",
-    "电",
-    "力",
-    "里",
-    "如",
-    "水",
-    "化",
-    "高",
-    "自",
-    "二",
-    "理",
-    "起",
-    "小",
-    "物",
-    "现",
-    "实",
-    "加",
-    "量",
-    "都",
-    "两",
-    "体",
-    "制",
-    "机",
-    "当",
-    "使",
-    "点",
-    "从",
-    "业",
-    "本",
-    "去",
-    "把",
-    "性",
-    "好",
-    "应",
-    "开",
-    "它",
-    "合",
-    "还",
-    "因",
-    "由",
-    "其",
-    "些",
-    "然",
-    "前",
-    "外",
-    "天",
-    "政",
-    "四",
-    "日",
-    "那",
-    "社",
-    "义",
-    "事",
-    "平",
-    "形",
-    "相",
-    "全",
-    "表",
-    "间",
-    "样",
-    "与",
-    "关",
-    "各",
-    "重",
-    "新",
-    "线",
-    "内",
-    "数",
-    "正",
-    "心",
-    "反",
-    "你",
-    "明",
-    "看",
-    "原",
-    "又",
-    "么",
-    "利",
-    "比",
-    "或",
-    "但",
-    "质",
-    "气",
-    "第",
-    "向",
-    "道",
-    "命",
-    "此",
-    "变",
-    "条",
-    "只",
-    "没",
-    "结",
-    "解",
-    "问",
-    "意",
-    "建",
-    "月",
-    "公",
-    "无",
-    "系",
-    "军",
-    "很",
-    "情",
-    "者",
-    "最",
-    "立",
-    "代",
-    "想",
-    "已",
-    "通",
-    "并",
-    "提",
-    "直",
-    "题",
-    "党",
-    "程",
-    "展",
-    "五",
-    "果",
-    "料",
-    "象",
-    "员",
-    "革",
-    "位",
-    "入",
-    "常",
-    "文",
-    "总",
-    "次",
-    "品",
-    "式",
-    "活",
-    "设",
-    "及",
-    "管",
-    "特",
-    "件",
-    "长",
-    "求",
-    "老",
-    "头",
-    "基",
-    "资",
-    "边",
-    "流",
-    "路",
-    "级",
-    "少",
-    "图",
-    "山",
-    "统",
-    "接",
-    "知",
-    "较",
-    "将",
-    "组",
-    "见",
-    "计",
-    "别",
-    "她",
-    "手",
-    "角",
-    "期",
-    "根",
-    "论",
-    "运",
-    "农",
-    "指",
-    "几",
-    "九",
-    "区",
-    "强",
-    "放",
-    "决",
-    "西",
-    "被",
-    "干",
-    "做",
-    "必",
-    "战",
-    "先",
-    "回",
-    "则",
-    "任",
-    "取",
-    "据",
-    "处",
-    "队",
-    "南",
-    "给",
-    "色",
-    "光",
-    "门",
-    "即",
-    "保",
-    "治",
-    "北",
-    "造",
-    "百",
-    "规",
-    "热",
-    "领",
-    "七",
-    "海",
-    "口",
-    "东",
-    "导",
-    "器",
-    "压",
-    "志",
-    "世",
-    "金",
-    "增",
-    "争",
-    "济",
-    "阶",
-    "油",
-    "思",
-    "术",
-    "极",
-    "交",
-    "受",
-    "联",
-    "什",
-    "认",
-    "六",
-    "共",
-    "权",
-    "收",
-    "证",
-    "改",
-    "清",
-    "美",
-    "再",
-    "采",
-    "转",
-    "更",
-    "单",
-    "风",
-    "切",
-    "打",
-    "白",
-    "教",
-    "速",
-    "花",
-    "带",
-    "安",
-    "场",
-    "身",
-    "车",
-    "例",
-    "真",
-    "务",
-    "具",
-    "万",
-    "每",
-    "目",
-    "至",
-    "达",
-    "走",
-    "积",
-    "示",
-    "议",
-    "声",
-    "报",
-    "斗",
-    "完",
-    "类",
-    "八",
-    "离",
-    "华",
-    "名",
-    "确",
-    "才",
-    "科",
-    "张",
-    "信",
-    "马",
-    "节",
-    "话",
-    "米",
-    "整",
-    "空",
-    "元",
-    "况",
-    "今",
-    "集",
-    "温",
-    "传",
-    "土",
-    "许",
-    "步",
-    "群",
-    "广",
-    "石",
-    "记",
-    "需",
-    "段",
-    "研",
-    "界",
-    "拉",
-    "林",
-    "律",
-    "叫",
-    "且",
-    "究",
-    "观",
-    "越",
-    "织",
-    "装",
-    "影",
-    "算",
-    "低",
-    "持",
-    "音",
-    "众",
-    "书",
-    "布",
-    "复",
-    "容",
-    "儿",
-    "须",
-    "际",
-    "商",
-    "非",
-    "验",
-    "连",
-    "断",
-    "深",
-    "难",
-    "近",
-    "矿",
-    "千",
-    "周",
-    "委",
-    "素",
-    "技",
-    "备",
-    "半",
-    "办",
-    "青",
-    "省",
-    "列",
-    "习",
-    "响",
-    "约",
-    "支",
-    "般",
-    "史",
-    "感",
-    "劳",
-    "便",
-    "团",
-    "往",
-    "酸",
-    "历",
-    "市",
-    "克",
-    "何",
-    "除",
-    "消",
-    "构",
-    "府",
-    "称",
-    "太",
-    "准",
-    "精",
-    "值",
-    "号",
-    "率",
-    "族",
-    "维",
-    "划",
-    "选",
-    "标",
-    "写",
-    "存",
-    "候",
-    "毛",
-    "亲",
-    "快",
-    "效",
-    "斯",
-    "院",
-    "查",
-    "江",
-    "型",
-    "眼",
-    "王",
-    "按",
-    "格",
-    "养",
-    "易",
-    "置",
-    "派",
-    "层",
-    "片",
-    "始",
-    "却",
-    "专",
-    "状",
-    "育",
-    "厂",
-    "京",
-    "识",
-    "适",
-    "属",
-    "圆",
-    "包",
-    "火",
-    "住",
-    "调",
-    "满",
-    "县",
-    "局",
-    "照",
-    "参",
-    "红",
-    "细",
-    "引",
-    "听",
-    "该",
-    "铁",
-    "价",
-    "严",
-    "首",
-    "底",
-    "液",
-    "官",
-    "德",
-    "随",
-    "病",
-    "苏",
-    "失",
-    "尔",
-    "死",
-    "讲",
-    "配",
-    "女",
-    "黄",
-    "推",
-    "显",
-    "谈",
-    "罪",
-    "神",
-    "艺",
-    "呢",
-    "席",
-    "含",
-    "企",
-    "望",
-    "密",
-    "批",
-    "营",
-    "项",
-    "防",
-    "举",
-    "球",
-    "英",
-    "氧",
-    "势",
-    "告",
-    "李",
-    "台",
-    "落",
-    "木",
-    "帮",
-    "轮",
-    "破",
-    "亚",
-    "师",
-    "围",
-    "注",
-    "远",
-    "字",
-    "材",
-    "排",
-    "供",
-    "河",
-    "态",
-    "封",
-    "另",
-    "施",
-    "减",
-    "树",
-    "溶",
-    "怎",
-    "止",
-    "案",
-    "言",
-    "士",
-    "均",
-    "武",
-    "固",
-    "叶",
-    "鱼",
-    "波",
-    "视",
-    "仅",
-    "费",
-    "紧",
-    "爱",
-    "左",
-    "章",
-    "早",
-    "朝",
-    "害",
-    "续",
-    "轻",
-    "服",
-    "试",
-    "食",
-    "充",
-    "兵",
-    "源",
-    "判",
-    "护",
-    "司",
-    "足",
-    "某",
-    "练",
-    "差",
-    "致",
-    "板",
-    "田",
-    "降",
-    "黑",
-    "犯",
-    "负",
-    "击",
-    "范",
-    "继",
-    "兴",
-    "似",
-    "余",
-    "坚",
-    "曲",
-    "输",
-    "修",
-    "故",
-    "城",
-    "夫",
-    "够",
-    "送",
-    "笔",
-    "船",
-    "占",
-    "右",
-    "财",
-    "吃",
-    "富",
-    "春",
-    "职",
-    "觉",
-    "汉",
-    "画",
-    "功",
-    "巴",
-    "跟",
-    "虽",
-    "杂",
-    "飞",
-    "检",
-    "吸",
-    "助",
-    "升",
-    "阳",
-    "互",
-    "初",
-    "创",
-    "抗",
-    "考",
-    "投",
-    "坏",
-    "策",
-    "古",
-    "径",
-    "换",
-    "未",
-    "跑",
-    "留",
-    "钢",
-    "曾",
-    "端",
-    "责",
-    "站",
-    "简",
-    "述",
-    "钱",
-    "副",
-    "尽",
-    "帝",
-    "射",
-    "草",
-    "冲",
-    "承",
-    "独",
-    "令",
-    "限",
-    "阿",
-    "宣",
-    "环",
-    "双",
-    "请",
-    "超",
-    "微",
-    "让",
-    "控",
-    "州",
-    "良",
-    "轴",
-    "找",
-    "否",
-    "纪",
-    "益",
-    "依",
-    "优",
-    "顶",
-    "础",
-    "载",
-    "倒",
-    "房",
-    "突",
-    "坐",
-    "粉",
-    "敌",
-    "略",
-    "客",
-    "袁",
-    "冷",
-    "胜",
-    "绝",
-    "析",
-    "块",
-    "剂",
-    "测",
-    "丝",
-    "协",
-    "诉",
-    "念",
-    "陈",
-    "仍",
-    "罗",
-    "盐",
-    "友",
-    "洋",
-    "错",
-    "苦",
-    "夜",
-    "刑",
-    "移",
-    "频",
-    "逐",
-    "靠",
-    "混",
-    "母",
-    "短",
-    "皮",
-    "终",
-    "聚",
-    "汽",
-    "村",
-    "云",
-    "哪",
-    "既",
-    "距",
-    "卫",
-    "停",
-    "烈",
-    "央",
-    "察",
-    "烧",
-    "迅",
-    "境",
-    "若",
-    "印",
-    "洲",
-    "刻",
-    "括",
-    "激",
-    "孔",
-    "搞",
-    "甚",
-    "室",
-    "待",
-    "核",
-    "校",
-    "散",
-    "侵",
-    "吧",
-    "甲",
-    "游",
-    "久",
-    "菜",
-    "味",
-    "旧",
-    "模",
-    "湖",
-    "货",
-    "损",
-    "预",
-    "阻",
-    "毫",
-    "普",
-    "稳",
-    "乙",
-    "妈",
-    "植",
-    "息",
-    "扩",
-    "银",
-    "语",
-    "挥",
-    "酒",
-    "守",
-    "拿",
-    "序",
-    "纸",
-    "医",
-    "缺",
-    "雨",
-    "吗",
-    "针",
-    "刘",
-    "啊",
-    "急",
-    "唱",
-    "误",
-    "训",
-    "愿",
-    "审",
-    "附",
-    "获",
-    "茶",
-    "鲜",
-    "粮",
-    "斤",
-    "孩",
-    "脱",
-    "硫",
-    "肥",
-    "善",
-    "龙",
-    "演",
-    "父",
-    "渐",
-    "血",
-    "欢",
-    "械",
-    "掌",
-    "歌",
-    "沙",
-    "刚",
-    "攻",
-    "谓",
-    "盾",
-    "讨",
-    "晚",
-    "粒",
-    "乱",
-    "燃",
-    "矛",
-    "乎",
-    "杀",
-    "药",
-    "宁",
-    "鲁",
-    "贵",
-    "钟",
-    "煤",
-    "读",
-    "班",
-    "伯",
-    "香",
-    "介",
-    "迫",
-    "句",
-    "丰",
-    "培",
-    "握",
-    "兰",
-    "担",
-    "弦",
-    "蛋",
-    "沉",
-    "假",
-    "穿",
-    "执",
-    "答",
-    "乐",
-    "谁",
-    "顺",
-    "烟",
-    "缩",
-    "征",
-    "脸",
-    "喜",
-    "松",
-    "脚",
-    "困",
-    "异",
-    "免",
-    "背",
-    "星",
-    "福",
-    "买",
-    "染",
-    "井",
-    "概",
-    "慢",
-    "怕",
-    "磁",
-    "倍",
-    "祖",
-    "皇",
-    "促",
-    "静",
-    "补",
-    "评",
-    "翻",
-    "肉",
-    "践",
-    "尼",
-    "衣",
-    "宽",
-    "扬",
-    "棉",
-    "希",
-    "伤",
-    "操",
-    "垂",
-    "秋",
-    "宜",
-    "氢",
-    "套",
-    "督",
-    "振",
-    "架",
-    "亮",
-    "末",
-    "宪",
-    "庆",
-    "编",
-    "牛",
-    "触",
-    "映",
-    "雷",
-    "销",
-    "诗",
-    "座",
-    "居",
-    "抓",
-    "裂",
-    "胞",
-    "呼",
-    "娘",
-    "景",
-    "威",
-    "绿",
-    "晶",
-    "厚",
-    "盟",
-    "衡",
-    "鸡",
-    "孙",
-    "延",
-    "危",
-    "胶",
-    "屋",
-    "乡",
-    "临",
-    "陆",
-    "顾",
-    "掉",
-    "呀",
-    "灯",
-    "岁",
-    "措",
-    "束",
-    "耐",
-    "剧",
-    "玉",
-    "赵",
-    "跳",
-    "哥",
-    "季",
-    "课",
-    "凯",
-    "胡",
-    "额",
-    "款",
-    "绍",
-    "卷",
-    "齐",
-    "伟",
-    "蒸",
-    "殖",
-    "永",
-    "宗",
-    "苗",
-    "川",
-    "炉",
-    "岩",
-    "弱",
-    "零",
-    "杨",
-    "奏",
-    "沿",
-    "露",
-    "杆",
-    "探",
-    "滑",
-    "镇",
-    "饭",
-    "浓",
-    "航",
-    "怀",
-    "赶",
-    "库",
-    "夺",
-    "伊",
-    "灵",
-    "税",
-    "途",
-    "灭",
-    "赛",
-    "归",
-    "召",
-    "鼓",
-    "播",
-    "盘",
-    "裁",
-    "险",
-    "康",
-    "唯",
-    "录",
-    "菌",
-    "纯",
-    "借",
-    "糖",
-    "盖",
-    "横",
-    "符",
-    "私",
-    "努",
-    "堂",
-    "域",
-    "枪",
-    "润",
-    "幅",
-    "哈",
-    "竟",
-    "熟",
-    "虫",
-    "泽",
-    "脑",
-    "壤",
-    "碳",
-    "欧",
-    "遍",
-    "侧",
-    "寨",
-    "敢",
-    "彻",
-    "虑",
-    "斜",
-    "薄",
-    "庭",
-    "纳",
-    "弹",
-    "饲",
-    "伸",
-    "折",
-    "麦",
-    "湿",
-    "暗",
-    "荷",
-    "瓦",
-    "塞",
-    "床",
-    "筑",
-    "恶",
-    "户",
-    "访",
-    "塔",
-    "奇",
-    "透",
-    "梁",
-    "刀",
-    "旋",
-    "迹",
-    "卡",
-    "氯",
-    "遇",
-    "份",
-    "毒",
-    "泥",
-    "退",
-    "洗",
-    "摆",
-    "灰",
-    "彩",
-    "卖",
-    "耗",
-    "夏",
-    "择",
-    "忙",
-    "铜",
-    "献",
-    "硬",
-    "予",
-    "繁",
-    "圈",
-    "雪",
-    "函",
-    "亦",
-    "抽",
-    "篇",
-    "阵",
-    "阴",
-    "丁",
-    "尺",
-    "追",
-    "堆",
-    "雄",
-    "迎",
-    "泛",
-    "爸",
-    "楼",
-    "避",
-    "谋",
-    "吨",
-    "野",
-    "猪",
-    "旗",
-    "累",
-    "偏",
-    "典",
-    "馆",
-    "索",
-    "秦",
-    "脂",
-    "潮",
-    "爷",
-    "豆",
-    "忽",
-    "托",
-    "惊",
-    "塑",
-    "遗",
-    "愈",
-    "朱",
-    "替",
-    "纤",
-    "粗",
-    "倾",
-    "尚",
-    "痛",
-    "楚",
-    "谢",
-    "奋",
-    "购",
-    "磨",
-    "君",
-    "池",
-    "旁",
-    "碎",
-    "骨",
-    "监",
-    "捕",
-    "弟",
-    "暴",
-    "割",
-    "贯",
-    "殊",
-    "释",
-    "词",
-    "亡",
-    "壁",
-    "顿",
-    "宝",
-    "午",
-    "尘",
-    "闻",
-    "揭",
-    "炮",
-    "残",
-    "冬",
-    "桥",
-    "妇",
-    "警",
-    "综",
-    "招",
-    "吴",
-    "付",
-    "浮",
-    "遭",
-    "徐",
-    "您",
-    "摇",
-    "谷",
-    "赞",
-    "箱",
-    "隔",
-    "订",
-    "男",
-    "吹",
-    "园",
-    "纷",
-    "唐",
-    "败",
-    "宋",
-    "玻",
-    "巨",
-    "耕",
-    "坦",
-    "荣",
-    "闭",
-    "湾",
-    "键",
-    "凡",
-    "驻",
-    "锅",
-    "救",
-    "恩",
-    "剥",
-    "凝",
-    "碱",
-    "齿",
-    "截",
-    "炼",
-    "麻",
-    "纺",
-    "禁",
-    "废",
-    "盛",
-    "版",
-    "缓",
-    "净",
-    "睛",
-    "昌",
-    "婚",
-    "涉",
-    "筒",
-    "嘴",
-    "插",
-    "岸",
-    "朗",
-    "庄",
-    "街",
-    "藏",
-    "姑",
-    "贸",
-    "腐",
-    "奴",
-    "啦",
-    "惯",
-    "乘",
-    "伙",
-    "恢",
-    "匀",
-    "纱",
-    "扎",
-    "辩",
-    "耳",
-    "彪",
-    "臣",
-    "亿",
-    "璃",
-    "抵",
-    "脉",
-    "秀",
-    "萨",
-    "俄",
-    "网",
-    "舞",
-    "店",
-    "喷",
-    "纵",
-    "寸",
-    "汗",
-    "挂",
-    "洪",
-    "贺",
-    "闪",
-    "柬",
-    "爆",
-    "烯",
-    "津",
-    "稻",
-    "墙",
-    "软",
-    "勇",
-    "像",
-    "滚",
-    "厘",
-    "蒙",
-    "芳",
-    "肯",
-    "坡",
-    "柱",
-    "荡",
-    "腿",
-    "仪",
-    "旅",
-    "尾",
-    "轧",
-    "冰",
-    "贡",
-    "登",
-    "黎",
-    "削",
-    "钻",
-    "勒",
-    "逃",
-    "障",
-    "氨",
-    "郭",
-    "峰",
-    "币",
-    "港",
-    "伏",
-    "轨",
-    "亩",
-    "毕",
-    "擦",
-    "莫",
-    "刺",
-    "浪",
-    "秘",
-    "援",
-    "株",
-    "健",
-    "售",
-    "股",
-    "岛",
-    "甘",
-    "泡",
-    "睡",
-    "童",
-    "铸",
-    "汤",
-    "阀",
-    "休",
-    "汇",
-    "舍",
-    "牧",
-    "绕",
-    "炸",
-    "哲",
-    "磷",
-    "绩",
-    "朋",
-    "淡",
-    "尖",
-    "启",
-    "陷",
-    "柴",
-    "呈",
-    "徒",
-    "颜",
-    "泪",
-    "稍",
-    "忘",
-    "泵",
-    "蓝",
-    "拖",
-    "洞",
-    "授",
-    "镜",
-    "辛",
-    "壮",
-    "锋",
-    "贫",
-    "虚",
-    "弯",
-    "摩",
-    "泰",
-    "幼",
-    "廷",
-    "尊",
-    "窗",
-    "纲",
-    "弄",
-    "隶",
-    "疑",
-    "氏",
-    "宫",
-    "姐",
-    "震",
-    "瑞",
-    "怪",
-    "尤",
-    "琴",
-    "循",
-    "描",
-    "膜",
-    "违",
-    "夹",
-    "腰",
-    "缘",
-    "珠",
-    "穷",
-    "森",
-    "枝",
-    "竹",
-    "沟",
-    "催",
-    "绳",
-    "忆",
-    "邦",
-    "剩",
-    "幸",
-    "浆",
-    "栏",
-    "拥",
-    "牙",
-    "贮",
-    "礼",
-    "滤",
-    "钠",
-    "纹",
-    "罢",
-    "拍",
-    "咱",
-    "喊",
-    "袖",
-    "埃",
-    "勤",
-    "罚",
-    "焦",
-    "潜",
-    "伍",
-    "墨",
-    "欲",
-    "缝",
-    "姓",
-    "刊",
-    "饱",
-    "仿",
-    "奖",
-    "铝",
-    "鬼",
-    "丽",
-    "跨",
-    "默",
-    "挖",
-    "链",
-    "扫",
-    "喝",
-    "袋",
-    "炭",
-    "污",
-    "幕",
-    "诸",
-    "弧",
-    "励",
-    "梅",
-    "奶",
-    "洁",
-    "灾",
-    "舟",
-    "鉴",
-    "苯",
-    "讼",
-    "抱",
-    "毁",
-    "懂",
-    "寒",
-    "智",
-    "埔",
-    "寄",
-    "届",
-    "跃",
-    "渡",
-    "挑",
-    "丹",
-    "艰",
-    "贝",
-    "碰",
-    "拔",
-    "爹",
-    "戴",
-    "码",
-    "梦",
-    "芽",
-    "熔",
-    "赤",
-    "渔",
-    "哭",
-    "敬",
-    "颗",
-    "奔",
-    "铅",
-    "仲",
-    "虎",
-    "稀",
-    "妹",
-    "乏",
-    "珍",
-    "申",
-    "桌",
-    "遵",
-    "允",
-    "隆",
-    "螺",
-    "仓",
-    "魏",
-    "锐",
-    "晓",
-    "氮",
-    "兼",
-    "隐",
-    "碍",
-    "赫",
-    "拨",
-    "忠",
-    "肃",
-    "缸",
-    "牵",
-    "抢",
-    "博",
-    "巧",
-    "壳",
-    "兄",
-    "杜",
-    "讯",
-    "诚",
-    "碧",
-    "祥",
-    "柯",
-    "页",
-    "巡",
-    "矩",
-    "悲",
-    "灌",
-    "龄",
-    "伦",
-    "票",
-    "寻",
-    "桂",
-    "铺",
-    "圣",
-    "恐",
-    "恰",
-    "郑",
-    "趣",
-    "抬",
-    "荒",
-    "腾",
-    "贴",
-    "柔",
-    "滴",
-    "猛",
-    "阔",
-    "辆",
-    "妻",
-    "填",
-    "撤",
-    "储",
-    "签",
-    "闹",
-    "扰",
-    "紫",
-    "砂",
-    "递",
-    "戏",
-    "吊",
-    "陶",
-    "伐",
-    "喂",
-    "疗",
-    "瓶",
-    "婆",
-    "抚",
-    "臂",
-    "摸",
-    "忍",
-    "虾",
-    "蜡",
-    "邻",
-    "胸",
-    "巩",
-    "挤",
-    "偶",
-    "弃",
-    "槽",
-    "劲",
-    "乳",
-    "邓",
-    "吉",
-    "仁",
-    "烂",
-    "砖",
-    "租",
-    "乌",
-    "舰",
-    "伴",
-    "瓜",
-    "浅",
-    "丙",
-    "暂",
-    "燥",
-    "橡",
-    "柳",
-    "迷",
-    "暖",
-    "牌",
-    "秧",
-    "胆",
-    "详",
-    "簧",
-    "踏",
-    "瓷",
-    "谱",
-    "呆",
-    "宾",
-    "糊",
-    "洛",
-    "辉",
-    "愤",
-    "竞",
-    "隙",
-    "怒",
-    "粘",
-    "乃",
-    "绪",
-    "肩",
-    "籍",
-    "敏",
-    "涂",
-    "熙",
-    "皆",
-    "侦",
-    "悬",
-    "掘",
-    "享",
-    "纠",
-    "醒",
-    "狂",
-    "锁",
-    "淀",
-    "恨",
-    "牲",
-    "霸",
-    "爬",
-    "赏",
-    "逆",
-    "玩",
-    "陵",
-    "祝",
-    "秒",
-    "浙",
-    "貌"
-  ];
-}
\ No newline at end of file
diff --git a/cw_haven/lib/mnemonics/dutch.dart b/cw_haven/lib/mnemonics/dutch.dart
deleted file mode 100644
index 3a1d00cfc..000000000
--- a/cw_haven/lib/mnemonics/dutch.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class DutchMnemonics {
-  static const words = [
-    "aalglad",
-    "aalscholver",
-    "aambeeld",
-    "aangeef",
-    "aanlandig",
-    "aanvaard",
-    "aanwakker",
-    "aapmens",
-    "aarten",
-    "abdicatie",
-    "abnormaal",
-    "abrikoos",
-    "accu",
-    "acuut",
-    "adjudant",
-    "admiraal",
-    "advies",
-    "afbidding",
-    "afdracht",
-    "affaire",
-    "affiche",
-    "afgang",
-    "afkick",
-    "afknap",
-    "aflees",
-    "afmijner",
-    "afname",
-    "afpreekt",
-    "afrader",
-    "afspeel",
-    "aftocht",
-    "aftrek",
-    "afzijdig",
-    "ahornboom",
-    "aktetas",
-    "akzo",
-    "alchemist",
-    "alcohol",
-    "aldaar",
-    "alexander",
-    "alfabet",
-    "alfredo",
-    "alice",
-    "alikruik",
-    "allrisk",
-    "altsax",
-    "alufolie",
-    "alziend",
-    "amai",
-    "ambacht",
-    "ambieer",
-    "amina",
-    "amnestie",
-    "amok",
-    "ampul",
-    "amuzikaal",
-    "angela",
-    "aniek",
-    "antje",
-    "antwerpen",
-    "anya",
-    "aorta",
-    "apache",
-    "apekool",
-    "appelaar",
-    "arganolie",
-    "argeloos",
-    "armoede",
-    "arrenslee",
-    "artritis",
-    "arubaan",
-    "asbak",
-    "ascii",
-    "asgrauw",
-    "asjes",
-    "asml",
-    "aspunt",
-    "asurn",
-    "asveld",
-    "aterling",
-    "atomair",
-    "atrium",
-    "atsma",
-    "atypisch",
-    "auping",
-    "aura",
-    "avifauna",
-    "axiaal",
-    "azoriaan",
-    "azteek",
-    "azuur",
-    "bachelor",
-    "badderen",
-    "badhotel",
-    "badmantel",
-    "badsteden",
-    "balie",
-    "ballans",
-    "balvers",
-    "bamibal",
-    "banneling",
-    "barracuda",
-    "basaal",
-    "batelaan",
-    "batje",
-    "beambte",
-    "bedlamp",
-    "bedwelmd",
-    "befaamd",
-    "begierd",
-    "begraaf",
-    "behield",
-    "beijaard",
-    "bejaagd",
-    "bekaaid",
-    "beks",
-    "bektas",
-    "belaad",
-    "belboei",
-    "belderbos",
-    "beloerd",
-    "beluchten",
-    "bemiddeld",
-    "benadeeld",
-    "benijd",
-    "berechten",
-    "beroemd",
-    "besef",
-    "besseling",
-    "best",
-    "betichten",
-    "bevind",
-    "bevochten",
-    "bevraagd",
-    "bewust",
-    "bidplaats",
-    "biefstuk",
-    "biemans",
-    "biezen",
-    "bijbaan",
-    "bijeenkom",
-    "bijfiguur",
-    "bijkaart",
-    "bijlage",
-    "bijpaard",
-    "bijtgaar",
-    "bijweg",
-    "bimmel",
-    "binck",
-    "bint",
-    "biobak",
-    "biotisch",
-    "biseks",
-    "bistro",
-    "bitter",
-    "bitumen",
-    "bizar",
-    "blad",
-    "bleken",
-    "blender",
-    "bleu",
-    "blief",
-    "blijven",
-    "blozen",
-    "bock",
-    "boef",
-    "boei",
-    "boks",
-    "bolder",
-    "bolus",
-    "bolvormig",
-    "bomaanval",
-    "bombarde",
-    "bomma",
-    "bomtapijt",
-    "bookmaker",
-    "boos",
-    "borg",
-    "bosbes",
-    "boshuizen",
-    "bosloop",
-    "botanicus",
-    "bougie",
-    "bovag",
-    "boxspring",
-    "braad",
-    "brasem",
-    "brevet",
-    "brigade",
-    "brinckman",
-    "bruid",
-    "budget",
-    "buffel",
-    "buks",
-    "bulgaar",
-    "buma",
-    "butaan",
-    "butler",
-    "buuf",
-    "cactus",
-    "cafeetje",
-    "camcorder",
-    "cannabis",
-    "canyon",
-    "capoeira",
-    "capsule",
-    "carkit",
-    "casanova",
-    "catalaan",
-    "ceintuur",
-    "celdeling",
-    "celplasma",
-    "cement",
-    "censeren",
-    "ceramisch",
-    "cerberus",
-    "cerebraal",
-    "cesium",
-    "cirkel",
-    "citeer",
-    "civiel",
-    "claxon",
-    "clenbuterol",
-    "clicheren",
-    "clijsen",
-    "coalitie",
-    "coassistentschap",
-    "coaxiaal",
-    "codetaal",
-    "cofinanciering",
-    "cognac",
-    "coltrui",
-    "comfort",
-    "commandant",
-    "condensaat",
-    "confectie",
-    "conifeer",
-    "convector",
-    "copier",
-    "corfu",
-    "correct",
-    "coup",
-    "couvert",
-    "creatie",
-    "credit",
-    "crematie",
-    "cricket",
-    "croupier",
-    "cruciaal",
-    "cruijff",
-    "cuisine",
-    "culemborg",
-    "culinair",
-    "curve",
-    "cyrano",
-    "dactylus",
-    "dading",
-    "dagblind",
-    "dagje",
-    "daglicht",
-    "dagprijs",
-    "dagranden",
-    "dakdekker",
-    "dakpark",
-    "dakterras",
-    "dalgrond",
-    "dambord",
-    "damkat",
-    "damlengte",
-    "damman",
-    "danenberg",
-    "debbie",
-    "decibel",
-    "defect",
-    "deformeer",
-    "degelijk",
-    "degradant",
-    "dejonghe",
-    "dekken",
-    "deppen",
-    "derek",
-    "derf",
-    "derhalve",
-    "detineren",
-    "devalueer",
-    "diaken",
-    "dicht",
-    "dictaat",
-    "dief",
-    "digitaal",
-    "dijbreuk",
-    "dijkmans",
-    "dimbaar",
-    "dinsdag",
-    "diode",
-    "dirigeer",
-    "disbalans",
-    "dobermann",
-    "doenbaar",
-    "doerak",
-    "dogma",
-    "dokhaven",
-    "dokwerker",
-    "doling",
-    "dolphijn",
-    "dolven",
-    "dombo",
-    "dooraderd",
-    "dopeling",
-    "doping",
-    "draderig",
-    "drama",
-    "drenkbak",
-    "dreumes",
-    "drol",
-    "drug",
-    "duaal",
-    "dublin",
-    "duplicaat",
-    "durven",
-    "dusdanig",
-    "dutchbat",
-    "dutje",
-    "dutten",
-    "duur",
-    "duwwerk",
-    "dwaal",
-    "dweil",
-    "dwing",
-    "dyslexie",
-    "ecostroom",
-    "ecotaks",
-    "educatie",
-    "eeckhout",
-    "eede",
-    "eemland",
-    "eencellig",
-    "eeneiig",
-    "eenruiter",
-    "eenwinter",
-    "eerenberg",
-    "eerrover",
-    "eersel",
-    "eetmaal",
-    "efteling",
-    "egaal",
-    "egtberts",
-    "eickhoff",
-    "eidooier",
-    "eiland",
-    "eind",
-    "eisden",
-    "ekster",
-    "elburg",
-    "elevatie",
-    "elfkoppig",
-    "elfrink",
-    "elftal",
-    "elimineer",
-    "elleboog",
-    "elma",
-    "elodie",
-    "elsa",
-    "embleem",
-    "embolie",
-    "emoe",
-    "emonds",
-    "emplooi",
-    "enduro",
-    "enfin",
-    "engageer",
-    "entourage",
-    "entstof",
-    "epileer",
-    "episch",
-    "eppo",
-    "erasmus",
-    "erboven",
-    "erebaan",
-    "erelijst",
-    "ereronden",
-    "ereteken",
-    "erfhuis",
-    "erfwet",
-    "erger",
-    "erica",
-    "ermitage",
-    "erna",
-    "ernie",
-    "erts",
-    "ertussen",
-    "eruitzien",
-    "ervaar",
-    "erven",
-    "erwt",
-    "esbeek",
-    "escort",
-    "esdoorn",
-    "essing",
-    "etage",
-    "eter",
-    "ethanol",
-    "ethicus",
-    "etholoog",
-    "eufonisch",
-    "eurocent",
-    "evacuatie",
-    "exact",
-    "examen",
-    "executant",
-    "exen",
-    "exit",
-    "exogeen",
-    "exotherm",
-    "expeditie",
-    "expletief",
-    "expres",
-    "extase",
-    "extinctie",
-    "faal",
-    "faam",
-    "fabel",
-    "facultair",
-    "fakir",
-    "fakkel",
-    "faliekant",
-    "fallisch",
-    "famke",
-    "fanclub",
-    "fase",
-    "fatsoen",
-    "fauna",
-    "federaal",
-    "feedback",
-    "feest",
-    "feilbaar",
-    "feitelijk",
-    "felblauw",
-    "figurante",
-    "fiod",
-    "fitheid",
-    "fixeer",
-    "flap",
-    "fleece",
-    "fleur",
-    "flexibel",
-    "flits",
-    "flos",
-    "flow",
-    "fluweel",
-    "foezelen",
-    "fokkelman",
-    "fokpaard",
-    "fokvee",
-    "folder",
-    "follikel",
-    "folmer",
-    "folteraar",
-    "fooi",
-    "foolen",
-    "forfait",
-    "forint",
-    "formule",
-    "fornuis",
-    "fosfaat",
-    "foxtrot",
-    "foyer",
-    "fragiel",
-    "frater",
-    "freak",
-    "freddie",
-    "fregat",
-    "freon",
-    "frijnen",
-    "fructose",
-    "frunniken",
-    "fuiven",
-    "funshop",
-    "furieus",
-    "fysica",
-    "gadget",
-    "galder",
-    "galei",
-    "galg",
-    "galvlieg",
-    "galzuur",
-    "ganesh",
-    "gaswet",
-    "gaza",
-    "gazelle",
-    "geaaid",
-    "gebiecht",
-    "gebufferd",
-    "gedijd",
-    "geef",
-    "geflanst",
-    "gefreesd",
-    "gegaan",
-    "gegijzeld",
-    "gegniffel",
-    "gegraaid",
-    "gehikt",
-    "gehobbeld",
-    "gehucht",
-    "geiser",
-    "geiten",
-    "gekaakt",
-    "gekheid",
-    "gekijf",
-    "gekmakend",
-    "gekocht",
-    "gekskap",
-    "gekte",
-    "gelubberd",
-    "gemiddeld",
-    "geordend",
-    "gepoederd",
-    "gepuft",
-    "gerda",
-    "gerijpt",
-    "geseald",
-    "geshockt",
-    "gesierd",
-    "geslaagd",
-    "gesnaaid",
-    "getracht",
-    "getwijfel",
-    "geuit",
-    "gevecht",
-    "gevlagd",
-    "gewicht",
-    "gezaagd",
-    "gezocht",
-    "ghanees",
-    "giebelen",
-    "giechel",
-    "giepmans",
-    "gips",
-    "giraal",
-    "gistachtig",
-    "gitaar",
-    "glaasje",
-    "gletsjer",
-    "gleuf",
-    "glibberen",
-    "glijbaan",
-    "gloren",
-    "gluipen",
-    "gluren",
-    "gluur",
-    "gnoe",
-    "goddelijk",
-    "godgans",
-    "godschalk",
-    "godzalig",
-    "goeierd",
-    "gogme",
-    "goklustig",
-    "gokwereld",
-    "gonggrijp",
-    "gonje",
-    "goor",
-    "grabbel",
-    "graf",
-    "graveer",
-    "grif",
-    "grolleman",
-    "grom",
-    "groosman",
-    "grubben",
-    "gruijs",
-    "grut",
-    "guacamole",
-    "guido",
-    "guppy",
-    "haazen",
-    "hachelijk",
-    "haex",
-    "haiku",
-    "hakhout",
-    "hakken",
-    "hanegem",
-    "hans",
-    "hanteer",
-    "harrie",
-    "hazebroek",
-    "hedonist",
-    "heil",
-    "heineken",
-    "hekhuis",
-    "hekman",
-    "helbig",
-    "helga",
-    "helwegen",
-    "hengelaar",
-    "herkansen",
-    "hermafrodiet",
-    "hertaald",
-    "hiaat",
-    "hikspoors",
-    "hitachi",
-    "hitparade",
-    "hobo",
-    "hoeve",
-    "holocaust",
-    "hond",
-    "honnepon",
-    "hoogacht",
-    "hotelbed",
-    "hufter",
-    "hugo",
-    "huilbier",
-    "hulk",
-    "humus",
-    "huwbaar",
-    "huwelijk",
-    "hype",
-    "iconisch",
-    "idema",
-    "ideogram",
-    "idolaat",
-    "ietje",
-    "ijker",
-    "ijkheid",
-    "ijklijn",
-    "ijkmaat",
-    "ijkwezen",
-    "ijmuiden",
-    "ijsbox",
-    "ijsdag",
-    "ijselijk",
-    "ijskoud",
-    "ilse",
-    "immuun",
-    "impliceer",
-    "impuls",
-    "inbijten",
-    "inbuigen",
-    "indijken",
-    "induceer",
-    "indy",
-    "infecteer",
-    "inhaak",
-    "inkijk",
-    "inluiden",
-    "inmijnen",
-    "inoefenen",
-    "inpolder",
-    "inrijden",
-    "inslaan",
-    "invitatie",
-    "inwaaien",
-    "ionisch",
-    "isaac",
-    "isolatie",
-    "isotherm",
-    "isra",
-    "italiaan",
-    "ivoor",
-    "jacobs",
-    "jakob",
-    "jammen",
-    "jampot",
-    "jarig",
-    "jehova",
-    "jenever",
-    "jezus",
-    "joana",
-    "jobdienst",
-    "josua",
-    "joule",
-    "juich",
-    "jurk",
-    "juut",
-    "kaas",
-    "kabelaar",
-    "kabinet",
-    "kagenaar",
-    "kajuit",
-    "kalebas",
-    "kalm",
-    "kanjer",
-    "kapucijn",
-    "karregat",
-    "kart",
-    "katvanger",
-    "katwijk",
-    "kegelaar",
-    "keiachtig",
-    "keizer",
-    "kenletter",
-    "kerdijk",
-    "keus",
-    "kevlar",
-    "kezen",
-    "kickback",
-    "kieviet",
-    "kijken",
-    "kikvors",
-    "kilheid",
-    "kilobit",
-    "kilsdonk",
-    "kipschnitzel",
-    "kissebis",
-    "klad",
-    "klagelijk",
-    "klak",
-    "klapbaar",
-    "klaver",
-    "klene",
-    "klets",
-    "klijnhout",
-    "klit",
-    "klok",
-    "klonen",
-    "klotefilm",
-    "kluif",
-    "klumper",
-    "klus",
-    "knabbel",
-    "knagen",
-    "knaven",
-    "kneedbaar",
-    "knmi",
-    "knul",
-    "knus",
-    "kokhals",
-    "komiek",
-    "komkommer",
-    "kompaan",
-    "komrij",
-    "komvormig",
-    "koning",
-    "kopbal",
-    "kopklep",
-    "kopnagel",
-    "koppejan",
-    "koptekst",
-    "kopwand",
-    "koraal",
-    "kosmisch",
-    "kostbaar",
-    "kram",
-    "kraneveld",
-    "kras",
-    "kreling",
-    "krengen",
-    "kribbe",
-    "krik",
-    "kruid",
-    "krulbol",
-    "kuijper",
-    "kuipbank",
-    "kuit",
-    "kuiven",
-    "kutsmoes",
-    "kuub",
-    "kwak",
-    "kwatong",
-    "kwetsbaar",
-    "kwezelaar",
-    "kwijnen",
-    "kwik",
-    "kwinkslag",
-    "kwitantie",
-    "lading",
-    "lakbeits",
-    "lakken",
-    "laklaag",
-    "lakmoes",
-    "lakwijk",
-    "lamheid",
-    "lamp",
-    "lamsbout",
-    "lapmiddel",
-    "larve",
-    "laser",
-    "latijn",
-    "latuw",
-    "lawaai",
-    "laxeerpil",
-    "lebberen",
-    "ledeboer",
-    "leefbaar",
-    "leeman",
-    "lefdoekje",
-    "lefhebber",
-    "legboor",
-    "legsel",
-    "leguaan",
-    "leiplaat",
-    "lekdicht",
-    "lekrijden",
-    "leksteen",
-    "lenen",
-    "leraar",
-    "lesbienne",
-    "leugenaar",
-    "leut",
-    "lexicaal",
-    "lezing",
-    "lieten",
-    "liggeld",
-    "lijdzaam",
-    "lijk",
-    "lijmstang",
-    "lijnschip",
-    "likdoorn",
-    "likken",
-    "liksteen",
-    "limburg",
-    "link",
-    "linoleum",
-    "lipbloem",
-    "lipman",
-    "lispelen",
-    "lissabon",
-    "litanie",
-    "liturgie",
-    "lochem",
-    "loempia",
-    "loesje",
-    "logheid",
-    "lonen",
-    "lonneke",
-    "loom",
-    "loos",
-    "losbaar",
-    "loslaten",
-    "losplaats",
-    "loting",
-    "lotnummer",
-    "lots",
-    "louie",
-    "lourdes",
-    "louter",
-    "lowbudget",
-    "luijten",
-    "luikenaar",
-    "luilak",
-    "luipaard",
-    "luizenbos",
-    "lulkoek",
-    "lumen",
-    "lunzen",
-    "lurven",
-    "lutjeboer",
-    "luttel",
-    "lutz",
-    "luuk",
-    "luwte",
-    "luyendijk",
-    "lyceum",
-    "lynx",
-    "maakbaar",
-    "magdalena",
-    "malheid",
-    "manchet",
-    "manfred",
-    "manhaftig",
-    "mank",
-    "mantel",
-    "marion",
-    "marxist",
-    "masmeijer",
-    "massaal",
-    "matsen",
-    "matverf",
-    "matze",
-    "maude",
-    "mayonaise",
-    "mechanica",
-    "meifeest",
-    "melodie",
-    "meppelink",
-    "midvoor",
-    "midweeks",
-    "midzomer",
-    "miezel",
-    "mijnraad",
-    "minus",
-    "mirck",
-    "mirte",
-    "mispakken",
-    "misraden",
-    "miswassen",
-    "mitella",
-    "moker",
-    "molecule",
-    "mombakkes",
-    "moonen",
-    "mopperaar",
-    "moraal",
-    "morgana",
-    "mormel",
-    "mosselaar",
-    "motregen",
-    "mouw",
-    "mufheid",
-    "mutueel",
-    "muzelman",
-    "naaidoos",
-    "naald",
-    "nadeel",
-    "nadruk",
-    "nagy",
-    "nahon",
-    "naima",
-    "nairobi",
-    "napalm",
-    "napels",
-    "napijn",
-    "napoleon",
-    "narigheid",
-    "narratief",
-    "naseizoen",
-    "nasibal",
-    "navigatie",
-    "nawijn",
-    "negatief",
-    "nekletsel",
-    "nekwervel",
-    "neolatijn",
-    "neonataal",
-    "neptunus",
-    "nerd",
-    "nest",
-    "neuzelaar",
-    "nihiliste",
-    "nijenhuis",
-    "nijging",
-    "nijhoff",
-    "nijl",
-    "nijptang",
-    "nippel",
-    "nokkenas",
-    "noordam",
-    "noren",
-    "normaal",
-    "nottelman",
-    "notulant",
-    "nout",
-    "nuance",
-    "nuchter",
-    "nudorp",
-    "nulde",
-    "nullijn",
-    "nulmeting",
-    "nunspeet",
-    "nylon",
-    "obelisk",
-    "object",
-    "oblie",
-    "obsceen",
-    "occlusie",
-    "oceaan",
-    "ochtend",
-    "ockhuizen",
-    "oerdom",
-    "oergezond",
-    "oerlaag",
-    "oester",
-    "okhuijsen",
-    "olifant",
-    "olijfboer",
-    "omaans",
-    "ombudsman",
-    "omdat",
-    "omdijken",
-    "omdoen",
-    "omgebouwd",
-    "omkeer",
-    "omkomen",
-    "ommegaand",
-    "ommuren",
-    "omroep",
-    "omruil",
-    "omslaan",
-    "omsmeden",
-    "omvaar",
-    "onaardig",
-    "onedel",
-    "onenig",
-    "onheilig",
-    "onrecht",
-    "onroerend",
-    "ontcijfer",
-    "onthaal",
-    "ontvallen",
-    "ontzadeld",
-    "onzacht",
-    "onzin",
-    "onzuiver",
-    "oogappel",
-    "ooibos",
-    "ooievaar",
-    "ooit",
-    "oorarts",
-    "oorhanger",
-    "oorijzer",
-    "oorklep",
-    "oorschelp",
-    "oorworm",
-    "oorzaak",
-    "opdagen",
-    "opdien",
-    "opdweilen",
-    "opel",
-    "opgebaard",
-    "opinie",
-    "opjutten",
-    "opkijken",
-    "opklaar",
-    "opkuisen",
-    "opkwam",
-    "opnaaien",
-    "opossum",
-    "opsieren",
-    "opsmeer",
-    "optreden",
-    "opvijzel",
-    "opvlammen",
-    "opwind",
-    "oraal",
-    "orchidee",
-    "orkest",
-    "ossuarium",
-    "ostendorf",
-    "oublie",
-    "oudachtig",
-    "oudbakken",
-    "oudnoors",
-    "oudshoorn",
-    "oudtante",
-    "oven",
-    "over",
-    "oxidant",
-    "pablo",
-    "pacht",
-    "paktafel",
-    "pakzadel",
-    "paljas",
-    "panharing",
-    "papfles",
-    "paprika",
-    "parochie",
-    "paus",
-    "pauze",
-    "paviljoen",
-    "peek",
-    "pegel",
-    "peigeren",
-    "pekela",
-    "pendant",
-    "penibel",
-    "pepmiddel",
-    "peptalk",
-    "periferie",
-    "perron",
-    "pessarium",
-    "peter",
-    "petfles",
-    "petgat",
-    "peuk",
-    "pfeifer",
-    "picknick",
-    "pief",
-    "pieneman",
-    "pijlkruid",
-    "pijnacker",
-    "pijpelink",
-    "pikdonker",
-    "pikeer",
-    "pilaar",
-    "pionier",
-    "pipet",
-    "piscine",
-    "pissebed",
-    "pitchen",
-    "pixel",
-    "plamuren",
-    "plan",
-    "plausibel",
-    "plegen",
-    "plempen",
-    "pleonasme",
-    "plezant",
-    "podoloog",
-    "pofmouw",
-    "pokdalig",
-    "ponywagen",
-    "popachtig",
-    "popidool",
-    "porren",
-    "positie",
-    "potten",
-    "pralen",
-    "prezen",
-    "prijzen",
-    "privaat",
-    "proef",
-    "prooi",
-    "prozawerk",
-    "pruik",
-    "prul",
-    "publiceer",
-    "puck",
-    "puilen",
-    "pukkelig",
-    "pulveren",
-    "pupil",
-    "puppy",
-    "purmerend",
-    "pustjens",
-    "putemmer",
-    "puzzelaar",
-    "queenie",
-    "quiche",
-    "raam",
-    "raar",
-    "raat",
-    "raes",
-    "ralf",
-    "rally",
-    "ramona",
-    "ramselaar",
-    "ranonkel",
-    "rapen",
-    "rapunzel",
-    "rarekiek",
-    "rarigheid",
-    "rattenhol",
-    "ravage",
-    "reactie",
-    "recreant",
-    "redacteur",
-    "redster",
-    "reewild",
-    "regie",
-    "reijnders",
-    "rein",
-    "replica",
-    "revanche",
-    "rigide",
-    "rijbaan",
-    "rijdansen",
-    "rijgen",
-    "rijkdom",
-    "rijles",
-    "rijnwijn",
-    "rijpma",
-    "rijstafel",
-    "rijtaak",
-    "rijzwepen",
-    "rioleer",
-    "ripdeal",
-    "riphagen",
-    "riskant",
-    "rits",
-    "rivaal",
-    "robbedoes",
-    "robot",
-    "rockact",
-    "rodijk",
-    "rogier",
-    "rohypnol",
-    "rollaag",
-    "rolpaal",
-    "roltafel",
-    "roof",
-    "roon",
-    "roppen",
-    "rosbief",
-    "rosharig",
-    "rosielle",
-    "rotan",
-    "rotleven",
-    "rotten",
-    "rotvaart",
-    "royaal",
-    "royeer",
-    "rubato",
-    "ruby",
-    "ruche",
-    "rudge",
-    "ruggetje",
-    "rugnummer",
-    "rugpijn",
-    "rugtitel",
-    "rugzak",
-    "ruilbaar",
-    "ruis",
-    "ruit",
-    "rukwind",
-    "rulijs",
-    "rumoeren",
-    "rumsdorp",
-    "rumtaart",
-    "runnen",
-    "russchen",
-    "ruwkruid",
-    "saboteer",
-    "saksisch",
-    "salade",
-    "salpeter",
-    "sambabal",
-    "samsam",
-    "satelliet",
-    "satineer",
-    "saus",
-    "scampi",
-    "scarabee",
-    "scenario",
-    "schobben",
-    "schubben",
-    "scout",
-    "secessie",
-    "secondair",
-    "seculair",
-    "sediment",
-    "seeland",
-    "settelen",
-    "setwinst",
-    "sheriff",
-    "shiatsu",
-    "siciliaan",
-    "sidderaal",
-    "sigma",
-    "sijben",
-    "silvana",
-    "simkaart",
-    "sinds",
-    "situatie",
-    "sjaak",
-    "sjardijn",
-    "sjezen",
-    "sjor",
-    "skinhead",
-    "skylab",
-    "slamixen",
-    "sleijpen",
-    "slijkerig",
-    "slordig",
-    "slowaak",
-    "sluieren",
-    "smadelijk",
-    "smiecht",
-    "smoel",
-    "smos",
-    "smukken",
-    "snackcar",
-    "snavel",
-    "sneaker",
-    "sneu",
-    "snijdbaar",
-    "snit",
-    "snorder",
-    "soapbox",
-    "soetekouw",
-    "soigneren",
-    "sojaboon",
-    "solo",
-    "solvabel",
-    "somber",
-    "sommatie",
-    "soort",
-    "soppen",
-    "sopraan",
-    "soundbar",
-    "spanen",
-    "spawater",
-    "spijgat",
-    "spinaal",
-    "spionage",
-    "spiraal",
-    "spleet",
-    "splijt",
-    "spoed",
-    "sporen",
-    "spul",
-    "spuug",
-    "spuw",
-    "stalen",
-    "standaard",
-    "star",
-    "stefan",
-    "stencil",
-    "stijf",
-    "stil",
-    "stip",
-    "stopdas",
-    "stoten",
-    "stoven",
-    "straat",
-    "strobbe",
-    "strubbel",
-    "stucadoor",
-    "stuif",
-    "stukadoor",
-    "subhoofd",
-    "subregent",
-    "sudoku",
-    "sukade",
-    "sulfaat",
-    "surinaams",
-    "suus",
-    "syfilis",
-    "symboliek",
-    "sympathie",
-    "synagoge",
-    "synchroon",
-    "synergie",
-    "systeem",
-    "taanderij",
-    "tabak",
-    "tachtig",
-    "tackelen",
-    "taiwanees",
-    "talman",
-    "tamheid",
-    "tangaslip",
-    "taps",
-    "tarkan",
-    "tarwe",
-    "tasman",
-    "tatjana",
-    "taxameter",
-    "teil",
-    "teisman",
-    "telbaar",
-    "telco",
-    "telganger",
-    "telstar",
-    "tenant",
-    "tepel",
-    "terzet",
-    "testament",
-    "ticket",
-    "tiesinga",
-    "tijdelijk",
-    "tika",
-    "tiksel",
-    "tilleman",
-    "timbaal",
-    "tinsteen",
-    "tiplijn",
-    "tippelaar",
-    "tjirpen",
-    "toezeggen",
-    "tolbaas",
-    "tolgeld",
-    "tolhek",
-    "tolo",
-    "tolpoort",
-    "toltarief",
-    "tolvrij",
-    "tomaat",
-    "tondeuse",
-    "toog",
-    "tooi",
-    "toonbaar",
-    "toos",
-    "topclub",
-    "toppen",
-    "toptalent",
-    "topvrouw",
-    "toque",
-    "torment",
-    "tornado",
-    "tosti",
-    "totdat",
-    "toucheer",
-    "toulouse",
-    "tournedos",
-    "tout",
-    "trabant",
-    "tragedie",
-    "trailer",
-    "traject",
-    "traktaat",
-    "trauma",
-    "tray",
-    "trechter",
-    "tred",
-    "tref",
-    "treur",
-    "troebel",
-    "tros",
-    "trucage",
-    "truffel",
-    "tsaar",
-    "tucht",
-    "tuenter",
-    "tuitelig",
-    "tukje",
-    "tuktuk",
-    "tulp",
-    "tuma",
-    "tureluurs",
-    "twijfel",
-    "twitteren",
-    "tyfoon",
-    "typograaf",
-    "ugandees",
-    "uiachtig",
-    "uier",
-    "uisnipper",
-    "ultiem",
-    "unitair",
-    "uranium",
-    "urbaan",
-    "urendag",
-    "ursula",
-    "uurcirkel",
-    "uurglas",
-    "uzelf",
-    "vaat",
-    "vakantie",
-    "vakleraar",
-    "valbijl",
-    "valpartij",
-    "valreep",
-    "valuatie",
-    "vanmiddag",
-    "vanonder",
-    "varaan",
-    "varken",
-    "vaten",
-    "veenbes",
-    "veeteler",
-    "velgrem",
-    "vellekoop",
-    "velvet",
-    "veneberg",
-    "venlo",
-    "vent",
-    "venusberg",
-    "venw",
-    "veredeld",
-    "verf",
-    "verhaaf",
-    "vermaak",
-    "vernaaid",
-    "verraad",
-    "vers",
-    "veruit",
-    "verzaagd",
-    "vetachtig",
-    "vetlok",
-    "vetmesten",
-    "veto",
-    "vetrek",
-    "vetstaart",
-    "vetten",
-    "veurink",
-    "viaduct",
-    "vibrafoon",
-    "vicariaat",
-    "vieux",
-    "vieveen",
-    "vijfvoud",
-    "villa",
-    "vilt",
-    "vimmetje",
-    "vindbaar",
-    "vips",
-    "virtueel",
-    "visdieven",
-    "visee",
-    "visie",
-    "vlaag",
-    "vleugel",
-    "vmbo",
-    "vocht",
-    "voesenek",
-    "voicemail",
-    "voip",
-    "volg",
-    "vork",
-    "vorselaar",
-    "voyeur",
-    "vracht",
-    "vrekkig",
-    "vreten",
-    "vrije",
-    "vrozen",
-    "vrucht",
-    "vucht",
-    "vugt",
-    "vulkaan",
-    "vulmiddel",
-    "vulva",
-    "vuren",
-    "waas",
-    "wacht",
-    "wadvogel",
-    "wafel",
-    "waffel",
-    "walhalla",
-    "walnoot",
-    "walraven",
-    "wals",
-    "walvis",
-    "wandaad",
-    "wanen",
-    "wanmolen",
-    "want",
-    "warklomp",
-    "warm",
-    "wasachtig",
-    "wasteil",
-    "watt",
-    "webhandel",
-    "weblog",
-    "webpagina",
-    "webzine",
-    "wedereis",
-    "wedstrijd",
-    "weeda",
-    "weert",
-    "wegmaaien",
-    "wegscheer",
-    "wekelijks",
-    "wekken",
-    "wekroep",
-    "wektoon",
-    "weldaad",
-    "welwater",
-    "wendbaar",
-    "wenkbrauw",
-    "wens",
-    "wentelaar",
-    "wervel",
-    "wesseling",
-    "wetboek",
-    "wetmatig",
-    "whirlpool",
-    "wijbrands",
-    "wijdbeens",
-    "wijk",
-    "wijnbes",
-    "wijting",
-    "wild",
-    "wimpelen",
-    "wingebied",
-    "winplaats",
-    "winter",
-    "winzucht",
-    "wipstaart",
-    "wisgerhof",
-    "withaar",
-    "witmaker",
-    "wokkel",
-    "wolf",
-    "wonenden",
-    "woning",
-    "worden",
-    "worp",
-    "wortel",
-    "wrat",
-    "wrijf",
-    "wringen",
-    "yoghurt",
-    "ypsilon",
-    "zaaijer",
-    "zaak",
-    "zacharias",
-    "zakelijk",
-    "zakkam",
-    "zakwater",
-    "zalf",
-    "zalig",
-    "zaniken",
-    "zebracode",
-    "zeeblauw",
-    "zeef",
-    "zeegaand",
-    "zeeuw",
-    "zege",
-    "zegje",
-    "zeil",
-    "zesbaans",
-    "zesenhalf",
-    "zeskantig",
-    "zesmaal",
-    "zetbaas",
-    "zetpil",
-    "zeulen",
-    "ziezo",
-    "zigzag",
-    "zijaltaar",
-    "zijbeuk",
-    "zijlijn",
-    "zijmuur",
-    "zijn",
-    "zijwaarts",
-    "zijzelf",
-    "zilt",
-    "zimmerman",
-    "zinledig",
-    "zinnelijk",
-    "zionist",
-    "zitdag",
-    "zitruimte",
-    "zitzak",
-    "zoal",
-    "zodoende",
-    "zoekbots",
-    "zoem",
-    "zoiets",
-    "zojuist",
-    "zondaar",
-    "zotskap",
-    "zottebol",
-    "zucht",
-    "zuivel",
-    "zulk",
-    "zult",
-    "zuster",
-    "zuur",
-    "zweedijk",
-    "zwendel",
-    "zwepen",
-    "zwiep",
-    "zwijmel",
-    "zworen"
-  ];
-}
\ No newline at end of file
diff --git a/cw_haven/lib/mnemonics/english.dart b/cw_haven/lib/mnemonics/english.dart
deleted file mode 100644
index fb464d04e..000000000
--- a/cw_haven/lib/mnemonics/english.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class EnglishMnemonics {
-  static const words = [
-    "abbey",
-    "abducts",
-    "ability",
-    "ablaze",
-    "abnormal",
-    "abort",
-    "abrasive",
-    "absorb",
-    "abyss",
-    "academy",
-    "aces",
-    "aching",
-    "acidic",
-    "acoustic",
-    "acquire",
-    "across",
-    "actress",
-    "acumen",
-    "adapt",
-    "addicted",
-    "adept",
-    "adhesive",
-    "adjust",
-    "adopt",
-    "adrenalin",
-    "adult",
-    "adventure",
-    "aerial",
-    "afar",
-    "affair",
-    "afield",
-    "afloat",
-    "afoot",
-    "afraid",
-    "after",
-    "against",
-    "agenda",
-    "aggravate",
-    "agile",
-    "aglow",
-    "agnostic",
-    "agony",
-    "agreed",
-    "ahead",
-    "aided",
-    "ailments",
-    "aimless",
-    "airport",
-    "aisle",
-    "ajar",
-    "akin",
-    "alarms",
-    "album",
-    "alchemy",
-    "alerts",
-    "algebra",
-    "alkaline",
-    "alley",
-    "almost",
-    "aloof",
-    "alpine",
-    "already",
-    "also",
-    "altitude",
-    "alumni",
-    "always",
-    "amaze",
-    "ambush",
-    "amended",
-    "amidst",
-    "ammo",
-    "amnesty",
-    "among",
-    "amply",
-    "amused",
-    "anchor",
-    "android",
-    "anecdote",
-    "angled",
-    "ankle",
-    "annoyed",
-    "answers",
-    "antics",
-    "anvil",
-    "anxiety",
-    "anybody",
-    "apart",
-    "apex",
-    "aphid",
-    "aplomb",
-    "apology",
-    "apply",
-    "apricot",
-    "aptitude",
-    "aquarium",
-    "arbitrary",
-    "archer",
-    "ardent",
-    "arena",
-    "argue",
-    "arises",
-    "army",
-    "around",
-    "arrow",
-    "arsenic",
-    "artistic",
-    "ascend",
-    "ashtray",
-    "aside",
-    "asked",
-    "asleep",
-    "aspire",
-    "assorted",
-    "asylum",
-    "athlete",
-    "atlas",
-    "atom",
-    "atrium",
-    "attire",
-    "auburn",
-    "auctions",
-    "audio",
-    "august",
-    "aunt",
-    "austere",
-    "autumn",
-    "avatar",
-    "avidly",
-    "avoid",
-    "awakened",
-    "awesome",
-    "awful",
-    "awkward",
-    "awning",
-    "awoken",
-    "axes",
-    "axis",
-    "axle",
-    "aztec",
-    "azure",
-    "baby",
-    "bacon",
-    "badge",
-    "baffles",
-    "bagpipe",
-    "bailed",
-    "bakery",
-    "balding",
-    "bamboo",
-    "banjo",
-    "baptism",
-    "basin",
-    "batch",
-    "bawled",
-    "bays",
-    "because",
-    "beer",
-    "befit",
-    "begun",
-    "behind",
-    "being",
-    "below",
-    "bemused",
-    "benches",
-    "berries",
-    "bested",
-    "betting",
-    "bevel",
-    "beware",
-    "beyond",
-    "bias",
-    "bicycle",
-    "bids",
-    "bifocals",
-    "biggest",
-    "bikini",
-    "bimonthly",
-    "binocular",
-    "biology",
-    "biplane",
-    "birth",
-    "biscuit",
-    "bite",
-    "biweekly",
-    "blender",
-    "blip",
-    "bluntly",
-    "boat",
-    "bobsled",
-    "bodies",
-    "bogeys",
-    "boil",
-    "boldly",
-    "bomb",
-    "border",
-    "boss",
-    "both",
-    "bounced",
-    "bovine",
-    "bowling",
-    "boxes",
-    "boyfriend",
-    "broken",
-    "brunt",
-    "bubble",
-    "buckets",
-    "budget",
-    "buffet",
-    "bugs",
-    "building",
-    "bulb",
-    "bumper",
-    "bunch",
-    "business",
-    "butter",
-    "buying",
-    "buzzer",
-    "bygones",
-    "byline",
-    "bypass",
-    "cabin",
-    "cactus",
-    "cadets",
-    "cafe",
-    "cage",
-    "cajun",
-    "cake",
-    "calamity",
-    "camp",
-    "candy",
-    "casket",
-    "catch",
-    "cause",
-    "cavernous",
-    "cease",
-    "cedar",
-    "ceiling",
-    "cell",
-    "cement",
-    "cent",
-    "certain",
-    "chlorine",
-    "chrome",
-    "cider",
-    "cigar",
-    "cinema",
-    "circle",
-    "cistern",
-    "citadel",
-    "civilian",
-    "claim",
-    "click",
-    "clue",
-    "coal",
-    "cobra",
-    "cocoa",
-    "code",
-    "coexist",
-    "coffee",
-    "cogs",
-    "cohesive",
-    "coils",
-    "colony",
-    "comb",
-    "cool",
-    "copy",
-    "corrode",
-    "costume",
-    "cottage",
-    "cousin",
-    "cowl",
-    "criminal",
-    "cube",
-    "cucumber",
-    "cuddled",
-    "cuffs",
-    "cuisine",
-    "cunning",
-    "cupcake",
-    "custom",
-    "cycling",
-    "cylinder",
-    "cynical",
-    "dabbing",
-    "dads",
-    "daft",
-    "dagger",
-    "daily",
-    "damp",
-    "dangerous",
-    "dapper",
-    "darted",
-    "dash",
-    "dating",
-    "dauntless",
-    "dawn",
-    "daytime",
-    "dazed",
-    "debut",
-    "decay",
-    "dedicated",
-    "deepest",
-    "deftly",
-    "degrees",
-    "dehydrate",
-    "deity",
-    "dejected",
-    "delayed",
-    "demonstrate",
-    "dented",
-    "deodorant",
-    "depth",
-    "desk",
-    "devoid",
-    "dewdrop",
-    "dexterity",
-    "dialect",
-    "dice",
-    "diet",
-    "different",
-    "digit",
-    "dilute",
-    "dime",
-    "dinner",
-    "diode",
-    "diplomat",
-    "directed",
-    "distance",
-    "ditch",
-    "divers",
-    "dizzy",
-    "doctor",
-    "dodge",
-    "does",
-    "dogs",
-    "doing",
-    "dolphin",
-    "domestic",
-    "donuts",
-    "doorway",
-    "dormant",
-    "dosage",
-    "dotted",
-    "double",
-    "dove",
-    "down",
-    "dozen",
-    "dreams",
-    "drinks",
-    "drowning",
-    "drunk",
-    "drying",
-    "dual",
-    "dubbed",
-    "duckling",
-    "dude",
-    "duets",
-    "duke",
-    "dullness",
-    "dummy",
-    "dunes",
-    "duplex",
-    "duration",
-    "dusted",
-    "duties",
-    "dwarf",
-    "dwelt",
-    "dwindling",
-    "dying",
-    "dynamite",
-    "dyslexic",
-    "each",
-    "eagle",
-    "earth",
-    "easy",
-    "eating",
-    "eavesdrop",
-    "eccentric",
-    "echo",
-    "eclipse",
-    "economics",
-    "ecstatic",
-    "eden",
-    "edgy",
-    "edited",
-    "educated",
-    "eels",
-    "efficient",
-    "eggs",
-    "egotistic",
-    "eight",
-    "either",
-    "eject",
-    "elapse",
-    "elbow",
-    "eldest",
-    "eleven",
-    "elite",
-    "elope",
-    "else",
-    "eluded",
-    "emails",
-    "ember",
-    "emerge",
-    "emit",
-    "emotion",
-    "empty",
-    "emulate",
-    "energy",
-    "enforce",
-    "enhanced",
-    "enigma",
-    "enjoy",
-    "enlist",
-    "enmity",
-    "enough",
-    "enraged",
-    "ensign",
-    "entrance",
-    "envy",
-    "epoxy",
-    "equip",
-    "erase",
-    "erected",
-    "erosion",
-    "error",
-    "eskimos",
-    "espionage",
-    "essential",
-    "estate",
-    "etched",
-    "eternal",
-    "ethics",
-    "etiquette",
-    "evaluate",
-    "evenings",
-    "evicted",
-    "evolved",
-    "examine",
-    "excess",
-    "exhale",
-    "exit",
-    "exotic",
-    "exquisite",
-    "extra",
-    "exult",
-    "fabrics",
-    "factual",
-    "fading",
-    "fainted",
-    "faked",
-    "fall",
-    "family",
-    "fancy",
-    "farming",
-    "fatal",
-    "faulty",
-    "fawns",
-    "faxed",
-    "fazed",
-    "feast",
-    "february",
-    "federal",
-    "feel",
-    "feline",
-    "females",
-    "fences",
-    "ferry",
-    "festival",
-    "fetches",
-    "fever",
-    "fewest",
-    "fiat",
-    "fibula",
-    "fictional",
-    "fidget",
-    "fierce",
-    "fifteen",
-    "fight",
-    "films",
-    "firm",
-    "fishing",
-    "fitting",
-    "five",
-    "fixate",
-    "fizzle",
-    "fleet",
-    "flippant",
-    "flying",
-    "foamy",
-    "focus",
-    "foes",
-    "foggy",
-    "foiled",
-    "folding",
-    "fonts",
-    "foolish",
-    "fossil",
-    "fountain",
-    "fowls",
-    "foxes",
-    "foyer",
-    "framed",
-    "friendly",
-    "frown",
-    "fruit",
-    "frying",
-    "fudge",
-    "fuel",
-    "fugitive",
-    "fully",
-    "fuming",
-    "fungal",
-    "furnished",
-    "fuselage",
-    "future",
-    "fuzzy",
-    "gables",
-    "gadget",
-    "gags",
-    "gained",
-    "galaxy",
-    "gambit",
-    "gang",
-    "gasp",
-    "gather",
-    "gauze",
-    "gave",
-    "gawk",
-    "gaze",
-    "gearbox",
-    "gecko",
-    "geek",
-    "gels",
-    "gemstone",
-    "general",
-    "geometry",
-    "germs",
-    "gesture",
-    "getting",
-    "geyser",
-    "ghetto",
-    "ghost",
-    "giant",
-    "giddy",
-    "gifts",
-    "gigantic",
-    "gills",
-    "gimmick",
-    "ginger",
-    "girth",
-    "giving",
-    "glass",
-    "gleeful",
-    "glide",
-    "gnaw",
-    "gnome",
-    "goat",
-    "goblet",
-    "godfather",
-    "goes",
-    "goggles",
-    "going",
-    "goldfish",
-    "gone",
-    "goodbye",
-    "gopher",
-    "gorilla",
-    "gossip",
-    "gotten",
-    "gourmet",
-    "governing",
-    "gown",
-    "greater",
-    "grunt",
-    "guarded",
-    "guest",
-    "guide",
-    "gulp",
-    "gumball",
-    "guru",
-    "gusts",
-    "gutter",
-    "guys",
-    "gymnast",
-    "gypsy",
-    "gyrate",
-    "habitat",
-    "hacksaw",
-    "haggled",
-    "hairy",
-    "hamburger",
-    "happens",
-    "hashing",
-    "hatchet",
-    "haunted",
-    "having",
-    "hawk",
-    "haystack",
-    "hazard",
-    "hectare",
-    "hedgehog",
-    "heels",
-    "hefty",
-    "height",
-    "hemlock",
-    "hence",
-    "heron",
-    "hesitate",
-    "hexagon",
-    "hickory",
-    "hiding",
-    "highway",
-    "hijack",
-    "hiker",
-    "hills",
-    "himself",
-    "hinder",
-    "hippo",
-    "hire",
-    "history",
-    "hitched",
-    "hive",
-    "hoax",
-    "hobby",
-    "hockey",
-    "hoisting",
-    "hold",
-    "honked",
-    "hookup",
-    "hope",
-    "hornet",
-    "hospital",
-    "hotel",
-    "hounded",
-    "hover",
-    "howls",
-    "hubcaps",
-    "huddle",
-    "huge",
-    "hull",
-    "humid",
-    "hunter",
-    "hurried",
-    "husband",
-    "huts",
-    "hybrid",
-    "hydrogen",
-    "hyper",
-    "iceberg",
-    "icing",
-    "icon",
-    "identity",
-    "idiom",
-    "idled",
-    "idols",
-    "igloo",
-    "ignore",
-    "iguana",
-    "illness",
-    "imagine",
-    "imbalance",
-    "imitate",
-    "impel",
-    "inactive",
-    "inbound",
-    "incur",
-    "industrial",
-    "inexact",
-    "inflamed",
-    "ingested",
-    "initiate",
-    "injury",
-    "inkling",
-    "inline",
-    "inmate",
-    "innocent",
-    "inorganic",
-    "input",
-    "inquest",
-    "inroads",
-    "insult",
-    "intended",
-    "inundate",
-    "invoke",
-    "inwardly",
-    "ionic",
-    "irate",
-    "iris",
-    "irony",
-    "irritate",
-    "island",
-    "isolated",
-    "issued",
-    "italics",
-    "itches",
-    "items",
-    "itinerary",
-    "itself",
-    "ivory",
-    "jabbed",
-    "jackets",
-    "jaded",
-    "jagged",
-    "jailed",
-    "jamming",
-    "january",
-    "jargon",
-    "jaunt",
-    "javelin",
-    "jaws",
-    "jazz",
-    "jeans",
-    "jeers",
-    "jellyfish",
-    "jeopardy",
-    "jerseys",
-    "jester",
-    "jetting",
-    "jewels",
-    "jigsaw",
-    "jingle",
-    "jittery",
-    "jive",
-    "jobs",
-    "jockey",
-    "jogger",
-    "joining",
-    "joking",
-    "jolted",
-    "jostle",
-    "journal",
-    "joyous",
-    "jubilee",
-    "judge",
-    "juggled",
-    "juicy",
-    "jukebox",
-    "july",
-    "jump",
-    "junk",
-    "jury",
-    "justice",
-    "juvenile",
-    "kangaroo",
-    "karate",
-    "keep",
-    "kennel",
-    "kept",
-    "kernels",
-    "kettle",
-    "keyboard",
-    "kickoff",
-    "kidneys",
-    "king",
-    "kiosk",
-    "kisses",
-    "kitchens",
-    "kiwi",
-    "knapsack",
-    "knee",
-    "knife",
-    "knowledge",
-    "knuckle",
-    "koala",
-    "laboratory",
-    "ladder",
-    "lagoon",
-    "lair",
-    "lakes",
-    "lamb",
-    "language",
-    "laptop",
-    "large",
-    "last",
-    "later",
-    "launching",
-    "lava",
-    "lawsuit",
-    "layout",
-    "lazy",
-    "lectures",
-    "ledge",
-    "leech",
-    "left",
-    "legion",
-    "leisure",
-    "lemon",
-    "lending",
-    "leopard",
-    "lesson",
-    "lettuce",
-    "lexicon",
-    "liar",
-    "library",
-    "licks",
-    "lids",
-    "lied",
-    "lifestyle",
-    "light",
-    "likewise",
-    "lilac",
-    "limits",
-    "linen",
-    "lion",
-    "lipstick",
-    "liquid",
-    "listen",
-    "lively",
-    "loaded",
-    "lobster",
-    "locker",
-    "lodge",
-    "lofty",
-    "logic",
-    "loincloth",
-    "long",
-    "looking",
-    "lopped",
-    "lordship",
-    "losing",
-    "lottery",
-    "loudly",
-    "love",
-    "lower",
-    "loyal",
-    "lucky",
-    "luggage",
-    "lukewarm",
-    "lullaby",
-    "lumber",
-    "lunar",
-    "lurk",
-    "lush",
-    "luxury",
-    "lymph",
-    "lynx",
-    "lyrics",
-    "macro",
-    "madness",
-    "magically",
-    "mailed",
-    "major",
-    "makeup",
-    "malady",
-    "mammal",
-    "maps",
-    "masterful",
-    "match",
-    "maul",
-    "maverick",
-    "maximum",
-    "mayor",
-    "maze",
-    "meant",
-    "mechanic",
-    "medicate",
-    "meeting",
-    "megabyte",
-    "melting",
-    "memoir",
-    "menu",
-    "merger",
-    "mesh",
-    "metro",
-    "mews",
-    "mice",
-    "midst",
-    "mighty",
-    "mime",
-    "mirror",
-    "misery",
-    "mittens",
-    "mixture",
-    "moat",
-    "mobile",
-    "mocked",
-    "mohawk",
-    "moisture",
-    "molten",
-    "moment",
-    "money",
-    "moon",
-    "mops",
-    "morsel",
-    "mostly",
-    "motherly",
-    "mouth",
-    "movement",
-    "mowing",
-    "much",
-    "muddy",
-    "muffin",
-    "mugged",
-    "mullet",
-    "mumble",
-    "mundane",
-    "muppet",
-    "mural",
-    "musical",
-    "muzzle",
-    "myriad",
-    "mystery",
-    "myth",
-    "nabbing",
-    "nagged",
-    "nail",
-    "names",
-    "nanny",
-    "napkin",
-    "narrate",
-    "nasty",
-    "natural",
-    "nautical",
-    "navy",
-    "nearby",
-    "necklace",
-    "needed",
-    "negative",
-    "neither",
-    "neon",
-    "nephew",
-    "nerves",
-    "nestle",
-    "network",
-    "neutral",
-    "never",
-    "newt",
-    "nexus",
-    "nibs",
-    "niche",
-    "niece",
-    "nifty",
-    "nightly",
-    "nimbly",
-    "nineteen",
-    "nirvana",
-    "nitrogen",
-    "nobody",
-    "nocturnal",
-    "nodes",
-    "noises",
-    "nomad",
-    "noodles",
-    "northern",
-    "nostril",
-    "noted",
-    "nouns",
-    "novelty",
-    "nowhere",
-    "nozzle",
-    "nuance",
-    "nucleus",
-    "nudged",
-    "nugget",
-    "nuisance",
-    "null",
-    "number",
-    "nuns",
-    "nurse",
-    "nutshell",
-    "nylon",
-    "oaks",
-    "oars",
-    "oasis",
-    "oatmeal",
-    "obedient",
-    "object",
-    "obliged",
-    "obnoxious",
-    "observant",
-    "obtains",
-    "obvious",
-    "occur",
-    "ocean",
-    "october",
-    "odds",
-    "odometer",
-    "offend",
-    "often",
-    "oilfield",
-    "ointment",
-    "okay",
-    "older",
-    "olive",
-    "olympics",
-    "omega",
-    "omission",
-    "omnibus",
-    "onboard",
-    "oncoming",
-    "oneself",
-    "ongoing",
-    "onion",
-    "online",
-    "onslaught",
-    "onto",
-    "onward",
-    "oozed",
-    "opacity",
-    "opened",
-    "opposite",
-    "optical",
-    "opus",
-    "orange",
-    "orbit",
-    "orchid",
-    "orders",
-    "organs",
-    "origin",
-    "ornament",
-    "orphans",
-    "oscar",
-    "ostrich",
-    "otherwise",
-    "otter",
-    "ouch",
-    "ought",
-    "ounce",
-    "ourselves",
-    "oust",
-    "outbreak",
-    "oval",
-    "oven",
-    "owed",
-    "owls",
-    "owner",
-    "oxidant",
-    "oxygen",
-    "oyster",
-    "ozone",
-    "pact",
-    "paddles",
-    "pager",
-    "pairing",
-    "palace",
-    "pamphlet",
-    "pancakes",
-    "paper",
-    "paradise",
-    "pastry",
-    "patio",
-    "pause",
-    "pavements",
-    "pawnshop",
-    "payment",
-    "peaches",
-    "pebbles",
-    "peculiar",
-    "pedantic",
-    "peeled",
-    "pegs",
-    "pelican",
-    "pencil",
-    "people",
-    "pepper",
-    "perfect",
-    "pests",
-    "petals",
-    "phase",
-    "pheasants",
-    "phone",
-    "phrases",
-    "physics",
-    "piano",
-    "picked",
-    "pierce",
-    "pigment",
-    "piloted",
-    "pimple",
-    "pinched",
-    "pioneer",
-    "pipeline",
-    "pirate",
-    "pistons",
-    "pitched",
-    "pivot",
-    "pixels",
-    "pizza",
-    "playful",
-    "pledge",
-    "pliers",
-    "plotting",
-    "plus",
-    "plywood",
-    "poaching",
-    "pockets",
-    "podcast",
-    "poetry",
-    "point",
-    "poker",
-    "polar",
-    "ponies",
-    "pool",
-    "popular",
-    "portents",
-    "possible",
-    "potato",
-    "pouch",
-    "poverty",
-    "powder",
-    "pram",
-    "present",
-    "pride",
-    "problems",
-    "pruned",
-    "prying",
-    "psychic",
-    "public",
-    "puck",
-    "puddle",
-    "puffin",
-    "pulp",
-    "pumpkins",
-    "punch",
-    "puppy",
-    "purged",
-    "push",
-    "putty",
-    "puzzled",
-    "pylons",
-    "pyramid",
-    "python",
-    "queen",
-    "quick",
-    "quote",
-    "rabbits",
-    "racetrack",
-    "radar",
-    "rafts",
-    "rage",
-    "railway",
-    "raking",
-    "rally",
-    "ramped",
-    "randomly",
-    "rapid",
-    "rarest",
-    "rash",
-    "rated",
-    "ravine",
-    "rays",
-    "razor",
-    "react",
-    "rebel",
-    "recipe",
-    "reduce",
-    "reef",
-    "refer",
-    "regular",
-    "reheat",
-    "reinvest",
-    "rejoices",
-    "rekindle",
-    "relic",
-    "remedy",
-    "renting",
-    "reorder",
-    "repent",
-    "request",
-    "reruns",
-    "rest",
-    "return",
-    "reunion",
-    "revamp",
-    "rewind",
-    "rhino",
-    "rhythm",
-    "ribbon",
-    "richly",
-    "ridges",
-    "rift",
-    "rigid",
-    "rims",
-    "ringing",
-    "riots",
-    "ripped",
-    "rising",
-    "ritual",
-    "river",
-    "roared",
-    "robot",
-    "rockets",
-    "rodent",
-    "rogue",
-    "roles",
-    "romance",
-    "roomy",
-    "roped",
-    "roster",
-    "rotate",
-    "rounded",
-    "rover",
-    "rowboat",
-    "royal",
-    "ruby",
-    "rudely",
-    "ruffled",
-    "rugged",
-    "ruined",
-    "ruling",
-    "rumble",
-    "runway",
-    "rural",
-    "rustled",
-    "ruthless",
-    "sabotage",
-    "sack",
-    "sadness",
-    "safety",
-    "saga",
-    "sailor",
-    "sake",
-    "salads",
-    "sample",
-    "sanity",
-    "sapling",
-    "sarcasm",
-    "sash",
-    "satin",
-    "saucepan",
-    "saved",
-    "sawmill",
-    "saxophone",
-    "sayings",
-    "scamper",
-    "scenic",
-    "school",
-    "science",
-    "scoop",
-    "scrub",
-    "scuba",
-    "seasons",
-    "second",
-    "sedan",
-    "seeded",
-    "segments",
-    "seismic",
-    "selfish",
-    "semifinal",
-    "sensible",
-    "september",
-    "sequence",
-    "serving",
-    "session",
-    "setup",
-    "seventh",
-    "sewage",
-    "shackles",
-    "shelter",
-    "shipped",
-    "shocking",
-    "shrugged",
-    "shuffled",
-    "shyness",
-    "siblings",
-    "sickness",
-    "sidekick",
-    "sieve",
-    "sifting",
-    "sighting",
-    "silk",
-    "simplest",
-    "sincerely",
-    "sipped",
-    "siren",
-    "situated",
-    "sixteen",
-    "sizes",
-    "skater",
-    "skew",
-    "skirting",
-    "skulls",
-    "skydive",
-    "slackens",
-    "sleepless",
-    "slid",
-    "slower",
-    "slug",
-    "smash",
-    "smelting",
-    "smidgen",
-    "smog",
-    "smuggled",
-    "snake",
-    "sneeze",
-    "sniff",
-    "snout",
-    "snug",
-    "soapy",
-    "sober",
-    "soccer",
-    "soda",
-    "software",
-    "soggy",
-    "soil",
-    "solved",
-    "somewhere",
-    "sonic",
-    "soothe",
-    "soprano",
-    "sorry",
-    "southern",
-    "sovereign",
-    "sowed",
-    "soya",
-    "space",
-    "speedy",
-    "sphere",
-    "spiders",
-    "splendid",
-    "spout",
-    "sprig",
-    "spud",
-    "spying",
-    "square",
-    "stacking",
-    "stellar",
-    "stick",
-    "stockpile",
-    "strained",
-    "stunning",
-    "stylishly",
-    "subtly",
-    "succeed",
-    "suddenly",
-    "suede",
-    "suffice",
-    "sugar",
-    "suitcase",
-    "sulking",
-    "summon",
-    "sunken",
-    "superior",
-    "surfer",
-    "sushi",
-    "suture",
-    "swagger",
-    "swept",
-    "swiftly",
-    "sword",
-    "swung",
-    "syllabus",
-    "symptoms",
-    "syndrome",
-    "syringe",
-    "system",
-    "taboo",
-    "tacit",
-    "tadpoles",
-    "tagged",
-    "tail",
-    "taken",
-    "talent",
-    "tamper",
-    "tanks",
-    "tapestry",
-    "tarnished",
-    "tasked",
-    "tattoo",
-    "taunts",
-    "tavern",
-    "tawny",
-    "taxi",
-    "teardrop",
-    "technical",
-    "tedious",
-    "teeming",
-    "tell",
-    "template",
-    "tender",
-    "tepid",
-    "tequila",
-    "terminal",
-    "testing",
-    "tether",
-    "textbook",
-    "thaw",
-    "theatrics",
-    "thirsty",
-    "thorn",
-    "threaten",
-    "thumbs",
-    "thwart",
-    "ticket",
-    "tidy",
-    "tiers",
-    "tiger",
-    "tilt",
-    "timber",
-    "tinted",
-    "tipsy",
-    "tirade",
-    "tissue",
-    "titans",
-    "toaster",
-    "tobacco",
-    "today",
-    "toenail",
-    "toffee",
-    "together",
-    "toilet",
-    "token",
-    "tolerant",
-    "tomorrow",
-    "tonic",
-    "toolbox",
-    "topic",
-    "torch",
-    "tossed",
-    "total",
-    "touchy",
-    "towel",
-    "toxic",
-    "toyed",
-    "trash",
-    "trendy",
-    "tribal",
-    "trolling",
-    "truth",
-    "trying",
-    "tsunami",
-    "tubes",
-    "tucks",
-    "tudor",
-    "tuesday",
-    "tufts",
-    "tugs",
-    "tuition",
-    "tulips",
-    "tumbling",
-    "tunnel",
-    "turnip",
-    "tusks",
-    "tutor",
-    "tuxedo",
-    "twang",
-    "tweezers",
-    "twice",
-    "twofold",
-    "tycoon",
-    "typist",
-    "tyrant",
-    "ugly",
-    "ulcers",
-    "ultimate",
-    "umbrella",
-    "umpire",
-    "unafraid",
-    "unbending",
-    "uncle",
-    "under",
-    "uneven",
-    "unfit",
-    "ungainly",
-    "unhappy",
-    "union",
-    "unjustly",
-    "unknown",
-    "unlikely",
-    "unmask",
-    "unnoticed",
-    "unopened",
-    "unplugs",
-    "unquoted",
-    "unrest",
-    "unsafe",
-    "until",
-    "unusual",
-    "unveil",
-    "unwind",
-    "unzip",
-    "upbeat",
-    "upcoming",
-    "update",
-    "upgrade",
-    "uphill",
-    "upkeep",
-    "upload",
-    "upon",
-    "upper",
-    "upright",
-    "upstairs",
-    "uptight",
-    "upwards",
-    "urban",
-    "urchins",
-    "urgent",
-    "usage",
-    "useful",
-    "usher",
-    "using",
-    "usual",
-    "utensils",
-    "utility",
-    "utmost",
-    "utopia",
-    "uttered",
-    "vacation",
-    "vague",
-    "vain",
-    "value",
-    "vampire",
-    "vane",
-    "vapidly",
-    "vary",
-    "vastness",
-    "vats",
-    "vaults",
-    "vector",
-    "veered",
-    "vegan",
-    "vehicle",
-    "vein",
-    "velvet",
-    "venomous",
-    "verification",
-    "vessel",
-    "veteran",
-    "vexed",
-    "vials",
-    "vibrate",
-    "victim",
-    "video",
-    "viewpoint",
-    "vigilant",
-    "viking",
-    "village",
-    "vinegar",
-    "violin",
-    "vipers",
-    "virtual",
-    "visited",
-    "vitals",
-    "vivid",
-    "vixen",
-    "vocal",
-    "vogue",
-    "voice",
-    "volcano",
-    "vortex",
-    "voted",
-    "voucher",
-    "vowels",
-    "voyage",
-    "vulture",
-    "wade",
-    "waffle",
-    "wagtail",
-    "waist",
-    "waking",
-    "wallets",
-    "wanted",
-    "warped",
-    "washing",
-    "water",
-    "waveform",
-    "waxing",
-    "wayside",
-    "weavers",
-    "website",
-    "wedge",
-    "weekday",
-    "weird",
-    "welders",
-    "went",
-    "wept",
-    "were",
-    "western",
-    "wetsuit",
-    "whale",
-    "when",
-    "whipped",
-    "whole",
-    "wickets",
-    "width",
-    "wield",
-    "wife",
-    "wiggle",
-    "wildly",
-    "winter",
-    "wipeout",
-    "wiring",
-    "wise",
-    "withdrawn",
-    "wives",
-    "wizard",
-    "wobbly",
-    "woes",
-    "woken",
-    "wolf",
-    "womanly",
-    "wonders",
-    "woozy",
-    "worry",
-    "wounded",
-    "woven",
-    "wrap",
-    "wrist",
-    "wrong",
-    "yacht",
-    "yahoo",
-    "yanks",
-    "yard",
-    "yawning",
-    "yearbook",
-    "yellow",
-    "yesterday",
-    "yeti",
-    "yields",
-    "yodel",
-    "yoga",
-    "younger",
-    "yoyo",
-    "zapped",
-    "zeal",
-    "zebra",
-    "zero",
-    "zesty",
-    "zigzags",
-    "zinger",
-    "zippers",
-    "zodiac",
-    "zombie",
-    "zones",
-    "zoom"
-  ];
-}
diff --git a/cw_haven/lib/mnemonics/french.dart b/cw_haven/lib/mnemonics/french.dart
deleted file mode 100644
index 76d556f6a..000000000
--- a/cw_haven/lib/mnemonics/french.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class FrenchMnemonics {
-	static const words = [
-	   "abandon",
-        "abattre",
-        "aboi",
-        "abolir",
-        "aborder",
-        "abri",
-        "absence",
-        "absolu",
-        "abuser",
-        "acacia",
-        "acajou",
-        "accent",
-        "accord",
-        "accrocher",
-        "accuser",
-        "acerbe",
-        "achat",
-        "acheter",
-        "acide",
-        "acier",
-        "acquis",
-        "acte",
-        "action",
-        "adage",
-        "adepte",
-        "adieu",
-        "admettre",
-        "admis",
-        "adorer",
-        "adresser",
-        "aduler",
-        "affaire",
-        "affirmer",
-        "afin",
-        "agacer",
-        "agent",
-        "agir",
-        "agiter",
-        "agonie",
-        "agrafe",
-        "agrume",
-        "aider",
-        "aigle",
-        "aigre",
-        "aile",
-        "ailleurs",
-        "aimant",
-        "aimer",
-        "ainsi",
-        "aise",
-        "ajouter",
-        "alarme",
-        "album",
-        "alcool",
-        "alerte",
-        "algue",
-        "alibi",
-        "aller",
-        "allumer",
-        "alors",
-        "amande",
-        "amener",
-        "amie",
-        "amorcer",
-        "amour",
-        "ample",
-        "amuser",
-        "ananas",
-        "ancien",
-        "anglais",
-        "angoisse",
-        "animal",
-        "anneau",
-        "annoncer",
-        "apercevoir",
-        "apparence",
-        "appel",
-        "apporter",
-        "apprendre",
-        "appuyer",
-        "arbre",
-        "arcade",
-        "arceau",
-        "arche",
-        "ardeur",
-        "argent",
-        "argile",
-        "aride",
-        "arme",
-        "armure",
-        "arracher",
-        "arriver",
-        "article",
-        "asile",
-        "aspect",
-        "assaut",
-        "assez",
-        "assister",
-        "assurer",
-        "astre",
-        "astuce",
-        "atlas",
-        "atroce",
-        "attacher",
-        "attente",
-        "attirer",
-        "aube",
-        "aucun",
-        "audace",
-        "auparavant",
-        "auquel",
-        "aurore",
-        "aussi",
-        "autant",
-        "auteur",
-        "autoroute",
-        "autre",
-        "aval",
-        "avant",
-        "avec",
-        "avenir",
-        "averse",
-        "aveu",
-        "avide",
-        "avion",
-        "avis",
-        "avoir",
-        "avouer",
-        "avril",
-        "azote",
-        "azur",
-        "badge",
-        "bagage",
-        "bague",
-        "bain",
-        "baisser",
-        "balai",
-        "balcon",
-        "balise",
-        "balle",
-        "bambou",
-        "banane",
-        "banc",
-        "bandage",
-        "banjo",
-        "banlieue",
-        "bannir",
-        "banque",
-        "baobab",
-        "barbe",
-        "barque",
-        "barrer",
-        "bassine",
-        "bataille",
-        "bateau",
-        "battre",
-        "baver",
-        "bavoir",
-        "bazar",
-        "beau",
-        "beige",
-        "berger",
-        "besoin",
-        "beurre",
-        "biais",
-        "biceps",
-        "bidule",
-        "bien",
-        "bijou",
-        "bilan",
-        "billet",
-        "blanc",
-        "blason",
-        "bleu",
-        "bloc",
-        "blond",
-        "bocal",
-        "boire",
-        "boiserie",
-        "boiter",
-        "bonbon",
-        "bondir",
-        "bonheur",
-        "bordure",
-        "borgne",
-        "borner",
-        "bosse",
-        "bouche",
-        "bouder",
-        "bouger",
-        "boule",
-        "bourse",
-        "bout",
-        "boxe",
-        "brader",
-        "braise",
-        "branche",
-        "braquer",
-        "bras",
-        "brave",
-        "brebis",
-        "brevet",
-        "brider",
-        "briller",
-        "brin",
-        "brique",
-        "briser",
-        "broche",
-        "broder",
-        "bronze",
-        "brosser",
-        "brouter",
-        "bruit",
-        "brute",
-        "budget",
-        "buffet",
-        "bulle",
-        "bureau",
-        "buriner",
-        "buste",
-        "buter",
-        "butiner",
-        "cabas",
-        "cabinet",
-        "cabri",
-        "cacao",
-        "cacher",
-        "cadeau",
-        "cadre",
-        "cage",
-        "caisse",
-        "caler",
-        "calme",
-        "camarade",
-        "camion",
-        "campagne",
-        "canal",
-        "canif",
-        "capable",
-        "capot",
-        "carat",
-        "caresser",
-        "carie",
-        "carpe",
-        "cartel",
-        "casier",
-        "casque",
-        "casserole",
-        "cause",
-        "cavale",
-        "cave",
-        "ceci",
-        "cela",
-        "celui",
-        "cendre",
-        "cent",
-        "cependant",
-        "cercle",
-        "cerise",
-        "cerner",
-        "certes",
-        "cerveau",
-        "cesser",
-        "chacun",
-        "chair",
-        "chaleur",
-        "chamois",
-        "chanson",
-        "chaque",
-        "charge",
-        "chasse",
-        "chat",
-        "chaud",
-        "chef",
-        "chemin",
-        "cheveu",
-        "chez",
-        "chicane",
-        "chien",
-        "chiffre",
-        "chiner",
-        "chiot",
-        "chlore",
-        "choc",
-        "choix",
-        "chose",
-        "chou",
-        "chute",
-        "cibler",
-        "cidre",
-        "ciel",
-        "cigale",
-        "cinq",
-        "cintre",
-        "cirage",
-        "cirque",
-        "ciseau",
-        "citation",
-        "citer",
-        "citron",
-        "civet",
-        "clairon",
-        "clan",
-        "classe",
-        "clavier",
-        "clef",
-        "climat",
-        "cloche",
-        "cloner",
-        "clore",
-        "clos",
-        "clou",
-        "club",
-        "cobra",
-        "cocon",
-        "coiffer",
-        "coin",
-        "colline",
-        "colon",
-        "combat",
-        "comme",
-        "compte",
-        "conclure",
-        "conduire",
-        "confier",
-        "connu",
-        "conseil",
-        "contre",
-        "convenir",
-        "copier",
-        "cordial",
-        "cornet",
-        "corps",
-        "cosmos",
-        "coton",
-        "couche",
-        "coude",
-        "couler",
-        "coupure",
-        "cour",
-        "couteau",
-        "couvrir",
-        "crabe",
-        "crainte",
-        "crampe",
-        "cran",
-        "creuser",
-        "crever",
-        "crier",
-        "crime",
-        "crin",
-        "crise",
-        "crochet",
-        "croix",
-        "cruel",
-        "cuisine",
-        "cuite",
-        "culot",
-        "culte",
-        "cumul",
-        "cure",
-        "curieux",
-        "cuve",
-        "dame",
-        "danger",
-        "dans",
-        "davantage",
-        "debout",
-        "dedans",
-        "dehors",
-        "delta",
-        "demain",
-        "demeurer",
-        "demi",
-        "dense",
-        "dent",
-        "depuis",
-        "dernier",
-        "descendre",
-        "dessus",
-        "destin",
-        "dette",
-        "deuil",
-        "deux",
-        "devant",
-        "devenir",
-        "devin",
-        "devoir",
-        "dicton",
-        "dieu",
-        "difficile",
-        "digestion",
-        "digue",
-        "diluer",
-        "dimanche",
-        "dinde",
-        "diode",
-        "dire",
-        "diriger",
-        "discours",
-        "disposer",
-        "distance",
-        "divan",
-        "divers",
-        "docile",
-        "docteur",
-        "dodu",
-        "dogme",
-        "doigt",
-        "dominer",
-        "donation",
-        "donjon",
-        "donner",
-        "dopage",
-        "dorer",
-        "dormir",
-        "doseur",
-        "douane",
-        "double",
-        "douche",
-        "douleur",
-        "doute",
-        "doux",
-        "douzaine",
-        "draguer",
-        "drame",
-        "drap",
-        "dresser",
-        "droit",
-        "duel",
-        "dune",
-        "duper",
-        "durant",
-        "durcir",
-        "durer",
-        "eaux",
-        "effacer",
-        "effet",
-        "effort",
-        "effrayant",
-        "elle",
-        "embrasser",
-        "emmener",
-        "emparer",
-        "empire",
-        "employer",
-        "emporter",
-        "enclos",
-        "encore",
-        "endive",
-        "endormir",
-        "endroit",
-        "enduit",
-        "enfant",
-        "enfermer",
-        "enfin",
-        "enfler",
-        "enfoncer",
-        "enfuir",
-        "engager",
-        "engin",
-        "enjeu",
-        "enlever",
-        "ennemi",
-        "ennui",
-        "ensemble",
-        "ensuite",
-        "entamer",
-        "entendre",
-        "entier",
-        "entourer",
-        "entre",
-        "envelopper",
-        "envie",
-        "envoyer",
-        "erreur",
-        "escalier",
-        "espace",
-        "espoir",
-        "esprit",
-        "essai",
-        "essor",
-        "essuyer",
-        "estimer",
-        "exact",
-        "examiner",
-        "excuse",
-        "exemple",
-        "exiger",
-        "exil",
-        "exister",
-        "exode",
-        "expliquer",
-        "exposer",
-        "exprimer",
-        "extase",
-        "fable",
-        "facette",
-        "facile",
-        "fade",
-        "faible",
-        "faim",
-        "faire",
-        "fait",
-        "falloir",
-        "famille",
-        "faner",
-        "farce",
-        "farine",
-        "fatigue",
-        "faucon",
-        "faune",
-        "faute",
-        "faux",
-        "faveur",
-        "favori",
-        "faxer",
-        "feinter",
-        "femme",
-        "fendre",
-        "fente",
-        "ferme",
-        "festin",
-        "feuille",
-        "feutre",
-        "fiable",
-        "fibre",
-        "ficher",
-        "fier",
-        "figer",
-        "figure",
-        "filet",
-        "fille",
-        "filmer",
-        "fils",
-        "filtre",
-        "final",
-        "finesse",
-        "finir",
-        "fiole",
-        "firme",
-        "fixe",
-        "flacon",
-        "flair",
-        "flamme",
-        "flan",
-        "flaque",
-        "fleur",
-        "flocon",
-        "flore",
-        "flot",
-        "flou",
-        "fluide",
-        "fluor",
-        "flux",
-        "focus",
-        "foin",
-        "foire",
-        "foison",
-        "folie",
-        "fonction",
-        "fondre",
-        "fonte",
-        "force",
-        "forer",
-        "forger",
-        "forme",
-        "fort",
-        "fosse",
-        "fouet",
-        "fouine",
-        "foule",
-        "four",
-        "foyer",
-        "frais",
-        "franc",
-        "frapper",
-        "freiner",
-        "frimer",
-        "friser",
-        "frite",
-        "froid",
-        "froncer",
-        "fruit",
-        "fugue",
-        "fuir",
-        "fuite",
-        "fumer",
-        "fureur",
-        "furieux",
-        "fuser",
-        "fusil",
-        "futile",
-        "futur",
-        "gagner",
-        "gain",
-        "gala",
-        "galet",
-        "galop",
-        "gamme",
-        "gant",
-        "garage",
-        "garde",
-        "garer",
-        "gauche",
-        "gaufre",
-        "gaule",
-        "gaver",
-        "gazon",
-        "geler",
-        "genou",
-        "genre",
-        "gens",
-        "gercer",
-        "germer",
-        "geste",
-        "gibier",
-        "gicler",
-        "gilet",
-        "girafe",
-        "givre",
-        "glace",
-        "glisser",
-        "globe",
-        "gloire",
-        "gluant",
-        "gober",
-        "golf",
-        "gommer",
-        "gorge",
-        "gosier",
-        "goutte",
-        "grain",
-        "gramme",
-        "grand",
-        "gras",
-        "grave",
-        "gredin",
-        "griffure",
-        "griller",
-        "gris",
-        "gronder",
-        "gros",
-        "grotte",
-        "groupe",
-        "grue",
-        "guerrier",
-        "guetter",
-        "guider",
-        "guise",
-        "habiter",
-        "hache",
-        "haie",
-        "haine",
-        "halte",
-        "hamac",
-        "hanche",
-        "hangar",
-        "hanter",
-        "haras",
-        "hareng",
-        "harpe",
-        "hasard",
-        "hausse",
-        "haut",
-        "havre",
-        "herbe",
-        "heure",
-        "hibou",
-        "hier",
-        "histoire",
-        "hiver",
-        "hochet",
-        "homme",
-        "honneur",
-        "honte",
-        "horde",
-        "horizon",
-        "hormone",
-        "houle",
-        "housse",
-        "hublot",
-        "huile",
-        "huit",
-        "humain",
-        "humble",
-        "humide",
-        "humour",
-        "hurler",
-        "idole",
-        "igloo",
-        "ignorer",
-        "illusion",
-        "image",
-        "immense",
-        "immobile",
-        "imposer",
-        "impression",
-        "incapable",
-        "inconnu",
-        "index",
-        "indiquer",
-        "infime",
-        "injure",
-        "inox",
-        "inspirer",
-        "instant",
-        "intention",
-        "intime",
-        "inutile",
-        "inventer",
-        "inviter",
-        "iode",
-        "iris",
-        "issue",
-        "ivre",
-        "jade",
-        "jadis",
-        "jamais",
-        "jambe",
-        "janvier",
-        "jardin",
-        "jauge",
-        "jaunisse",
-        "jeter",
-        "jeton",
-        "jeudi",
-        "jeune",
-        "joie",
-        "joindre",
-        "joli",
-        "joueur",
-        "journal",
-        "judo",
-        "juge",
-        "juillet",
-        "juin",
-        "jument",
-        "jungle",
-        "jupe",
-        "jupon",
-        "jurer",
-        "juron",
-        "jury",
-        "jusque",
-        "juste",
-        "kayak",
-        "ketchup",
-        "kilo",
-        "kiwi",
-        "koala",
-        "label",
-        "lacet",
-        "lacune",
-        "laine",
-        "laisse",
-        "lait",
-        "lame",
-        "lancer",
-        "lande",
-        "laque",
-        "lard",
-        "largeur",
-        "larme",
-        "larve",
-        "lasso",
-        "laver",
-        "lendemain",
-        "lentement",
-        "lequel",
-        "lettre",
-        "leur",
-        "lever",
-        "levure",
-        "liane",
-        "libre",
-        "lien",
-        "lier",
-        "lieutenant",
-        "ligne",
-        "ligoter",
-        "liguer",
-        "limace",
-        "limer",
-        "limite",
-        "lingot",
-        "lion",
-        "lire",
-        "lisser",
-        "litre",
-        "livre",
-        "lobe",
-        "local",
-        "logis",
-        "loin",
-        "loisir",
-        "long",
-        "loque",
-        "lors",
-        "lotus",
-        "louer",
-        "loup",
-        "lourd",
-        "louve",
-        "loyer",
-        "lubie",
-        "lucide",
-        "lueur",
-        "luge",
-        "luire",
-        "lundi",
-        "lune",
-        "lustre",
-        "lutin",
-        "lutte",
-        "luxe",
-        "machine",
-        "madame",
-        "magie",
-        "magnifique",
-        "magot",
-        "maigre",
-        "main",
-        "mairie",
-        "maison",
-        "malade",
-        "malheur",
-        "malin",
-        "manche",
-        "manger",
-        "manier",
-        "manoir",
-        "manquer",
-        "marche",
-        "mardi",
-        "marge",
-        "mariage",
-        "marquer",
-        "mars",
-        "masque",
-        "masse",
-        "matin",
-        "mauvais",
-        "meilleur",
-        "melon",
-        "membre",
-        "menacer",
-        "mener",
-        "mensonge",
-        "mentir",
-        "menu",
-        "merci",
-        "merlu",
-        "mesure",
-        "mettre",
-        "meuble",
-        "meunier",
-        "meute",
-        "miche",
-        "micro",
-        "midi",
-        "miel",
-        "miette",
-        "mieux",
-        "milieu",
-        "mille",
-        "mimer",
-        "mince",
-        "mineur",
-        "ministre",
-        "minute",
-        "mirage",
-        "miroir",
-        "miser",
-        "mite",
-        "mixte",
-        "mobile",
-        "mode",
-        "module",
-        "moins",
-        "mois",
-        "moment",
-        "momie",
-        "monde",
-        "monsieur",
-        "monter",
-        "moquer",
-        "moral",
-        "morceau",
-        "mordre",
-        "morose",
-        "morse",
-        "mortier",
-        "morue",
-        "motif",
-        "motte",
-        "moudre",
-        "moule",
-        "mourir",
-        "mousse",
-        "mouton",
-        "mouvement",
-        "moyen",
-        "muer",
-        "muette",
-        "mugir",
-        "muguet",
-        "mulot",
-        "multiple",
-        "munir",
-        "muret",
-        "muse",
-        "musique",
-        "muter",
-        "nacre",
-        "nager",
-        "nain",
-        "naissance",
-        "narine",
-        "narrer",
-        "naseau",
-        "nasse",
-        "nation",
-        "nature",
-        "naval",
-        "navet",
-        "naviguer",
-        "navrer",
-        "neige",
-        "nerf",
-        "nerveux",
-        "neuf",
-        "neutre",
-        "neuve",
-        "neveu",
-        "niche",
-        "nier",
-        "niveau",
-        "noble",
-        "noce",
-        "nocif",
-        "noir",
-        "nomade",
-        "nombre",
-        "nommer",
-        "nord",
-        "norme",
-        "notaire",
-        "notice",
-        "notre",
-        "nouer",
-        "nougat",
-        "nourrir",
-        "nous",
-        "nouveau",
-        "novice",
-        "noyade",
-        "noyer",
-        "nuage",
-        "nuance",
-        "nuire",
-        "nuit",
-        "nulle",
-        "nuque",
-        "oasis",
-        "objet",
-        "obliger",
-        "obscur",
-        "observer",
-        "obtenir",
-        "obus",
-        "occasion",
-        "occuper",
-        "ocre",
-        "octet",
-        "odeur",
-        "odorat",
-        "offense",
-        "officier",
-        "offrir",
-        "ogive",
-        "oiseau",
-        "olive",
-        "ombre",
-        "onctueux",
-        "onduler",
-        "ongle",
-        "onze",
-        "opter",
-        "option",
-        "orageux",
-        "oral",
-        "orange",
-        "orbite",
-        "ordinaire",
-        "ordre",
-        "oreille",
-        "organe",
-        "orgie",
-        "orgueil",
-        "orient",
-        "origan",
-        "orner",
-        "orteil",
-        "ortie",
-        "oser",
-        "osselet",
-        "otage",
-        "otarie",
-        "ouate",
-        "oublier",
-        "ouest",
-        "ours",
-        "outil",
-        "outre",
-        "ouvert",
-        "ouvrir",
-        "ovale",
-        "ozone",
-        "pacte",
-        "page",
-        "paille",
-        "pain",
-        "paire",
-        "paix",
-        "palace",
-        "palissade",
-        "palmier",
-        "palpiter",
-        "panda",
-        "panneau",
-        "papa",
-        "papier",
-        "paquet",
-        "parc",
-        "pardi",
-        "parfois",
-        "parler",
-        "parmi",
-        "parole",
-        "partir",
-        "parvenir",
-        "passer",
-        "pastel",
-        "patin",
-        "patron",
-        "paume",
-        "pause",
-        "pauvre",
-        "paver",
-        "pavot",
-        "payer",
-        "pays",
-        "peau",
-        "peigne",
-        "peinture",
-        "pelage",
-        "pelote",
-        "pencher",
-        "pendre",
-        "penser",
-        "pente",
-        "percer",
-        "perdu",
-        "perle",
-        "permettre",
-        "personne",
-        "perte",
-        "peser",
-        "pesticide",
-        "petit",
-        "peuple",
-        "peur",
-        "phase",
-        "photo",
-        "phrase",
-        "piano",
-        "pied",
-        "pierre",
-        "pieu",
-        "pile",
-        "pilier",
-        "pilote",
-        "pilule",
-        "piment",
-        "pincer",
-        "pinson",
-        "pinte",
-        "pion",
-        "piquer",
-        "pirate",
-        "pire",
-        "piste",
-        "piton",
-        "pitre",
-        "pivot",
-        "pizza",
-        "placer",
-        "plage",
-        "plaire",
-        "plan",
-        "plaque",
-        "plat",
-        "plein",
-        "pleurer",
-        "pliage",
-        "plier",
-        "plonger",
-        "plot",
-        "pluie",
-        "plume",
-        "plus",
-        "pneu",
-        "poche",
-        "podium",
-        "poids",
-        "poil",
-        "point",
-        "poire",
-        "poison",
-        "poitrine",
-        "poivre",
-        "police",
-        "pollen",
-        "pomme",
-        "pompier",
-        "poncer",
-        "pondre",
-        "pont",
-        "portion",
-        "poser",
-        "position",
-        "possible",
-        "poste",
-        "potage",
-        "potin",
-        "pouce",
-        "poudre",
-        "poulet",
-        "poumon",
-        "poupe",
-        "pour",
-        "pousser",
-        "poutre",
-        "pouvoir",
-        "prairie",
-        "premier",
-        "prendre",
-        "presque",
-        "preuve",
-        "prier",
-        "primeur",
-        "prince",
-        "prison",
-        "priver",
-        "prix",
-        "prochain",
-        "produire",
-        "profond",
-        "proie",
-        "projet",
-        "promener",
-        "prononcer",
-        "propre",
-        "prose",
-        "prouver",
-        "prune",
-        "public",
-        "puce",
-        "pudeur",
-        "puiser",
-        "pull",
-        "pulpe",
-        "puma",
-        "punir",
-        "purge",
-        "putois",
-        "quand",
-        "quartier",
-        "quasi",
-        "quatre",
-        "quel",
-        "question",
-        "queue",
-        "quiche",
-        "quille",
-        "quinze",
-        "quitter",
-        "quoi",
-        "rabais",
-        "raboter",
-        "race",
-        "racheter",
-        "racine",
-        "racler",
-        "raconter",
-        "radar",
-        "radio",
-        "rafale",
-        "rage",
-        "ragot",
-        "raideur",
-        "raie",
-        "rail",
-        "raison",
-        "ramasser",
-        "ramener",
-        "rampe",
-        "rance",
-        "rang",
-        "rapace",
-        "rapide",
-        "rapport",
-        "rarement",
-        "rasage",
-        "raser",
-        "rasoir",
-        "rassurer",
-        "rater",
-        "ratio",
-        "rature",
-        "ravage",
-        "ravir",
-        "rayer",
-        "rayon",
-        "rebond",
-        "recevoir",
-        "recherche",
-        "record",
-        "reculer",
-        "redevenir",
-        "refuser",
-        "regard",
-        "regretter",
-        "rein",
-        "rejeter",
-        "rejoindre",
-        "relation",
-        "relever",
-        "religion",
-        "remarquer",
-        "remettre",
-        "remise",
-        "remonter",
-        "remplir",
-        "remuer",
-        "rencontre",
-        "rendre",
-        "renier",
-        "renoncer",
-        "rentrer",
-        "renverser",
-        "repas",
-        "repli",
-        "reposer",
-        "reproche",
-        "requin",
-        "respect",
-        "ressembler",
-        "reste",
-        "retard",
-        "retenir",
-        "retirer",
-        "retour",
-        "retrouver",
-        "revenir",
-        "revoir",
-        "revue",
-        "rhume",
-        "ricaner",
-        "riche",
-        "rideau",
-        "ridicule",
-        "rien",
-        "rigide",
-        "rincer",
-        "rire",
-        "risquer",
-        "rituel",
-        "rivage",
-        "rive",
-        "robe",
-        "robot",
-        "robuste",
-        "rocade",
-        "roche",
-        "rodeur",
-        "rogner",
-        "roman",
-        "rompre",
-        "ronce",
-        "rondeur",
-        "ronger",
-        "roque",
-        "rose",
-        "rosir",
-        "rotation",
-        "rotule",
-        "roue",
-        "rouge",
-        "rouler",
-        "route",
-        "ruban",
-        "rubis",
-        "ruche",
-        "rude",
-        "ruelle",
-        "ruer",
-        "rugby",
-        "rugir",
-        "ruine",
-        "rumeur",
-        "rural",
-        "ruse",
-        "rustre",
-        "sable",
-        "sabot",
-        "sabre",
-        "sacre",
-        "sage",
-        "saint",
-        "saisir",
-        "salade",
-        "salive",
-        "salle",
-        "salon",
-        "salto",
-        "salut",
-        "salve",
-        "samba",
-        "sandale",
-        "sanguin",
-        "sapin",
-        "sarcasme",
-        "satisfaire",
-        "sauce",
-        "sauf",
-        "sauge",
-        "saule",
-        "sauna",
-        "sauter",
-        "sauver",
-        "savoir",
-        "science",
-        "scoop",
-        "score",
-        "second",
-        "secret",
-        "secte",
-        "seigneur",
-        "sein",
-        "seize",
-        "selle",
-        "selon",
-        "semaine",
-        "sembler",
-        "semer",
-        "semis",
-        "sensuel",
-        "sentir",
-        "sept",
-        "serpe",
-        "serrer",
-        "sertir",
-        "service",
-        "seuil",
-        "seulement",
-        "short",
-        "sien",
-        "sigle",
-        "signal",
-        "silence",
-        "silo",
-        "simple",
-        "singe",
-        "sinon",
-        "sinus",
-        "sioux",
-        "sirop",
-        "site",
-        "situation",
-        "skier",
-        "snob",
-        "sobre",
-        "social",
-        "socle",
-        "sodium",
-        "soigner",
-        "soir",
-        "soixante",
-        "soja",
-        "solaire",
-        "soldat",
-        "soleil",
-        "solide",
-        "solo",
-        "solvant",
-        "sombre",
-        "somme",
-        "somnoler",
-        "sondage",
-        "songeur",
-        "sonner",
-        "sorte",
-        "sosie",
-        "sottise",
-        "souci",
-        "soudain",
-        "souffrir",
-        "souhaiter",
-        "soulever",
-        "soumettre",
-        "soupe",
-        "sourd",
-        "soustraire",
-        "soutenir",
-        "souvent",
-        "soyeux",
-        "spectacle",
-        "sport",
-        "stade",
-        "stagiaire",
-        "stand",
-        "star",
-        "statue",
-        "stock",
-        "stop",
-        "store",
-        "style",
-        "suave",
-        "subir",
-        "sucre",
-        "suer",
-        "suffire",
-        "suie",
-        "suite",
-        "suivre",
-        "sujet",
-        "sulfite",
-        "supposer",
-        "surf",
-        "surprendre",
-        "surtout",
-        "surveiller",
-        "tabac",
-        "table",
-        "tabou",
-        "tache",
-        "tacler",
-        "tacot",
-        "tact",
-        "taie",
-        "taille",
-        "taire",
-        "talon",
-        "talus",
-        "tandis",
-        "tango",
-        "tanin",
-        "tant",
-        "taper",
-        "tapis",
-        "tard",
-        "tarif",
-        "tarot",
-        "tarte",
-        "tasse",
-        "taureau",
-        "taux",
-        "taverne",
-        "taxer",
-        "taxi",
-        "tellement",
-        "temple",
-        "tendre",
-        "tenir",
-        "tenter",
-        "tenu",
-        "terme",
-        "ternir",
-        "terre",
-        "test",
-        "texte",
-        "thym",
-        "tibia",
-        "tiers",
-        "tige",
-        "tipi",
-        "tique",
-        "tirer",
-        "tissu",
-        "titre",
-        "toast",
-        "toge",
-        "toile",
-        "toiser",
-        "toiture",
-        "tomber",
-        "tome",
-        "tonne",
-        "tonte",
-        "toque",
-        "torse",
-        "tortue",
-        "totem",
-        "toucher",
-        "toujours",
-        "tour",
-        "tousser",
-        "tout",
-        "toux",
-        "trace",
-        "train",
-        "trame",
-        "tranquille",
-        "travail",
-        "trembler",
-        "trente",
-        "tribu",
-        "trier",
-        "trio",
-        "tripe",
-        "triste",
-        "troc",
-        "trois",
-        "tromper",
-        "tronc",
-        "trop",
-        "trotter",
-        "trouer",
-        "truc",
-        "truite",
-        "tuba",
-        "tuer",
-        "tuile",
-        "turbo",
-        "tutu",
-        "tuyau",
-        "type",
-        "union",
-        "unique",
-        "unir",
-        "unisson",
-        "untel",
-        "urne",
-        "usage",
-        "user",
-        "usiner",
-        "usure",
-        "utile",
-        "vache",
-        "vague",
-        "vaincre",
-        "valeur",
-        "valoir",
-        "valser",
-        "valve",
-        "vampire",
-        "vaseux",
-        "vaste",
-        "veau",
-        "veille",
-        "veine",
-        "velours",
-        "velu",
-        "vendre",
-        "venir",
-        "vent",
-        "venue",
-        "verbe",
-        "verdict",
-        "version",
-        "vertige",
-        "verve",
-        "veste",
-        "veto",
-        "vexer",
-        "vice",
-        "victime",
-        "vide",
-        "vieil",
-        "vieux",
-        "vigie",
-        "vigne",
-        "ville",
-        "vingt",
-        "violent",
-        "virer",
-        "virus",
-        "visage",
-        "viser",
-        "visite",
-        "visuel",
-        "vitamine",
-        "vitrine",
-        "vivant",
-        "vivre",
-        "vocal",
-        "vodka",
-        "vogue",
-        "voici",
-        "voile",
-        "voir",
-        "voisin",
-        "voiture",
-        "volaille",
-        "volcan",
-        "voler",
-        "volt",
-        "votant",
-        "votre",
-        "vouer",
-        "vouloir",
-        "vous",
-        "voyage",
-        "voyou",
-        "vrac",
-        "vrai",
-        "yacht",
-        "yeti",
-        "yeux",
-        "yoga",
-        "zeste",
-        "zinc",
-        "zone",
-        "zoom"
-	];
-}
\ No newline at end of file
diff --git a/cw_haven/lib/mnemonics/german.dart b/cw_haven/lib/mnemonics/german.dart
deleted file mode 100644
index 1491c9b0e..000000000
--- a/cw_haven/lib/mnemonics/german.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class GermanMnemonics {
-  static const words = [
-    "Abakus",
-    "Abart",
-    "abbilden",
-    "Abbruch",
-    "Abdrift",
-    "Abendrot",
-    "Abfahrt",
-    "abfeuern",
-    "Abflug",
-    "abfragen",
-    "Abglanz",
-    "abhärten",
-    "abheben",
-    "Abhilfe",
-    "Abitur",
-    "Abkehr",
-    "Ablauf",
-    "ablecken",
-    "Ablösung",
-    "Abnehmer",
-    "abnutzen",
-    "Abonnent",
-    "Abrasion",
-    "Abrede",
-    "abrüsten",
-    "Absicht",
-    "Absprung",
-    "Abstand",
-    "absuchen",
-    "Abteil",
-    "Abundanz",
-    "abwarten",
-    "Abwurf",
-    "Abzug",
-    "Achse",
-    "Achtung",
-    "Acker",
-    "Aderlass",
-    "Adler",
-    "Admiral",
-    "Adresse",
-    "Affe",
-    "Affront",
-    "Afrika",
-    "Aggregat",
-    "Agilität",
-    "ähneln",
-    "Ahnung",
-    "Ahorn",
-    "Akazie",
-    "Akkord",
-    "Akrobat",
-    "Aktfoto",
-    "Aktivist",
-    "Albatros",
-    "Alchimie",
-    "Alemanne",
-    "Alibi",
-    "Alkohol",
-    "Allee",
-    "Allüre",
-    "Almosen",
-    "Almweide",
-    "Aloe",
-    "Alpaka",
-    "Alpental",
-    "Alphabet",
-    "Alpinist",
-    "Alraune",
-    "Altbier",
-    "Alter",
-    "Altflöte",
-    "Altruist",
-    "Alublech",
-    "Aludose",
-    "Amateur",
-    "Amazonas",
-    "Ameise",
-    "Amnesie",
-    "Amok",
-    "Ampel",
-    "Amphibie",
-    "Ampulle",
-    "Amsel",
-    "Amulett",
-    "Anakonda",
-    "Analogie",
-    "Ananas",
-    "Anarchie",
-    "Anatomie",
-    "Anbau",
-    "Anbeginn",
-    "anbieten",
-    "Anblick",
-    "ändern",
-    "andocken",
-    "Andrang",
-    "anecken",
-    "Anflug",
-    "Anfrage",
-    "Anführer",
-    "Angebot",
-    "Angler",
-    "Anhalter",
-    "Anhöhe",
-    "Animator",
-    "Anis",
-    "Anker",
-    "ankleben",
-    "Ankunft",
-    "Anlage",
-    "anlocken",
-    "Anmut",
-    "Annahme",
-    "Anomalie",
-    "Anonymus",
-    "Anorak",
-    "anpeilen",
-    "Anrecht",
-    "Anruf",
-    "Ansage",
-    "Anschein",
-    "Ansicht",
-    "Ansporn",
-    "Anteil",
-    "Antlitz",
-    "Antrag",
-    "Antwort",
-    "Anwohner",
-    "Aorta",
-    "Apfel",
-    "Appetit",
-    "Applaus",
-    "Aquarium",
-    "Arbeit",
-    "Arche",
-    "Argument",
-    "Arktis",
-    "Armband",
-    "Aroma",
-    "Asche",
-    "Askese",
-    "Asphalt",
-    "Asteroid",
-    "Ästhetik",
-    "Astronom",
-    "Atelier",
-    "Athlet",
-    "Atlantik",
-    "Atmung",
-    "Audienz",
-    "aufatmen",
-    "Auffahrt",
-    "aufholen",
-    "aufregen",
-    "Aufsatz",
-    "Auftritt",
-    "Aufwand",
-    "Augapfel",
-    "Auktion",
-    "Ausbruch",
-    "Ausflug",
-    "Ausgabe",
-    "Aushilfe",
-    "Ausland",
-    "Ausnahme",
-    "Aussage",
-    "Autobahn",
-    "Avocado",
-    "Axthieb",
-    "Bach",
-    "backen",
-    "Badesee",
-    "Bahnhof",
-    "Balance",
-    "Balkon",
-    "Ballett",
-    "Balsam",
-    "Banane",
-    "Bandage",
-    "Bankett",
-    "Barbar",
-    "Barde",
-    "Barett",
-    "Bargeld",
-    "Barkasse",
-    "Barriere",
-    "Bart",
-    "Bass",
-    "Bastler",
-    "Batterie",
-    "Bauch",
-    "Bauer",
-    "Bauholz",
-    "Baujahr",
-    "Baum",
-    "Baustahl",
-    "Bauteil",
-    "Bauweise",
-    "Bazar",
-    "beachten",
-    "Beatmung",
-    "beben",
-    "Becher",
-    "Becken",
-    "bedanken",
-    "beeilen",
-    "beenden",
-    "Beere",
-    "befinden",
-    "Befreier",
-    "Begabung",
-    "Begierde",
-    "begrüßen",
-    "Beiboot",
-    "Beichte",
-    "Beifall",
-    "Beigabe",
-    "Beil",
-    "Beispiel",
-    "Beitrag",
-    "beizen",
-    "bekommen",
-    "beladen",
-    "Beleg",
-    "bellen",
-    "belohnen",
-    "Bemalung",
-    "Bengel",
-    "Benutzer",
-    "Benzin",
-    "beraten",
-    "Bereich",
-    "Bergluft",
-    "Bericht",
-    "Bescheid",
-    "Besitz",
-    "besorgen",
-    "Bestand",
-    "Besuch",
-    "betanken",
-    "beten",
-    "betören",
-    "Bett",
-    "Beule",
-    "Beute",
-    "Bewegung",
-    "bewirken",
-    "Bewohner",
-    "bezahlen",
-    "Bezug",
-    "biegen",
-    "Biene",
-    "Bierzelt",
-    "bieten",
-    "Bikini",
-    "Bildung",
-    "Billard",
-    "binden",
-    "Biobauer",
-    "Biologe",
-    "Bionik",
-    "Biotop",
-    "Birke",
-    "Bison",
-    "Bitte",
-    "Biwak",
-    "Bizeps",
-    "blasen",
-    "Blatt",
-    "Blauwal",
-    "Blende",
-    "Blick",
-    "Blitz",
-    "Blockade",
-    "Blödelei",
-    "Blondine",
-    "Blues",
-    "Blume",
-    "Blut",
-    "Bodensee",
-    "Bogen",
-    "Boje",
-    "Bollwerk",
-    "Bonbon",
-    "Bonus",
-    "Boot",
-    "Bordarzt",
-    "Börse",
-    "Böschung",
-    "Boudoir",
-    "Boxkampf",
-    "Boykott",
-    "Brahms",
-    "Brandung",
-    "Brauerei",
-    "Brecher",
-    "Breitaxt",
-    "Bremse",
-    "brennen",
-    "Brett",
-    "Brief",
-    "Brigade",
-    "Brillanz",
-    "bringen",
-    "brodeln",
-    "Brosche",
-    "Brötchen",
-    "Brücke",
-    "Brunnen",
-    "Brüste",
-    "Brutofen",
-    "Buch",
-    "Büffel",
-    "Bugwelle",
-    "Bühne",
-    "Buletten",
-    "Bullauge",
-    "Bumerang",
-    "bummeln",
-    "Buntglas",
-    "Bürde",
-    "Burgherr",
-    "Bursche",
-    "Busen",
-    "Buslinie",
-    "Bussard",
-    "Butangas",
-    "Butter",
-    "Cabrio",
-    "campen",
-    "Captain",
-    "Cartoon",
-    "Cello",
-    "Chalet",
-    "Charisma",
-    "Chefarzt",
-    "Chiffon",
-    "Chipsatz",
-    "Chirurg",
-    "Chor",
-    "Chronik",
-    "Chuzpe",
-    "Clubhaus",
-    "Cockpit",
-    "Codewort",
-    "Cognac",
-    "Coladose",
-    "Computer",
-    "Coupon",
-    "Cousin",
-    "Cracking",
-    "Crash",
-    "Curry",
-    "Dach",
-    "Dackel",
-    "daddeln",
-    "daliegen",
-    "Dame",
-    "Dammbau",
-    "Dämon",
-    "Dampflok",
-    "Dank",
-    "Darm",
-    "Datei",
-    "Datsche",
-    "Datteln",
-    "Datum",
-    "Dauer",
-    "Daunen",
-    "Deckel",
-    "Decoder",
-    "Defekt",
-    "Degen",
-    "Dehnung",
-    "Deiche",
-    "Dekade",
-    "Dekor",
-    "Delfin",
-    "Demut",
-    "denken",
-    "Deponie",
-    "Design",
-    "Desktop",
-    "Dessert",
-    "Detail",
-    "Detektiv",
-    "Dezibel",
-    "Diadem",
-    "Diagnose",
-    "Dialekt",
-    "Diamant",
-    "Dichter",
-    "Dickicht",
-    "Diesel",
-    "Diktat",
-    "Diplom",
-    "Direktor",
-    "Dirne",
-    "Diskurs",
-    "Distanz",
-    "Docht",
-    "Dohle",
-    "Dolch",
-    "Domäne",
-    "Donner",
-    "Dorade",
-    "Dorf",
-    "Dörrobst",
-    "Dorsch",
-    "Dossier",
-    "Dozent",
-    "Drachen",
-    "Draht",
-    "Drama",
-    "Drang",
-    "Drehbuch",
-    "Dreieck",
-    "Dressur",
-    "Drittel",
-    "Drossel",
-    "Druck",
-    "Duell",
-    "Duft",
-    "Düne",
-    "Dünung",
-    "dürfen",
-    "Duschbad",
-    "Düsenjet",
-    "Dynamik",
-    "Ebbe",
-    "Echolot",
-    "Echse",
-    "Eckball",
-    "Edding",
-    "Edelweiß",
-    "Eden",
-    "Edition",
-    "Efeu",
-    "Effekte",
-    "Egoismus",
-    "Ehre",
-    "Eiablage",
-    "Eiche",
-    "Eidechse",
-    "Eidotter",
-    "Eierkopf",
-    "Eigelb",
-    "Eiland",
-    "Eilbote",
-    "Eimer",
-    "einatmen",
-    "Einband",
-    "Eindruck",
-    "Einfall",
-    "Eingang",
-    "Einkauf",
-    "einladen",
-    "Einöde",
-    "Einrad",
-    "Eintopf",
-    "Einwurf",
-    "Einzug",
-    "Eisbär",
-    "Eisen",
-    "Eishöhle",
-    "Eismeer",
-    "Eiweiß",
-    "Ekstase",
-    "Elan",
-    "Elch",
-    "Elefant",
-    "Eleganz",
-    "Element",
-    "Elfe",
-    "Elite",
-    "Elixier",
-    "Ellbogen",
-    "Eloquenz",
-    "Emigrant",
-    "Emission",
-    "Emotion",
-    "Empathie",
-    "Empfang",
-    "Endzeit",
-    "Energie",
-    "Engpass",
-    "Enkel",
-    "Enklave",
-    "Ente",
-    "entheben",
-    "Entität",
-    "entladen",
-    "Entwurf",
-    "Episode",
-    "Epoche",
-    "erachten",
-    "Erbauer",
-    "erblühen",
-    "Erdbeere",
-    "Erde",
-    "Erdgas",
-    "Erdkunde",
-    "Erdnuss",
-    "Erdöl",
-    "Erdteil",
-    "Ereignis",
-    "Eremit",
-    "erfahren",
-    "Erfolg",
-    "erfreuen",
-    "erfüllen",
-    "Ergebnis",
-    "erhitzen",
-    "erkalten",
-    "erkennen",
-    "erleben",
-    "Erlösung",
-    "ernähren",
-    "erneuern",
-    "Ernte",
-    "Eroberer",
-    "eröffnen",
-    "Erosion",
-    "Erotik",
-    "Erpel",
-    "erraten",
-    "Erreger",
-    "erröten",
-    "Ersatz",
-    "Erstflug",
-    "Ertrag",
-    "Eruption",
-    "erwarten",
-    "erwidern",
-    "Erzbau",
-    "Erzeuger",
-    "erziehen",
-    "Esel",
-    "Eskimo",
-    "Eskorte",
-    "Espe",
-    "Espresso",
-    "essen",
-    "Etage",
-    "Etappe",
-    "Etat",
-    "Ethik",
-    "Etikett",
-    "Etüde",
-    "Eule",
-    "Euphorie",
-    "Europa",
-    "Everest",
-    "Examen",
-    "Exil",
-    "Exodus",
-    "Extrakt",
-    "Fabel",
-    "Fabrik",
-    "Fachmann",
-    "Fackel",
-    "Faden",
-    "Fagott",
-    "Fahne",
-    "Faible",
-    "Fairness",
-    "Fakt",
-    "Fakultät",
-    "Falke",
-    "Fallobst",
-    "Fälscher",
-    "Faltboot",
-    "Familie",
-    "Fanclub",
-    "Fanfare",
-    "Fangarm",
-    "Fantasie",
-    "Farbe",
-    "Farmhaus",
-    "Farn",
-    "Fasan",
-    "Faser",
-    "Fassung",
-    "fasten",
-    "Faulheit",
-    "Fauna",
-    "Faust",
-    "Favorit",
-    "Faxgerät",
-    "Fazit",
-    "fechten",
-    "Federboa",
-    "Fehler",
-    "Feier",
-    "Feige",
-    "feilen",
-    "Feinripp",
-    "Feldbett",
-    "Felge",
-    "Fellpony",
-    "Felswand",
-    "Ferien",
-    "Ferkel",
-    "Fernweh",
-    "Ferse",
-    "Fest",
-    "Fettnapf",
-    "Feuer",
-    "Fiasko",
-    "Fichte",
-    "Fiktion",
-    "Film",
-    "Filter",
-    "Filz",
-    "Finanzen",
-    "Findling",
-    "Finger",
-    "Fink",
-    "Finnwal",
-    "Fisch",
-    "Fitness",
-    "Fixpunkt",
-    "Fixstern",
-    "Fjord",
-    "Flachbau",
-    "Flagge",
-    "Flamenco",
-    "Flanke",
-    "Flasche",
-    "Flaute",
-    "Fleck",
-    "Flegel",
-    "flehen",
-    "Fleisch",
-    "fliegen",
-    "Flinte",
-    "Flirt",
-    "Flocke",
-    "Floh",
-    "Floskel",
-    "Floß",
-    "Flöte",
-    "Flugzeug",
-    "Flunder",
-    "Flusstal",
-    "Flutung",
-    "Fockmast",
-    "Fohlen",
-    "Föhnlage",
-    "Fokus",
-    "folgen",
-    "Foliant",
-    "Folklore",
-    "Fontäne",
-    "Förde",
-    "Forelle",
-    "Format",
-    "Forscher",
-    "Fortgang",
-    "Forum",
-    "Fotograf",
-    "Frachter",
-    "Fragment",
-    "Fraktion",
-    "fräsen",
-    "Frauenpo",
-    "Freak",
-    "Fregatte",
-    "Freiheit",
-    "Freude",
-    "Frieden",
-    "Frohsinn",
-    "Frosch",
-    "Frucht",
-    "Frühjahr",
-    "Fuchs",
-    "Fügung",
-    "fühlen",
-    "Füller",
-    "Fundbüro",
-    "Funkboje",
-    "Funzel",
-    "Furnier",
-    "Fürsorge",
-    "Fusel",
-    "Fußbad",
-    "Futteral",
-    "Gabelung",
-    "gackern",
-    "Gage",
-    "gähnen",
-    "Galaxie",
-    "Galeere",
-    "Galopp",
-    "Gameboy",
-    "Gamsbart",
-    "Gandhi",
-    "Gang",
-    "Garage",
-    "Gardine",
-    "Garküche",
-    "Garten",
-    "Gasthaus",
-    "Gattung",
-    "gaukeln",
-    "Gazelle",
-    "Gebäck",
-    "Gebirge",
-    "Gebräu",
-    "Geburt",
-    "Gedanke",
-    "Gedeck",
-    "Gedicht",
-    "Gefahr",
-    "Gefieder",
-    "Geflügel",
-    "Gefühl",
-    "Gegend",
-    "Gehirn",
-    "Gehöft",
-    "Gehweg",
-    "Geige",
-    "Geist",
-    "Gelage",
-    "Geld",
-    "Gelenk",
-    "Gelübde",
-    "Gemälde",
-    "Gemeinde",
-    "Gemüse",
-    "genesen",
-    "Genuss",
-    "Gepäck",
-    "Geranie",
-    "Gericht",
-    "Germane",
-    "Geruch",
-    "Gesang",
-    "Geschenk",
-    "Gesetz",
-    "Gesindel",
-    "Gesöff",
-    "Gespan",
-    "Gestade",
-    "Gesuch",
-    "Getier",
-    "Getränk",
-    "Getümmel",
-    "Gewand",
-    "Geweih",
-    "Gewitter",
-    "Gewölbe",
-    "Geysir",
-    "Giftzahn",
-    "Gipfel",
-    "Giraffe",
-    "Gitarre",
-    "glänzen",
-    "Glasauge",
-    "Glatze",
-    "Gleis",
-    "Globus",
-    "Glück",
-    "glühen",
-    "Glutofen",
-    "Goldzahn",
-    "Gondel",
-    "gönnen",
-    "Gottheit",
-    "graben",
-    "Grafik",
-    "Grashalm",
-    "Graugans",
-    "greifen",
-    "Grenze",
-    "grillen",
-    "Groschen",
-    "Grotte",
-    "Grube",
-    "Grünalge",
-    "Gruppe",
-    "gruseln",
-    "Gulasch",
-    "Gummibär",
-    "Gurgel",
-    "Gürtel",
-    "Güterzug",
-    "Haarband",
-    "Habicht",
-    "hacken",
-    "hadern",
-    "Hafen",
-    "Hagel",
-    "Hähnchen",
-    "Haifisch",
-    "Haken",
-    "Halbaffe",
-    "Halsader",
-    "halten",
-    "Halunke",
-    "Handbuch",
-    "Hanf",
-    "Harfe",
-    "Harnisch",
-    "härten",
-    "Harz",
-    "Hasenohr",
-    "Haube",
-    "hauchen",
-    "Haupt",
-    "Haut",
-    "Havarie",
-    "Hebamme",
-    "hecheln",
-    "Heck",
-    "Hedonist",
-    "Heiler",
-    "Heimat",
-    "Heizung",
-    "Hektik",
-    "Held",
-    "helfen",
-    "Helium",
-    "Hemd",
-    "hemmen",
-    "Hengst",
-    "Herd",
-    "Hering",
-    "Herkunft",
-    "Hermelin",
-    "Herrchen",
-    "Herzdame",
-    "Heulboje",
-    "Hexe",
-    "Hilfe",
-    "Himbeere",
-    "Himmel",
-    "Hingabe",
-    "hinhören",
-    "Hinweis",
-    "Hirsch",
-    "Hirte",
-    "Hitzkopf",
-    "Hobel",
-    "Hochform",
-    "Hocker",
-    "hoffen",
-    "Hofhund",
-    "Hofnarr",
-    "Höhenzug",
-    "Hohlraum",
-    "Hölle",
-    "Holzboot",
-    "Honig",
-    "Honorar",
-    "horchen",
-    "Hörprobe",
-    "Höschen",
-    "Hotel",
-    "Hubraum",
-    "Hufeisen",
-    "Hügel",
-    "huldigen",
-    "Hülle",
-    "Humbug",
-    "Hummer",
-    "Humor",
-    "Hund",
-    "Hunger",
-    "Hupe",
-    "Hürde",
-    "Hurrikan",
-    "Hydrant",
-    "Hypnose",
-    "Ibis",
-    "Idee",
-    "Idiot",
-    "Igel",
-    "Illusion",
-    "Imitat",
-    "impfen",
-    "Import",
-    "Inferno",
-    "Ingwer",
-    "Inhalte",
-    "Inland",
-    "Insekt",
-    "Ironie",
-    "Irrfahrt",
-    "Irrtum",
-    "Isolator",
-    "Istwert",
-    "Jacke",
-    "Jade",
-    "Jagdhund",
-    "Jäger",
-    "Jaguar",
-    "Jahr",
-    "Jähzorn",
-    "Jazzfest",
-    "Jetpilot",
-    "jobben",
-    "Jochbein",
-    "jodeln",
-    "Jodsalz",
-    "Jolle",
-    "Journal",
-    "Jubel",
-    "Junge",
-    "Junimond",
-    "Jupiter",
-    "Jutesack",
-    "Juwel",
-    "Kabarett",
-    "Kabine",
-    "Kabuff",
-    "Käfer",
-    "Kaffee",
-    "Kahlkopf",
-    "Kaimauer",
-    "Kajüte",
-    "Kaktus",
-    "Kaliber",
-    "Kaltluft",
-    "Kamel",
-    "kämmen",
-    "Kampagne",
-    "Kanal",
-    "Känguru",
-    "Kanister",
-    "Kanone",
-    "Kante",
-    "Kanu",
-    "kapern",
-    "Kapitän",
-    "Kapuze",
-    "Karneval",
-    "Karotte",
-    "Käsebrot",
-    "Kasper",
-    "Kastanie",
-    "Katalog",
-    "Kathode",
-    "Katze",
-    "kaufen",
-    "Kaugummi",
-    "Kauz",
-    "Kehle",
-    "Keilerei",
-    "Keksdose",
-    "Kellner",
-    "Keramik",
-    "Kerze",
-    "Kessel",
-    "Kette",
-    "keuchen",
-    "kichern",
-    "Kielboot",
-    "Kindheit",
-    "Kinnbart",
-    "Kinosaal",
-    "Kiosk",
-    "Kissen",
-    "Klammer",
-    "Klang",
-    "Klapprad",
-    "Klartext",
-    "kleben",
-    "Klee",
-    "Kleinod",
-    "Klima",
-    "Klingel",
-    "Klippe",
-    "Klischee",
-    "Kloster",
-    "Klugheit",
-    "Klüngel",
-    "kneten",
-    "Knie",
-    "Knöchel",
-    "knüpfen",
-    "Kobold",
-    "Kochbuch",
-    "Kohlrabi",
-    "Koje",
-    "Kokosöl",
-    "Kolibri",
-    "Kolumne",
-    "Kombüse",
-    "Komiker",
-    "kommen",
-    "Konto",
-    "Konzept",
-    "Kopfkino",
-    "Kordhose",
-    "Korken",
-    "Korsett",
-    "Kosename",
-    "Krabbe",
-    "Krach",
-    "Kraft",
-    "Krähe",
-    "Kralle",
-    "Krapfen",
-    "Krater",
-    "kraulen",
-    "Kreuz",
-    "Krokodil",
-    "Kröte",
-    "Kugel",
-    "Kuhhirt",
-    "Kühnheit",
-    "Künstler",
-    "Kurort",
-    "Kurve",
-    "Kurzfilm",
-    "kuscheln",
-    "küssen",
-    "Kutter",
-    "Labor",
-    "lachen",
-    "Lackaffe",
-    "Ladeluke",
-    "Lagune",
-    "Laib",
-    "Lakritze",
-    "Lammfell",
-    "Land",
-    "Langmut",
-    "Lappalie",
-    "Last",
-    "Laterne",
-    "Latzhose",
-    "Laubsäge",
-    "laufen",
-    "Laune",
-    "Lausbub",
-    "Lavasee",
-    "Leben",
-    "Leder",
-    "Leerlauf",
-    "Lehm",
-    "Lehrer",
-    "leihen",
-    "Lektüre",
-    "Lenker",
-    "Lerche",
-    "Leseecke",
-    "Leuchter",
-    "Lexikon",
-    "Libelle",
-    "Libido",
-    "Licht",
-    "Liebe",
-    "liefern",
-    "Liftboy",
-    "Limonade",
-    "Lineal",
-    "Linoleum",
-    "List",
-    "Liveband",
-    "Lobrede",
-    "locken",
-    "Löffel",
-    "Logbuch",
-    "Logik",
-    "Lohn",
-    "Loipe",
-    "Lokal",
-    "Lorbeer",
-    "Lösung",
-    "löten",
-    "Lottofee",
-    "Löwe",
-    "Luchs",
-    "Luder",
-    "Luftpost",
-    "Luke",
-    "Lümmel",
-    "Lunge",
-    "lutschen",
-    "Luxus",
-    "Macht",
-    "Magazin",
-    "Magier",
-    "Magnet",
-    "mähen",
-    "Mahlzeit",
-    "Mahnmal",
-    "Maibaum",
-    "Maisbrei",
-    "Makel",
-    "malen",
-    "Mammut",
-    "Maniküre",
-    "Mantel",
-    "Marathon",
-    "Marder",
-    "Marine",
-    "Marke",
-    "Marmor",
-    "Märzluft",
-    "Maske",
-    "Maßanzug",
-    "Maßkrug",
-    "Mastkorb",
-    "Material",
-    "Matratze",
-    "Mauerbau",
-    "Maulkorb",
-    "Mäuschen",
-    "Mäzen",
-    "Medium",
-    "Meinung",
-    "melden",
-    "Melodie",
-    "Mensch",
-    "Merkmal",
-    "Messe",
-    "Metall",
-    "Meteor",
-    "Methode",
-    "Metzger",
-    "Mieze",
-    "Milchkuh",
-    "Mimose",
-    "Minirock",
-    "Minute",
-    "mischen",
-    "Missetat",
-    "mitgehen",
-    "Mittag",
-    "Mixtape",
-    "Möbel",
-    "Modul",
-    "mögen",
-    "Möhre",
-    "Molch",
-    "Moment",
-    "Monat",
-    "Mondflug",
-    "Monitor",
-    "Monokini",
-    "Monster",
-    "Monument",
-    "Moorhuhn",
-    "Moos",
-    "Möpse",
-    "Moral",
-    "Mörtel",
-    "Motiv",
-    "Motorrad",
-    "Möwe",
-    "Mühe",
-    "Mulatte",
-    "Müller",
-    "Mumie",
-    "Mund",
-    "Münze",
-    "Muschel",
-    "Muster",
-    "Mythos",
-    "Nabel",
-    "Nachtzug",
-    "Nackedei",
-    "Nagel",
-    "Nähe",
-    "Nähnadel",
-    "Namen",
-    "Narbe",
-    "Narwal",
-    "Nasenbär",
-    "Natur",
-    "Nebel",
-    "necken",
-    "Neffe",
-    "Neigung",
-    "Nektar",
-    "Nenner",
-    "Neptun",
-    "Nerz",
-    "Nessel",
-    "Nestbau",
-    "Netz",
-    "Neubau",
-    "Neuerung",
-    "Neugier",
-    "nicken",
-    "Niere",
-    "Nilpferd",
-    "nisten",
-    "Nocke",
-    "Nomade",
-    "Nordmeer",
-    "Notdurft",
-    "Notstand",
-    "Notwehr",
-    "Nudismus",
-    "Nuss",
-    "Nutzhanf",
-    "Oase",
-    "Obdach",
-    "Oberarzt",
-    "Objekt",
-    "Oboe",
-    "Obsthain",
-    "Ochse",
-    "Odyssee",
-    "Ofenholz",
-    "öffnen",
-    "Ohnmacht",
-    "Ohrfeige",
-    "Ohrwurm",
-    "Ökologie",
-    "Oktave",
-    "Ölberg",
-    "Olive",
-    "Ölkrise",
-    "Omelett",
-    "Onkel",
-    "Oper",
-    "Optiker",
-    "Orange",
-    "Orchidee",
-    "ordnen",
-    "Orgasmus",
-    "Orkan",
-    "Ortskern",
-    "Ortung",
-    "Ostasien",
-    "Ozean",
-    "Paarlauf",
-    "Packeis",
-    "paddeln",
-    "Paket",
-    "Palast",
-    "Pandabär",
-    "Panik",
-    "Panorama",
-    "Panther",
-    "Papagei",
-    "Papier",
-    "Paprika",
-    "Paradies",
-    "Parka",
-    "Parodie",
-    "Partner",
-    "Passant",
-    "Patent",
-    "Patzer",
-    "Pause",
-    "Pavian",
-    "Pedal",
-    "Pegel",
-    "peilen",
-    "Perle",
-    "Person",
-    "Pfad",
-    "Pfau",
-    "Pferd",
-    "Pfleger",
-    "Physik",
-    "Pier",
-    "Pilotwal",
-    "Pinzette",
-    "Piste",
-    "Plakat",
-    "Plankton",
-    "Platin",
-    "Plombe",
-    "plündern",
-    "Pobacke",
-    "Pokal",
-    "polieren",
-    "Popmusik",
-    "Porträt",
-    "Posaune",
-    "Postamt",
-    "Pottwal",
-    "Pracht",
-    "Pranke",
-    "Preis",
-    "Primat",
-    "Prinzip",
-    "Protest",
-    "Proviant",
-    "Prüfung",
-    "Pubertät",
-    "Pudding",
-    "Pullover",
-    "Pulsader",
-    "Punkt",
-    "Pute",
-    "Putsch",
-    "Puzzle",
-    "Python",
-    "quaken",
-    "Qualle",
-    "Quark",
-    "Quellsee",
-    "Querkopf",
-    "Quitte",
-    "Quote",
-    "Rabauke",
-    "Rache",
-    "Radclub",
-    "Radhose",
-    "Radio",
-    "Radtour",
-    "Rahmen",
-    "Rampe",
-    "Randlage",
-    "Ranzen",
-    "Rapsöl",
-    "Raserei",
-    "rasten",
-    "Rasur",
-    "Rätsel",
-    "Raubtier",
-    "Raumzeit",
-    "Rausch",
-    "Reaktor",
-    "Realität",
-    "Rebell",
-    "Rede",
-    "Reetdach",
-    "Regatta",
-    "Regen",
-    "Rehkitz",
-    "Reifen",
-    "Reim",
-    "Reise",
-    "Reizung",
-    "Rekord",
-    "Relevanz",
-    "Rennboot",
-    "Respekt",
-    "Restmüll",
-    "retten",
-    "Reue",
-    "Revolte",
-    "Rhetorik",
-    "Rhythmus",
-    "Richtung",
-    "Riegel",
-    "Rindvieh",
-    "Rippchen",
-    "Ritter",
-    "Robbe",
-    "Roboter",
-    "Rockband",
-    "Rohdaten",
-    "Roller",
-    "Roman",
-    "röntgen",
-    "Rose",
-    "Rosskur",
-    "Rost",
-    "Rotahorn",
-    "Rotglut",
-    "Rotznase",
-    "Rubrik",
-    "Rückweg",
-    "Rufmord",
-    "Ruhe",
-    "Ruine",
-    "Rumpf",
-    "Runde",
-    "Rüstung",
-    "rütteln",
-    "Saaltür",
-    "Saatguts",
-    "Säbel",
-    "Sachbuch",
-    "Sack",
-    "Saft",
-    "sagen",
-    "Sahneeis",
-    "Salat",
-    "Salbe",
-    "Salz",
-    "Sammlung",
-    "Samt",
-    "Sandbank",
-    "Sanftmut",
-    "Sardine",
-    "Satire",
-    "Sattel",
-    "Satzbau",
-    "Sauerei",
-    "Saum",
-    "Säure",
-    "Schall",
-    "Scheitel",
-    "Schiff",
-    "Schlager",
-    "Schmied",
-    "Schnee",
-    "Scholle",
-    "Schrank",
-    "Schulbus",
-    "Schwan",
-    "Seeadler",
-    "Seefahrt",
-    "Seehund",
-    "Seeufer",
-    "segeln",
-    "Sehnerv",
-    "Seide",
-    "Seilzug",
-    "Senf",
-    "Sessel",
-    "Seufzer",
-    "Sexgott",
-    "Sichtung",
-    "Signal",
-    "Silber",
-    "singen",
-    "Sinn",
-    "Sirup",
-    "Sitzbank",
-    "Skandal",
-    "Skikurs",
-    "Skipper",
-    "Skizze",
-    "Smaragd",
-    "Socke",
-    "Sohn",
-    "Sommer",
-    "Songtext",
-    "Sorte",
-    "Spagat",
-    "Spannung",
-    "Spargel",
-    "Specht",
-    "Speiseöl",
-    "Spiegel",
-    "Sport",
-    "spülen",
-    "Stadtbus",
-    "Stall",
-    "Stärke",
-    "Stativ",
-    "staunen",
-    "Stern",
-    "Stiftung",
-    "Stollen",
-    "Strömung",
-    "Sturm",
-    "Substanz",
-    "Südalpen",
-    "Sumpf",
-    "surfen",
-    "Tabak",
-    "Tafel",
-    "Tagebau",
-    "takeln",
-    "Taktung",
-    "Talsohle",
-    "Tand",
-    "Tanzbär",
-    "Tapir",
-    "Tarantel",
-    "Tarnname",
-    "Tasse",
-    "Tatnacht",
-    "Tatsache",
-    "Tatze",
-    "Taube",
-    "tauchen",
-    "Taufpate",
-    "Taumel",
-    "Teelicht",
-    "Teich",
-    "teilen",
-    "Tempo",
-    "Tenor",
-    "Terrasse",
-    "Testflug",
-    "Theater",
-    "Thermik",
-    "ticken",
-    "Tiefflug",
-    "Tierart",
-    "Tigerhai",
-    "Tinte",
-    "Tischler",
-    "toben",
-    "Toleranz",
-    "Tölpel",
-    "Tonband",
-    "Topf",
-    "Topmodel",
-    "Torbogen",
-    "Torlinie",
-    "Torte",
-    "Tourist",
-    "Tragesel",
-    "trampeln",
-    "Trapez",
-    "Traum",
-    "treffen",
-    "Trennung",
-    "Treue",
-    "Trick",
-    "trimmen",
-    "Trödel",
-    "Trost",
-    "Trumpf",
-    "tüfteln",
-    "Turban",
-    "Turm",
-    "Übermut",
-    "Ufer",
-    "Uhrwerk",
-    "umarmen",
-    "Umbau",
-    "Umfeld",
-    "Umgang",
-    "Umsturz",
-    "Unart",
-    "Unfug",
-    "Unimog",
-    "Unruhe",
-    "Unwucht",
-    "Uranerz",
-    "Urlaub",
-    "Urmensch",
-    "Utopie",
-    "Vakuum",
-    "Valuta",
-    "Vandale",
-    "Vase",
-    "Vektor",
-    "Ventil",
-    "Verb",
-    "Verdeck",
-    "Verfall",
-    "Vergaser",
-    "verhexen",
-    "Verlag",
-    "Vers",
-    "Vesper",
-    "Vieh",
-    "Viereck",
-    "Vinyl",
-    "Virus",
-    "Vitrine",
-    "Vollblut",
-    "Vorbote",
-    "Vorrat",
-    "Vorsicht",
-    "Vulkan",
-    "Wachstum",
-    "Wade",
-    "Wagemut",
-    "Wahlen",
-    "Wahrheit",
-    "Wald",
-    "Walhai",
-    "Wallach",
-    "Walnuss",
-    "Walzer",
-    "wandeln",
-    "Wanze",
-    "wärmen",
-    "Warnruf",
-    "Wäsche",
-    "Wasser",
-    "Weberei",
-    "wechseln",
-    "Wegegeld",
-    "wehren",
-    "Weiher",
-    "Weinglas",
-    "Weißbier",
-    "Weitwurf",
-    "Welle",
-    "Weltall",
-    "Werkbank",
-    "Werwolf",
-    "Wetter",
-    "wiehern",
-    "Wildgans",
-    "Wind",
-    "Wohl",
-    "Wohnort",
-    "Wolf",
-    "Wollust",
-    "Wortlaut",
-    "Wrack",
-    "Wunder",
-    "Wurfaxt",
-    "Wurst",
-    "Yacht",
-    "Yeti",
-    "Zacke",
-    "Zahl",
-    "zähmen",
-    "Zahnfee",
-    "Zäpfchen",
-    "Zaster",
-    "Zaumzeug",
-    "Zebra",
-    "zeigen",
-    "Zeitlupe",
-    "Zellkern",
-    "Zeltdach",
-    "Zensor",
-    "Zerfall",
-    "Zeug",
-    "Ziege",
-    "Zielfoto",
-    "Zimteis",
-    "Zobel",
-    "Zollhund",
-    "Zombie",
-    "Zöpfe",
-    "Zucht",
-    "Zufahrt",
-    "Zugfahrt",
-    "Zugvogel",
-    "Zündung",
-    "Zweck",
-    "Zyklop"
-  ];
-}
\ No newline at end of file
diff --git a/cw_haven/lib/mnemonics/italian.dart b/cw_haven/lib/mnemonics/italian.dart
deleted file mode 100644
index 275f85bf4..000000000
--- a/cw_haven/lib/mnemonics/italian.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class ItalianMnemonics {
-	static const words = [
-		"abbinare",
-        "abbonato",
-        "abisso",
-        "abitare",
-        "abominio",
-        "accadere",
-        "accesso",
-        "acciaio",
-        "accordo",
-        "accumulo",
-        "acido",
-        "acqua",
-        "acrobata",
-        "acustico",
-        "adattare",
-        "addetto",
-        "addio",
-        "addome",
-        "adeguato",
-        "aderire",
-        "adorare",
-        "adottare",
-        "adozione",
-        "adulto",
-        "aereo",
-        "aerobica",
-        "affare",
-        "affetto",
-        "affidare",
-        "affogato",
-        "affronto",
-        "africano",
-        "afrodite",
-        "agenzia",
-        "aggancio",
-        "aggeggio",
-        "aggiunta",
-        "agio",
-        "agire",
-        "agitare",
-        "aglio",
-        "agnello",
-        "agosto",
-        "aiutare",
-        "albero",
-        "albo",
-        "alce",
-        "alchimia",
-        "alcool",
-        "alfabeto",
-        "algebra",
-        "alimento",
-        "allarme",
-        "alleanza",
-        "allievo",
-        "alloggio",
-        "alluce",
-        "alpi",
-        "alterare",
-        "altro",
-        "aluminio",
-        "amante",
-        "amarezza",
-        "ambiente",
-        "ambrosia",
-        "america",
-        "amico",
-        "ammalare",
-        "ammirare",
-        "amnesia",
-        "amnistia",
-        "amore",
-        "ampliare",
-        "amputare",
-        "analisi",
-        "anamnesi",
-        "ananas",
-        "anarchia",
-        "anatra",
-        "anca",
-        "ancorato",
-        "andare",
-        "androide",
-        "aneddoto",
-        "anello",
-        "angelo",
-        "angolino",
-        "anguilla",
-        "anidride",
-        "anima",
-        "annegare",
-        "anno",
-        "annuncio",
-        "anomalia",
-        "antenna",
-        "anticipo",
-        "aperto",
-        "apostolo",
-        "appalto",
-        "appello",
-        "appiglio",
-        "applauso",
-        "appoggio",
-        "appurare",
-        "aprile",
-        "aquila",
-        "arabo",
-        "arachidi",
-        "aragosta",
-        "arancia",
-        "arbitrio",
-        "archivio",
-        "arco",
-        "argento",
-        "argilla",
-        "aria",
-        "ariete",
-        "arma",
-        "armonia",
-        "aroma",
-        "arrivare",
-        "arrosto",
-        "arsenale",
-        "arte",
-        "artiglio",
-        "asfalto",
-        "asfissia",
-        "asino",
-        "asparagi",
-        "aspirina",
-        "assalire",
-        "assegno",
-        "assolto",
-        "assurdo",
-        "asta",
-        "astratto",
-        "atlante",
-        "atletica",
-        "atomo",
-        "atropina",
-        "attacco",
-        "attesa",
-        "attico",
-        "atto",
-        "attrarre",
-        "auguri",
-        "aula",
-        "aumento",
-        "aurora",
-        "auspicio",
-        "autista",
-        "auto",
-        "autunno",
-        "avanzare",
-        "avarizia",
-        "avere",
-        "aviatore",
-        "avido",
-        "avorio",
-        "avvenire",
-        "avviso",
-        "avvocato",
-        "azienda",
-        "azione",
-        "azzardo",
-        "azzurro",
-        "babbuino",
-        "bacio",
-        "badante",
-        "baffi",
-        "bagaglio",
-        "bagliore",
-        "bagno",
-        "balcone",
-        "balena",
-        "ballare",
-        "balordo",
-        "balsamo",
-        "bambola",
-        "bancomat",
-        "banda",
-        "barato",
-        "barba",
-        "barista",
-        "barriera",
-        "basette",
-        "basilico",
-        "bassista",
-        "bastare",
-        "battello",
-        "bavaglio",
-        "beccare",
-        "beduino",
-        "bellezza",
-        "bene",
-        "benzina",
-        "berretto",
-        "bestia",
-        "bevitore",
-        "bianco",
-        "bibbia",
-        "biberon",
-        "bibita",
-        "bici",
-        "bidone",
-        "bilancia",
-        "biliardo",
-        "binario",
-        "binocolo",
-        "biologia",
-        "biondina",
-        "biopsia",
-        "biossido",
-        "birbante",
-        "birra",
-        "biscotto",
-        "bisogno",
-        "bistecca",
-        "bivio",
-        "blindare",
-        "bloccare",
-        "bocca",
-        "bollire",
-        "bombola",
-        "bonifico",
-        "borghese",
-        "borsa",
-        "bottino",
-        "botulino",
-        "braccio",
-        "bradipo",
-        "branco",
-        "bravo",
-        "bresaola",
-        "bretelle",
-        "brevetto",
-        "briciola",
-        "brigante",
-        "brillare",
-        "brindare",
-        "brivido",
-        "broccoli",
-        "brontolo",
-        "bruciare",
-        "brufolo",
-        "bucare",
-        "buddista",
-        "budino",
-        "bufera",
-        "buffo",
-        "bugiardo",
-        "buio",
-        "buono",
-        "burrone",
-        "bussola",
-        "bustina",
-        "buttare",
-        "cabernet",
-        "cabina",
-        "cacao",
-        "cacciare",
-        "cactus",
-        "cadavere",
-        "caffe",
-        "calamari",
-        "calcio",
-        "caldaia",
-        "calmare",
-        "calunnia",
-        "calvario",
-        "calzone",
-        "cambiare",
-        "camera",
-        "camion",
-        "cammello",
-        "campana",
-        "canarino",
-        "cancello",
-        "candore",
-        "cane",
-        "canguro",
-        "cannone",
-        "canoa",
-        "cantare",
-        "canzone",
-        "caos",
-        "capanna",
-        "capello",
-        "capire",
-        "capo",
-        "capperi",
-        "capra",
-        "capsula",
-        "caraffa",
-        "carbone",
-        "carciofo",
-        "cardigan",
-        "carenza",
-        "caricare",
-        "carota",
-        "carrello",
-        "carta",
-        "casa",
-        "cascare",
-        "caserma",
-        "cashmere",
-        "casino",
-        "cassetta",
-        "castello",
-        "catalogo",
-        "catena",
-        "catorcio",
-        "cattivo",
-        "causa",
-        "cauzione",
-        "cavallo",
-        "caverna",
-        "caviglia",
-        "cavo",
-        "cazzotto",
-        "celibato",
-        "cemento",
-        "cenare",
-        "centrale",
-        "ceramica",
-        "cercare",
-        "ceretta",
-        "cerniera",
-        "certezza",
-        "cervello",
-        "cessione",
-        "cestino",
-        "cetriolo",
-        "chiave",
-        "chiedere",
-        "chilo",
-        "chimera",
-        "chiodo",
-        "chirurgo",
-        "chitarra",
-        "chiudere",
-        "ciabatta",
-        "ciao",
-        "cibo",
-        "ciccia",
-        "cicerone",
-        "ciclone",
-        "cicogna",
-        "cielo",
-        "cifra",
-        "cigno",
-        "ciliegia",
-        "cimitero",
-        "cinema",
-        "cinque",
-        "cintura",
-        "ciondolo",
-        "ciotola",
-        "cipolla",
-        "cippato",
-        "circuito",
-        "cisterna",
-        "citofono",
-        "ciuccio",
-        "civetta",
-        "civico",
-        "clausola",
-        "cliente",
-        "clima",
-        "clinica",
-        "cobra",
-        "coccole",
-        "cocktail",
-        "cocomero",
-        "codice",
-        "coesione",
-        "cogliere",
-        "cognome",
-        "colla",
-        "colomba",
-        "colpire",
-        "coltello",
-        "comando",
-        "comitato",
-        "commedia",
-        "comodino",
-        "compagna",
-        "comune",
-        "concerto",
-        "condotto",
-        "conforto",
-        "congiura",
-        "coniglio",
-        "consegna",
-        "conto",
-        "convegno",
-        "coperta",
-        "copia",
-        "coprire",
-        "corazza",
-        "corda",
-        "corleone",
-        "cornice",
-        "corona",
-        "corpo",
-        "corrente",
-        "corsa",
-        "cortesia",
-        "corvo",
-        "coso",
-        "costume",
-        "cotone",
-        "cottura",
-        "cozza",
-        "crampo",
-        "cratere",
-        "cravatta",
-        "creare",
-        "credere",
-        "crema",
-        "crescere",
-        "crimine",
-        "criterio",
-        "croce",
-        "crollare",
-        "cronaca",
-        "crostata",
-        "croupier",
-        "cubetto",
-        "cucciolo",
-        "cucina",
-        "cultura",
-        "cuoco",
-        "cuore",
-        "cupido",
-        "cupola",
-        "cura",
-        "curva",
-        "cuscino",
-        "custode",
-        "danzare",
-        "data",
-        "decennio",
-        "decidere",
-        "decollo",
-        "dedicare",
-        "dedurre",
-        "definire",
-        "delegare",
-        "delfino",
-        "delitto",
-        "demone",
-        "dentista",
-        "denuncia",
-        "deposito",
-        "derivare",
-        "deserto",
-        "designer",
-        "destino",
-        "detonare",
-        "dettagli",
-        "diagnosi",
-        "dialogo",
-        "diamante",
-        "diario",
-        "diavolo",
-        "dicembre",
-        "difesa",
-        "digerire",
-        "digitare",
-        "diluvio",
-        "dinamica",
-        "dipinto",
-        "diploma",
-        "diramare",
-        "dire",
-        "dirigere",
-        "dirupo",
-        "discesa",
-        "disdetta",
-        "disegno",
-        "disporre",
-        "dissenso",
-        "distacco",
-        "dito",
-        "ditta",
-        "diva",
-        "divenire",
-        "dividere",
-        "divorare",
-        "docente",
-        "dolcetto",
-        "dolore",
-        "domatore",
-        "domenica",
-        "dominare",
-        "donatore",
-        "donna",
-        "dorato",
-        "dormire",
-        "dorso",
-        "dosaggio",
-        "dottore",
-        "dovere",
-        "download",
-        "dragone",
-        "dramma",
-        "dubbio",
-        "dubitare",
-        "duetto",
-        "durata",
-        "ebbrezza",
-        "eccesso",
-        "eccitare",
-        "eclissi",
-        "economia",
-        "edera",
-        "edificio",
-        "editore",
-        "edizione",
-        "educare",
-        "effetto",
-        "egitto",
-        "egiziano",
-        "elastico",
-        "elefante",
-        "eleggere",
-        "elemento",
-        "elenco",
-        "elezione",
-        "elmetto",
-        "elogio",
-        "embrione",
-        "emergere",
-        "emettere",
-        "eminenza",
-        "emisfero",
-        "emozione",
-        "empatia",
-        "energia",
-        "enfasi",
-        "enigma",
-        "entrare",
-        "enzima",
-        "epidemia",
-        "epilogo",
-        "episodio",
-        "epoca",
-        "equivoco",
-        "erba",
-        "erede",
-        "eroe",
-        "erotico",
-        "errore",
-        "eruzione",
-        "esaltare",
-        "esame",
-        "esaudire",
-        "eseguire",
-        "esempio",
-        "esigere",
-        "esistere",
-        "esito",
-        "esperto",
-        "espresso",
-        "essere",
-        "estasi",
-        "esterno",
-        "estrarre",
-        "eterno",
-        "etica",
-        "euforico",
-        "europa",
-        "evacuare",
-        "evasione",
-        "evento",
-        "evidenza",
-        "evitare",
-        "evolvere",
-        "fabbrica",
-        "facciata",
-        "fagiano",
-        "fagotto",
-        "falco",
-        "fame",
-        "famiglia",
-        "fanale",
-        "fango",
-        "fantasia",
-        "farfalla",
-        "farmacia",
-        "faro",
-        "fase",
-        "fastidio",
-        "faticare",
-        "fatto",
-        "favola",
-        "febbre",
-        "femmina",
-        "femore",
-        "fenomeno",
-        "fermata",
-        "feromoni",
-        "ferrari",
-        "fessura",
-        "festa",
-        "fiaba",
-        "fiamma",
-        "fianco",
-        "fiat",
-        "fibbia",
-        "fidare",
-        "fieno",
-        "figa",
-        "figlio",
-        "figura",
-        "filetto",
-        "filmato",
-        "filosofo",
-        "filtrare",
-        "finanza",
-        "finestra",
-        "fingere",
-        "finire",
-        "finta",
-        "finzione",
-        "fiocco",
-        "fioraio",
-        "firewall",
-        "firmare",
-        "fisico",
-        "fissare",
-        "fittizio",
-        "fiume",
-        "flacone",
-        "flagello",
-        "flirtare",
-        "flusso",
-        "focaccia",
-        "foglio",
-        "fognario",
-        "follia",
-        "fonderia",
-        "fontana",
-        "forbici",
-        "forcella",
-        "foresta",
-        "forgiare",
-        "formare",
-        "fornace",
-        "foro",
-        "fortuna",
-        "forzare",
-        "fosforo",
-        "fotoni",
-        "fracasso",
-        "fragola",
-        "frantumi",
-        "fratello",
-        "frazione",
-        "freccia",
-        "freddo",
-        "frenare",
-        "fresco",
-        "friggere",
-        "frittata",
-        "frivolo",
-        "frizione",
-        "fronte",
-        "frullato",
-        "frumento",
-        "frusta",
-        "frutto",
-        "fucile",
-        "fuggire",
-        "fulmine",
-        "fumare",
-        "funzione",
-        "fuoco",
-        "furbizia",
-        "furgone",
-        "furia",
-        "furore",
-        "fusibile",
-        "fuso",
-        "futuro",
-        "gabbiano",
-        "galassia",
-        "gallina",
-        "gamba",
-        "gancio",
-        "garanzia",
-        "garofano",
-        "gasolio",
-        "gatto",
-        "gazebo",
-        "gazzetta",
-        "gelato",
-        "gemelli",
-        "generare",
-        "genitori",
-        "gennaio",
-        "geologia",
-        "germania",
-        "gestire",
-        "gettare",
-        "ghepardo",
-        "ghiaccio",
-        "giaccone",
-        "giaguaro",
-        "giallo",
-        "giappone",
-        "giardino",
-        "gigante",
-        "gioco",
-        "gioiello",
-        "giorno",
-        "giovane",
-        "giraffa",
-        "giudizio",
-        "giurare",
-        "giusto",
-        "globo",
-        "gloria",
-        "glucosio",
-        "gnocca",
-        "gocciola",
-        "godere",
-        "gomito",
-        "gomma",
-        "gonfiare",
-        "gorilla",
-        "governo",
-        "gradire",
-        "graffiti",
-        "granchio",
-        "grappolo",
-        "grasso",
-        "grattare",
-        "gridare",
-        "grissino",
-        "grondaia",
-        "grugnito",
-        "gruppo",
-        "guadagno",
-        "guaio",
-        "guancia",
-        "guardare",
-        "gufo",
-        "guidare",
-        "guscio",
-        "gusto",
-        "icona",
-        "idea",
-        "identico",
-        "idolo",
-        "idoneo",
-        "idrante",
-        "idrogeno",
-        "igiene",
-        "ignoto",
-        "imbarco",
-        "immagine",
-        "immobile",
-        "imparare",
-        "impedire",
-        "impianto",
-        "importo",
-        "impresa",
-        "impulso",
-        "incanto",
-        "incendio",
-        "incidere",
-        "incontro",
-        "incrocia",
-        "incubo",
-        "indagare",
-        "indice",
-        "indotto",
-        "infanzia",
-        "inferno",
-        "infinito",
-        "infranto",
-        "ingerire",
-        "inglese",
-        "ingoiare",
-        "ingresso",
-        "iniziare",
-        "innesco",
-        "insalata",
-        "inserire",
-        "insicuro",
-        "insonnia",
-        "insulto",
-        "interno",
-        "introiti",
-        "invasori",
-        "inverno",
-        "invito",
-        "invocare",
-        "ipnosi",
-        "ipocrita",
-        "ipotesi",
-        "ironia",
-        "irrigare",
-        "iscritto",
-        "isola",
-        "ispirare",
-        "isterico",
-        "istinto",
-        "istruire",
-        "italiano",
-        "jazz",
-        "labbra",
-        "labrador",
-        "ladro",
-        "lago",
-        "lamento",
-        "lampone",
-        "lancetta",
-        "lanterna",
-        "lapide",
-        "larva",
-        "lasagne",
-        "lasciare",
-        "lastra",
-        "latte",
-        "laurea",
-        "lavagna",
-        "lavorare",
-        "leccare",
-        "legare",
-        "leggere",
-        "lenzuolo",
-        "leone",
-        "lepre",
-        "letargo",
-        "lettera",
-        "levare",
-        "levitare",
-        "lezione",
-        "liberare",
-        "libidine",
-        "libro",
-        "licenza",
-        "lievito",
-        "limite",
-        "lince",
-        "lingua",
-        "liquore",
-        "lire",
-        "listino",
-        "litigare",
-        "litro",
-        "locale",
-        "lottare",
-        "lucciola",
-        "lucidare",
-        "luglio",
-        "luna",
-        "macchina",
-        "madama",
-        "madre",
-        "maestro",
-        "maggio",
-        "magico",
-        "maglione",
-        "magnolia",
-        "mago",
-        "maialino",
-        "maionese",
-        "malattia",
-        "male",
-        "malloppo",
-        "mancare",
-        "mandorla",
-        "mangiare",
-        "manico",
-        "manopola",
-        "mansarda",
-        "mantello",
-        "manubrio",
-        "manzo",
-        "mappa",
-        "mare",
-        "margine",
-        "marinaio",
-        "marmotta",
-        "marocco",
-        "martello",
-        "marzo",
-        "maschera",
-        "matrice",
-        "maturare",
-        "mazzetta",
-        "meandri",
-        "medaglia",
-        "medico",
-        "medusa",
-        "megafono",
-        "melone",
-        "membrana",
-        "menta",
-        "mercato",
-        "meritare",
-        "merluzzo",
-        "mese",
-        "mestiere",
-        "metafora",
-        "meteo",
-        "metodo",
-        "mettere",
-        "miele",
-        "miglio",
-        "miliardo",
-        "mimetica",
-        "minatore",
-        "minuto",
-        "miracolo",
-        "mirtillo",
-        "missile",
-        "mistero",
-        "misura",
-        "mito",
-        "mobile",
-        "moda",
-        "moderare",
-        "moglie",
-        "molecola",
-        "molle",
-        "momento",
-        "moneta",
-        "mongolia",
-        "monologo",
-        "montagna",
-        "morale",
-        "morbillo",
-        "mordere",
-        "mosaico",
-        "mosca",
-        "mostro",
-        "motivare",
-        "moto",
-        "mulino",
-        "mulo",
-        "muovere",
-        "muraglia",
-        "muscolo",
-        "museo",
-        "musica",
-        "mutande",
-        "nascere",
-        "nastro",
-        "natale",
-        "natura",
-        "nave",
-        "navigare",
-        "negare",
-        "negozio",
-        "nemico",
-        "nero",
-        "nervo",
-        "nessuno",
-        "nettare",
-        "neutroni",
-        "neve",
-        "nevicare",
-        "nicotina",
-        "nido",
-        "nipote",
-        "nocciola",
-        "noleggio",
-        "nome",
-        "nonno",
-        "norvegia",
-        "notare",
-        "notizia",
-        "nove",
-        "nucleo",
-        "nuda",
-        "nuotare",
-        "nutrire",
-        "obbligo",
-        "occhio",
-        "occupare",
-        "oceano",
-        "odissea",
-        "odore",
-        "offerta",
-        "officina",
-        "offrire",
-        "oggetto",
-        "oggi",
-        "olfatto",
-        "olio",
-        "oliva",
-        "ombelico",
-        "ombrello",
-        "omuncolo",
-        "ondata",
-        "onore",
-        "opera",
-        "opinione",
-        "opuscolo",
-        "opzione",
-        "orario",
-        "orbita",
-        "orchidea",
-        "ordine",
-        "orecchio",
-        "orgasmo",
-        "orgoglio",
-        "origine",
-        "orologio",
-        "oroscopo",
-        "orso",
-        "oscurare",
-        "ospedale",
-        "ospite",
-        "ossigeno",
-        "ostacolo",
-        "ostriche",
-        "ottenere",
-        "ottimo",
-        "ottobre",
-        "ovest",
-        "pacco",
-        "pace",
-        "pacifico",
-        "padella",
-        "pagare",
-        "pagina",
-        "pagnotta",
-        "palazzo",
-        "palestra",
-        "palpebre",
-        "pancetta",
-        "panfilo",
-        "panino",
-        "pannello",
-        "panorama",
-        "papa",
-        "paperino",
-        "paradiso",
-        "parcella",
-        "parente",
-        "parlare",
-        "parodia",
-        "parrucca",
-        "partire",
-        "passare",
-        "pasta",
-        "patata",
-        "patente",
-        "patogeno",
-        "patriota",
-        "pausa",
-        "pazienza",
-        "peccare",
-        "pecora",
-        "pedalare",
-        "pelare",
-        "pena",
-        "pendenza",
-        "penisola",
-        "pennello",
-        "pensare",
-        "pentirsi",
-        "percorso",
-        "perdono",
-        "perfetto",
-        "perizoma",
-        "perla",
-        "permesso",
-        "persona",
-        "pesare",
-        "pesce",
-        "peso",
-        "petardo",
-        "petrolio",
-        "pezzo",
-        "piacere",
-        "pianeta",
-        "piastra",
-        "piatto",
-        "piazza",
-        "piccolo",
-        "piede",
-        "piegare",
-        "pietra",
-        "pigiama",
-        "pigliare",
-        "pigrizia",
-        "pilastro",
-        "pilota",
-        "pinguino",
-        "pioggia",
-        "piombo",
-        "pionieri",
-        "piovra",
-        "pipa",
-        "pirata",
-        "pirolisi",
-        "piscina",
-        "pisolino",
-        "pista",
-        "pitone",
-        "piumino",
-        "pizza",
-        "plastica",
-        "platino",
-        "poesia",
-        "poiana",
-        "polaroid",
-        "polenta",
-        "polimero",
-        "pollo",
-        "polmone",
-        "polpetta",
-        "poltrona",
-        "pomodoro",
-        "pompa",
-        "popolo",
-        "porco",
-        "porta",
-        "porzione",
-        "possesso",
-        "postino",
-        "potassio",
-        "potere",
-        "poverino",
-        "pranzo",
-        "prato",
-        "prefisso",
-        "prelievo",
-        "premio",
-        "prendere",
-        "prestare",
-        "pretesa",
-        "prezzo",
-        "primario",
-        "privacy",
-        "problema",
-        "processo",
-        "prodotto",
-        "profeta",
-        "progetto",
-        "promessa",
-        "pronto",
-        "proposta",
-        "proroga",
-        "prossimo",
-        "proteina",
-        "prova",
-        "prudenza",
-        "pubblico",
-        "pudore",
-        "pugilato",
-        "pulire",
-        "pulsante",
-        "puntare",
-        "pupazzo",
-        "puzzle",
-        "quaderno",
-        "qualcuno",
-        "quarzo",
-        "quercia",
-        "quintale",
-        "rabbia",
-        "racconto",
-        "radice",
-        "raffica",
-        "ragazza",
-        "ragione",
-        "rammento",
-        "ramo",
-        "rana",
-        "randagio",
-        "rapace",
-        "rapinare",
-        "rapporto",
-        "rasatura",
-        "ravioli",
-        "reagire",
-        "realista",
-        "reattore",
-        "reazione",
-        "recitare",
-        "recluso",
-        "record",
-        "recupero",
-        "redigere",
-        "regalare",
-        "regina",
-        "regola",
-        "relatore",
-        "reliquia",
-        "remare",
-        "rendere",
-        "reparto",
-        "resina",
-        "resto",
-        "rete",
-        "retorica",
-        "rettile",
-        "revocare",
-        "riaprire",
-        "ribadire",
-        "ribelle",
-        "ricambio",
-        "ricetta",
-        "richiamo",
-        "ricordo",
-        "ridurre",
-        "riempire",
-        "riferire",
-        "riflesso",
-        "righello",
-        "rilancio",
-        "rilevare",
-        "rilievo",
-        "rimanere",
-        "rimborso",
-        "rinforzo",
-        "rinuncia",
-        "riparo",
-        "ripetere",
-        "riposare",
-        "ripulire",
-        "risalita",
-        "riscatto",
-        "riserva",
-        "riso",
-        "rispetto",
-        "ritaglio",
-        "ritmo",
-        "ritorno",
-        "ritratto",
-        "rituale",
-        "riunione",
-        "riuscire",
-        "riva",
-        "robotica",
-        "rondine",
-        "rosa",
-        "rospo",
-        "rosso",
-        "rotonda",
-        "rotta",
-        "roulotte",
-        "rubare",
-        "rubrica",
-        "ruffiano",
-        "rumore",
-        "ruota",
-        "ruscello",
-        "sabbia",
-        "sacco",
-        "saggio",
-        "sale",
-        "salire",
-        "salmone",
-        "salto",
-        "salutare",
-        "salvia",
-        "sangue",
-        "sanzioni",
-        "sapere",
-        "sapienza",
-        "sarcasmo",
-        "sardine",
-        "sartoria",
-        "sbalzo",
-        "sbarcare",
-        "sberla",
-        "sborsare",
-        "scadenza",
-        "scafo",
-        "scala",
-        "scambio",
-        "scappare",
-        "scarpa",
-        "scatola",
-        "scelta",
-        "scena",
-        "sceriffo",
-        "scheggia",
-        "schiuma",
-        "sciarpa",
-        "scienza",
-        "scimmia",
-        "sciopero",
-        "scivolo",
-        "sclerare",
-        "scolpire",
-        "sconto",
-        "scopa",
-        "scordare",
-        "scossa",
-        "scrivere",
-        "scrupolo",
-        "scuderia",
-        "scultore",
-        "scuola",
-        "scusare",
-        "sdraiare",
-        "secolo",
-        "sedativo",
-        "sedere",
-        "sedia",
-        "segare",
-        "segreto",
-        "seguire",
-        "semaforo",
-        "seme",
-        "senape",
-        "seno",
-        "sentiero",
-        "separare",
-        "sepolcro",
-        "sequenza",
-        "serata",
-        "serpente",
-        "servizio",
-        "sesso",
-        "seta",
-        "settore",
-        "sfamare",
-        "sfera",
-        "sfidare",
-        "sfiorare",
-        "sfogare",
-        "sgabello",
-        "sicuro",
-        "siepe",
-        "sigaro",
-        "silenzio",
-        "silicone",
-        "simbiosi",
-        "simpatia",
-        "simulare",
-        "sinapsi",
-        "sindrome",
-        "sinergia",
-        "sinonimo",
-        "sintonia",
-        "sirena",
-        "siringa",
-        "sistema",
-        "sito",
-        "smalto",
-        "smentire",
-        "smontare",
-        "soccorso",
-        "socio",
-        "soffitto",
-        "software",
-        "soggetto",
-        "sogliola",
-        "sognare",
-        "soldi",
-        "sole",
-        "sollievo",
-        "solo",
-        "sommario",
-        "sondare",
-        "sonno",
-        "sorpresa",
-        "sorriso",
-        "sospiro",
-        "sostegno",
-        "sovrano",
-        "spaccare",
-        "spada",
-        "spagnolo",
-        "spalla",
-        "sparire",
-        "spavento",
-        "spazio",
-        "specchio",
-        "spedire",
-        "spegnere",
-        "spendere",
-        "speranza",
-        "spessore",
-        "spezzare",
-        "spiaggia",
-        "spiccare",
-        "spiegare",
-        "spiffero",
-        "spingere",
-        "sponda",
-        "sporcare",
-        "spostare",
-        "spremuta",
-        "spugna",
-        "spumante",
-        "spuntare",
-        "squadra",
-        "squillo",
-        "staccare",
-        "stadio",
-        "stagione",
-        "stallone",
-        "stampa",
-        "stancare",
-        "starnuto",
-        "statura",
-        "stella",
-        "stendere",
-        "sterzo",
-        "stilista",
-        "stimolo",
-        "stinco",
-        "stiva",
-        "stoffa",
-        "storia",
-        "strada",
-        "stregone",
-        "striscia",
-        "studiare",
-        "stufa",
-        "stupendo",
-        "subire",
-        "successo",
-        "sudare",
-        "suono",
-        "superare",
-        "supporto",
-        "surfista",
-        "sussurro",
-        "svelto",
-        "svenire",
-        "sviluppo",
-        "svolta",
-        "svuotare",
-        "tabacco",
-        "tabella",
-        "tabu",
-        "tacchino",
-        "tacere",
-        "taglio",
-        "talento",
-        "tangente",
-        "tappeto",
-        "tartufo",
-        "tassello",
-        "tastiera",
-        "tavolo",
-        "tazza",
-        "teatro",
-        "tedesco",
-        "telaio",
-        "telefono",
-        "tema",
-        "temere",
-        "tempo",
-        "tendenza",
-        "tenebre",
-        "tensione",
-        "tentare",
-        "teologia",
-        "teorema",
-        "termica",
-        "terrazzo",
-        "teschio",
-        "tesi",
-        "tesoro",
-        "tessera",
-        "testa",
-        "thriller",
-        "tifoso",
-        "tigre",
-        "timbrare",
-        "timido",
-        "tinta",
-        "tirare",
-        "tisana",
-        "titano",
-        "titolo",
-        "toccare",
-        "togliere",
-        "topolino",
-        "torcia",
-        "torrente",
-        "tovaglia",
-        "traffico",
-        "tragitto",
-        "training",
-        "tramonto",
-        "transito",
-        "trapezio",
-        "trasloco",
-        "trattore",
-        "trazione",
-        "treccia",
-        "tregua",
-        "treno",
-        "triciclo",
-        "tridente",
-        "trilogia",
-        "tromba",
-        "troncare",
-        "trota",
-        "trovare",
-        "trucco",
-        "tubo",
-        "tulipano",
-        "tumulto",
-        "tunisia",
-        "tuono",
-        "turista",
-        "tuta",
-        "tutelare",
-        "tutore",
-        "ubriaco",
-        "uccello",
-        "udienza",
-        "udito",
-        "uffa",
-        "umanoide",
-        "umore",
-        "unghia",
-        "unguento",
-        "unicorno",
-        "unione",
-        "universo",
-        "uomo",
-        "uragano",
-        "uranio",
-        "urlare",
-        "uscire",
-        "utente",
-        "utilizzo",
-        "vacanza",
-        "vacca",
-        "vaglio",
-        "vagonata",
-        "valle",
-        "valore",
-        "valutare",
-        "valvola",
-        "vampiro",
-        "vaniglia",
-        "vanto",
-        "vapore",
-        "variante",
-        "vasca",
-        "vaselina",
-        "vassoio",
-        "vedere",
-        "vegetale",
-        "veglia",
-        "veicolo",
-        "vela",
-        "veleno",
-        "velivolo",
-        "velluto",
-        "vendere",
-        "venerare",
-        "venire",
-        "vento",
-        "veranda",
-        "verbo",
-        "verdura",
-        "vergine",
-        "verifica",
-        "vernice",
-        "vero",
-        "verruca",
-        "versare",
-        "vertebra",
-        "vescica",
-        "vespaio",
-        "vestito",
-        "vesuvio",
-        "veterano",
-        "vetro",
-        "vetta",
-        "viadotto",
-        "viaggio",
-        "vibrare",
-        "vicenda",
-        "vichingo",
-        "vietare",
-        "vigilare",
-        "vigneto",
-        "villa",
-        "vincere",
-        "violino",
-        "vipera",
-        "virgola",
-        "virtuoso",
-        "visita",
-        "vita",
-        "vitello",
-        "vittima",
-        "vivavoce",
-        "vivere",
-        "viziato",
-        "voglia",
-        "volare",
-        "volpe",
-        "volto",
-        "volume",
-        "vongole",
-        "voragine",
-        "vortice",
-        "votare",
-        "vulcano",
-        "vuotare",
-        "zabaione",
-        "zaffiro",
-        "zainetto",
-        "zampa",
-        "zanzara",
-        "zattera",
-        "zavorra",
-        "zenzero",
-        "zero",
-        "zingaro",
-        "zittire",
-        "zoccolo",
-        "zolfo",
-        "zombie",
-        "zucchero"
-	];
-}
\ No newline at end of file
diff --git a/cw_haven/lib/mnemonics/japanese.dart b/cw_haven/lib/mnemonics/japanese.dart
deleted file mode 100644
index 5d17fdb14..000000000
--- a/cw_haven/lib/mnemonics/japanese.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class JapaneseMnemonics {
-  static const words = [
-    "あいこくしん",
-    "あいさつ",
-    "あいだ",
-    "あおぞら",
-    "あかちゃん",
-    "あきる",
-    "あけがた",
-    "あける",
-    "あこがれる",
-    "あさい",
-    "あさひ",
-    "あしあと",
-    "あじわう",
-    "あずかる",
-    "あずき",
-    "あそぶ",
-    "あたえる",
-    "あたためる",
-    "あたりまえ",
-    "あたる",
-    "あつい",
-    "あつかう",
-    "あっしゅく",
-    "あつまり",
-    "あつめる",
-    "あてな",
-    "あてはまる",
-    "あひる",
-    "あぶら",
-    "あぶる",
-    "あふれる",
-    "あまい",
-    "あまど",
-    "あまやかす",
-    "あまり",
-    "あみもの",
-    "あめりか",
-    "あやまる",
-    "あゆむ",
-    "あらいぐま",
-    "あらし",
-    "あらすじ",
-    "あらためる",
-    "あらゆる",
-    "あらわす",
-    "ありがとう",
-    "あわせる",
-    "あわてる",
-    "あんい",
-    "あんがい",
-    "あんこ",
-    "あんぜん",
-    "あんてい",
-    "あんない",
-    "あんまり",
-    "いいだす",
-    "いおん",
-    "いがい",
-    "いがく",
-    "いきおい",
-    "いきなり",
-    "いきもの",
-    "いきる",
-    "いくじ",
-    "いくぶん",
-    "いけばな",
-    "いけん",
-    "いこう",
-    "いこく",
-    "いこつ",
-    "いさましい",
-    "いさん",
-    "いしき",
-    "いじゅう",
-    "いじょう",
-    "いじわる",
-    "いずみ",
-    "いずれ",
-    "いせい",
-    "いせえび",
-    "いせかい",
-    "いせき",
-    "いぜん",
-    "いそうろう",
-    "いそがしい",
-    "いだい",
-    "いだく",
-    "いたずら",
-    "いたみ",
-    "いたりあ",
-    "いちおう",
-    "いちじ",
-    "いちど",
-    "いちば",
-    "いちぶ",
-    "いちりゅう",
-    "いつか",
-    "いっしゅん",
-    "いっせい",
-    "いっそう",
-    "いったん",
-    "いっち",
-    "いってい",
-    "いっぽう",
-    "いてざ",
-    "いてん",
-    "いどう",
-    "いとこ",
-    "いない",
-    "いなか",
-    "いねむり",
-    "いのち",
-    "いのる",
-    "いはつ",
-    "いばる",
-    "いはん",
-    "いびき",
-    "いひん",
-    "いふく",
-    "いへん",
-    "いほう",
-    "いみん",
-    "いもうと",
-    "いもたれ",
-    "いもり",
-    "いやがる",
-    "いやす",
-    "いよかん",
-    "いよく",
-    "いらい",
-    "いらすと",
-    "いりぐち",
-    "いりょう",
-    "いれい",
-    "いれもの",
-    "いれる",
-    "いろえんぴつ",
-    "いわい",
-    "いわう",
-    "いわかん",
-    "いわば",
-    "いわゆる",
-    "いんげんまめ",
-    "いんさつ",
-    "いんしょう",
-    "いんよう",
-    "うえき",
-    "うえる",
-    "うおざ",
-    "うがい",
-    "うかぶ",
-    "うかべる",
-    "うきわ",
-    "うくらいな",
-    "うくれれ",
-    "うけたまわる",
-    "うけつけ",
-    "うけとる",
-    "うけもつ",
-    "うける",
-    "うごかす",
-    "うごく",
-    "うこん",
-    "うさぎ",
-    "うしなう",
-    "うしろがみ",
-    "うすい",
-    "うすぎ",
-    "うすぐらい",
-    "うすめる",
-    "うせつ",
-    "うちあわせ",
-    "うちがわ",
-    "うちき",
-    "うちゅう",
-    "うっかり",
-    "うつくしい",
-    "うったえる",
-    "うつる",
-    "うどん",
-    "うなぎ",
-    "うなじ",
-    "うなずく",
-    "うなる",
-    "うねる",
-    "うのう",
-    "うぶげ",
-    "うぶごえ",
-    "うまれる",
-    "うめる",
-    "うもう",
-    "うやまう",
-    "うよく",
-    "うらがえす",
-    "うらぐち",
-    "うらない",
-    "うりあげ",
-    "うりきれ",
-    "うるさい",
-    "うれしい",
-    "うれゆき",
-    "うれる",
-    "うろこ",
-    "うわき",
-    "うわさ",
-    "うんこう",
-    "うんちん",
-    "うんてん",
-    "うんどう",
-    "えいえん",
-    "えいが",
-    "えいきょう",
-    "えいご",
-    "えいせい",
-    "えいぶん",
-    "えいよう",
-    "えいわ",
-    "えおり",
-    "えがお",
-    "えがく",
-    "えきたい",
-    "えくせる",
-    "えしゃく",
-    "えすて",
-    "えつらん",
-    "えのぐ",
-    "えほうまき",
-    "えほん",
-    "えまき",
-    "えもじ",
-    "えもの",
-    "えらい",
-    "えらぶ",
-    "えりあ",
-    "えんえん",
-    "えんかい",
-    "えんぎ",
-    "えんげき",
-    "えんしゅう",
-    "えんぜつ",
-    "えんそく",
-    "えんちょう",
-    "えんとつ",
-    "おいかける",
-    "おいこす",
-    "おいしい",
-    "おいつく",
-    "おうえん",
-    "おうさま",
-    "おうじ",
-    "おうせつ",
-    "おうたい",
-    "おうふく",
-    "おうべい",
-    "おうよう",
-    "おえる",
-    "おおい",
-    "おおう",
-    "おおどおり",
-    "おおや",
-    "おおよそ",
-    "おかえり",
-    "おかず",
-    "おがむ",
-    "おかわり",
-    "おぎなう",
-    "おきる",
-    "おくさま",
-    "おくじょう",
-    "おくりがな",
-    "おくる",
-    "おくれる",
-    "おこす",
-    "おこなう",
-    "おこる",
-    "おさえる",
-    "おさない",
-    "おさめる",
-    "おしいれ",
-    "おしえる",
-    "おじぎ",
-    "おじさん",
-    "おしゃれ",
-    "おそらく",
-    "おそわる",
-    "おたがい",
-    "おたく",
-    "おだやか",
-    "おちつく",
-    "おっと",
-    "おつり",
-    "おでかけ",
-    "おとしもの",
-    "おとなしい",
-    "おどり",
-    "おどろかす",
-    "おばさん",
-    "おまいり",
-    "おめでとう",
-    "おもいで",
-    "おもう",
-    "おもたい",
-    "おもちゃ",
-    "おやつ",
-    "おやゆび",
-    "およぼす",
-    "おらんだ",
-    "おろす",
-    "おんがく",
-    "おんけい",
-    "おんしゃ",
-    "おんせん",
-    "おんだん",
-    "おんちゅう",
-    "おんどけい",
-    "かあつ",
-    "かいが",
-    "がいき",
-    "がいけん",
-    "がいこう",
-    "かいさつ",
-    "かいしゃ",
-    "かいすいよく",
-    "かいぜん",
-    "かいぞうど",
-    "かいつう",
-    "かいてん",
-    "かいとう",
-    "かいふく",
-    "がいへき",
-    "かいほう",
-    "かいよう",
-    "がいらい",
-    "かいわ",
-    "かえる",
-    "かおり",
-    "かかえる",
-    "かがく",
-    "かがし",
-    "かがみ",
-    "かくご",
-    "かくとく",
-    "かざる",
-    "がぞう",
-    "かたい",
-    "かたち",
-    "がちょう",
-    "がっきゅう",
-    "がっこう",
-    "がっさん",
-    "がっしょう",
-    "かなざわし",
-    "かのう",
-    "がはく",
-    "かぶか",
-    "かほう",
-    "かほご",
-    "かまう",
-    "かまぼこ",
-    "かめれおん",
-    "かゆい",
-    "かようび",
-    "からい",
-    "かるい",
-    "かろう",
-    "かわく",
-    "かわら",
-    "がんか",
-    "かんけい",
-    "かんこう",
-    "かんしゃ",
-    "かんそう",
-    "かんたん",
-    "かんち",
-    "がんばる",
-    "きあい",
-    "きあつ",
-    "きいろ",
-    "ぎいん",
-    "きうい",
-    "きうん",
-    "きえる",
-    "きおう",
-    "きおく",
-    "きおち",
-    "きおん",
-    "きかい",
-    "きかく",
-    "きかんしゃ",
-    "ききて",
-    "きくばり",
-    "きくらげ",
-    "きけんせい",
-    "きこう",
-    "きこえる",
-    "きこく",
-    "きさい",
-    "きさく",
-    "きさま",
-    "きさらぎ",
-    "ぎじかがく",
-    "ぎしき",
-    "ぎじたいけん",
-    "ぎじにってい",
-    "ぎじゅつしゃ",
-    "きすう",
-    "きせい",
-    "きせき",
-    "きせつ",
-    "きそう",
-    "きぞく",
-    "きぞん",
-    "きたえる",
-    "きちょう",
-    "きつえん",
-    "ぎっちり",
-    "きつつき",
-    "きつね",
-    "きてい",
-    "きどう",
-    "きどく",
-    "きない",
-    "きなが",
-    "きなこ",
-    "きぬごし",
-    "きねん",
-    "きのう",
-    "きのした",
-    "きはく",
-    "きびしい",
-    "きひん",
-    "きふく",
-    "きぶん",
-    "きぼう",
-    "きほん",
-    "きまる",
-    "きみつ",
-    "きむずかしい",
-    "きめる",
-    "きもだめし",
-    "きもち",
-    "きもの",
-    "きゃく",
-    "きやく",
-    "ぎゅうにく",
-    "きよう",
-    "きょうりゅう",
-    "きらい",
-    "きらく",
-    "きりん",
-    "きれい",
-    "きれつ",
-    "きろく",
-    "ぎろん",
-    "きわめる",
-    "ぎんいろ",
-    "きんかくじ",
-    "きんじょ",
-    "きんようび",
-    "ぐあい",
-    "くいず",
-    "くうかん",
-    "くうき",
-    "くうぐん",
-    "くうこう",
-    "ぐうせい",
-    "くうそう",
-    "ぐうたら",
-    "くうふく",
-    "くうぼ",
-    "くかん",
-    "くきょう",
-    "くげん",
-    "ぐこう",
-    "くさい",
-    "くさき",
-    "くさばな",
-    "くさる",
-    "くしゃみ",
-    "くしょう",
-    "くすのき",
-    "くすりゆび",
-    "くせげ",
-    "くせん",
-    "ぐたいてき",
-    "くださる",
-    "くたびれる",
-    "くちこみ",
-    "くちさき",
-    "くつした",
-    "ぐっすり",
-    "くつろぐ",
-    "くとうてん",
-    "くどく",
-    "くなん",
-    "くねくね",
-    "くのう",
-    "くふう",
-    "くみあわせ",
-    "くみたてる",
-    "くめる",
-    "くやくしょ",
-    "くらす",
-    "くらべる",
-    "くるま",
-    "くれる",
-    "くろう",
-    "くわしい",
-    "ぐんかん",
-    "ぐんしょく",
-    "ぐんたい",
-    "ぐんて",
-    "けあな",
-    "けいかく",
-    "けいけん",
-    "けいこ",
-    "けいさつ",
-    "げいじゅつ",
-    "けいたい",
-    "げいのうじん",
-    "けいれき",
-    "けいろ",
-    "けおとす",
-    "けおりもの",
-    "げきか",
-    "げきげん",
-    "げきだん",
-    "げきちん",
-    "げきとつ",
-    "げきは",
-    "げきやく",
-    "げこう",
-    "げこくじょう",
-    "げざい",
-    "けさき",
-    "げざん",
-    "けしき",
-    "けしごむ",
-    "けしょう",
-    "げすと",
-    "けたば",
-    "けちゃっぷ",
-    "けちらす",
-    "けつあつ",
-    "けつい",
-    "けつえき",
-    "けっこん",
-    "けつじょ",
-    "けっせき",
-    "けってい",
-    "けつまつ",
-    "げつようび",
-    "げつれい",
-    "けつろん",
-    "げどく",
-    "けとばす",
-    "けとる",
-    "けなげ",
-    "けなす",
-    "けなみ",
-    "けぬき",
-    "げねつ",
-    "けねん",
-    "けはい",
-    "げひん",
-    "けぶかい",
-    "げぼく",
-    "けまり",
-    "けみかる",
-    "けむし",
-    "けむり",
-    "けもの",
-    "けらい",
-    "けろけろ",
-    "けわしい",
-    "けんい",
-    "けんえつ",
-    "けんお",
-    "けんか",
-    "げんき",
-    "けんげん",
-    "けんこう",
-    "けんさく",
-    "けんしゅう",
-    "けんすう",
-    "げんそう",
-    "けんちく",
-    "けんてい",
-    "けんとう",
-    "けんない",
-    "けんにん",
-    "げんぶつ",
-    "けんま",
-    "けんみん",
-    "けんめい",
-    "けんらん",
-    "けんり",
-    "こあくま",
-    "こいぬ",
-    "こいびと",
-    "ごうい",
-    "こうえん",
-    "こうおん",
-    "こうかん",
-    "ごうきゅう",
-    "ごうけい",
-    "こうこう",
-    "こうさい",
-    "こうじ",
-    "こうすい",
-    "ごうせい",
-    "こうそく",
-    "こうたい",
-    "こうちゃ",
-    "こうつう",
-    "こうてい",
-    "こうどう",
-    "こうない",
-    "こうはい",
-    "ごうほう",
-    "ごうまん",
-    "こうもく",
-    "こうりつ",
-    "こえる",
-    "こおり",
-    "ごかい",
-    "ごがつ",
-    "ごかん",
-    "こくご",
-    "こくさい",
-    "こくとう",
-    "こくない",
-    "こくはく",
-    "こぐま",
-    "こけい",
-    "こける",
-    "ここのか",
-    "こころ",
-    "こさめ",
-    "こしつ",
-    "こすう",
-    "こせい",
-    "こせき",
-    "こぜん",
-    "こそだて",
-    "こたい",
-    "こたえる",
-    "こたつ",
-    "こちょう",
-    "こっか",
-    "こつこつ",
-    "こつばん",
-    "こつぶ",
-    "こてい",
-    "こてん",
-    "ことがら",
-    "ことし",
-    "ことば",
-    "ことり",
-    "こなごな",
-    "こねこね",
-    "このまま",
-    "このみ",
-    "このよ",
-    "ごはん",
-    "こひつじ",
-    "こふう",
-    "こふん",
-    "こぼれる",
-    "ごまあぶら",
-    "こまかい",
-    "ごますり",
-    "こまつな",
-    "こまる",
-    "こむぎこ",
-    "こもじ",
-    "こもち",
-    "こもの",
-    "こもん",
-    "こやく",
-    "こやま",
-    "こゆう",
-    "こゆび",
-    "こよい",
-    "こよう",
-    "こりる",
-    "これくしょん",
-    "ころっけ",
-    "こわもて",
-    "こわれる",
-    "こんいん",
-    "こんかい",
-    "こんき",
-    "こんしゅう",
-    "こんすい",
-    "こんだて",
-    "こんとん",
-    "こんなん",
-    "こんびに",
-    "こんぽん",
-    "こんまけ",
-    "こんや",
-    "こんれい",
-    "こんわく",
-    "ざいえき",
-    "さいかい",
-    "さいきん",
-    "ざいげん",
-    "ざいこ",
-    "さいしょ",
-    "さいせい",
-    "ざいたく",
-    "ざいちゅう",
-    "さいてき",
-    "ざいりょう",
-    "さうな",
-    "さかいし",
-    "さがす",
-    "さかな",
-    "さかみち",
-    "さがる",
-    "さぎょう",
-    "さくし",
-    "さくひん",
-    "さくら",
-    "さこく",
-    "さこつ",
-    "さずかる",
-    "ざせき",
-    "さたん",
-    "さつえい",
-    "ざつおん",
-    "ざっか",
-    "ざつがく",
-    "さっきょく",
-    "ざっし",
-    "さつじん",
-    "ざっそう",
-    "さつたば",
-    "さつまいも",
-    "さてい",
-    "さといも",
-    "さとう",
-    "さとおや",
-    "さとし",
-    "さとる",
-    "さのう",
-    "さばく",
-    "さびしい",
-    "さべつ",
-    "さほう",
-    "さほど",
-    "さます",
-    "さみしい",
-    "さみだれ",
-    "さむけ",
-    "さめる",
-    "さやえんどう",
-    "さゆう",
-    "さよう",
-    "さよく",
-    "さらだ",
-    "ざるそば",
-    "さわやか",
-    "さわる",
-    "さんいん",
-    "さんか",
-    "さんきゃく",
-    "さんこう",
-    "さんさい",
-    "ざんしょ",
-    "さんすう",
-    "さんせい",
-    "さんそ",
-    "さんち",
-    "さんま",
-    "さんみ",
-    "さんらん",
-    "しあい",
-    "しあげ",
-    "しあさって",
-    "しあわせ",
-    "しいく",
-    "しいん",
-    "しうち",
-    "しえい",
-    "しおけ",
-    "しかい",
-    "しかく",
-    "じかん",
-    "しごと",
-    "しすう",
-    "じだい",
-    "したうけ",
-    "したぎ",
-    "したて",
-    "したみ",
-    "しちょう",
-    "しちりん",
-    "しっかり",
-    "しつじ",
-    "しつもん",
-    "してい",
-    "してき",
-    "してつ",
-    "じてん",
-    "じどう",
-    "しなぎれ",
-    "しなもの",
-    "しなん",
-    "しねま",
-    "しねん",
-    "しのぐ",
-    "しのぶ",
-    "しはい",
-    "しばかり",
-    "しはつ",
-    "しはらい",
-    "しはん",
-    "しひょう",
-    "しふく",
-    "じぶん",
-    "しへい",
-    "しほう",
-    "しほん",
-    "しまう",
-    "しまる",
-    "しみん",
-    "しむける",
-    "じむしょ",
-    "しめい",
-    "しめる",
-    "しもん",
-    "しゃいん",
-    "しゃうん",
-    "しゃおん",
-    "じゃがいも",
-    "しやくしょ",
-    "しゃくほう",
-    "しゃけん",
-    "しゃこ",
-    "しゃざい",
-    "しゃしん",
-    "しゃせん",
-    "しゃそう",
-    "しゃたい",
-    "しゃちょう",
-    "しゃっきん",
-    "じゃま",
-    "しゃりん",
-    "しゃれい",
-    "じゆう",
-    "じゅうしょ",
-    "しゅくはく",
-    "じゅしん",
-    "しゅっせき",
-    "しゅみ",
-    "しゅらば",
-    "じゅんばん",
-    "しょうかい",
-    "しょくたく",
-    "しょっけん",
-    "しょどう",
-    "しょもつ",
-    "しらせる",
-    "しらべる",
-    "しんか",
-    "しんこう",
-    "じんじゃ",
-    "しんせいじ",
-    "しんちく",
-    "しんりん",
-    "すあげ",
-    "すあし",
-    "すあな",
-    "ずあん",
-    "すいえい",
-    "すいか",
-    "すいとう",
-    "ずいぶん",
-    "すいようび",
-    "すうがく",
-    "すうじつ",
-    "すうせん",
-    "すおどり",
-    "すきま",
-    "すくう",
-    "すくない",
-    "すける",
-    "すごい",
-    "すこし",
-    "ずさん",
-    "すずしい",
-    "すすむ",
-    "すすめる",
-    "すっかり",
-    "ずっしり",
-    "ずっと",
-    "すてき",
-    "すてる",
-    "すねる",
-    "すのこ",
-    "すはだ",
-    "すばらしい",
-    "ずひょう",
-    "ずぶぬれ",
-    "すぶり",
-    "すふれ",
-    "すべて",
-    "すべる",
-    "ずほう",
-    "すぼん",
-    "すまい",
-    "すめし",
-    "すもう",
-    "すやき",
-    "すらすら",
-    "するめ",
-    "すれちがう",
-    "すろっと",
-    "すわる",
-    "すんぜん",
-    "すんぽう",
-    "せあぶら",
-    "せいかつ",
-    "せいげん",
-    "せいじ",
-    "せいよう",
-    "せおう",
-    "せかいかん",
-    "せきにん",
-    "せきむ",
-    "せきゆ",
-    "せきらんうん",
-    "せけん",
-    "せこう",
-    "せすじ",
-    "せたい",
-    "せたけ",
-    "せっかく",
-    "せっきゃく",
-    "ぜっく",
-    "せっけん",
-    "せっこつ",
-    "せっさたくま",
-    "せつぞく",
-    "せつだん",
-    "せつでん",
-    "せっぱん",
-    "せつび",
-    "せつぶん",
-    "せつめい",
-    "せつりつ",
-    "せなか",
-    "せのび",
-    "せはば",
-    "せびろ",
-    "せぼね",
-    "せまい",
-    "せまる",
-    "せめる",
-    "せもたれ",
-    "せりふ",
-    "ぜんあく",
-    "せんい",
-    "せんえい",
-    "せんか",
-    "せんきょ",
-    "せんく",
-    "せんげん",
-    "ぜんご",
-    "せんさい",
-    "せんしゅ",
-    "せんすい",
-    "せんせい",
-    "せんぞ",
-    "せんたく",
-    "せんちょう",
-    "せんてい",
-    "せんとう",
-    "せんぬき",
-    "せんねん",
-    "せんぱい",
-    "ぜんぶ",
-    "ぜんぽう",
-    "せんむ",
-    "せんめんじょ",
-    "せんもん",
-    "せんやく",
-    "せんゆう",
-    "せんよう",
-    "ぜんら",
-    "ぜんりゃく",
-    "せんれい",
-    "せんろ",
-    "そあく",
-    "そいとげる",
-    "そいね",
-    "そうがんきょう",
-    "そうき",
-    "そうご",
-    "そうしん",
-    "そうだん",
-    "そうなん",
-    "そうび",
-    "そうめん",
-    "そうり",
-    "そえもの",
-    "そえん",
-    "そがい",
-    "そげき",
-    "そこう",
-    "そこそこ",
-    "そざい",
-    "そしな",
-    "そせい",
-    "そせん",
-    "そそぐ",
-    "そだてる",
-    "そつう",
-    "そつえん",
-    "そっかん",
-    "そつぎょう",
-    "そっけつ",
-    "そっこう",
-    "そっせん",
-    "そっと",
-    "そとがわ",
-    "そとづら",
-    "そなえる",
-    "そなた",
-    "そふぼ",
-    "そぼく",
-    "そぼろ",
-    "そまつ",
-    "そまる",
-    "そむく",
-    "そむりえ",
-    "そめる",
-    "そもそも",
-    "そよかぜ",
-    "そらまめ",
-    "そろう",
-    "そんかい",
-    "そんけい",
-    "そんざい",
-    "そんしつ",
-    "そんぞく",
-    "そんちょう",
-    "ぞんび",
-    "ぞんぶん",
-    "そんみん",
-    "たあい",
-    "たいいん",
-    "たいうん",
-    "たいえき",
-    "たいおう",
-    "だいがく",
-    "たいき",
-    "たいぐう",
-    "たいけん",
-    "たいこ",
-    "たいざい",
-    "だいじょうぶ",
-    "だいすき",
-    "たいせつ",
-    "たいそう",
-    "だいたい",
-    "たいちょう",
-    "たいてい",
-    "だいどころ",
-    "たいない",
-    "たいねつ",
-    "たいのう",
-    "たいはん",
-    "だいひょう",
-    "たいふう",
-    "たいへん",
-    "たいほ",
-    "たいまつばな",
-    "たいみんぐ",
-    "たいむ",
-    "たいめん",
-    "たいやき",
-    "たいよう",
-    "たいら",
-    "たいりょく",
-    "たいる",
-    "たいわん",
-    "たうえ",
-    "たえる",
-    "たおす",
-    "たおる",
-    "たおれる",
-    "たかい",
-    "たかね",
-    "たきび",
-    "たくさん",
-    "たこく",
-    "たこやき",
-    "たさい",
-    "たしざん",
-    "だじゃれ",
-    "たすける",
-    "たずさわる",
-    "たそがれ",
-    "たたかう",
-    "たたく",
-    "ただしい",
-    "たたみ",
-    "たちばな",
-    "だっかい",
-    "だっきゃく",
-    "だっこ",
-    "だっしゅつ",
-    "だったい",
-    "たてる",
-    "たとえる",
-    "たなばた",
-    "たにん",
-    "たぬき",
-    "たのしみ",
-    "たはつ",
-    "たぶん",
-    "たべる",
-    "たぼう",
-    "たまご",
-    "たまる",
-    "だむる",
-    "ためいき",
-    "ためす",
-    "ためる",
-    "たもつ",
-    "たやすい",
-    "たよる",
-    "たらす",
-    "たりきほんがん",
-    "たりょう",
-    "たりる",
-    "たると",
-    "たれる",
-    "たれんと",
-    "たろっと",
-    "たわむれる",
-    "だんあつ",
-    "たんい",
-    "たんおん",
-    "たんか",
-    "たんき",
-    "たんけん",
-    "たんご",
-    "たんさん",
-    "たんじょうび",
-    "だんせい",
-    "たんそく",
-    "たんたい",
-    "だんち",
-    "たんてい",
-    "たんとう",
-    "だんな",
-    "たんにん",
-    "だんねつ",
-    "たんのう",
-    "たんぴん",
-    "だんぼう",
-    "たんまつ",
-    "たんめい",
-    "だんれつ",
-    "だんろ",
-    "だんわ",
-    "ちあい",
-    "ちあん",
-    "ちいき",
-    "ちいさい",
-    "ちえん",
-    "ちかい",
-    "ちから",
-    "ちきゅう",
-    "ちきん",
-    "ちけいず",
-    "ちけん",
-    "ちこく",
-    "ちさい",
-    "ちしき",
-    "ちしりょう",
-    "ちせい",
-    "ちそう",
-    "ちたい",
-    "ちたん",
-    "ちちおや",
-    "ちつじょ",
-    "ちてき",
-    "ちてん",
-    "ちぬき",
-    "ちぬり",
-    "ちのう",
-    "ちひょう",
-    "ちへいせん",
-    "ちほう",
-    "ちまた",
-    "ちみつ",
-    "ちみどろ",
-    "ちめいど",
-    "ちゃんこなべ",
-    "ちゅうい",
-    "ちゆりょく",
-    "ちょうし",
-    "ちょさくけん",
-    "ちらし",
-    "ちらみ",
-    "ちりがみ",
-    "ちりょう",
-    "ちるど",
-    "ちわわ",
-    "ちんたい",
-    "ちんもく",
-    "ついか",
-    "ついたち",
-    "つうか",
-    "つうじょう",
-    "つうはん",
-    "つうわ",
-    "つかう",
-    "つかれる",
-    "つくね",
-    "つくる",
-    "つけね",
-    "つける",
-    "つごう",
-    "つたえる",
-    "つづく",
-    "つつじ",
-    "つつむ",
-    "つとめる",
-    "つながる",
-    "つなみ",
-    "つねづね",
-    "つのる",
-    "つぶす",
-    "つまらない",
-    "つまる",
-    "つみき",
-    "つめたい",
-    "つもり",
-    "つもる",
-    "つよい",
-    "つるぼ",
-    "つるみく",
-    "つわもの",
-    "つわり",
-    "てあし",
-    "てあて",
-    "てあみ",
-    "ていおん",
-    "ていか",
-    "ていき",
-    "ていけい",
-    "ていこく",
-    "ていさつ",
-    "ていし",
-    "ていせい",
-    "ていたい",
-    "ていど",
-    "ていねい",
-    "ていひょう",
-    "ていへん",
-    "ていぼう",
-    "てうち",
-    "ておくれ",
-    "てきとう",
-    "てくび",
-    "でこぼこ",
-    "てさぎょう",
-    "てさげ",
-    "てすり",
-    "てそう",
-    "てちがい",
-    "てちょう",
-    "てつがく",
-    "てつづき",
-    "でっぱ",
-    "てつぼう",
-    "てつや",
-    "でぬかえ",
-    "てぬき",
-    "てぬぐい",
-    "てのひら",
-    "てはい",
-    "てぶくろ",
-    "てふだ",
-    "てほどき",
-    "てほん",
-    "てまえ",
-    "てまきずし",
-    "てみじか",
-    "てみやげ",
-    "てらす",
-    "てれび",
-    "てわけ",
-    "てわたし",
-    "でんあつ",
-    "てんいん",
-    "てんかい",
-    "てんき",
-    "てんぐ",
-    "てんけん",
-    "てんごく",
-    "てんさい",
-    "てんし",
-    "てんすう",
-    "でんち",
-    "てんてき",
-    "てんとう",
-    "てんない",
-    "てんぷら",
-    "てんぼうだい",
-    "てんめつ",
-    "てんらんかい",
-    "でんりょく",
-    "でんわ",
-    "どあい",
-    "といれ",
-    "どうかん",
-    "とうきゅう",
-    "どうぐ",
-    "とうし",
-    "とうむぎ",
-    "とおい",
-    "とおか",
-    "とおく",
-    "とおす",
-    "とおる",
-    "とかい",
-    "とかす",
-    "ときおり",
-    "ときどき",
-    "とくい",
-    "とくしゅう",
-    "とくてん",
-    "とくに",
-    "とくべつ",
-    "とけい",
-    "とける",
-    "とこや",
-    "とさか",
-    "としょかん",
-    "とそう",
-    "とたん",
-    "とちゅう",
-    "とっきゅう",
-    "とっくん",
-    "とつぜん",
-    "とつにゅう",
-    "とどける",
-    "ととのえる",
-    "とない",
-    "となえる",
-    "となり",
-    "とのさま",
-    "とばす",
-    "どぶがわ",
-    "とほう",
-    "とまる",
-    "とめる",
-    "ともだち",
-    "ともる",
-    "どようび",
-    "とらえる",
-    "とんかつ",
-    "どんぶり",
-    "ないかく",
-    "ないこう",
-    "ないしょ",
-    "ないす",
-    "ないせん",
-    "ないそう",
-    "なおす",
-    "ながい",
-    "なくす",
-    "なげる",
-    "なこうど",
-    "なさけ",
-    "なたでここ",
-    "なっとう",
-    "なつやすみ",
-    "ななおし",
-    "なにごと",
-    "なにもの",
-    "なにわ",
-    "なのか",
-    "なふだ",
-    "なまいき",
-    "なまえ",
-    "なまみ",
-    "なみだ",
-    "なめらか",
-    "なめる",
-    "なやむ",
-    "ならう",
-    "ならび",
-    "ならぶ",
-    "なれる",
-    "なわとび",
-    "なわばり",
-    "にあう",
-    "にいがた",
-    "にうけ",
-    "におい",
-    "にかい",
-    "にがて",
-    "にきび",
-    "にくしみ",
-    "にくまん",
-    "にげる",
-    "にさんかたんそ",
-    "にしき",
-    "にせもの",
-    "にちじょう",
-    "にちようび",
-    "にっか",
-    "にっき",
-    "にっけい",
-    "にっこう",
-    "にっさん",
-    "にっしょく",
-    "にっすう",
-    "にっせき",
-    "にってい",
-    "になう",
-    "にほん",
-    "にまめ",
-    "にもつ",
-    "にやり",
-    "にゅういん",
-    "にりんしゃ",
-    "にわとり",
-    "にんい",
-    "にんか",
-    "にんき",
-    "にんげん",
-    "にんしき",
-    "にんずう",
-    "にんそう",
-    "にんたい",
-    "にんち",
-    "にんてい",
-    "にんにく",
-    "にんぷ",
-    "にんまり",
-    "にんむ",
-    "にんめい",
-    "にんよう",
-    "ぬいくぎ",
-    "ぬかす",
-    "ぬぐいとる",
-    "ぬぐう",
-    "ぬくもり",
-    "ぬすむ",
-    "ぬまえび",
-    "ぬめり",
-    "ぬらす",
-    "ぬんちゃく",
-    "ねあげ",
-    "ねいき",
-    "ねいる",
-    "ねいろ",
-    "ねぐせ",
-    "ねくたい",
-    "ねくら",
-    "ねこぜ",
-    "ねこむ",
-    "ねさげ",
-    "ねすごす",
-    "ねそべる",
-    "ねだん",
-    "ねつい",
-    "ねっしん",
-    "ねつぞう",
-    "ねったいぎょ",
-    "ねぶそく",
-    "ねふだ",
-    "ねぼう",
-    "ねほりはほり",
-    "ねまき",
-    "ねまわし",
-    "ねみみ",
-    "ねむい",
-    "ねむたい",
-    "ねもと",
-    "ねらう",
-    "ねわざ",
-    "ねんいり",
-    "ねんおし",
-    "ねんかん",
-    "ねんきん",
-    "ねんぐ",
-    "ねんざ",
-    "ねんし",
-    "ねんちゃく",
-    "ねんど",
-    "ねんぴ",
-    "ねんぶつ",
-    "ねんまつ",
-    "ねんりょう",
-    "ねんれい",
-    "のいず",
-    "のおづま",
-    "のがす",
-    "のきなみ",
-    "のこぎり",
-    "のこす",
-    "のこる",
-    "のせる",
-    "のぞく",
-    "のぞむ",
-    "のたまう",
-    "のちほど",
-    "のっく",
-    "のばす",
-    "のはら",
-    "のべる",
-    "のぼる",
-    "のみもの",
-    "のやま",
-    "のらいぬ",
-    "のらねこ",
-    "のりもの",
-    "のりゆき",
-    "のれん",
-    "のんき",
-    "ばあい",
-    "はあく",
-    "ばあさん",
-    "ばいか",
-    "ばいく",
-    "はいけん",
-    "はいご",
-    "はいしん",
-    "はいすい",
-    "はいせん",
-    "はいそう",
-    "はいち",
-    "ばいばい",
-    "はいれつ",
-    "はえる",
-    "はおる",
-    "はかい",
-    "ばかり",
-    "はかる",
-    "はくしゅ",
-    "はけん",
-    "はこぶ",
-    "はさみ",
-    "はさん",
-    "はしご",
-    "ばしょ",
-    "はしる",
-    "はせる",
-    "ぱそこん",
-    "はそん",
-    "はたん",
-    "はちみつ",
-    "はつおん",
-    "はっかく",
-    "はづき",
-    "はっきり",
-    "はっくつ",
-    "はっけん",
-    "はっこう",
-    "はっさん",
-    "はっしん",
-    "はったつ",
-    "はっちゅう",
-    "はってん",
-    "はっぴょう",
-    "はっぽう",
-    "はなす",
-    "はなび",
-    "はにかむ",
-    "はぶらし",
-    "はみがき",
-    "はむかう",
-    "はめつ",
-    "はやい",
-    "はやし",
-    "はらう",
-    "はろうぃん",
-    "はわい",
-    "はんい",
-    "はんえい",
-    "はんおん",
-    "はんかく",
-    "はんきょう",
-    "ばんぐみ",
-    "はんこ",
-    "はんしゃ",
-    "はんすう",
-    "はんだん",
-    "ぱんち",
-    "ぱんつ",
-    "はんてい",
-    "はんとし",
-    "はんのう",
-    "はんぱ",
-    "はんぶん",
-    "はんぺん",
-    "はんぼうき",
-    "はんめい",
-    "はんらん",
-    "はんろん",
-    "ひいき",
-    "ひうん",
-    "ひえる",
-    "ひかく",
-    "ひかり",
-    "ひかる",
-    "ひかん",
-    "ひくい",
-    "ひけつ",
-    "ひこうき",
-    "ひこく",
-    "ひさい",
-    "ひさしぶり",
-    "ひさん",
-    "びじゅつかん",
-    "ひしょ"
-  ];
-}
\ No newline at end of file
diff --git a/cw_haven/lib/mnemonics/portuguese.dart b/cw_haven/lib/mnemonics/portuguese.dart
deleted file mode 100644
index bdd63d3b2..000000000
--- a/cw_haven/lib/mnemonics/portuguese.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class PortugueseMnemonics {
-  static const words = [
-    "abaular",
-    "abdominal",
-    "abeto",
-    "abissinio",
-    "abjeto",
-    "ablucao",
-    "abnegar",
-    "abotoar",
-    "abrutalhar",
-    "absurdo",
-    "abutre",
-    "acautelar",
-    "accessorios",
-    "acetona",
-    "achocolatado",
-    "acirrar",
-    "acne",
-    "acovardar",
-    "acrostico",
-    "actinomicete",
-    "acustico",
-    "adaptavel",
-    "adeus",
-    "adivinho",
-    "adjunto",
-    "admoestar",
-    "adnominal",
-    "adotivo",
-    "adquirir",
-    "adriatico",
-    "adsorcao",
-    "adutora",
-    "advogar",
-    "aerossol",
-    "afazeres",
-    "afetuoso",
-    "afixo",
-    "afluir",
-    "afortunar",
-    "afrouxar",
-    "aftosa",
-    "afunilar",
-    "agentes",
-    "agito",
-    "aglutinar",
-    "aiatola",
-    "aimore",
-    "aino",
-    "aipo",
-    "airoso",
-    "ajeitar",
-    "ajoelhar",
-    "ajudante",
-    "ajuste",
-    "alazao",
-    "albumina",
-    "alcunha",
-    "alegria",
-    "alexandre",
-    "alforriar",
-    "alguns",
-    "alhures",
-    "alivio",
-    "almoxarife",
-    "alotropico",
-    "alpiste",
-    "alquimista",
-    "alsaciano",
-    "altura",
-    "aluviao",
-    "alvura",
-    "amazonico",
-    "ambulatorio",
-    "ametodico",
-    "amizades",
-    "amniotico",
-    "amovivel",
-    "amurada",
-    "anatomico",
-    "ancorar",
-    "anexo",
-    "anfora",
-    "aniversario",
-    "anjo",
-    "anotar",
-    "ansioso",
-    "anturio",
-    "anuviar",
-    "anverso",
-    "anzol",
-    "aonde",
-    "apaziguar",
-    "apito",
-    "aplicavel",
-    "apoteotico",
-    "aprimorar",
-    "aprumo",
-    "apto",
-    "apuros",
-    "aquoso",
-    "arauto",
-    "arbusto",
-    "arduo",
-    "aresta",
-    "arfar",
-    "arguto",
-    "aritmetico",
-    "arlequim",
-    "armisticio",
-    "aromatizar",
-    "arpoar",
-    "arquivo",
-    "arrumar",
-    "arsenio",
-    "arturiano",
-    "aruaque",
-    "arvores",
-    "asbesto",
-    "ascorbico",
-    "aspirina",
-    "asqueroso",
-    "assustar",
-    "astuto",
-    "atazanar",
-    "ativo",
-    "atletismo",
-    "atmosferico",
-    "atormentar",
-    "atroz",
-    "aturdir",
-    "audivel",
-    "auferir",
-    "augusto",
-    "aula",
-    "aumento",
-    "aurora",
-    "autuar",
-    "avatar",
-    "avexar",
-    "avizinhar",
-    "avolumar",
-    "avulso",
-    "axiomatico",
-    "azerbaijano",
-    "azimute",
-    "azoto",
-    "azulejo",
-    "bacteriologista",
-    "badulaque",
-    "baforada",
-    "baixote",
-    "bajular",
-    "balzaquiana",
-    "bambuzal",
-    "banzo",
-    "baoba",
-    "baqueta",
-    "barulho",
-    "bastonete",
-    "batuta",
-    "bauxita",
-    "bavaro",
-    "bazuca",
-    "bcrepuscular",
-    "beato",
-    "beduino",
-    "begonia",
-    "behaviorista",
-    "beisebol",
-    "belzebu",
-    "bemol",
-    "benzido",
-    "beocio",
-    "bequer",
-    "berro",
-    "besuntar",
-    "betume",
-    "bexiga",
-    "bezerro",
-    "biatlon",
-    "biboca",
-    "bicuspide",
-    "bidirecional",
-    "bienio",
-    "bifurcar",
-    "bigorna",
-    "bijuteria",
-    "bimotor",
-    "binormal",
-    "bioxido",
-    "bipolarizacao",
-    "biquini",
-    "birutice",
-    "bisturi",
-    "bituca",
-    "biunivoco",
-    "bivalve",
-    "bizarro",
-    "blasfemo",
-    "blenorreia",
-    "blindar",
-    "bloqueio",
-    "blusao",
-    "boazuda",
-    "bofete",
-    "bojudo",
-    "bolso",
-    "bombordo",
-    "bonzo",
-    "botina",
-    "boquiaberto",
-    "bostoniano",
-    "botulismo",
-    "bourbon",
-    "bovino",
-    "boximane",
-    "bravura",
-    "brevidade",
-    "britar",
-    "broxar",
-    "bruno",
-    "bruxuleio",
-    "bubonico",
-    "bucolico",
-    "buda",
-    "budista",
-    "bueiro",
-    "buffer",
-    "bugre",
-    "bujao",
-    "bumerangue",
-    "burundines",
-    "busto",
-    "butique",
-    "buzios",
-    "caatinga",
-    "cabuqui",
-    "cacunda",
-    "cafuzo",
-    "cajueiro",
-    "camurca",
-    "canudo",
-    "caquizeiro",
-    "carvoeiro",
-    "casulo",
-    "catuaba",
-    "cauterizar",
-    "cebolinha",
-    "cedula",
-    "ceifeiro",
-    "celulose",
-    "cerzir",
-    "cesto",
-    "cetro",
-    "ceus",
-    "cevar",
-    "chavena",
-    "cheroqui",
-    "chita",
-    "chovido",
-    "chuvoso",
-    "ciatico",
-    "cibernetico",
-    "cicuta",
-    "cidreira",
-    "cientistas",
-    "cifrar",
-    "cigarro",
-    "cilio",
-    "cimo",
-    "cinzento",
-    "cioso",
-    "cipriota",
-    "cirurgico",
-    "cisto",
-    "citrico",
-    "ciumento",
-    "civismo",
-    "clavicula",
-    "clero",
-    "clitoris",
-    "cluster",
-    "coaxial",
-    "cobrir",
-    "cocota",
-    "codorniz",
-    "coexistir",
-    "cogumelo",
-    "coito",
-    "colusao",
-    "compaixao",
-    "comutativo",
-    "contentamento",
-    "convulsivo",
-    "coordenativa",
-    "coquetel",
-    "correto",
-    "corvo",
-    "costureiro",
-    "cotovia",
-    "covil",
-    "cozinheiro",
-    "cretino",
-    "cristo",
-    "crivo",
-    "crotalo",
-    "cruzes",
-    "cubo",
-    "cucuia",
-    "cueiro",
-    "cuidar",
-    "cujo",
-    "cultural",
-    "cunilingua",
-    "cupula",
-    "curvo",
-    "custoso",
-    "cutucar",
-    "czarismo",
-    "dablio",
-    "dacota",
-    "dados",
-    "daguerreotipo",
-    "daiquiri",
-    "daltonismo",
-    "damista",
-    "dantesco",
-    "daquilo",
-    "darwinista",
-    "dasein",
-    "dativo",
-    "deao",
-    "debutantes",
-    "decurso",
-    "deduzir",
-    "defunto",
-    "degustar",
-    "dejeto",
-    "deltoide",
-    "demover",
-    "denunciar",
-    "deputado",
-    "deque",
-    "dervixe",
-    "desvirtuar",
-    "deturpar",
-    "deuteronomio",
-    "devoto",
-    "dextrose",
-    "dezoito",
-    "diatribe",
-    "dicotomico",
-    "didatico",
-    "dietista",
-    "difuso",
-    "digressao",
-    "diluvio",
-    "diminuto",
-    "dinheiro",
-    "dinossauro",
-    "dioxido",
-    "diplomatico",
-    "dique",
-    "dirimivel",
-    "disturbio",
-    "diurno",
-    "divulgar",
-    "dizivel",
-    "doar",
-    "dobro",
-    "docura",
-    "dodoi",
-    "doer",
-    "dogue",
-    "doloso",
-    "domo",
-    "donzela",
-    "doping",
-    "dorsal",
-    "dossie",
-    "dote",
-    "doutro",
-    "doze",
-    "dravidico",
-    "dreno",
-    "driver",
-    "dropes",
-    "druso",
-    "dubnio",
-    "ducto",
-    "dueto",
-    "dulija",
-    "dundum",
-    "duodeno",
-    "duquesa",
-    "durou",
-    "duvidoso",
-    "duzia",
-    "ebano",
-    "ebrio",
-    "eburneo",
-    "echarpe",
-    "eclusa",
-    "ecossistema",
-    "ectoplasma",
-    "ecumenismo",
-    "eczema",
-    "eden",
-    "editorial",
-    "edredom",
-    "edulcorar",
-    "efetuar",
-    "efigie",
-    "efluvio",
-    "egiptologo",
-    "egresso",
-    "egua",
-    "einsteiniano",
-    "eira",
-    "eivar",
-    "eixos",
-    "ejetar",
-    "elastomero",
-    "eldorado",
-    "elixir",
-    "elmo",
-    "eloquente",
-    "elucidativo",
-    "emaranhar",
-    "embutir",
-    "emerito",
-    "emfa",
-    "emitir",
-    "emotivo",
-    "empuxo",
-    "emulsao",
-    "enamorar",
-    "encurvar",
-    "enduro",
-    "enevoar",
-    "enfurnar",
-    "enguico",
-    "enho",
-    "enigmista",
-    "enlutar",
-    "enormidade",
-    "enpreendimento",
-    "enquanto",
-    "enriquecer",
-    "enrugar",
-    "entusiastico",
-    "enunciar",
-    "envolvimento",
-    "enxuto",
-    "enzimatico",
-    "eolico",
-    "epiteto",
-    "epoxi",
-    "epura",
-    "equivoco",
-    "erario",
-    "erbio",
-    "ereto",
-    "erguido",
-    "erisipela",
-    "ermo",
-    "erotizar",
-    "erros",
-    "erupcao",
-    "ervilha",
-    "esburacar",
-    "escutar",
-    "esfuziante",
-    "esguio",
-    "esloveno",
-    "esmurrar",
-    "esoterismo",
-    "esperanca",
-    "espirito",
-    "espurio",
-    "essencialmente",
-    "esturricar",
-    "esvoacar",
-    "etario",
-    "eterno",
-    "etiquetar",
-    "etnologo",
-    "etos",
-    "etrusco",
-    "euclidiano",
-    "euforico",
-    "eugenico",
-    "eunuco",
-    "europio",
-    "eustaquio",
-    "eutanasia",
-    "evasivo",
-    "eventualidade",
-    "evitavel",
-    "evoluir",
-    "exaustor",
-    "excursionista",
-    "exercito",
-    "exfoliado",
-    "exito",
-    "exotico",
-    "expurgo",
-    "exsudar",
-    "extrusora",
-    "exumar",
-    "fabuloso",
-    "facultativo",
-    "fado",
-    "fagulha",
-    "faixas",
-    "fajuto",
-    "faltoso",
-    "famoso",
-    "fanzine",
-    "fapesp",
-    "faquir",
-    "fartura",
-    "fastio",
-    "faturista",
-    "fausto",
-    "favorito",
-    "faxineira",
-    "fazer",
-    "fealdade",
-    "febril",
-    "fecundo",
-    "fedorento",
-    "feerico",
-    "feixe",
-    "felicidade",
-    "felpudo",
-    "feltro",
-    "femur",
-    "fenotipo",
-    "fervura",
-    "festivo",
-    "feto",
-    "feudo",
-    "fevereiro",
-    "fezinha",
-    "fiasco",
-    "fibra",
-    "ficticio",
-    "fiduciario",
-    "fiesp",
-    "fifa",
-    "figurino",
-    "fijiano",
-    "filtro",
-    "finura",
-    "fiorde",
-    "fiquei",
-    "firula",
-    "fissurar",
-    "fitoteca",
-    "fivela",
-    "fixo",
-    "flavio",
-    "flexor",
-    "flibusteiro",
-    "flotilha",
-    "fluxograma",
-    "fobos",
-    "foco",
-    "fofura",
-    "foguista",
-    "foie",
-    "foliculo",
-    "fominha",
-    "fonte",
-    "forum",
-    "fosso",
-    "fotossintese",
-    "foxtrote",
-    "fraudulento",
-    "frevo",
-    "frivolo",
-    "frouxo",
-    "frutose",
-    "fuba",
-    "fucsia",
-    "fugitivo",
-    "fuinha",
-    "fujao",
-    "fulustreco",
-    "fumo",
-    "funileiro",
-    "furunculo",
-    "fustigar",
-    "futurologo",
-    "fuxico",
-    "fuzue",
-    "gabriel",
-    "gado",
-    "gaelico",
-    "gafieira",
-    "gaguejo",
-    "gaivota",
-    "gajo",
-    "galvanoplastico",
-    "gamo",
-    "ganso",
-    "garrucha",
-    "gastronomo",
-    "gatuno",
-    "gaussiano",
-    "gaviao",
-    "gaxeta",
-    "gazeteiro",
-    "gear",
-    "geiser",
-    "geminiano",
-    "generoso",
-    "genuino",
-    "geossinclinal",
-    "gerundio",
-    "gestual",
-    "getulista",
-    "gibi",
-    "gigolo",
-    "gilete",
-    "ginseng",
-    "giroscopio",
-    "glaucio",
-    "glacial",
-    "gleba",
-    "glifo",
-    "glote",
-    "glutonia",
-    "gnostico",
-    "goela",
-    "gogo",
-    "goitaca",
-    "golpista",
-    "gomo",
-    "gonzo",
-    "gorro",
-    "gostou",
-    "goticula",
-    "gourmet",
-    "governo",
-    "gozo",
-    "graxo",
-    "grevista",
-    "grito",
-    "grotesco",
-    "gruta",
-    "guaxinim",
-    "gude",
-    "gueto",
-    "guizo",
-    "guloso",
-    "gume",
-    "guru",
-    "gustativo",
-    "grelhado",
-    "gutural",
-    "habitue",
-    "haitiano",
-    "halterofilista",
-    "hamburguer",
-    "hanseniase",
-    "happening",
-    "harpista",
-    "hastear",
-    "haveres",
-    "hebreu",
-    "hectometro",
-    "hedonista",
-    "hegira",
-    "helena",
-    "helminto",
-    "hemorroidas",
-    "henrique",
-    "heptassilabo",
-    "hertziano",
-    "hesitar",
-    "heterossexual",
-    "heuristico",
-    "hexagono",
-    "hiato",
-    "hibrido",
-    "hidrostatico",
-    "hieroglifo",
-    "hifenizar",
-    "higienizar",
-    "hilario",
-    "himen",
-    "hino",
-    "hippie",
-    "hirsuto",
-    "historiografia",
-    "hitlerista",
-    "hodometro",
-    "hoje",
-    "holograma",
-    "homus",
-    "honroso",
-    "hoquei",
-    "horto",
-    "hostilizar",
-    "hotentote",
-    "huguenote",
-    "humilde",
-    "huno",
-    "hurra",
-    "hutu",
-    "iaia",
-    "ialorixa",
-    "iambico",
-    "iansa",
-    "iaque",
-    "iara",
-    "iatista",
-    "iberico",
-    "ibis",
-    "icar",
-    "iceberg",
-    "icosagono",
-    "idade",
-    "ideologo",
-    "idiotice",
-    "idoso",
-    "iemenita",
-    "iene",
-    "igarape",
-    "iglu",
-    "ignorar",
-    "igreja",
-    "iguaria",
-    "iidiche",
-    "ilativo",
-    "iletrado",
-    "ilharga",
-    "ilimitado",
-    "ilogismo",
-    "ilustrissimo",
-    "imaturo",
-    "imbuzeiro",
-    "imerso",
-    "imitavel",
-    "imovel",
-    "imputar",
-    "imutavel",
-    "inaveriguavel",
-    "incutir",
-    "induzir",
-    "inextricavel",
-    "infusao",
-    "ingua",
-    "inhame",
-    "iniquo",
-    "injusto",
-    "inning",
-    "inoxidavel",
-    "inquisitorial",
-    "insustentavel",
-    "intumescimento",
-    "inutilizavel",
-    "invulneravel",
-    "inzoneiro",
-    "iodo",
-    "iogurte",
-    "ioio",
-    "ionosfera",
-    "ioruba",
-    "iota",
-    "ipsilon",
-    "irascivel",
-    "iris",
-    "irlandes",
-    "irmaos",
-    "iroques",
-    "irrupcao",
-    "isca",
-    "isento",
-    "islandes",
-    "isotopo",
-    "isqueiro",
-    "israelita",
-    "isso",
-    "isto",
-    "iterbio",
-    "itinerario",
-    "itrio",
-    "iuane",
-    "iugoslavo",
-    "jabuticabeira",
-    "jacutinga",
-    "jade",
-    "jagunco",
-    "jainista",
-    "jaleco",
-    "jambo",
-    "jantarada",
-    "japones",
-    "jaqueta",
-    "jarro",
-    "jasmim",
-    "jato",
-    "jaula",
-    "javel",
-    "jazz",
-    "jegue",
-    "jeitoso",
-    "jejum",
-    "jenipapo",
-    "jeova",
-    "jequitiba",
-    "jersei",
-    "jesus",
-    "jetom",
-    "jiboia",
-    "jihad",
-    "jilo",
-    "jingle",
-    "jipe",
-    "jocoso",
-    "joelho",
-    "joguete",
-    "joio",
-    "jojoba",
-    "jorro",
-    "jota",
-    "joule",
-    "joviano",
-    "jubiloso",
-    "judoca",
-    "jugular",
-    "juizo",
-    "jujuba",
-    "juliano",
-    "jumento",
-    "junto",
-    "jururu",
-    "justo",
-    "juta",
-    "juventude",
-    "labutar",
-    "laguna",
-    "laico",
-    "lajota",
-    "lanterninha",
-    "lapso",
-    "laquear",
-    "lastro",
-    "lauto",
-    "lavrar",
-    "laxativo",
-    "lazer",
-    "leasing",
-    "lebre",
-    "lecionar",
-    "ledo",
-    "leguminoso",
-    "leitura",
-    "lele",
-    "lemure",
-    "lento",
-    "leonardo",
-    "leopardo",
-    "lepton",
-    "leque",
-    "leste",
-    "letreiro",
-    "leucocito",
-    "levitico",
-    "lexicologo",
-    "lhama",
-    "lhufas",
-    "liame",
-    "licoroso",
-    "lidocaina",
-    "liliputiano",
-    "limusine",
-    "linotipo",
-    "lipoproteina",
-    "liquidos",
-    "lirismo",
-    "lisura",
-    "liturgico",
-    "livros",
-    "lixo",
-    "lobulo",
-    "locutor",
-    "lodo",
-    "logro",
-    "lojista",
-    "lombriga",
-    "lontra",
-    "loop",
-    "loquaz",
-    "lorota",
-    "losango",
-    "lotus",
-    "louvor",
-    "luar",
-    "lubrificavel",
-    "lucros",
-    "lugubre",
-    "luis",
-    "luminoso",
-    "luneta",
-    "lustroso",
-    "luto",
-    "luvas",
-    "luxuriante",
-    "luzeiro",
-    "maduro",
-    "maestro",
-    "mafioso",
-    "magro",
-    "maiuscula",
-    "majoritario",
-    "malvisto",
-    "mamute",
-    "manutencao",
-    "mapoteca",
-    "maquinista",
-    "marzipa",
-    "masturbar",
-    "matuto",
-    "mausoleu",
-    "mavioso",
-    "maxixe",
-    "mazurca",
-    "meandro",
-    "mecha",
-    "medusa",
-    "mefistofelico",
-    "megera",
-    "meirinho",
-    "melro",
-    "memorizar",
-    "menu",
-    "mequetrefe",
-    "mertiolate",
-    "mestria",
-    "metroviario",
-    "mexilhao",
-    "mezanino",
-    "miau",
-    "microssegundo",
-    "midia",
-    "migratorio",
-    "mimosa",
-    "minuto",
-    "miosotis",
-    "mirtilo",
-    "misturar",
-    "mitzvah",
-    "miudos",
-    "mixuruca",
-    "mnemonico",
-    "moagem",
-    "mobilizar",
-    "modulo",
-    "moer",
-    "mofo",
-    "mogno",
-    "moita",
-    "molusco",
-    "monumento",
-    "moqueca",
-    "morubixaba",
-    "mostruario",
-    "motriz",
-    "mouse",
-    "movivel",
-    "mozarela",
-    "muarra",
-    "muculmano",
-    "mudo",
-    "mugir",
-    "muitos",
-    "mumunha",
-    "munir",
-    "muon",
-    "muquira",
-    "murros",
-    "musselina",
-    "nacoes",
-    "nado",
-    "naftalina",
-    "nago",
-    "naipe",
-    "naja",
-    "nalgum",
-    "namoro",
-    "nanquim",
-    "napolitano",
-    "naquilo",
-    "nascimento",
-    "nautilo",
-    "navios",
-    "nazista",
-    "nebuloso",
-    "nectarina",
-    "nefrologo",
-    "negus",
-    "nelore",
-    "nenufar",
-    "nepotismo",
-    "nervura",
-    "neste",
-    "netuno",
-    "neutron",
-    "nevoeiro",
-    "newtoniano",
-    "nexo",
-    "nhenhenhem",
-    "nhoque",
-    "nigeriano",
-    "niilista",
-    "ninho",
-    "niobio",
-    "niponico",
-    "niquelar",
-    "nirvana",
-    "nisto",
-    "nitroglicerina",
-    "nivoso",
-    "nobreza",
-    "nocivo",
-    "noel",
-    "nogueira",
-    "noivo",
-    "nojo",
-    "nominativo",
-    "nonuplo",
-    "noruegues",
-    "nostalgico",
-    "noturno",
-    "nouveau",
-    "nuanca",
-    "nublar",
-    "nucleotideo",
-    "nudista",
-    "nulo",
-    "numismatico",
-    "nunquinha",
-    "nupcias",
-    "nutritivo",
-    "nuvens",
-    "oasis",
-    "obcecar",
-    "obeso",
-    "obituario",
-    "objetos",
-    "oblongo",
-    "obnoxio",
-    "obrigatorio",
-    "obstruir",
-    "obtuso",
-    "obus",
-    "obvio",
-    "ocaso",
-    "occipital",
-    "oceanografo",
-    "ocioso",
-    "oclusivo",
-    "ocorrer",
-    "ocre",
-    "octogono",
-    "odalisca",
-    "odisseia",
-    "odorifico",
-    "oersted",
-    "oeste",
-    "ofertar",
-    "ofidio",
-    "oftalmologo",
-    "ogiva",
-    "ogum",
-    "oigale",
-    "oitavo",
-    "oitocentos",
-    "ojeriza",
-    "olaria",
-    "oleoso",
-    "olfato",
-    "olhos",
-    "oliveira",
-    "olmo",
-    "olor",
-    "olvidavel",
-    "ombudsman",
-    "omeleteira",
-    "omitir",
-    "omoplata",
-    "onanismo",
-    "ondular",
-    "oneroso",
-    "onomatopeico",
-    "ontologico",
-    "onus",
-    "onze",
-    "opalescente",
-    "opcional",
-    "operistico",
-    "opio",
-    "oposto",
-    "oprobrio",
-    "optometrista",
-    "opusculo",
-    "oratorio",
-    "orbital",
-    "orcar",
-    "orfao",
-    "orixa",
-    "orla",
-    "ornitologo",
-    "orquidea",
-    "ortorrombico",
-    "orvalho",
-    "osculo",
-    "osmotico",
-    "ossudo",
-    "ostrogodo",
-    "otario",
-    "otite",
-    "ouro",
-    "ousar",
-    "outubro",
-    "ouvir",
-    "ovario",
-    "overnight",
-    "oviparo",
-    "ovni",
-    "ovoviviparo",
-    "ovulo",
-    "oxala",
-    "oxente",
-    "oxiuro",
-    "oxossi",
-    "ozonizar",
-    "paciente",
-    "pactuar",
-    "padronizar",
-    "paete",
-    "pagodeiro",
-    "paixao",
-    "pajem",
-    "paludismo",
-    "pampas",
-    "panturrilha",
-    "papudo",
-    "paquistanes",
-    "pastoso",
-    "patua",
-    "paulo",
-    "pauzinhos",
-    "pavoroso",
-    "paxa",
-    "pazes",
-    "peao",
-    "pecuniario",
-    "pedunculo",
-    "pegaso",
-    "peixinho",
-    "pejorativo",
-    "pelvis",
-    "penuria",
-    "pequno",
-    "petunia",
-    "pezada",
-    "piauiense",
-    "pictorico",
-    "pierro",
-    "pigmeu",
-    "pijama",
-    "pilulas",
-    "pimpolho",
-    "pintura",
-    "piorar",
-    "pipocar",
-    "piqueteiro",
-    "pirulito",
-    "pistoleiro",
-    "pituitaria",
-    "pivotar",
-    "pixote",
-    "pizzaria",
-    "plistoceno",
-    "plotar",
-    "pluviometrico",
-    "pneumonico",
-    "poco",
-    "podridao",
-    "poetisa",
-    "pogrom",
-    "pois",
-    "polvorosa",
-    "pomposo",
-    "ponderado",
-    "pontudo",
-    "populoso",
-    "poquer",
-    "porvir",
-    "posudo",
-    "potro",
-    "pouso",
-    "povoar",
-    "prazo",
-    "prezar",
-    "privilegios",
-    "proximo",
-    "prussiano",
-    "pseudopode",
-    "psoriase",
-    "pterossauros",
-    "ptialina",
-    "ptolemaico",
-    "pudor",
-    "pueril",
-    "pufe",
-    "pugilista",
-    "puir",
-    "pujante",
-    "pulverizar",
-    "pumba",
-    "punk",
-    "purulento",
-    "pustula",
-    "putsch",
-    "puxe",
-    "quatrocentos",
-    "quetzal",
-    "quixotesco",
-    "quotizavel",
-    "rabujice",
-    "racista",
-    "radonio",
-    "rafia",
-    "ragu",
-    "rajado",
-    "ralo",
-    "rampeiro",
-    "ranzinza",
-    "raptor",
-    "raquitismo",
-    "raro",
-    "rasurar",
-    "ratoeira",
-    "ravioli",
-    "razoavel",
-    "reavivar",
-    "rebuscar",
-    "recusavel",
-    "reduzivel",
-    "reexposicao",
-    "refutavel",
-    "regurgitar",
-    "reivindicavel",
-    "rejuvenescimento",
-    "relva",
-    "remuneravel",
-    "renunciar",
-    "reorientar",
-    "repuxo",
-    "requisito",
-    "resumo",
-    "returno",
-    "reutilizar",
-    "revolvido",
-    "rezonear",
-    "riacho",
-    "ribossomo",
-    "ricota",
-    "ridiculo",
-    "rifle",
-    "rigoroso",
-    "rijo",
-    "rimel",
-    "rins",
-    "rios",
-    "riqueza",
-    "respeito",
-    "rissole",
-    "ritualistico",
-    "rivalizar",
-    "rixa",
-    "robusto",
-    "rococo",
-    "rodoviario",
-    "roer",
-    "rogo",
-    "rojao",
-    "rolo",
-    "rompimento",
-    "ronronar",
-    "roqueiro",
-    "rorqual",
-    "rosto",
-    "rotundo",
-    "rouxinol",
-    "roxo",
-    "royal",
-    "ruas",
-    "rucula",
-    "rudimentos",
-    "ruela",
-    "rufo",
-    "rugoso",
-    "ruivo",
-    "rule",
-    "rumoroso",
-    "runico",
-    "ruptura",
-    "rural",
-    "rustico",
-    "rutilar",
-    "saariano",
-    "sabujo",
-    "sacudir",
-    "sadomasoquista",
-    "safra",
-    "sagui",
-    "sais",
-    "samurai",
-    "santuario",
-    "sapo",
-    "saquear",
-    "sartriano",
-    "saturno",
-    "saude",
-    "sauva",
-    "saveiro",
-    "saxofonista",
-    "sazonal",
-    "scherzo",
-    "script",
-    "seara",
-    "seborreia",
-    "secura",
-    "seduzir",
-    "sefardim",
-    "seguro",
-    "seja",
-    "selvas",
-    "sempre",
-    "senzala",
-    "sepultura",
-    "sequoia",
-    "sestercio",
-    "setuplo",
-    "seus",
-    "seviciar",
-    "sezonismo",
-    "shalom",
-    "siames",
-    "sibilante",
-    "sicrano",
-    "sidra",
-    "sifilitico",
-    "signos",
-    "silvo",
-    "simultaneo",
-    "sinusite",
-    "sionista",
-    "sirio",
-    "sisudo",
-    "situar",
-    "sivan",
-    "slide",
-    "slogan",
-    "soar",
-    "sobrio",
-    "socratico",
-    "sodomizar",
-    "soerguer",
-    "software",
-    "sogro",
-    "soja",
-    "solver",
-    "somente",
-    "sonso",
-    "sopro",
-    "soquete",
-    "sorveteiro",
-    "sossego",
-    "soturno",
-    "sousafone",
-    "sovinice",
-    "sozinho",
-    "suavizar",
-    "subverter",
-    "sucursal",
-    "sudoriparo",
-    "sufragio",
-    "sugestoes",
-    "suite",
-    "sujo",
-    "sultao",
-    "sumula",
-    "suntuoso",
-    "suor",
-    "supurar",
-    "suruba",
-    "susto",
-    "suturar",
-    "suvenir",
-    "tabuleta",
-    "taco",
-    "tadjique",
-    "tafeta",
-    "tagarelice",
-    "taitiano",
-    "talvez",
-    "tampouco",
-    "tanzaniano",
-    "taoista",
-    "tapume",
-    "taquion",
-    "tarugo",
-    "tascar",
-    "tatuar",
-    "tautologico",
-    "tavola",
-    "taxionomista",
-    "tchecoslovaco",
-    "teatrologo",
-    "tectonismo",
-    "tedioso",
-    "teflon",
-    "tegumento",
-    "teixo",
-    "telurio",
-    "temporas",
-    "tenue",
-    "teosofico",
-    "tepido",
-    "tequila",
-    "terrorista",
-    "testosterona",
-    "tetrico",
-    "teutonico",
-    "teve",
-    "texugo",
-    "tiara",
-    "tibia",
-    "tiete",
-    "tifoide",
-    "tigresa",
-    "tijolo",
-    "tilintar",
-    "timpano",
-    "tintureiro",
-    "tiquete",
-    "tiroteio",
-    "tisico",
-    "titulos",
-    "tive",
-    "toar",
-    "toboga",
-    "tofu",
-    "togoles",
-    "toicinho",
-    "tolueno",
-    "tomografo",
-    "tontura",
-    "toponimo",
-    "toquio",
-    "torvelinho",
-    "tostar",
-    "toto",
-    "touro",
-    "toxina",
-    "trazer",
-    "trezentos",
-    "trivialidade",
-    "trovoar",
-    "truta",
-    "tuaregue",
-    "tubular",
-    "tucano",
-    "tudo",
-    "tufo",
-    "tuiste",
-    "tulipa",
-    "tumultuoso",
-    "tunisino",
-    "tupiniquim",
-    "turvo",
-    "tutu",
-    "ucraniano",
-    "udenista",
-    "ufanista",
-    "ufologo",
-    "ugaritico",
-    "uiste",
-    "uivo",
-    "ulceroso",
-    "ulema",
-    "ultravioleta",
-    "umbilical",
-    "umero",
-    "umido",
-    "umlaut",
-    "unanimidade",
-    "unesco",
-    "ungulado",
-    "unheiro",
-    "univoco",
-    "untuoso",
-    "urano",
-    "urbano",
-    "urdir",
-    "uretra",
-    "urgente",
-    "urinol",
-    "urna",
-    "urologo",
-    "urro",
-    "ursulina",
-    "urtiga",
-    "urupe",
-    "usavel",
-    "usbeque",
-    "usei",
-    "usineiro",
-    "usurpar",
-    "utero",
-    "utilizar",
-    "utopico",
-    "uvular",
-    "uxoricidio",
-    "vacuo",
-    "vadio",
-    "vaguear",
-    "vaivem",
-    "valvula",
-    "vampiro",
-    "vantajoso",
-    "vaporoso",
-    "vaquinha",
-    "varziano",
-    "vasto",
-    "vaticinio",
-    "vaudeville",
-    "vazio",
-    "veado",
-    "vedico",
-    "veemente",
-    "vegetativo",
-    "veio",
-    "veja",
-    "veludo",
-    "venusiano",
-    "verdade",
-    "verve",
-    "vestuario",
-    "vetusto",
-    "vexatorio",
-    "vezes",
-    "viavel",
-    "vibratorio",
-    "victor",
-    "vicunha",
-    "vidros",
-    "vietnamita",
-    "vigoroso",
-    "vilipendiar",
-    "vime",
-    "vintem",
-    "violoncelo",
-    "viquingue",
-    "virus",
-    "visualizar",
-    "vituperio",
-    "viuvo",
-    "vivo",
-    "vizir",
-    "voar",
-    "vociferar",
-    "vodu",
-    "vogar",
-    "voile",
-    "volver",
-    "vomito",
-    "vontade",
-    "vortice",
-    "vosso",
-    "voto",
-    "vovozinha",
-    "voyeuse",
-    "vozes",
-    "vulva",
-    "vupt",
-    "western",
-    "xadrez",
-    "xale",
-    "xampu",
-    "xango",
-    "xarope",
-    "xaual",
-    "xavante",
-    "xaxim",
-    "xenonio",
-    "xepa",
-    "xerox",
-    "xicara",
-    "xifopago",
-    "xiita",
-    "xilogravura",
-    "xinxim",
-    "xistoso",
-    "xixi",
-    "xodo",
-    "xogum",
-    "xucro",
-    "zabumba",
-    "zagueiro",
-    "zambiano",
-    "zanzar",
-    "zarpar",
-    "zebu",
-    "zefiro",
-    "zeloso",
-    "zenite",
-    "zumbi"
-  ];
-}
\ No newline at end of file
diff --git a/cw_haven/lib/mnemonics/russian.dart b/cw_haven/lib/mnemonics/russian.dart
deleted file mode 100644
index f10af0ff6..000000000
--- a/cw_haven/lib/mnemonics/russian.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class RussianMnemonics {
-  static const words = [
-    "абажур",
-    "абзац",
-    "абонент",
-    "абрикос",
-    "абсурд",
-    "авангард",
-    "август",
-    "авиация",
-    "авоська",
-    "автор",
-    "агат",
-    "агент",
-    "агитатор",
-    "агнец",
-    "агония",
-    "агрегат",
-    "адвокат",
-    "адмирал",
-    "адрес",
-    "ажиотаж",
-    "азарт",
-    "азбука",
-    "азот",
-    "аист",
-    "айсберг",
-    "академия",
-    "аквариум",
-    "аккорд",
-    "акробат",
-    "аксиома",
-    "актер",
-    "акула",
-    "акция",
-    "алгоритм",
-    "алебарда",
-    "аллея",
-    "алмаз",
-    "алтарь",
-    "алфавит",
-    "алхимик",
-    "алый",
-    "альбом",
-    "алюминий",
-    "амбар",
-    "аметист",
-    "амнезия",
-    "ампула",
-    "амфора",
-    "анализ",
-    "ангел",
-    "анекдот",
-    "анимация",
-    "анкета",
-    "аномалия",
-    "ансамбль",
-    "антенна",
-    "апатия",
-    "апельсин",
-    "апофеоз",
-    "аппарат",
-    "апрель",
-    "аптека",
-    "арабский",
-    "арбуз",
-    "аргумент",
-    "арест",
-    "ария",
-    "арка",
-    "армия",
-    "аромат",
-    "арсенал",
-    "артист",
-    "архив",
-    "аршин",
-    "асбест",
-    "аскетизм",
-    "аспект",
-    "ассорти",
-    "астроном",
-    "асфальт",
-    "атака",
-    "ателье",
-    "атлас",
-    "атом",
-    "атрибут",
-    "аудитор",
-    "аукцион",
-    "аура",
-    "афера",
-    "афиша",
-    "ахинея",
-    "ацетон",
-    "аэропорт",
-    "бабушка",
-    "багаж",
-    "бадья",
-    "база",
-    "баклажан",
-    "балкон",
-    "бампер",
-    "банк",
-    "барон",
-    "бассейн",
-    "батарея",
-    "бахрома",
-    "башня",
-    "баян",
-    "бегство",
-    "бедро",
-    "бездна",
-    "бекон",
-    "белый",
-    "бензин",
-    "берег",
-    "беседа",
-    "бетонный",
-    "биатлон",
-    "библия",
-    "бивень",
-    "бигуди",
-    "бидон",
-    "бизнес",
-    "бикини",
-    "билет",
-    "бинокль",
-    "биология",
-    "биржа",
-    "бисер",
-    "битва",
-    "бицепс",
-    "благо",
-    "бледный",
-    "близкий",
-    "блок",
-    "блуждать",
-    "блюдо",
-    "бляха",
-    "бобер",
-    "богатый",
-    "бодрый",
-    "боевой",
-    "бокал",
-    "большой",
-    "борьба",
-    "босой",
-    "ботинок",
-    "боцман",
-    "бочка",
-    "боярин",
-    "брать",
-    "бревно",
-    "бригада",
-    "бросать",
-    "брызги",
-    "брюки",
-    "бублик",
-    "бугор",
-    "будущее",
-    "буква",
-    "бульвар",
-    "бумага",
-    "бунт",
-    "бурный",
-    "бусы",
-    "бутылка",
-    "буфет",
-    "бухта",
-    "бушлат",
-    "бывалый",
-    "быль",
-    "быстрый",
-    "быть",
-    "бюджет",
-    "бюро",
-    "бюст",
-    "вагон",
-    "важный",
-    "ваза",
-    "вакцина",
-    "валюта",
-    "вампир",
-    "ванная",
-    "вариант",
-    "вассал",
-    "вата",
-    "вафля",
-    "вахта",
-    "вдова",
-    "вдыхать",
-    "ведущий",
-    "веер",
-    "вежливый",
-    "везти",
-    "веко",
-    "великий",
-    "вена",
-    "верить",
-    "веселый",
-    "ветер",
-    "вечер",
-    "вешать",
-    "вещь",
-    "веяние",
-    "взаимный",
-    "взбучка",
-    "взвод",
-    "взгляд",
-    "вздыхать",
-    "взлетать",
-    "взмах",
-    "взнос",
-    "взор",
-    "взрыв",
-    "взывать",
-    "взятка",
-    "вибрация",
-    "визит",
-    "вилка",
-    "вино",
-    "вирус",
-    "висеть",
-    "витрина",
-    "вихрь",
-    "вишневый",
-    "включать",
-    "вкус",
-    "власть",
-    "влечь",
-    "влияние",
-    "влюблять",
-    "внешний",
-    "внимание",
-    "внук",
-    "внятный",
-    "вода",
-    "воевать",
-    "вождь",
-    "воздух",
-    "войти",
-    "вокзал",
-    "волос",
-    "вопрос",
-    "ворота",
-    "восток",
-    "впадать",
-    "впускать",
-    "врач",
-    "время",
-    "вручать",
-    "всадник",
-    "всеобщий",
-    "вспышка",
-    "встреча",
-    "вторник",
-    "вулкан",
-    "вурдалак",
-    "входить",
-    "въезд",
-    "выбор",
-    "вывод",
-    "выгодный",
-    "выделять",
-    "выезжать",
-    "выживать",
-    "вызывать",
-    "выигрыш",
-    "вылезать",
-    "выносить",
-    "выпивать",
-    "высокий",
-    "выходить",
-    "вычет",
-    "вышка",
-    "выяснять",
-    "вязать",
-    "вялый",
-    "гавань",
-    "гадать",
-    "газета",
-    "гаишник",
-    "галстук",
-    "гамма",
-    "гарантия",
-    "гастроли",
-    "гвардия",
-    "гвоздь",
-    "гектар",
-    "гель",
-    "генерал",
-    "геолог",
-    "герой",
-    "гешефт",
-    "гибель",
-    "гигант",
-    "гильза",
-    "гимн",
-    "гипотеза",
-    "гитара",
-    "глаз",
-    "глина",
-    "глоток",
-    "глубокий",
-    "глыба",
-    "глядеть",
-    "гнать",
-    "гнев",
-    "гнить",
-    "гном",
-    "гнуть",
-    "говорить",
-    "годовой",
-    "голова",
-    "гонка",
-    "город",
-    "гость",
-    "готовый",
-    "граница",
-    "грех",
-    "гриб",
-    "громкий",
-    "группа",
-    "грызть",
-    "грязный",
-    "губа",
-    "гудеть",
-    "гулять",
-    "гуманный",
-    "густой",
-    "гуща",
-    "давать",
-    "далекий",
-    "дама",
-    "данные",
-    "дарить",
-    "дать",
-    "дача",
-    "дверь",
-    "движение",
-    "двор",
-    "дебют",
-    "девушка",
-    "дедушка",
-    "дежурный",
-    "дезертир",
-    "действие",
-    "декабрь",
-    "дело",
-    "демократ",
-    "день",
-    "депутат",
-    "держать",
-    "десяток",
-    "детский",
-    "дефицит",
-    "дешевый",
-    "деятель",
-    "джаз",
-    "джинсы",
-    "джунгли",
-    "диалог",
-    "диван",
-    "диета",
-    "дизайн",
-    "дикий",
-    "динамика",
-    "диплом",
-    "директор",
-    "диск",
-    "дитя",
-    "дичь",
-    "длинный",
-    "дневник",
-    "добрый",
-    "доверие",
-    "договор",
-    "дождь",
-    "доза",
-    "документ",
-    "должен",
-    "домашний",
-    "допрос",
-    "дорога",
-    "доход",
-    "доцент",
-    "дочь",
-    "дощатый",
-    "драка",
-    "древний",
-    "дрожать",
-    "друг",
-    "дрянь",
-    "дубовый",
-    "дуга",
-    "дудка",
-    "дукат",
-    "дуло",
-    "думать",
-    "дупло",
-    "дурак",
-    "дуть",
-    "духи",
-    "душа",
-    "дуэт",
-    "дымить",
-    "дыня",
-    "дыра",
-    "дыханье",
-    "дышать",
-    "дьявол",
-    "дюжина",
-    "дюйм",
-    "дюна",
-    "дядя",
-    "дятел",
-    "егерь",
-    "единый",
-    "едкий",
-    "ежевика",
-    "ежик",
-    "езда",
-    "елка",
-    "емкость",
-    "ерунда",
-    "ехать",
-    "жадный",
-    "жажда",
-    "жалеть",
-    "жанр",
-    "жара",
-    "жать",
-    "жгучий",
-    "ждать",
-    "жевать",
-    "желание",
-    "жемчуг",
-    "женщина",
-    "жертва",
-    "жесткий",
-    "жечь",
-    "живой",
-    "жидкость",
-    "жизнь",
-    "жилье",
-    "жирный",
-    "житель",
-    "журнал",
-    "жюри",
-    "забывать",
-    "завод",
-    "загадка",
-    "задача",
-    "зажечь",
-    "зайти",
-    "закон",
-    "замечать",
-    "занимать",
-    "западный",
-    "зарплата",
-    "засыпать",
-    "затрата",
-    "захват",
-    "зацепка",
-    "зачет",
-    "защита",
-    "заявка",
-    "звать",
-    "звезда",
-    "звонить",
-    "звук",
-    "здание",
-    "здешний",
-    "здоровье",
-    "зебра",
-    "зевать",
-    "зеленый",
-    "земля",
-    "зенит",
-    "зеркало",
-    "зефир",
-    "зигзаг",
-    "зима",
-    "зиять",
-    "злак",
-    "злой",
-    "змея",
-    "знать",
-    "зной",
-    "зодчий",
-    "золотой",
-    "зомби",
-    "зона",
-    "зоопарк",
-    "зоркий",
-    "зрачок",
-    "зрение",
-    "зритель",
-    "зубной",
-    "зыбкий",
-    "зять",
-    "игла",
-    "иголка",
-    "играть",
-    "идея",
-    "идиот",
-    "идол",
-    "идти",
-    "иерархия",
-    "избрать",
-    "известие",
-    "изгонять",
-    "издание",
-    "излагать",
-    "изменять",
-    "износ",
-    "изоляция",
-    "изрядный",
-    "изучать",
-    "изымать",
-    "изящный",
-    "икона",
-    "икра",
-    "иллюзия",
-    "имбирь",
-    "иметь",
-    "имидж",
-    "иммунный",
-    "империя",
-    "инвестор",
-    "индивид",
-    "инерция",
-    "инженер",
-    "иномарка",
-    "институт",
-    "интерес",
-    "инфекция",
-    "инцидент",
-    "ипподром",
-    "ирис",
-    "ирония",
-    "искать",
-    "история",
-    "исходить",
-    "исчезать",
-    "итог",
-    "июль",
-    "июнь",
-    "кабинет",
-    "кавалер",
-    "кадр",
-    "казарма",
-    "кайф",
-    "кактус",
-    "калитка",
-    "камень",
-    "канал",
-    "капитан",
-    "картина",
-    "касса",
-    "катер",
-    "кафе",
-    "качество",
-    "каша",
-    "каюта",
-    "квартира",
-    "квинтет",
-    "квота",
-    "кедр",
-    "кекс",
-    "кенгуру",
-    "кепка",
-    "керосин",
-    "кетчуп",
-    "кефир",
-    "кибитка",
-    "кивнуть",
-    "кидать",
-    "километр",
-    "кино",
-    "киоск",
-    "кипеть",
-    "кирпич",
-    "кисть",
-    "китаец",
-    "класс",
-    "клетка",
-    "клиент",
-    "клоун",
-    "клуб",
-    "клык",
-    "ключ",
-    "клятва",
-    "книга",
-    "кнопка",
-    "кнут",
-    "князь",
-    "кобура",
-    "ковер",
-    "коготь",
-    "кодекс",
-    "кожа",
-    "козел",
-    "койка",
-    "коктейль",
-    "колено",
-    "компания",
-    "конец",
-    "копейка",
-    "короткий",
-    "костюм",
-    "котел",
-    "кофе",
-    "кошка",
-    "красный",
-    "кресло",
-    "кричать",
-    "кровь",
-    "крупный",
-    "крыша",
-    "крючок",
-    "кубок",
-    "кувшин",
-    "кудрявый",
-    "кузов",
-    "кукла",
-    "культура",
-    "кумир",
-    "купить",
-    "курс",
-    "кусок",
-    "кухня",
-    "куча",
-    "кушать",
-    "кювет",
-    "лабиринт",
-    "лавка",
-    "лагерь",
-    "ладонь",
-    "лазерный",
-    "лайнер",
-    "лакей",
-    "лампа",
-    "ландшафт",
-    "лапа",
-    "ларек",
-    "ласковый",
-    "лауреат",
-    "лачуга",
-    "лаять",
-    "лгать",
-    "лебедь",
-    "левый",
-    "легкий",
-    "ледяной",
-    "лежать",
-    "лекция",
-    "лента",
-    "лепесток",
-    "лесной",
-    "лето",
-    "лечь",
-    "леший",
-    "лживый",
-    "либерал",
-    "ливень",
-    "лига",
-    "лидер",
-    "ликовать",
-    "лиловый",
-    "лимон",
-    "линия",
-    "липа",
-    "лирика",
-    "лист",
-    "литр",
-    "лифт",
-    "лихой",
-    "лицо",
-    "личный",
-    "лишний",
-    "лобовой",
-    "ловить",
-    "логика",
-    "лодка",
-    "ложка",
-    "лозунг",
-    "локоть",
-    "ломать",
-    "лоно",
-    "лопата",
-    "лорд",
-    "лось",
-    "лоток",
-    "лохматый",
-    "лошадь",
-    "лужа",
-    "лукавый",
-    "луна",
-    "лупить",
-    "лучший",
-    "лыжный",
-    "лысый",
-    "львиный",
-    "льгота",
-    "льдина",
-    "любить",
-    "людской",
-    "люстра",
-    "лютый",
-    "лягушка",
-    "магазин",
-    "мадам",
-    "мазать",
-    "майор",
-    "максимум",
-    "мальчик",
-    "манера",
-    "март",
-    "масса",
-    "мать",
-    "мафия",
-    "махать",
-    "мачта",
-    "машина",
-    "маэстро",
-    "маяк",
-    "мгла",
-    "мебель",
-    "медведь",
-    "мелкий",
-    "мемуары",
-    "менять",
-    "мера",
-    "место",
-    "метод",
-    "механизм",
-    "мечтать",
-    "мешать",
-    "миграция",
-    "мизинец",
-    "микрофон",
-    "миллион",
-    "минута",
-    "мировой",
-    "миссия",
-    "митинг",
-    "мишень",
-    "младший",
-    "мнение",
-    "мнимый",
-    "могила",
-    "модель",
-    "мозг",
-    "мойка",
-    "мокрый",
-    "молодой",
-    "момент",
-    "монах",
-    "море",
-    "мост",
-    "мотор",
-    "мохнатый",
-    "мочь",
-    "мошенник",
-    "мощный",
-    "мрачный",
-    "мстить",
-    "мудрый",
-    "мужчина",
-    "музыка",
-    "мука",
-    "мумия",
-    "мундир",
-    "муравей",
-    "мусор",
-    "мутный",
-    "муфта",
-    "муха",
-    "мучить",
-    "мушкетер",
-    "мыло",
-    "мысль",
-    "мыть",
-    "мычать",
-    "мышь",
-    "мэтр",
-    "мюзикл",
-    "мягкий",
-    "мякиш",
-    "мясо",
-    "мятый",
-    "мячик",
-    "набор",
-    "навык",
-    "нагрузка",
-    "надежда",
-    "наемный",
-    "нажать",
-    "называть",
-    "наивный",
-    "накрыть",
-    "налог",
-    "намерен",
-    "наносить",
-    "написать",
-    "народ",
-    "натура",
-    "наука",
-    "нация",
-    "начать",
-    "небо",
-    "невеста",
-    "негодяй",
-    "неделя",
-    "нежный",
-    "незнание",
-    "нелепый",
-    "немалый",
-    "неправда",
-    "нервный",
-    "нести",
-    "нефть",
-    "нехватка",
-    "нечистый",
-    "неясный",
-    "нива",
-    "нижний",
-    "низкий",
-    "никель",
-    "нирвана",
-    "нить",
-    "ничья",
-    "ниша",
-    "нищий",
-    "новый",
-    "нога",
-    "ножницы",
-    "ноздря",
-    "ноль",
-    "номер",
-    "норма",
-    "нота",
-    "ночь",
-    "ноша",
-    "ноябрь",
-    "нрав",
-    "нужный",
-    "нутро",
-    "нынешний",
-    "нырнуть",
-    "ныть",
-    "нюанс",
-    "нюхать",
-    "няня",
-    "оазис",
-    "обаяние",
-    "обвинять",
-    "обгонять",
-    "обещать",
-    "обжигать",
-    "обзор",
-    "обида",
-    "область",
-    "обмен",
-    "обнимать",
-    "оборона",
-    "образ",
-    "обучение",
-    "обходить",
-    "обширный",
-    "общий",
-    "объект",
-    "обычный",
-    "обязать",
-    "овальный",
-    "овес",
-    "овощи",
-    "овраг",
-    "овца",
-    "овчарка",
-    "огненный",
-    "огонь",
-    "огромный",
-    "огурец",
-    "одежда",
-    "одинокий",
-    "одобрить",
-    "ожидать",
-    "ожог",
-    "озарение",
-    "озеро",
-    "означать",
-    "оказать",
-    "океан",
-    "оклад",
-    "окно",
-    "округ",
-    "октябрь",
-    "окурок",
-    "олень",
-    "опасный",
-    "операция",
-    "описать",
-    "оплата",
-    "опора",
-    "оппонент",
-    "опрос",
-    "оптимизм",
-    "опускать",
-    "опыт",
-    "орать",
-    "орбита",
-    "орган",
-    "орден",
-    "орел",
-    "оригинал",
-    "оркестр",
-    "орнамент",
-    "оружие",
-    "осадок",
-    "освещать",
-    "осень",
-    "осина",
-    "осколок",
-    "осмотр",
-    "основной",
-    "особый",
-    "осуждать",
-    "отбор",
-    "отвечать",
-    "отдать",
-    "отец",
-    "отзыв",
-    "открытие",
-    "отмечать",
-    "относить",
-    "отпуск",
-    "отрасль",
-    "отставка",
-    "оттенок",
-    "отходить",
-    "отчет",
-    "отъезд",
-    "офицер",
-    "охапка",
-    "охота",
-    "охрана",
-    "оценка",
-    "очаг",
-    "очередь",
-    "очищать",
-    "очки",
-    "ошейник",
-    "ошибка",
-    "ощущение",
-    "павильон",
-    "падать",
-    "паек",
-    "пакет",
-    "палец",
-    "память",
-    "панель",
-    "папка",
-    "партия",
-    "паспорт",
-    "патрон",
-    "пауза",
-    "пафос",
-    "пахнуть",
-    "пациент",
-    "пачка",
-    "пашня",
-    "певец",
-    "педагог",
-    "пейзаж",
-    "пельмень",
-    "пенсия",
-    "пепел",
-    "период",
-    "песня",
-    "петля",
-    "пехота",
-    "печать",
-    "пешеход",
-    "пещера",
-    "пианист",
-    "пиво",
-    "пиджак",
-    "пиковый",
-    "пилот",
-    "пионер",
-    "пирог",
-    "писать",
-    "пить",
-    "пицца",
-    "пишущий",
-    "пища",
-    "план",
-    "плечо",
-    "плита",
-    "плохой",
-    "плыть",
-    "плюс",
-    "пляж",
-    "победа",
-    "повод",
-    "погода",
-    "подумать",
-    "поехать",
-    "пожимать",
-    "позиция",
-    "поиск",
-    "покой",
-    "получать",
-    "помнить",
-    "пони",
-    "поощрять",
-    "попадать",
-    "порядок",
-    "пост",
-    "поток",
-    "похожий",
-    "поцелуй",
-    "почва",
-    "пощечина",
-    "поэт",
-    "пояснить",
-    "право",
-    "предмет",
-    "проблема",
-    "пруд",
-    "прыгать",
-    "прямой",
-    "психолог",
-    "птица",
-    "публика",
-    "пугать",
-    "пудра",
-    "пузырь",
-    "пуля",
-    "пункт",
-    "пурга",
-    "пустой",
-    "путь",
-    "пухлый",
-    "пучок",
-    "пушистый",
-    "пчела",
-    "пшеница",
-    "пыль",
-    "пытка",
-    "пыхтеть",
-    "пышный",
-    "пьеса",
-    "пьяный",
-    "пятно",
-    "работа",
-    "равный",
-    "радость",
-    "развитие",
-    "район",
-    "ракета",
-    "рамка",
-    "ранний",
-    "рапорт",
-    "рассказ",
-    "раунд",
-    "рация",
-    "рвать",
-    "реальный",
-    "ребенок",
-    "реветь",
-    "регион",
-    "редакция",
-    "реестр",
-    "режим",
-    "резкий",
-    "рейтинг",
-    "река",
-    "религия",
-    "ремонт",
-    "рента",
-    "реплика",
-    "ресурс",
-    "реформа",
-    "рецепт",
-    "речь",
-    "решение",
-    "ржавый",
-    "рисунок",
-    "ритм",
-    "рифма",
-    "робкий",
-    "ровный",
-    "рогатый",
-    "родитель",
-    "рождение",
-    "розовый",
-    "роковой",
-    "роль",
-    "роман",
-    "ронять",
-    "рост",
-    "рота",
-    "роща",
-    "рояль",
-    "рубль",
-    "ругать",
-    "руда",
-    "ружье",
-    "руины",
-    "рука",
-    "руль",
-    "румяный",
-    "русский",
-    "ручка",
-    "рыба",
-    "рывок",
-    "рыдать",
-    "рыжий",
-    "рынок",
-    "рысь",
-    "рыть",
-    "рыхлый",
-    "рыцарь",
-    "рычаг",
-    "рюкзак",
-    "рюмка",
-    "рябой",
-    "рядовой",
-    "сабля",
-    "садовый",
-    "сажать",
-    "салон",
-    "самолет",
-    "сани",
-    "сапог",
-    "сарай",
-    "сатира",
-    "сауна",
-    "сахар",
-    "сбегать",
-    "сбивать",
-    "сбор",
-    "сбыт",
-    "свадьба",
-    "свет",
-    "свидание",
-    "свобода",
-    "связь",
-    "сгорать",
-    "сдвигать",
-    "сеанс",
-    "северный",
-    "сегмент",
-    "седой",
-    "сезон",
-    "сейф",
-    "секунда",
-    "сельский",
-    "семья",
-    "сентябрь",
-    "сердце",
-    "сеть",
-    "сечение",
-    "сеять",
-    "сигнал",
-    "сидеть",
-    "сизый",
-    "сила",
-    "символ",
-    "синий",
-    "сирота",
-    "система",
-    "ситуация",
-    "сиять",
-    "сказать",
-    "скважина",
-    "скелет",
-    "скидка",
-    "склад",
-    "скорый",
-    "скрывать",
-    "скучный",
-    "слава",
-    "слеза",
-    "слияние",
-    "слово",
-    "случай",
-    "слышать",
-    "слюна",
-    "смех",
-    "смирение",
-    "смотреть",
-    "смутный",
-    "смысл",
-    "смятение",
-    "снаряд",
-    "снег",
-    "снижение",
-    "сносить",
-    "снять",
-    "событие",
-    "совет",
-    "согласие",
-    "сожалеть",
-    "сойти",
-    "сокол",
-    "солнце",
-    "сомнение",
-    "сонный",
-    "сообщать",
-    "соперник",
-    "сорт",
-    "состав",
-    "сотня",
-    "соус",
-    "социолог",
-    "сочинять",
-    "союз",
-    "спать",
-    "спешить",
-    "спина",
-    "сплошной",
-    "способ",
-    "спутник",
-    "средство",
-    "срок",
-    "срывать",
-    "стать",
-    "ствол",
-    "стена",
-    "стихи",
-    "сторона",
-    "страна",
-    "студент",
-    "стыд",
-    "субъект",
-    "сувенир",
-    "сугроб",
-    "судьба",
-    "суета",
-    "суждение",
-    "сукно",
-    "сулить",
-    "сумма",
-    "сунуть",
-    "супруг",
-    "суровый",
-    "сустав",
-    "суть",
-    "сухой",
-    "суша",
-    "существо",
-    "сфера",
-    "схема",
-    "сцена",
-    "счастье",
-    "счет",
-    "считать",
-    "сшивать",
-    "съезд",
-    "сынок",
-    "сыпать",
-    "сырье",
-    "сытый",
-    "сыщик",
-    "сюжет",
-    "сюрприз",
-    "таблица",
-    "таежный",
-    "таинство",
-    "тайна",
-    "такси",
-    "талант",
-    "таможня",
-    "танец",
-    "тарелка",
-    "таскать",
-    "тахта",
-    "тачка",
-    "таять",
-    "тварь",
-    "твердый",
-    "творить",
-    "театр",
-    "тезис",
-    "текст",
-    "тело",
-    "тема",
-    "тень",
-    "теория",
-    "теплый",
-    "терять",
-    "тесный",
-    "тетя",
-    "техника",
-    "течение",
-    "тигр",
-    "типичный",
-    "тираж",
-    "титул",
-    "тихий",
-    "тишина",
-    "ткань",
-    "товарищ",
-    "толпа",
-    "тонкий",
-    "топливо",
-    "торговля",
-    "тоска",
-    "точка",
-    "тощий",
-    "традиция",
-    "тревога",
-    "трибуна",
-    "трогать",
-    "труд",
-    "трюк",
-    "тряпка",
-    "туалет",
-    "тугой",
-    "туловище",
-    "туман",
-    "тундра",
-    "тупой",
-    "турнир",
-    "тусклый",
-    "туфля",
-    "туча",
-    "туша",
-    "тыкать",
-    "тысяча",
-    "тьма",
-    "тюльпан",
-    "тюрьма",
-    "тяга",
-    "тяжелый",
-    "тянуть",
-    "убеждать",
-    "убирать",
-    "убогий",
-    "убыток",
-    "уважение",
-    "уверять",
-    "увлекать",
-    "угнать",
-    "угол",
-    "угроза",
-    "удар",
-    "удивлять",
-    "удобный",
-    "уезд",
-    "ужас",
-    "ужин",
-    "узел",
-    "узкий",
-    "узнавать",
-    "узор",
-    "уйма",
-    "уклон",
-    "укол",
-    "уксус",
-    "улетать",
-    "улица",
-    "улучшать",
-    "улыбка",
-    "уметь",
-    "умиление",
-    "умный",
-    "умолять",
-    "умысел",
-    "унижать",
-    "уносить",
-    "уныние",
-    "упасть",
-    "уплата",
-    "упор",
-    "упрекать",
-    "упускать",
-    "уран",
-    "урна",
-    "уровень",
-    "усадьба",
-    "усердие",
-    "усилие",
-    "ускорять",
-    "условие",
-    "усмешка",
-    "уснуть",
-    "успеть",
-    "усыпать",
-    "утешать",
-    "утка",
-    "уточнять",
-    "утро",
-    "утюг",
-    "уходить",
-    "уцелеть",
-    "участие",
-    "ученый",
-    "учитель",
-    "ушко",
-    "ущерб",
-    "уютный",
-    "уяснять",
-    "фабрика",
-    "фаворит",
-    "фаза",
-    "файл",
-    "факт",
-    "фамилия",
-    "фантазия",
-    "фара",
-    "фасад",
-    "февраль",
-    "фельдшер",
-    "феномен",
-    "ферма",
-    "фигура",
-    "физика",
-    "фильм",
-    "финал",
-    "фирма",
-    "фишка",
-    "флаг",
-    "флейта",
-    "флот",
-    "фокус",
-    "фольклор",
-    "фонд",
-    "форма",
-    "фото",
-    "фраза",
-    "фреска",
-    "фронт",
-    "фрукт",
-    "функция",
-    "фуражка",
-    "футбол",
-    "фыркать",
-    "халат",
-    "хамство",
-    "хаос",
-    "характер",
-    "хата",
-    "хватать",
-    "хвост",
-    "хижина",
-    "хилый",
-    "химия",
-    "хирург",
-    "хитрый",
-    "хищник",
-    "хлам",
-    "хлеб",
-    "хлопать",
-    "хмурый",
-    "ходить",
-    "хозяин",
-    "хоккей",
-    "холодный",
-    "хороший",
-    "хотеть",
-    "хохотать",
-    "храм",
-    "хрен",
-    "хриплый",
-    "хроника",
-    "хрупкий",
-    "художник",
-    "хулиган",
-    "хутор",
-    "царь",
-    "цвет",
-    "цель",
-    "цемент",
-    "центр",
-    "цепь",
-    "церковь",
-    "цикл",
-    "цилиндр",
-    "циничный",
-    "цирк",
-    "цистерна",
-    "цитата",
-    "цифра",
-    "цыпленок",
-    "чадо",
-    "чайник",
-    "часть",
-    "чашка",
-    "человек",
-    "чемодан",
-    "чепуха",
-    "черный",
-    "честь",
-    "четкий",
-    "чехол",
-    "чиновник",
-    "число",
-    "читать",
-    "членство",
-    "чреватый",
-    "чтение",
-    "чувство",
-    "чугунный",
-    "чудо",
-    "чужой",
-    "чукча",
-    "чулок",
-    "чума",
-    "чуткий",
-    "чучело",
-    "чушь",
-    "шаблон",
-    "шагать",
-    "шайка",
-    "шакал",
-    "шалаш",
-    "шампунь",
-    "шанс",
-    "шапка",
-    "шарик",
-    "шасси",
-    "шатер",
-    "шахта",
-    "шашлык",
-    "швейный",
-    "швырять",
-    "шевелить",
-    "шедевр",
-    "шейка",
-    "шелковый",
-    "шептать",
-    "шерсть",
-    "шестерка",
-    "шикарный",
-    "шинель",
-    "шипеть",
-    "широкий",
-    "шить",
-    "шишка",
-    "шкаф",
-    "школа",
-    "шкура",
-    "шланг",
-    "шлем",
-    "шлюпка",
-    "шляпа",
-    "шнур",
-    "шоколад",
-    "шорох",
-    "шоссе",
-    "шофер",
-    "шпага",
-    "шпион",
-    "шприц",
-    "шрам",
-    "шрифт",
-    "штаб",
-    "штора",
-    "штраф",
-    "штука",
-    "штык",
-    "шуба",
-    "шуметь",
-    "шуршать",
-    "шутка",
-    "щадить",
-    "щедрый",
-    "щека",
-    "щель",
-    "щенок",
-    "щепка",
-    "щетка",
-    "щука",
-    "эволюция",
-    "эгоизм",
-    "экзамен",
-    "экипаж",
-    "экономия",
-    "экран",
-    "эксперт",
-    "элемент",
-    "элита",
-    "эмблема",
-    "эмигрант",
-    "эмоция",
-    "энергия",
-    "эпизод",
-    "эпоха",
-    "эскиз",
-    "эссе",
-    "эстрада",
-    "этап",
-    "этика",
-    "этюд",
-    "эфир",
-    "эффект",
-    "эшелон",
-    "юбилей",
-    "юбка",
-    "южный",
-    "юмор",
-    "юноша",
-    "юрист",
-    "яблоко",
-    "явление",
-    "ягода",
-    "ядерный",
-    "ядовитый",
-    "ядро",
-    "язва",
-    "язык",
-    "яйцо",
-    "якорь",
-    "январь",
-    "японец",
-    "яркий",
-    "ярмарка",
-    "ярость",
-    "ярус",
-    "ясный",
-    "яхта",
-    "ячейка",
-    "ящик"
-  ];
-}
\ No newline at end of file
diff --git a/cw_haven/lib/mnemonics/spanish.dart b/cw_haven/lib/mnemonics/spanish.dart
deleted file mode 100644
index 531eafd35..000000000
--- a/cw_haven/lib/mnemonics/spanish.dart
+++ /dev/null
@@ -1,1630 +0,0 @@
-class SpanishMnemonics {
-  static const words = [
-    "ábaco",
-    "abdomen",
-    "abeja",
-    "abierto",
-    "abogado",
-    "abono",
-    "aborto",
-    "abrazo",
-    "abrir",
-    "abuelo",
-    "abuso",
-    "acabar",
-    "academia",
-    "acceso",
-    "acción",
-    "aceite",
-    "acelga",
-    "acento",
-    "aceptar",
-    "ácido",
-    "aclarar",
-    "acné",
-    "acoger",
-    "acoso",
-    "activo",
-    "acto",
-    "actriz",
-    "actuar",
-    "acudir",
-    "acuerdo",
-    "acusar",
-    "adicto",
-    "admitir",
-    "adoptar",
-    "adorno",
-    "aduana",
-    "adulto",
-    "aéreo",
-    "afectar",
-    "afición",
-    "afinar",
-    "afirmar",
-    "ágil",
-    "agitar",
-    "agonía",
-    "agosto",
-    "agotar",
-    "agregar",
-    "agrio",
-    "agua",
-    "agudo",
-    "águila",
-    "aguja",
-    "ahogo",
-    "ahorro",
-    "aire",
-    "aislar",
-    "ajedrez",
-    "ajeno",
-    "ajuste",
-    "alacrán",
-    "alambre",
-    "alarma",
-    "alba",
-    "álbum",
-    "alcalde",
-    "aldea",
-    "alegre",
-    "alejar",
-    "alerta",
-    "aleta",
-    "alfiler",
-    "alga",
-    "algodón",
-    "aliado",
-    "aliento",
-    "alivio",
-    "alma",
-    "almeja",
-    "almíbar",
-    "altar",
-    "alteza",
-    "altivo",
-    "alto",
-    "altura",
-    "alumno",
-    "alzar",
-    "amable",
-    "amante",
-    "amapola",
-    "amargo",
-    "amasar",
-    "ámbar",
-    "ámbito",
-    "ameno",
-    "amigo",
-    "amistad",
-    "amor",
-    "amparo",
-    "amplio",
-    "ancho",
-    "anciano",
-    "ancla",
-    "andar",
-    "andén",
-    "anemia",
-    "ángulo",
-    "anillo",
-    "ánimo",
-    "anís",
-    "anotar",
-    "antena",
-    "antiguo",
-    "antojo",
-    "anual",
-    "anular",
-    "anuncio",
-    "añadir",
-    "añejo",
-    "año",
-    "apagar",
-    "aparato",
-    "apetito",
-    "apio",
-    "aplicar",
-    "apodo",
-    "aporte",
-    "apoyo",
-    "aprender",
-    "aprobar",
-    "apuesta",
-    "apuro",
-    "arado",
-    "araña",
-    "arar",
-    "árbitro",
-    "árbol",
-    "arbusto",
-    "archivo",
-    "arco",
-    "arder",
-    "ardilla",
-    "arduo",
-    "área",
-    "árido",
-    "aries",
-    "armonía",
-    "arnés",
-    "aroma",
-    "arpa",
-    "arpón",
-    "arreglo",
-    "arroz",
-    "arruga",
-    "arte",
-    "artista",
-    "asa",
-    "asado",
-    "asalto",
-    "ascenso",
-    "asegurar",
-    "aseo",
-    "asesor",
-    "asiento",
-    "asilo",
-    "asistir",
-    "asno",
-    "asombro",
-    "áspero",
-    "astilla",
-    "astro",
-    "astuto",
-    "asumir",
-    "asunto",
-    "atajo",
-    "ataque",
-    "atar",
-    "atento",
-    "ateo",
-    "ático",
-    "atleta",
-    "átomo",
-    "atraer",
-    "atroz",
-    "atún",
-    "audaz",
-    "audio",
-    "auge",
-    "aula",
-    "aumento",
-    "ausente",
-    "autor",
-    "aval",
-    "avance",
-    "avaro",
-    "ave",
-    "avellana",
-    "avena",
-    "avestruz",
-    "avión",
-    "aviso",
-    "ayer",
-    "ayuda",
-    "ayuno",
-    "azafrán",
-    "azar",
-    "azote",
-    "azúcar",
-    "azufre",
-    "azul",
-    "baba",
-    "babor",
-    "bache",
-    "bahía",
-    "baile",
-    "bajar",
-    "balanza",
-    "balcón",
-    "balde",
-    "bambú",
-    "banco",
-    "banda",
-    "baño",
-    "barba",
-    "barco",
-    "barniz",
-    "barro",
-    "báscula",
-    "bastón",
-    "basura",
-    "batalla",
-    "batería",
-    "batir",
-    "batuta",
-    "baúl",
-    "bazar",
-    "bebé",
-    "bebida",
-    "bello",
-    "besar",
-    "beso",
-    "bestia",
-    "bicho",
-    "bien",
-    "bingo",
-    "blanco",
-    "bloque",
-    "blusa",
-    "boa",
-    "bobina",
-    "bobo",
-    "boca",
-    "bocina",
-    "boda",
-    "bodega",
-    "boina",
-    "bola",
-    "bolero",
-    "bolsa",
-    "bomba",
-    "bondad",
-    "bonito",
-    "bono",
-    "bonsái",
-    "borde",
-    "borrar",
-    "bosque",
-    "bote",
-    "botín",
-    "bóveda",
-    "bozal",
-    "bravo",
-    "brazo",
-    "brecha",
-    "breve",
-    "brillo",
-    "brinco",
-    "brisa",
-    "broca",
-    "broma",
-    "bronce",
-    "brote",
-    "bruja",
-    "brusco",
-    "bruto",
-    "buceo",
-    "bucle",
-    "bueno",
-    "buey",
-    "bufanda",
-    "bufón",
-    "búho",
-    "buitre",
-    "bulto",
-    "burbuja",
-    "burla",
-    "burro",
-    "buscar",
-    "butaca",
-    "buzón",
-    "caballo",
-    "cabeza",
-    "cabina",
-    "cabra",
-    "cacao",
-    "cadáver",
-    "cadena",
-    "caer",
-    "café",
-    "caída",
-    "caimán",
-    "caja",
-    "cajón",
-    "cal",
-    "calamar",
-    "calcio",
-    "caldo",
-    "calidad",
-    "calle",
-    "calma",
-    "calor",
-    "calvo",
-    "cama",
-    "cambio",
-    "camello",
-    "camino",
-    "campo",
-    "cáncer",
-    "candil",
-    "canela",
-    "canguro",
-    "canica",
-    "canto",
-    "caña",
-    "cañón",
-    "caoba",
-    "caos",
-    "capaz",
-    "capitán",
-    "capote",
-    "captar",
-    "capucha",
-    "cara",
-    "carbón",
-    "cárcel",
-    "careta",
-    "carga",
-    "cariño",
-    "carne",
-    "carpeta",
-    "carro",
-    "carta",
-    "casa",
-    "casco",
-    "casero",
-    "caspa",
-    "castor",
-    "catorce",
-    "catre",
-    "caudal",
-    "causa",
-    "cazo",
-    "cebolla",
-    "ceder",
-    "cedro",
-    "celda",
-    "célebre",
-    "celoso",
-    "célula",
-    "cemento",
-    "ceniza",
-    "centro",
-    "cerca",
-    "cerdo",
-    "cereza",
-    "cero",
-    "cerrar",
-    "certeza",
-    "césped",
-    "cetro",
-    "chacal",
-    "chaleco",
-    "champú",
-    "chancla",
-    "chapa",
-    "charla",
-    "chico",
-    "chiste",
-    "chivo",
-    "choque",
-    "choza",
-    "chuleta",
-    "chupar",
-    "ciclón",
-    "ciego",
-    "cielo",
-    "cien",
-    "cierto",
-    "cifra",
-    "cigarro",
-    "cima",
-    "cinco",
-    "cine",
-    "cinta",
-    "ciprés",
-    "circo",
-    "ciruela",
-    "cisne",
-    "cita",
-    "ciudad",
-    "clamor",
-    "clan",
-    "claro",
-    "clase",
-    "clave",
-    "cliente",
-    "clima",
-    "clínica",
-    "cobre",
-    "cocción",
-    "cochino",
-    "cocina",
-    "coco",
-    "código",
-    "codo",
-    "cofre",
-    "coger",
-    "cohete",
-    "cojín",
-    "cojo",
-    "cola",
-    "colcha",
-    "colegio",
-    "colgar",
-    "colina",
-    "collar",
-    "colmo",
-    "columna",
-    "combate",
-    "comer",
-    "comida",
-    "cómodo",
-    "compra",
-    "conde",
-    "conejo",
-    "conga",
-    "conocer",
-    "consejo",
-    "contar",
-    "copa",
-    "copia",
-    "corazón",
-    "corbata",
-    "corcho",
-    "cordón",
-    "corona",
-    "correr",
-    "coser",
-    "cosmos",
-    "costa",
-    "cráneo",
-    "cráter",
-    "crear",
-    "crecer",
-    "creído",
-    "crema",
-    "cría",
-    "crimen",
-    "cripta",
-    "crisis",
-    "cromo",
-    "crónica",
-    "croqueta",
-    "crudo",
-    "cruz",
-    "cuadro",
-    "cuarto",
-    "cuatro",
-    "cubo",
-    "cubrir",
-    "cuchara",
-    "cuello",
-    "cuento",
-    "cuerda",
-    "cuesta",
-    "cueva",
-    "cuidar",
-    "culebra",
-    "culpa",
-    "culto",
-    "cumbre",
-    "cumplir",
-    "cuna",
-    "cuneta",
-    "cuota",
-    "cupón",
-    "cúpula",
-    "curar",
-    "curioso",
-    "curso",
-    "curva",
-    "cutis",
-    "dama",
-    "danza",
-    "dar",
-    "dardo",
-    "dátil",
-    "deber",
-    "débil",
-    "década",
-    "decir",
-    "dedo",
-    "defensa",
-    "definir",
-    "dejar",
-    "delfín",
-    "delgado",
-    "delito",
-    "demora",
-    "denso",
-    "dental",
-    "deporte",
-    "derecho",
-    "derrota",
-    "desayuno",
-    "deseo",
-    "desfile",
-    "desnudo",
-    "destino",
-    "desvío",
-    "detalle",
-    "detener",
-    "deuda",
-    "día",
-    "diablo",
-    "diadema",
-    "diamante",
-    "diana",
-    "diario",
-    "dibujo",
-    "dictar",
-    "diente",
-    "dieta",
-    "diez",
-    "difícil",
-    "digno",
-    "dilema",
-    "diluir",
-    "dinero",
-    "directo",
-    "dirigir",
-    "disco",
-    "diseño",
-    "disfraz",
-    "diva",
-    "divino",
-    "doble",
-    "doce",
-    "dolor",
-    "domingo",
-    "don",
-    "donar",
-    "dorado",
-    "dormir",
-    "dorso",
-    "dos",
-    "dosis",
-    "dragón",
-    "droga",
-    "ducha",
-    "duda",
-    "duelo",
-    "dueño",
-    "dulce",
-    "dúo",
-    "duque",
-    "durar",
-    "dureza",
-    "duro",
-    "ébano",
-    "ebrio",
-    "echar",
-    "eco",
-    "ecuador",
-    "edad",
-    "edición",
-    "edificio",
-    "editor",
-    "educar",
-    "efecto",
-    "eficaz",
-    "eje",
-    "ejemplo",
-    "elefante",
-    "elegir",
-    "elemento",
-    "elevar",
-    "elipse",
-    "élite",
-    "elixir",
-    "elogio",
-    "eludir",
-    "embudo",
-    "emitir",
-    "emoción",
-    "empate",
-    "empeño",
-    "empleo",
-    "empresa",
-    "enano",
-    "encargo",
-    "enchufe",
-    "encía",
-    "enemigo",
-    "enero",
-    "enfado",
-    "enfermo",
-    "engaño",
-    "enigma",
-    "enlace",
-    "enorme",
-    "enredo",
-    "ensayo",
-    "enseñar",
-    "entero",
-    "entrar",
-    "envase",
-    "envío",
-    "época",
-    "equipo",
-    "erizo",
-    "escala",
-    "escena",
-    "escolar",
-    "escribir",
-    "escudo",
-    "esencia",
-    "esfera",
-    "esfuerzo",
-    "espada",
-    "espejo",
-    "espía",
-    "esposa",
-    "espuma",
-    "esquí",
-    "estar",
-    "este",
-    "estilo",
-    "estufa",
-    "etapa",
-    "eterno",
-    "ética",
-    "etnia",
-    "evadir",
-    "evaluar",
-    "evento",
-    "evitar",
-    "exacto",
-    "examen",
-    "exceso",
-    "excusa",
-    "exento",
-    "exigir",
-    "exilio",
-    "existir",
-    "éxito",
-    "experto",
-    "explicar",
-    "exponer",
-    "extremo",
-    "fábrica",
-    "fábula",
-    "fachada",
-    "fácil",
-    "factor",
-    "faena",
-    "faja",
-    "falda",
-    "fallo",
-    "falso",
-    "faltar",
-    "fama",
-    "familia",
-    "famoso",
-    "faraón",
-    "farmacia",
-    "farol",
-    "farsa",
-    "fase",
-    "fatiga",
-    "fauna",
-    "favor",
-    "fax",
-    "febrero",
-    "fecha",
-    "feliz",
-    "feo",
-    "feria",
-    "feroz",
-    "fértil",
-    "fervor",
-    "festín",
-    "fiable",
-    "fianza",
-    "fiar",
-    "fibra",
-    "ficción",
-    "ficha",
-    "fideo",
-    "fiebre",
-    "fiel",
-    "fiera",
-    "fiesta",
-    "figura",
-    "fijar",
-    "fijo",
-    "fila",
-    "filete",
-    "filial",
-    "filtro",
-    "fin",
-    "finca",
-    "fingir",
-    "finito",
-    "firma",
-    "flaco",
-    "flauta",
-    "flecha",
-    "flor",
-    "flota",
-    "fluir",
-    "flujo",
-    "flúor",
-    "fobia",
-    "foca",
-    "fogata",
-    "fogón",
-    "folio",
-    "folleto",
-    "fondo",
-    "forma",
-    "forro",
-    "fortuna",
-    "forzar",
-    "fosa",
-    "foto",
-    "fracaso",
-    "frágil",
-    "franja",
-    "frase",
-    "fraude",
-    "freír",
-    "freno",
-    "fresa",
-    "frío",
-    "frito",
-    "fruta",
-    "fuego",
-    "fuente",
-    "fuerza",
-    "fuga",
-    "fumar",
-    "función",
-    "funda",
-    "furgón",
-    "furia",
-    "fusil",
-    "fútbol",
-    "futuro",
-    "gacela",
-    "gafas",
-    "gaita",
-    "gajo",
-    "gala",
-    "galería",
-    "gallo",
-    "gamba",
-    "ganar",
-    "gancho",
-    "ganga",
-    "ganso",
-    "garaje",
-    "garza",
-    "gasolina",
-    "gastar",
-    "gato",
-    "gavilán",
-    "gemelo",
-    "gemir",
-    "gen",
-    "género",
-    "genio",
-    "gente",
-    "geranio",
-    "gerente",
-    "germen",
-    "gesto",
-    "gigante",
-    "gimnasio",
-    "girar",
-    "giro",
-    "glaciar",
-    "globo",
-    "gloria",
-    "gol",
-    "golfo",
-    "goloso",
-    "golpe",
-    "goma",
-    "gordo",
-    "gorila",
-    "gorra",
-    "gota",
-    "goteo",
-    "gozar",
-    "grada",
-    "gráfico",
-    "grano",
-    "grasa",
-    "gratis",
-    "grave",
-    "grieta",
-    "grillo",
-    "gripe",
-    "gris",
-    "grito",
-    "grosor",
-    "grúa",
-    "grueso",
-    "grumo",
-    "grupo",
-    "guante",
-    "guapo",
-    "guardia",
-    "guerra",
-    "guía",
-    "guiño",
-    "guion",
-    "guiso",
-    "guitarra",
-    "gusano",
-    "gustar",
-    "haber",
-    "hábil",
-    "hablar",
-    "hacer",
-    "hacha",
-    "hada",
-    "hallar",
-    "hamaca",
-    "harina",
-    "haz",
-    "hazaña",
-    "hebilla",
-    "hebra",
-    "hecho",
-    "helado",
-    "helio",
-    "hembra",
-    "herir",
-    "hermano",
-    "héroe",
-    "hervir",
-    "hielo",
-    "hierro",
-    "hígado",
-    "higiene",
-    "hijo",
-    "himno",
-    "historia",
-    "hocico",
-    "hogar",
-    "hoguera",
-    "hoja",
-    "hombre",
-    "hongo",
-    "honor",
-    "honra",
-    "hora",
-    "hormiga",
-    "horno",
-    "hostil",
-    "hoyo",
-    "hueco",
-    "huelga",
-    "huerta",
-    "hueso",
-    "huevo",
-    "huida",
-    "huir",
-    "humano",
-    "húmedo",
-    "humilde",
-    "humo",
-    "hundir",
-    "huracán",
-    "hurto",
-    "icono",
-    "ideal",
-    "idioma",
-    "ídolo",
-    "iglesia",
-    "iglú",
-    "igual",
-    "ilegal",
-    "ilusión",
-    "imagen",
-    "imán",
-    "imitar",
-    "impar",
-    "imperio",
-    "imponer",
-    "impulso",
-    "incapaz",
-    "índice",
-    "inerte",
-    "infiel",
-    "informe",
-    "ingenio",
-    "inicio",
-    "inmenso",
-    "inmune",
-    "innato",
-    "insecto",
-    "instante",
-    "interés",
-    "íntimo",
-    "intuir",
-    "inútil",
-    "invierno",
-    "ira",
-    "iris",
-    "ironía",
-    "isla",
-    "islote",
-    "jabalí",
-    "jabón",
-    "jamón",
-    "jarabe",
-    "jardín",
-    "jarra",
-    "jaula",
-    "jazmín",
-    "jefe",
-    "jeringa",
-    "jinete",
-    "jornada",
-    "joroba",
-    "joven",
-    "joya",
-    "juerga",
-    "jueves",
-    "juez",
-    "jugador",
-    "jugo",
-    "juguete",
-    "juicio",
-    "junco",
-    "jungla",
-    "junio",
-    "juntar",
-    "júpiter",
-    "jurar",
-    "justo",
-    "juvenil",
-    "juzgar",
-    "kilo",
-    "koala",
-    "labio",
-    "lacio",
-    "lacra",
-    "lado",
-    "ladrón",
-    "lagarto",
-    "lágrima",
-    "laguna",
-    "laico",
-    "lamer",
-    "lámina",
-    "lámpara",
-    "lana",
-    "lancha",
-    "langosta",
-    "lanza",
-    "lápiz",
-    "largo",
-    "larva",
-    "lástima",
-    "lata",
-    "látex",
-    "latir",
-    "laurel",
-    "lavar",
-    "lazo",
-    "leal",
-    "lección",
-    "leche",
-    "lector",
-    "leer",
-    "legión",
-    "legumbre",
-    "lejano",
-    "lengua",
-    "lento",
-    "leña",
-    "león",
-    "leopardo",
-    "lesión",
-    "letal",
-    "letra",
-    "leve",
-    "leyenda",
-    "libertad",
-    "libro",
-    "licor",
-    "líder",
-    "lidiar",
-    "lienzo",
-    "liga",
-    "ligero",
-    "lima",
-    "límite",
-    "limón",
-    "limpio",
-    "lince",
-    "lindo",
-    "línea",
-    "lingote",
-    "lino",
-    "linterna",
-    "líquido",
-    "liso",
-    "lista",
-    "litera",
-    "litio",
-    "litro",
-    "llaga",
-    "llama",
-    "llanto",
-    "llave",
-    "llegar",
-    "llenar",
-    "llevar",
-    "llorar",
-    "llover",
-    "lluvia",
-    "lobo",
-    "loción",
-    "loco",
-    "locura",
-    "lógica",
-    "logro",
-    "lombriz",
-    "lomo",
-    "lonja",
-    "lote",
-    "lucha",
-    "lucir",
-    "lugar",
-    "lujo",
-    "luna",
-    "lunes",
-    "lupa",
-    "lustro",
-    "luto",
-    "luz",
-    "maceta",
-    "macho",
-    "madera",
-    "madre",
-    "maduro",
-    "maestro",
-    "mafia",
-    "magia",
-    "mago",
-    "maíz",
-    "maldad",
-    "maleta",
-    "malla",
-    "malo",
-    "mamá",
-    "mambo",
-    "mamut",
-    "manco",
-    "mando",
-    "manejar",
-    "manga",
-    "maniquí",
-    "manjar",
-    "mano",
-    "manso",
-    "manta",
-    "mañana",
-    "mapa",
-    "máquina",
-    "mar",
-    "marco",
-    "marea",
-    "marfil",
-    "margen",
-    "marido",
-    "mármol",
-    "marrón",
-    "martes",
-    "marzo",
-    "masa",
-    "máscara",
-    "masivo",
-    "matar",
-    "materia",
-    "matiz",
-    "matriz",
-    "máximo",
-    "mayor",
-    "mazorca",
-    "mecha",
-    "medalla",
-    "medio",
-    "médula",
-    "mejilla",
-    "mejor",
-    "melena",
-    "melón",
-    "memoria",
-    "menor",
-    "mensaje",
-    "mente",
-    "menú",
-    "mercado",
-    "merengue",
-    "mérito",
-    "mes",
-    "mesón",
-    "meta",
-    "meter",
-    "método",
-    "metro",
-    "mezcla",
-    "miedo",
-    "miel",
-    "miembro",
-    "miga",
-    "mil",
-    "milagro",
-    "militar",
-    "millón",
-    "mimo",
-    "mina",
-    "minero",
-    "mínimo",
-    "minuto",
-    "miope",
-    "mirar",
-    "misa",
-    "miseria",
-    "misil",
-    "mismo",
-    "mitad",
-    "mito",
-    "mochila",
-    "moción",
-    "moda",
-    "modelo",
-    "moho",
-    "mojar",
-    "molde",
-    "moler",
-    "molino",
-    "momento",
-    "momia",
-    "monarca",
-    "moneda",
-    "monja",
-    "monto",
-    "moño",
-    "morada",
-    "morder",
-    "moreno",
-    "morir",
-    "morro",
-    "morsa",
-    "mortal",
-    "mosca",
-    "mostrar",
-    "motivo",
-    "mover",
-    "móvil",
-    "mozo",
-    "mucho",
-    "mudar",
-    "mueble",
-    "muela",
-    "muerte",
-    "muestra",
-    "mugre",
-    "mujer",
-    "mula",
-    "muleta",
-    "multa",
-    "mundo",
-    "muñeca",
-    "mural",
-    "muro",
-    "músculo",
-    "museo",
-    "musgo",
-    "música",
-    "muslo",
-    "nácar",
-    "nación",
-    "nadar",
-    "naipe",
-    "naranja",
-    "nariz",
-    "narrar",
-    "nasal",
-    "natal",
-    "nativo",
-    "natural",
-    "náusea",
-    "naval",
-    "nave",
-    "navidad",
-    "necio",
-    "néctar",
-    "negar",
-    "negocio",
-    "negro",
-    "neón",
-    "nervio",
-    "neto",
-    "neutro",
-    "nevar",
-    "nevera",
-    "nicho",
-    "nido",
-    "niebla",
-    "nieto",
-    "niñez",
-    "niño",
-    "nítido",
-    "nivel",
-    "nobleza",
-    "noche",
-    "nómina",
-    "noria",
-    "norma",
-    "norte",
-    "nota",
-    "noticia",
-    "novato",
-    "novela",
-    "novio",
-    "nube",
-    "nuca",
-    "núcleo",
-    "nudillo",
-    "nudo",
-    "nuera",
-    "nueve",
-    "nuez",
-    "nulo",
-    "número",
-    "nutria",
-    "oasis",
-    "obeso",
-    "obispo",
-    "objeto",
-    "obra",
-    "obrero",
-    "observar",
-    "obtener",
-    "obvio",
-    "oca",
-    "ocaso",
-    "océano",
-    "ochenta",
-    "ocho",
-    "ocio",
-    "ocre",
-    "octavo",
-    "octubre",
-    "oculto",
-    "ocupar",
-    "ocurrir",
-    "odiar",
-    "odio",
-    "odisea",
-    "oeste",
-    "ofensa",
-    "oferta",
-    "oficio",
-    "ofrecer",
-    "ogro",
-    "oído",
-    "oír",
-    "ojo",
-    "ola",
-    "oleada",
-    "olfato",
-    "olivo",
-    "olla",
-    "olmo",
-    "olor",
-    "olvido",
-    "ombligo",
-    "onda",
-    "onza",
-    "opaco",
-    "opción",
-    "ópera",
-    "opinar",
-    "oponer",
-    "optar",
-    "óptica",
-    "opuesto",
-    "oración",
-    "orador",
-    "oral",
-    "órbita",
-    "orca",
-    "orden",
-    "oreja",
-    "órgano",
-    "orgía",
-    "orgullo",
-    "oriente",
-    "origen",
-    "orilla",
-    "oro",
-    "orquesta",
-    "oruga",
-    "osadía",
-    "oscuro",
-    "osezno",
-    "oso",
-    "ostra",
-    "otoño",
-    "otro",
-    "oveja",
-    "óvulo",
-    "óxido",
-    "oxígeno",
-    "oyente",
-    "ozono",
-    "pacto",
-    "padre",
-    "paella",
-    "página",
-    "pago",
-    "país",
-    "pájaro",
-    "palabra",
-    "palco",
-    "paleta",
-    "pálido",
-    "palma",
-    "paloma",
-    "palpar",
-    "pan",
-    "panal",
-    "pánico",
-    "pantera",
-    "pañuelo",
-    "papá",
-    "papel",
-    "papilla",
-    "paquete",
-    "parar",
-    "parcela",
-    "pared",
-    "parir",
-    "paro",
-    "párpado",
-    "parque",
-    "párrafo",
-    "parte",
-    "pasar",
-    "paseo",
-    "pasión",
-    "paso",
-    "pasta",
-    "pata",
-    "patio",
-    "patria",
-    "pausa",
-    "pauta",
-    "pavo",
-    "payaso",
-    "peatón",
-    "pecado",
-    "pecera",
-    "pecho",
-    "pedal",
-    "pedir",
-    "pegar",
-    "peine",
-    "pelar",
-    "peldaño",
-    "pelea",
-    "peligro",
-    "pellejo",
-    "pelo",
-    "peluca",
-    "pena",
-    "pensar",
-    "peñón",
-    "peón",
-    "peor",
-    "pepino",
-    "pequeño",
-    "pera",
-    "percha",
-    "perder",
-    "pereza",
-    "perfil",
-    "perico",
-    "perla",
-    "permiso",
-    "perro",
-    "persona",
-    "pesa",
-    "pesca",
-    "pésimo",
-    "pestaña",
-    "pétalo",
-    "petróleo",
-    "pez",
-    "pezuña",
-    "picar",
-    "pichón",
-    "pie",
-    "piedra",
-    "pierna",
-    "pieza",
-    "pijama",
-    "pilar",
-    "piloto",
-    "pimienta",
-    "pino",
-    "pintor",
-    "pinza",
-    "piña",
-    "piojo",
-    "pipa",
-    "pirata",
-    "pisar",
-    "piscina",
-    "piso",
-    "pista",
-    "pitón",
-    "pizca",
-    "placa",
-    "plan",
-    "plata",
-    "playa",
-    "plaza",
-    "pleito",
-    "pleno",
-    "plomo",
-    "pluma",
-    "plural",
-    "pobre",
-    "poco",
-    "poder",
-    "podio",
-    "poema",
-    "poesía",
-    "poeta",
-    "polen",
-    "policía",
-    "pollo",
-    "polvo",
-    "pomada",
-    "pomelo",
-    "pomo",
-    "pompa",
-    "poner",
-    "porción",
-    "portal",
-    "posada",
-    "poseer",
-    "posible",
-    "poste",
-    "potencia",
-    "potro",
-    "pozo",
-    "prado",
-    "precoz",
-    "pregunta",
-    "premio",
-    "prensa",
-    "preso",
-    "previo",
-    "primo",
-    "príncipe",
-    "prisión",
-    "privar",
-    "proa",
-    "probar",
-    "proceso",
-    "producto",
-    "proeza",
-    "profesor",
-    "programa",
-    "prole",
-    "promesa",
-    "pronto",
-    "propio",
-    "próximo",
-    "prueba",
-    "público",
-    "puchero",
-    "pudor",
-    "pueblo",
-    "puerta",
-    "puesto",
-    "pulga",
-    "pulir",
-    "pulmón",
-    "pulpo",
-    "pulso",
-    "puma",
-    "punto",
-    "puñal",
-    "puño",
-    "pupa",
-    "pupila",
-    "puré",
-    "quedar",
-    "queja",
-    "quemar",
-    "querer",
-    "queso",
-    "quieto",
-    "química",
-    "quince",
-    "quitar",
-    "rábano",
-    "rabia",
-    "rabo",
-    "ración",
-    "radical",
-    "raíz",
-    "rama",
-    "rampa",
-    "rancho",
-    "rango",
-    "rapaz",
-    "rápido",
-    "rapto",
-    "rasgo",
-    "raspa",
-    "rato",
-    "rayo",
-    "raza",
-    "razón",
-    "reacción",
-    "realidad",
-    "rebaño",
-    "rebote",
-    "recaer",
-    "receta",
-    "rechazo",
-    "recoger",
-    "recreo",
-    "recto",
-    "recurso",
-    "red",
-    "redondo",
-    "reducir",
-    "reflejo",
-    "reforma",
-    "refrán",
-    "refugio",
-    "regalo",
-    "regir",
-    "regla",
-    "regreso",
-    "rehén",
-    "reino",
-    "reír",
-    "reja",
-    "relato",
-    "relevo",
-    "relieve",
-    "relleno",
-    "reloj",
-    "remar",
-    "remedio",
-    "remo",
-    "rencor",
-    "rendir",
-    "renta",
-    "reparto",
-    "repetir",
-    "reposo",
-    "reptil",
-    "res",
-    "rescate",
-    "resina",
-    "respeto",
-    "resto",
-    "resumen",
-    "retiro",
-    "retorno",
-    "retrato",
-    "reunir",
-    "revés",
-    "revista",
-    "rey",
-    "rezar",
-    "rico",
-    "riego",
-    "rienda",
-    "riesgo",
-    "rifa",
-    "rígido",
-    "rigor",
-    "rincón",
-    "riñón",
-    "río",
-    "riqueza",
-    "risa",
-    "ritmo",
-    "rito"
-  ];
-}
\ No newline at end of file
diff --git a/cw_haven/lib/pending_haven_transaction.dart b/cw_haven/lib/pending_haven_transaction.dart
deleted file mode 100644
index dbf075044..000000000
--- a/cw_haven/lib/pending_haven_transaction.dart
+++ /dev/null
@@ -1,56 +0,0 @@
-import 'package:cw_haven/api/structs/pending_transaction.dart';
-import 'package:cw_haven/api/transaction_history.dart'
-    as haven_transaction_history;
-import 'package:cw_core/crypto_currency.dart';
-import 'package:cw_core/amount_converter.dart';
-import 'package:cw_core/pending_transaction.dart';
-
-class DoubleSpendException implements Exception {
-  DoubleSpendException();
-
-  @override
-  String toString() =>
-      'This transaction cannot be committed. This can be due to many reasons including the wallet not being synced, there is not enough XMR in your available balance, or previous transactions are not yet fully processed.';
-}
-
-class PendingHavenTransaction with PendingTransaction {
-  PendingHavenTransaction(this.pendingTransactionDescription, this.cryptoCurrency);
-
-  final PendingTransactionDescription pendingTransactionDescription;
-  final CryptoCurrency cryptoCurrency;
-
-  @override
-  String get id => pendingTransactionDescription.hash;
-
-  @override
-  String get hex => '';
-
-  @override
-  String get amountFormatted => AmountConverter.amountIntToString(
-      cryptoCurrency, pendingTransactionDescription.amount);
-
-  @override
-  String get feeFormatted => AmountConverter.amountIntToString(
-      cryptoCurrency, pendingTransactionDescription.fee);
-
-  @override
-  Future<void> commit() async {
-    try {
-      haven_transaction_history.commitTransactionFromPointerAddress(
-          address: pendingTransactionDescription.pointerAddress);
-    } catch (e) {
-      final message = e.toString();
-
-      if (message.contains('Reason: double spend')) {
-        throw DoubleSpendException();
-      }
-
-      rethrow;
-    }
-  }
-  
-  @override
-  Future<String?> commitUR() {
-    throw UnimplementedError();
-  }
-}
diff --git a/cw_haven/lib/update_haven_rate.dart b/cw_haven/lib/update_haven_rate.dart
deleted file mode 100644
index a7d5b2c77..000000000
--- a/cw_haven/lib/update_haven_rate.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-//import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
-import 'package:cw_core/crypto_currency.dart';
-import 'package:cw_core/monero_amount_format.dart';
-import 'package:cw_haven/api/balance_list.dart';
-
-//Future<void> updateHavenRate(FiatConversionStore fiatConversionStore) async {
-//  final rate = getRate();
-//  final base = rate.firstWhere((row) => row.getAssetType() == 'XUSD', orElse: () => null);
-//  rate.forEach((row) {
-//    final cur = CryptoCurrency.fromString(row.getAssetType());
-//    final baseRate = moneroAmountToDouble(amount: base.getRate());
-//    final rowRate = moneroAmountToDouble(amount: row.getRate());
-//    fiatConversionStore.prices[cur] = baseRate * rowRate;
-//  });
-//}
\ No newline at end of file
diff --git a/cw_haven/pubspec.lock b/cw_haven/pubspec.lock
deleted file mode 100644
index da5a11b89..000000000
--- a/cw_haven/pubspec.lock
+++ /dev/null
@@ -1,789 +0,0 @@
-# Generated by pub
-# See https://dart.dev/tools/pub/glossary#lockfile
-packages:
-  _fe_analyzer_shared:
-    dependency: transitive
-    description:
-      name: _fe_analyzer_shared
-      sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8"
-      url: "https://pub.dev"
-    source: hosted
-    version: "47.0.0"
-  analyzer:
-    dependency: transitive
-    description:
-      name: analyzer
-      sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80"
-      url: "https://pub.dev"
-    source: hosted
-    version: "4.7.0"
-  args:
-    dependency: transitive
-    description:
-      name: args
-      sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.6.0"
-  asn1lib:
-    dependency: transitive
-    description:
-      name: asn1lib
-      sha256: "6b151826fcc95ff246cd219a0bf4c753ea14f4081ad71c61939becf3aba27f70"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.5.5"
-  async:
-    dependency: transitive
-    description:
-      name: async
-      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.11.0"
-  boolean_selector:
-    dependency: transitive
-    description:
-      name: boolean_selector
-      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.1"
-  build:
-    dependency: transitive
-    description:
-      name: build
-      sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.4.1"
-  build_config:
-    dependency: transitive
-    description:
-      name: build_config
-      sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.1.1"
-  build_daemon:
-    dependency: transitive
-    description:
-      name: build_daemon
-      sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9"
-      url: "https://pub.dev"
-    source: hosted
-    version: "4.0.2"
-  build_resolvers:
-    dependency: "direct dev"
-    description:
-      name: build_resolvers
-      sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.0.10"
-  build_runner:
-    dependency: "direct dev"
-    description:
-      name: build_runner
-      sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.4.13"
-  build_runner_core:
-    dependency: transitive
-    description:
-      name: build_runner_core
-      sha256: "6d6ee4276b1c5f34f21fdf39425202712d2be82019983d52f351c94aafbc2c41"
-      url: "https://pub.dev"
-    source: hosted
-    version: "7.2.10"
-  built_collection:
-    dependency: transitive
-    description:
-      name: built_collection
-      sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
-      url: "https://pub.dev"
-    source: hosted
-    version: "5.1.1"
-  built_value:
-    dependency: transitive
-    description:
-      name: built_value
-      sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb
-      url: "https://pub.dev"
-    source: hosted
-    version: "8.9.2"
-  cake_backup:
-    dependency: transitive
-    description:
-      path: "."
-      ref: main
-      resolved-ref: "3aba867dcab6737f6707782f5db15d71f303db38"
-      url: "https://github.com/cake-tech/cake_backup.git"
-    source: git
-    version: "1.0.0+1"
-  characters:
-    dependency: transitive
-    description:
-      name: characters
-      sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.3.0"
-  checked_yaml:
-    dependency: transitive
-    description:
-      name: checked_yaml
-      sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.0.3"
-  clock:
-    dependency: transitive
-    description:
-      name: clock
-      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.1.1"
-  code_builder:
-    dependency: transitive
-    description:
-      name: code_builder
-      sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37
-      url: "https://pub.dev"
-    source: hosted
-    version: "4.10.0"
-  collection:
-    dependency: transitive
-    description:
-      name: collection
-      sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.18.0"
-  convert:
-    dependency: transitive
-    description:
-      name: convert
-      sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.1.2"
-  crypto:
-    dependency: transitive
-    description:
-      name: crypto
-      sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.0.6"
-  cryptography:
-    dependency: transitive
-    description:
-      name: cryptography
-      sha256: d146b76d33d94548cf035233fbc2f4338c1242fa119013bead807d033fc4ae05
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.7.0"
-  cupertino_icons:
-    dependency: transitive
-    description:
-      name: cupertino_icons
-      sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.8"
-  cw_core:
-    dependency: "direct main"
-    description:
-      path: "../cw_core"
-      relative: true
-    source: path
-    version: "0.0.1"
-  dart_style:
-    dependency: transitive
-    description:
-      name: dart_style
-      sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.2.4"
-  decimal:
-    dependency: transitive
-    description:
-      name: decimal
-      sha256: "24a261d5d5c87e86c7651c417a5dbdf8bcd7080dd592533910e8d0505a279f21"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.3.3"
-  encrypt:
-    dependency: transitive
-    description:
-      name: encrypt
-      sha256: "62d9aa4670cc2a8798bab89b39fc71b6dfbacf615de6cf5001fb39f7e4a996a2"
-      url: "https://pub.dev"
-    source: hosted
-    version: "5.0.3"
-  fake_async:
-    dependency: transitive
-    description:
-      name: fake_async
-      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.3.1"
-  ffi:
-    dependency: "direct main"
-    description:
-      name: ffi
-      sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.3"
-  file:
-    dependency: transitive
-    description:
-      name: file
-      sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
-      url: "https://pub.dev"
-    source: hosted
-    version: "7.0.1"
-  fixnum:
-    dependency: transitive
-    description:
-      name: fixnum
-      sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.1.1"
-  flutter:
-    dependency: "direct main"
-    description: flutter
-    source: sdk
-    version: "0.0.0"
-  flutter_mobx:
-    dependency: "direct main"
-    description:
-      name: flutter_mobx
-      sha256: "859fbf452fa9c2519d2700b125dd7fb14c508bbdd7fb65e26ca8ff6c92280e2e"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.2.1+1"
-  flutter_test:
-    dependency: "direct dev"
-    description: flutter
-    source: sdk
-    version: "0.0.0"
-  frontend_server_client:
-    dependency: transitive
-    description:
-      name: frontend_server_client
-      sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
-      url: "https://pub.dev"
-    source: hosted
-    version: "4.0.0"
-  glob:
-    dependency: transitive
-    description:
-      name: glob
-      sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.2"
-  graphs:
-    dependency: transitive
-    description:
-      name: graphs
-      sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.3.2"
-  hive:
-    dependency: transitive
-    description:
-      name: hive
-      sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.2.3"
-  hive_generator:
-    dependency: "direct dev"
-    description:
-      name: hive_generator
-      sha256: "81fd20125cb2ce8fd23623d7744ffbaf653aae93706c9bd3bf7019ea0ace3938"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.1.3"
-  http:
-    dependency: "direct main"
-    description:
-      name: http
-      sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.2.2"
-  http_multi_server:
-    dependency: transitive
-    description:
-      name: http_multi_server
-      sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b"
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.2.1"
-  http_parser:
-    dependency: transitive
-    description:
-      name: http_parser
-      sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
-      url: "https://pub.dev"
-    source: hosted
-    version: "4.0.2"
-  intl:
-    dependency: "direct main"
-    description:
-      name: intl
-      sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.19.0"
-  io:
-    dependency: transitive
-    description:
-      name: io
-      sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.4"
-  js:
-    dependency: transitive
-    description:
-      name: js
-      sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.6.7"
-  json_annotation:
-    dependency: transitive
-    description:
-      name: json_annotation
-      sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
-      url: "https://pub.dev"
-    source: hosted
-    version: "4.9.0"
-  leak_tracker:
-    dependency: transitive
-    description:
-      name: leak_tracker
-      sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
-      url: "https://pub.dev"
-    source: hosted
-    version: "10.0.5"
-  leak_tracker_flutter_testing:
-    dependency: transitive
-    description:
-      name: leak_tracker_flutter_testing
-      sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.0.5"
-  leak_tracker_testing:
-    dependency: transitive
-    description:
-      name: leak_tracker_testing
-      sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.0.1"
-  logging:
-    dependency: transitive
-    description:
-      name: logging
-      sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.3.0"
-  matcher:
-    dependency: transitive
-    description:
-      name: matcher
-      sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.12.16+1"
-  material_color_utilities:
-    dependency: transitive
-    description:
-      name: material_color_utilities
-      sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.11.1"
-  meta:
-    dependency: transitive
-    description:
-      name: meta
-      sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.15.0"
-  mime:
-    dependency: transitive
-    description:
-      name: mime
-      sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.0.0"
-  mobx:
-    dependency: "direct main"
-    description:
-      name: mobx
-      sha256: "63920b27b32ad1910adfe767ab1750e4c212e8923232a1f891597b362074ea5e"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.3.3+2"
-  mobx_codegen:
-    dependency: "direct dev"
-    description:
-      name: mobx_codegen
-      sha256: d4beb9cea4b7b014321235f8fdc7c2193ee0fe1d1198e9da7403f8bc85c4407c
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.3.0"
-  nested:
-    dependency: transitive
-    description:
-      name: nested
-      sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.0"
-  package_config:
-    dependency: transitive
-    description:
-      name: package_config
-      sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.0"
-  path:
-    dependency: transitive
-    description:
-      name: path
-      sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.9.0"
-  path_provider:
-    dependency: "direct main"
-    description:
-      name: path_provider
-      sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.4"
-  path_provider_android:
-    dependency: transitive
-    description:
-      name: path_provider_android
-      sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.2.12"
-  path_provider_foundation:
-    dependency: transitive
-    description:
-      name: path_provider_foundation
-      sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.4.0"
-  path_provider_linux:
-    dependency: transitive
-    description:
-      name: path_provider_linux
-      sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.2.1"
-  path_provider_platform_interface:
-    dependency: transitive
-    description:
-      name: path_provider_platform_interface
-      sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.2"
-  path_provider_windows:
-    dependency: transitive
-    description:
-      name: path_provider_windows
-      sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.3.0"
-  platform:
-    dependency: transitive
-    description:
-      name: platform
-      sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.1.6"
-  plugin_platform_interface:
-    dependency: transitive
-    description:
-      name: plugin_platform_interface
-      sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.8"
-  pointycastle:
-    dependency: transitive
-    description:
-      name: pointycastle
-      sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe"
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.9.1"
-  pool:
-    dependency: transitive
-    description:
-      name: pool
-      sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.5.1"
-  provider:
-    dependency: transitive
-    description:
-      name: provider
-      sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
-      url: "https://pub.dev"
-    source: hosted
-    version: "6.1.2"
-  pub_semver:
-    dependency: transitive
-    description:
-      name: pub_semver
-      sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.4"
-  pubspec_parse:
-    dependency: transitive
-    description:
-      name: pubspec_parse
-      sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.3.0"
-  rational:
-    dependency: transitive
-    description:
-      name: rational
-      sha256: cb808fb6f1a839e6fc5f7d8cb3b0a10e1db48b3be102de73938c627f0b636336
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.2.3"
-  shelf:
-    dependency: transitive
-    description:
-      name: shelf
-      sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.4.1"
-  shelf_web_socket:
-    dependency: transitive
-    description:
-      name: shelf_web_socket
-      sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.0.0"
-  sky_engine:
-    dependency: transitive
-    description: flutter
-    source: sdk
-    version: "0.0.99"
-  socks5_proxy:
-    dependency: transitive
-    description:
-      name: socks5_proxy
-      sha256: "616818a0ea1064a4823b53c9f7eaf8da64ed82dcd51ed71371c7e54751ed5053"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.6"
-  source_gen:
-    dependency: transitive
-    description:
-      name: source_gen
-      sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.2.6"
-  source_helper:
-    dependency: transitive
-    description:
-      name: source_helper
-      sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.3.3"
-  source_span:
-    dependency: transitive
-    description:
-      name: source_span
-      sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.10.0"
-  stack_trace:
-    dependency: transitive
-    description:
-      name: stack_trace
-      sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.11.1"
-  stream_channel:
-    dependency: transitive
-    description:
-      name: stream_channel
-      sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.2"
-  stream_transform:
-    dependency: transitive
-    description:
-      name: stream_transform
-      sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.0"
-  string_scanner:
-    dependency: transitive
-    description:
-      name: string_scanner
-      sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.2.0"
-  term_glyph:
-    dependency: transitive
-    description:
-      name: term_glyph
-      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.2.1"
-  test_api:
-    dependency: transitive
-    description:
-      name: test_api
-      sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.7.2"
-  timing:
-    dependency: transitive
-    description:
-      name: timing
-      sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.0.1"
-  tuple:
-    dependency: transitive
-    description:
-      name: tuple
-      sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.0.2"
-  typed_data:
-    dependency: transitive
-    description:
-      name: typed_data
-      sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.4.0"
-  unorm_dart:
-    dependency: transitive
-    description:
-      name: unorm_dart
-      sha256: "23d8bf65605401a6a32cff99435fed66ef3dab3ddcad3454059165df46496a3b"
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.3.0"
-  vector_math:
-    dependency: transitive
-    description:
-      name: vector_math
-      sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
-      url: "https://pub.dev"
-    source: hosted
-    version: "2.1.4"
-  vm_service:
-    dependency: transitive
-    description:
-      name: vm_service
-      sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
-      url: "https://pub.dev"
-    source: hosted
-    version: "14.2.4"
-  watcher:
-    dependency: "direct overridden"
-    description:
-      name: watcher
-      sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.1.0"
-  web:
-    dependency: transitive
-    description:
-      name: web
-      sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.1.0"
-  web_socket:
-    dependency: transitive
-    description:
-      name: web_socket
-      sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.1.6"
-  web_socket_channel:
-    dependency: transitive
-    description:
-      name: web_socket_channel
-      sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.0.1"
-  xdg_directories:
-    dependency: transitive
-    description:
-      name: xdg_directories
-      sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.1.0"
-  yaml:
-    dependency: transitive
-    description:
-      name: yaml
-      sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.1.2"
-sdks:
-  dart: ">=3.5.0 <4.0.0"
-  flutter: ">=3.24.0"
diff --git a/cw_haven/pubspec.yaml b/cw_haven/pubspec.yaml
deleted file mode 100644
index 452fed93a..000000000
--- a/cw_haven/pubspec.yaml
+++ /dev/null
@@ -1,81 +0,0 @@
-name: cw_haven
-description: A new flutter plugin project.
-version: 0.0.1
-publish_to: none
-author: Cake Wallet
-homepage: https://cakewallet.com
-
-environment:
-  sdk: ">=2.17.5 <3.0.0"
-  flutter: ">=1.20.0"
-
-dependencies:
-  flutter:
-    sdk: flutter
-  ffi: ^2.0.1
-  http: ^1.1.0
-  path_provider: ^2.0.11
-  mobx: ^2.0.7+4
-  flutter_mobx: ^2.0.6+1
-  intl: ^0.19.0
-  cw_core:
-    path: ../cw_core
-
-dev_dependencies:
-  flutter_test:
-    sdk: flutter
-  build_runner: ^2.4.7
-  mobx_codegen: ^2.0.7
-  build_resolvers: ^2.0.9
-  hive_generator: ^1.1.3
-
-dependency_overrides:
-  watcher: ^1.1.0
-
-# For information on the generic Dart part of this file, see the
-# following page: https://dart.dev/tools/pub/pubspec
-
-# The following section is specific to Flutter.
-flutter:
-  # This section identifies this Flutter project as a plugin project.
-  # The 'pluginClass' and Android 'package' identifiers should not ordinarily
-  # be modified. They are used by the tooling to maintain consistency when
-  # adding or updating assets for this project.
-  plugin:
-    platforms:
-      android:
-        package: com.cakewallet.cw_haven
-        pluginClass: CwHavenPlugin
-      ios:
-        pluginClass: CwHavenPlugin
-
-  # To add assets to your plugin package, add an assets section, like this:
-  # assets:
-  #   - images/a_dot_burr.jpeg
-  #   - images/a_dot_ham.jpeg
-  #
-  # For details regarding assets in packages, see
-  # https://flutter.dev/assets-and-images/#from-packages
-  #
-  # An image asset can refer to one or more resolution-specific "variants", see
-  # https://flutter.dev/assets-and-images/#resolution-aware.
-
-  # To add custom fonts to your plugin package, add a fonts section here,
-  # in this "flutter" section. Each entry in this list should have a
-  # "family" key with the font family name, and a "fonts" key with a
-  # list giving the asset and other descriptors for the font. For
-  # example:
-  # fonts:
-  #   - family: Schyler
-  #     fonts:
-  #       - asset: fonts/Schyler-Regular.ttf
-  #       - asset: fonts/Schyler-Italic.ttf
-  #         style: italic
-  #   - family: Trajan Pro
-  #     fonts:
-  #       - asset: fonts/TrajanPro.ttf
-  #       - asset: fonts/TrajanPro_Bold.ttf
-  #         weight: 700
-  #
-  # For details regarding fonts in packages, see
-  # https://flutter.dev/custom-fonts/#from-packages
diff --git a/integration_test/helpers/test_helpers.dart b/integration_test/helpers/test_helpers.dart
index 979ff60ff..caa4ebd27 100644
--- a/integration_test/helpers/test_helpers.dart
+++ b/integration_test/helpers/test_helpers.dart
@@ -78,7 +78,6 @@ class TestHelpers {
   static MockHiveInterface getAndRegisterHiveInterface() {
     _removeRegistrationIfExists<HiveInterface>();
     final service = MockHiveInterface();
-    final box = MockHiveBox();
     getIt.registerSingleton<HiveInterface>(service);
     return service;
   }
diff --git a/integration_test/robots/create_pin_welcome_page_robot.dart b/integration_test/robots/create_pin_welcome_page_robot.dart
index ca136cb38..d11750d7a 100644
--- a/integration_test/robots/create_pin_welcome_page_robot.dart
+++ b/integration_test/robots/create_pin_welcome_page_robot.dart
@@ -21,10 +21,6 @@ class CreatePinWelcomePageRobot {
       title = S.current.monero_com;
     }
 
-    if (isHaven) {
-      title = S.current.haven_app;
-    }
-
     title = S.current.cake_wallet;
 
     commonTestCases.hasText(title);
@@ -36,10 +32,6 @@ class CreatePinWelcomePageRobot {
       description = S.current.monero_com_wallet_text;
     }
 
-    if (isHaven) {
-      description = S.current.haven_app_wallet_text;
-    }
-
     description = S.current.new_first_wallet_text;
 
     commonTestCases.hasText(description);
diff --git a/integration_test/robots/restore_from_seed_or_key_robot.dart b/integration_test/robots/restore_from_seed_or_key_robot.dart
index 015a9e46f..db23e50cb 100644
--- a/integration_test/robots/restore_from_seed_or_key_robot.dart
+++ b/integration_test/robots/restore_from_seed_or_key_robot.dart
@@ -1,9 +1,7 @@
 import 'package:cake_wallet/entities/seed_type.dart';
 import 'package:cake_wallet/generated/i18n.dart';
 import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart';
-import 'package:cake_wallet/src/widgets/seed_widget.dart';
 import 'package:cake_wallet/src/widgets/validable_annotated_editable_text.dart';
-import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 
 import '../components/common_test_cases.dart';
diff --git a/integration_test/test_suites/confirm_seeds_flow_test.dart b/integration_test/test_suites/confirm_seeds_flow_test.dart
index a62ce3f60..6716c8055 100644
--- a/integration_test/test_suites/confirm_seeds_flow_test.dart
+++ b/integration_test/test_suites/confirm_seeds_flow_test.dart
@@ -1,4 +1,3 @@
-import 'dart:io';
 
 import 'package:cake_wallet/wallet_types.g.dart';
 import 'package:cw_core/wallet_type.dart';
@@ -7,7 +6,6 @@ import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:integration_test/integration_test.dart';
 
-import '../components/common_test_cases.dart';
 import '../components/common_test_constants.dart';
 import '../components/common_test_flows.dart';
 import '../robots/auth_page_robot.dart';
diff --git a/integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart b/integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart
index 0589d16ba..d8d873361 100644
--- a/integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart
+++ b/integration_test/test_suites/restore_wallet_through_seeds_flow_test.dart
@@ -1,7 +1,5 @@
-import 'dart:io';
 
 import 'package:cake_wallet/wallet_types.g.dart';
-import 'package:cw_core/utils/print_verbose.dart';
 import 'package:cw_core/wallet_type.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
diff --git a/lib/anypay/any_pay_payment.dart b/lib/anypay/any_pay_payment.dart
index 0657b0526..b37e17f3e 100644
--- a/lib/anypay/any_pay_payment.dart
+++ b/lib/anypay/any_pay_payment.dart
@@ -1,5 +1,4 @@
 import 'package:cake_wallet/anypay/any_pay_chain.dart';
-import 'package:flutter/foundation.dart';
 import 'package:cake_wallet/anypay/any_pay_payment_instruction.dart';
 import 'package:cake_wallet/bitcoin/bitcoin.dart';
 import 'package:cake_wallet/monero/monero.dart';
diff --git a/lib/anypay/any_pay_payment_committed_info.dart b/lib/anypay/any_pay_payment_committed_info.dart
index 12adea003..5d3db4cf1 100644
--- a/lib/anypay/any_pay_payment_committed_info.dart
+++ b/lib/anypay/any_pay_payment_committed_info.dart
@@ -1,4 +1,3 @@
-import 'package:flutter/foundation.dart';
 import 'package:cake_wallet/anypay/any_pay_trasnaction.dart';
 
 class AnyPayPaymentCommittedInfo {
diff --git a/lib/anypay/any_pay_payment_instruction.dart b/lib/anypay/any_pay_payment_instruction.dart
index 5181cad75..178f9be93 100644
--- a/lib/anypay/any_pay_payment_instruction.dart
+++ b/lib/anypay/any_pay_payment_instruction.dart
@@ -1,4 +1,3 @@
-import 'package:flutter/foundation.dart';
 import 'package:cake_wallet/anypay/any_pay_payment_instruction_output.dart';
 
 class AnyPayPaymentInstruction {
diff --git a/lib/buy/buy_amount.dart b/lib/buy/buy_amount.dart
index e41bb1148..fdb440a70 100644
--- a/lib/buy/buy_amount.dart
+++ b/lib/buy/buy_amount.dart
@@ -1,4 +1,3 @@
-import 'package:flutter/foundation.dart';
 
 class BuyAmount {
   BuyAmount({
diff --git a/lib/buy/buy_exception.dart b/lib/buy/buy_exception.dart
index c201b3b2d..b312af330 100644
--- a/lib/buy/buy_exception.dart
+++ b/lib/buy/buy_exception.dart
@@ -1,5 +1,3 @@
-import 'package:flutter/foundation.dart';
-import 'package:cake_wallet/buy/buy_provider_description.dart';
 
 class BuyException implements Exception {
   BuyException({required this.title, required this.content});
diff --git a/lib/buy/get_buy_provider_icon.dart b/lib/buy/get_buy_provider_icon.dart
index c755d9615..e477b7e00 100644
--- a/lib/buy/get_buy_provider_icon.dart
+++ b/lib/buy/get_buy_provider_icon.dart
@@ -10,16 +10,12 @@ Image? getBuyProviderIcon(BuyProviderDescription providerDescription,
     Image.asset('assets/images/moonpay-icon.png', color: iconColor,
         width: 36, height: 34);
 
-  if (providerDescription != null) {
-    switch (providerDescription) {
-      case BuyProviderDescription.wyre:
-        return _wyreIcon;
-      case BuyProviderDescription.moonPay:
-        return _moonPayIcon;
-      default:
-        return null;
-    }
-  } else {
-    return null;
+  switch (providerDescription) {
+    case BuyProviderDescription.wyre:
+      return _wyreIcon;
+    case BuyProviderDescription.moonPay:
+      return _moonPayIcon;
+    default:
+      return null;
   }
 }
\ No newline at end of file
diff --git a/lib/core/monero_account_label_validator.dart b/lib/core/monero_account_label_validator.dart
index ef4cf0f9a..fe98ed15c 100644
--- a/lib/core/monero_account_label_validator.dart
+++ b/lib/core/monero_account_label_validator.dart
@@ -1,7 +1,5 @@
-import 'package:flutter/foundation.dart';
 import 'package:cake_wallet/generated/i18n.dart';
 import 'package:cake_wallet/core/validator.dart';
-import 'package:cw_core/crypto_currency.dart';
 
 class MoneroLabelValidator extends TextValidator {
   MoneroLabelValidator()
diff --git a/lib/core/seed_validator.dart b/lib/core/seed_validator.dart
index 5356ed875..344b5391d 100644
--- a/lib/core/seed_validator.dart
+++ b/lib/core/seed_validator.dart
@@ -2,7 +2,6 @@ import 'package:cake_wallet/bitcoin/bitcoin.dart';
 import 'package:cake_wallet/core/validator.dart';
 import 'package:cake_wallet/entities/mnemonic_item.dart';
 import 'package:cake_wallet/ethereum/ethereum.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/monero/monero.dart';
 import 'package:cake_wallet/nano/nano.dart';
 import 'package:cake_wallet/polygon/polygon.dart';
@@ -32,8 +31,6 @@ class SeedValidator extends Validator<MnemonicItem> {
         return getBitcoinWordList(language);
       case WalletType.monero:
         return monero!.getMoneroWordList(language);
-      case WalletType.haven:
-        return haven!.getMoneroWordList(language);
       case WalletType.ethereum:
         return ethereum!.getEthereumWordList(language);
       case WalletType.bitcoinCash:
@@ -54,6 +51,7 @@ class SeedValidator extends Validator<MnemonicItem> {
       case WalletType.decred:
         return decred!.getDecredWordList();
       case WalletType.none:
+      case WalletType.haven:
         return [];
     }
   }
diff --git a/lib/di.dart b/lib/di.dart
index 5c6d11e4b..8d9b045df 100644
--- a/lib/di.dart
+++ b/lib/di.dart
@@ -50,13 +50,9 @@ import 'package:cake_wallet/src/screens/wallet_list/wallet_list_page.dart';
 import 'package:cake_wallet/src/screens/settings/mweb_logs_page.dart';
 import 'package:cake_wallet/src/screens/settings/mweb_node_page.dart';
 import 'package:cake_wallet/src/screens/welcome/welcome_page.dart';
-import 'package:cake_wallet/view_model/link_view_model.dart';
-import 'package:cake_wallet/tron/tron.dart';
-import 'package:cake_wallet/src/screens/transaction_details/rbf_details_page.dart';
 import 'package:cake_wallet/view_model/dashboard/sign_view_model.dart';
 import 'package:cake_wallet/view_model/restore/restore_wallet.dart';
 import 'package:cake_wallet/view_model/send/fees_view_model.dart';
-import 'package:cw_core/receive_page_option.dart';
 import 'package:cake_wallet/entities/preferences_key.dart';
 import 'package:cake_wallet/entities/qr_view_data.dart';
 import 'package:cake_wallet/entities/template.dart';
@@ -65,7 +61,6 @@ import 'package:cake_wallet/ethereum/ethereum.dart';
 import 'package:cake_wallet/cake_pay/cake_pay_card.dart';
 import 'package:cake_wallet/exchange/exchange_template.dart';
 import 'package:cake_wallet/exchange/trade.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/monero/monero.dart';
 import 'package:cake_wallet/nano/nano.dart';
 import 'package:cake_wallet/polygon/polygon.dart';
@@ -863,7 +858,6 @@ Future<void> setup({
       (AccountListItem? account, _) => MoneroAccountEditOrCreateViewModel(
           monero!.getAccountList(getIt.get<AppStore>().wallet!),
           wownero?.getAccountList(getIt.get<AppStore>().wallet!),
-          haven?.getAccountList(getIt.get<AppStore>().wallet!),
           wallet: getIt.get<AppStore>().wallet!,
           accountListItem: account));
 
@@ -1078,8 +1072,6 @@ Future<void> setup({
 
   getIt.registerFactoryParam<WalletService, WalletType, void>((WalletType param1, __) {
     switch (param1) {
-      case WalletType.haven:
-        return haven!.createHavenWalletService(_walletInfoSource);
       case WalletType.monero:
         return monero!.createMoneroWalletService(_walletInfoSource, _unspentCoinsInfoSource);
       case WalletType.bitcoin:
@@ -1120,6 +1112,7 @@ Future<void> setup({
       case WalletType.decred:
         return decred!.createDecredWalletService(_walletInfoSource, _unspentCoinsInfoSource);
       case WalletType.none:
+      case WalletType.haven:
         throw Exception('Unexpected token: ${param1.toString()} for generating of WalletService');
     }
   });
diff --git a/lib/entities/default_settings_migration.dart b/lib/entities/default_settings_migration.dart
index 5ed35b5a1..45234d5ec 100644
--- a/lib/entities/default_settings_migration.dart
+++ b/lib/entities/default_settings_migration.dart
@@ -5,7 +5,6 @@ import 'package:cake_wallet/core/secure_storage.dart';
 import 'package:cake_wallet/entities/exchange_api_mode.dart';
 import 'package:cake_wallet/entities/fiat_api_mode.dart';
 import 'package:cake_wallet/entities/haven_seed_store.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cw_core/pathForWallet.dart';
 import 'package:cake_wallet/entities/secret_store_key.dart';
 import 'package:cw_core/root_dir.dart';
@@ -423,7 +422,7 @@ Future<void> defaultSettingsMigration(
           );
           break;
         case 45:
-          await _backupHavenSeeds(havenSeedStore);
+          // await _backupHavenSeeds(havenSeedStore);
 
           addWalletNodeList(nodes: nodes, type: WalletType.polygon);
           addWalletNodeList(nodes: nodes, type: WalletType.ethereum);
@@ -546,14 +545,6 @@ Future<void> _updateNode({
   }
 }
 
-Future<void> _backupHavenSeeds(Box<HavenSeedStore> havenSeedStore) async {
-  final future = haven?.backupHavenSeeds(havenSeedStore);
-  if (future != null) {
-    await future;
-  }
-  return;
-}
-
 /// generic function for changing any wallet default node
 /// instead of making a new function for each change
 Future<void> _changeDefaultNode({
diff --git a/lib/entities/priority_for_wallet_type.dart b/lib/entities/priority_for_wallet_type.dart
index f7165500f..5307250d5 100644
--- a/lib/entities/priority_for_wallet_type.dart
+++ b/lib/entities/priority_for_wallet_type.dart
@@ -1,7 +1,6 @@
 import 'package:cake_wallet/bitcoin/bitcoin.dart';
 import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
 import 'package:cake_wallet/ethereum/ethereum.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/monero/monero.dart';
 import 'package:cake_wallet/polygon/polygon.dart';
 import 'package:cake_wallet/wownero/wownero.dart';
@@ -20,8 +19,6 @@ List<TransactionPriority> priorityForWalletType(WalletType type) {
       return bitcoin!.getTransactionPriorities();
     case WalletType.litecoin:
       return bitcoin!.getLitecoinTransactionPriorities();
-    case WalletType.haven:
-      return haven!.getTransactionPriorities();
     case WalletType.ethereum:
       return ethereum!.getTransactionPriorities();
     case WalletType.bitcoinCash:
@@ -38,7 +35,8 @@ List<TransactionPriority> priorityForWalletType(WalletType type) {
       return zano!.getTransactionPriorities();
     case WalletType.decred:
       return decred!.getTransactionPriorities();
-    default:
+    case WalletType.none:
+    case WalletType.haven:
       return [];
   }
 }
diff --git a/lib/entities/qr_scanner.dart b/lib/entities/qr_scanner.dart
index 91c63a574..c4d37ad6c 100644
--- a/lib/entities/qr_scanner.dart
+++ b/lib/entities/qr_scanner.dart
@@ -1,9 +1,7 @@
 import 'dart:math';
 
 import 'package:cake_wallet/generated/i18n.dart';
-import 'package:cake_wallet/main.dart';
 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
-import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
 import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:cw_core/utils/print_verbose.dart';
 import 'package:fast_scanner/fast_scanner.dart';
diff --git a/lib/entities/seed_phrase_length.dart b/lib/entities/seed_phrase_length.dart
index 65e9fac40..e2c93c025 100644
--- a/lib/entities/seed_phrase_length.dart
+++ b/lib/entities/seed_phrase_length.dart
@@ -1,4 +1,3 @@
-import 'package:cake_wallet/generated/i18n.dart';
 
 enum SeedPhraseLength {
   twelveWords(12),
diff --git a/lib/entities/update_haven_rate.dart b/lib/entities/update_haven_rate.dart
deleted file mode 100644
index 7c04154b1..000000000
--- a/lib/entities/update_haven_rate.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
-import 'package:cw_core/crypto_currency.dart';
-import 'package:cw_core/monero_amount_format.dart';
-import 'package:cake_wallet/haven/haven.dart';
-
-Future<void> updateHavenRate(FiatConversionStore fiatConversionStore) async {
-  try {
-    final rate = haven!.getAssetRate();
-    final base = rate.firstWhere((row) => row.asset == 'XUSD');
-
-    rate.forEach((row) {
-      final cur = CryptoCurrency.fromString(row.asset);
-      final baseRate = moneroAmountToDouble(amount: base.rate);
-      final rowRate = moneroAmountToDouble(amount: row.rate);
-
-      if (cur == CryptoCurrency.xusd) {
-        fiatConversionStore.prices[cur] = 1.0;
-        return;
-      }
-
-      fiatConversionStore.prices[cur] = baseRate / rowRate;
-    });
-  } catch(_) {
-    // FIX-ME: handle exception    
-  }
-}
\ No newline at end of file
diff --git a/lib/reactions/fiat_rate_update.dart b/lib/reactions/fiat_rate_update.dart
index 2ddb1c6f2..dbc5f9ae4 100644
--- a/lib/reactions/fiat_rate_update.dart
+++ b/lib/reactions/fiat_rate_update.dart
@@ -1,7 +1,6 @@
 import 'dart:async';
 import 'package:cake_wallet/core/fiat_conversion_service.dart';
 import 'package:cake_wallet/entities/fiat_api_mode.dart';
-import 'package:cake_wallet/entities/update_haven_rate.dart';
 import 'package:cake_wallet/ethereum/ethereum.dart';
 import 'package:cake_wallet/polygon/polygon.dart';
 import 'package:cake_wallet/solana/solana.dart';
@@ -28,15 +27,11 @@ Future<void> startFiatRateUpdate(
         return;
       }
 
-      if (appStore.wallet!.type == WalletType.haven) {
-        await updateHavenRate(fiatConversionStore);
-      } else {
-        fiatConversionStore.prices[appStore.wallet!.currency] =
-            await FiatConversionService.fetchPrice(
-                crypto: appStore.wallet!.currency,
-                fiat: settingsStore.fiatCurrency,
-                torOnly: settingsStore.fiatApiMode == FiatApiMode.torOnly);
-      }
+      fiatConversionStore.prices[appStore.wallet!.currency] =
+          await FiatConversionService.fetchPrice(
+              crypto: appStore.wallet!.currency,
+              fiat: settingsStore.fiatCurrency,
+              torOnly: settingsStore.fiatApiMode == FiatApiMode.torOnly);
 
       Iterable<CryptoCurrency>? currencies;
       if (appStore.wallet!.type == WalletType.ethereum) {
diff --git a/lib/reactions/on_current_wallet_change.dart b/lib/reactions/on_current_wallet_change.dart
index 513c97c4e..b1786b743 100644
--- a/lib/reactions/on_current_wallet_change.dart
+++ b/lib/reactions/on_current_wallet_change.dart
@@ -1,7 +1,6 @@
 import 'package:cake_wallet/di.dart';
 import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart';
 import 'package:cake_wallet/entities/fiat_api_mode.dart';
-import 'package:cake_wallet/entities/update_haven_rate.dart';
 import 'package:cake_wallet/entities/wallet_manager.dart';
 import 'package:cake_wallet/ethereum/ethereum.dart';
 import 'package:cake_wallet/polygon/polygon.dart';
@@ -85,10 +84,6 @@ void startCurrentWalletChangeReaction(
         await wallet.connectToPowNode(node: powNode);
       }
 
-      if (wallet.type == WalletType.haven) {
-        await updateHavenRate(fiatConversionStore);
-      }
-
       if (wallet.walletInfo.address.isEmpty) {
         wallet.walletInfo.address = wallet.walletAddresses.address;
 
diff --git a/lib/reactions/on_wallet_sync_status_change.dart b/lib/reactions/on_wallet_sync_status_change.dart
index fc618dabd..bf2e8ed0d 100644
--- a/lib/reactions/on_wallet_sync_status_change.dart
+++ b/lib/reactions/on_wallet_sync_status_change.dart
@@ -1,7 +1,5 @@
-import 'package:cake_wallet/entities/update_haven_rate.dart';
 import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
 import 'package:cw_core/utils/print_verbose.dart';
-import 'package:cw_core/wallet_type.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cw_core/transaction_history.dart';
 import 'package:cw_core/wallet_base.dart';
@@ -20,10 +18,6 @@ void startWalletSyncStatusChangeReaction(
     try {
       if (status is ConnectedSyncStatus) {
         await wallet.startSync();
-
-        if (wallet.type == WalletType.haven) {
-          await updateHavenRate(fiatConversionStore);
-        }
       }
       if (status is SyncingSyncStatus || status is ProcessingSyncStatus) {
         await WakelockPlus.enable();
diff --git a/lib/src/screens/buy/widgets/buy_list_item.dart b/lib/src/screens/buy/widgets/buy_list_item.dart
index d8c457ac0..d41325ce8 100644
--- a/lib/src/screens/buy/widgets/buy_list_item.dart
+++ b/lib/src/screens/buy/widgets/buy_list_item.dart
@@ -1,5 +1,4 @@
 import 'package:cake_wallet/buy/buy_provider.dart';
-import 'package:cake_wallet/buy/get_buy_provider_icon.dart';
 import 'package:cw_core/crypto_currency.dart';
 import 'package:cake_wallet/entities/fiat_currency.dart';
 import 'package:cake_wallet/palette.dart';
diff --git a/lib/src/screens/welcome/create_pin_welcome_page.dart b/lib/src/screens/welcome/create_pin_welcome_page.dart
index ddf3b8d5b..d4230668a 100644
--- a/lib/src/screens/welcome/create_pin_welcome_page.dart
+++ b/lib/src/screens/welcome/create_pin_welcome_page.dart
@@ -26,10 +26,6 @@ class CreatePinWelcomePage extends BasePage {
       return S.of(context).monero_com;
     }
 
-    if (isHaven) {
-      return S.of(context).haven_app;
-    }
-
     return S.of(context).cake_wallet;
   }
 
@@ -38,10 +34,6 @@ class CreatePinWelcomePage extends BasePage {
       return S.of(context).monero_com_wallet_text;
     }
 
-    if (isHaven) {
-      return S.of(context).haven_app_wallet_text;
-    }
-
     return S.of(context).new_first_wallet_text;
   }
 
diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart
index 49c0dbc59..a4408a935 100644
--- a/lib/view_model/dashboard/dashboard_view_model.dart
+++ b/lib/view_model/dashboard/dashboard_view_model.dart
@@ -32,7 +32,6 @@ import 'package:cake_wallet/view_model/dashboard/order_list_item.dart';
 import 'package:cake_wallet/view_model/dashboard/trade_list_item.dart';
 import 'package:cake_wallet/view_model/dashboard/transaction_list_item.dart';
 import 'package:cake_wallet/view_model/settings/sync_mode.dart';
-import 'package:cake_wallet/wallet_type_utils.dart';
 import 'package:cryptography/cryptography.dart';
 import 'package:cw_core/balance.dart';
 import 'package:cw_core/cake_hive.dart';
@@ -70,8 +69,8 @@ abstract class DashboardViewModelBase with Store {
       required this.anonpayTransactionsStore,
       required this.sharedPreferences,
       required this.keyService})
-      : hasTradeAction = false,
-        hasSwapAction = false,
+      : hasTradeAction = true,
+        hasSwapAction = true,
         isShowFirstYatIntroduction = false,
         isShowSecondYatIntroduction = false,
         isShowThirdYatIntroduction = false,
@@ -176,7 +175,6 @@ abstract class DashboardViewModelBase with Store {
     isShowFirstYatIntroduction = false;
     isShowSecondYatIntroduction = false;
     isShowThirdYatIntroduction = false;
-    updateActions();
 
     final _wallet = wallet;
 
@@ -664,7 +662,6 @@ abstract class DashboardViewModelBase with Store {
     this.wallet = wallet;
     type = wallet.type;
     name = wallet.name;
-    updateActions();
 
     if (wallet.type == WalletType.monero) {
       subname = monero!.getCurrentAccount(wallet).label;
@@ -800,11 +797,6 @@ abstract class DashboardViewModelBase with Store {
     }
   }
 
-  void updateActions() {
-    hasSwapAction = !isHaven;
-    hasTradeAction = !isHaven;
-  }
-
   @computed
   SyncMode get syncMode => settingsStore.currentSyncMode;
 
diff --git a/lib/view_model/dashboard/transaction_list_item.dart b/lib/view_model/dashboard/transaction_list_item.dart
index 83953f9f1..808ccabea 100644
--- a/lib/view_model/dashboard/transaction_list_item.dart
+++ b/lib/view_model/dashboard/transaction_list_item.dart
@@ -16,7 +16,6 @@ import 'package:cw_core/transaction_info.dart';
 import 'package:cake_wallet/store/settings_store.dart';
 import 'package:cake_wallet/view_model/dashboard/action_list_item.dart';
 import 'package:cake_wallet/monero/monero.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/bitcoin/bitcoin.dart';
 import 'package:cake_wallet/entities/calculate_fiat_amount_raw.dart';
 import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart';
@@ -172,13 +171,6 @@ class TransactionListItem extends ActionListItem with Keyable {
             cryptoAmount: bitcoin!.formatterBitcoinAmountToDouble(amount: transaction.amount),
             price: price);
         break;
-      case WalletType.haven:
-        final asset = haven!.assetOfTransaction(transaction);
-        final price = balanceViewModel.fiatConvertationStore.prices[asset];
-        amount = calculateFiatAmountRaw(
-            cryptoAmount: haven!.formatterMoneroAmountToDouble(amount: transaction.amount),
-            price: price);
-        break;
       case WalletType.ethereum:
         final asset = ethereum!.assetOfTransaction(balanceViewModel.wallet, transaction);
         final price = balanceViewModel.fiatConvertationStore.prices[asset];
@@ -234,6 +226,7 @@ class TransactionListItem extends ActionListItem with Keyable {
         break;
       case WalletType.none:
       case WalletType.banano:
+      case WalletType.haven:
         break;
     }
 
diff --git a/lib/view_model/monero_account_list/monero_account_edit_or_create_view_model.dart b/lib/view_model/monero_account_list/monero_account_edit_or_create_view_model.dart
index 8d626e258..8eb034029 100644
--- a/lib/view_model/monero_account_list/monero_account_edit_or_create_view_model.dart
+++ b/lib/view_model/monero_account_list/monero_account_edit_or_create_view_model.dart
@@ -1,11 +1,9 @@
 import 'package:cake_wallet/wownero/wownero.dart';
 import 'package:cw_core/wallet_base.dart';
 import 'package:cw_core/wallet_type.dart';
-import 'package:flutter/foundation.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/core/execution_state.dart';
 import 'package:cake_wallet/monero/monero.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
 
 part 'monero_account_edit_or_create_view_model.g.dart';
@@ -14,7 +12,7 @@ class MoneroAccountEditOrCreateViewModel = MoneroAccountEditOrCreateViewModelBas
     with _$MoneroAccountEditOrCreateViewModel;
 
 abstract class MoneroAccountEditOrCreateViewModelBase with Store {
-  MoneroAccountEditOrCreateViewModelBase(this._moneroAccountList, this._wowneroAccountList, this._havenAccountList,
+  MoneroAccountEditOrCreateViewModelBase(this._moneroAccountList, this._wowneroAccountList,
       {required WalletBase wallet, AccountListItem? accountListItem})
       : state = InitialExecutionState(),
         isEdit = accountListItem != null,
@@ -32,7 +30,6 @@ abstract class MoneroAccountEditOrCreateViewModelBase with Store {
 
   final MoneroAccountList _moneroAccountList;
   final WowneroAccountList? _wowneroAccountList;
-  final HavenAccountList? _havenAccountList;
   final AccountListItem? _accountListItem;
   final WalletBase _wallet;
 
@@ -41,10 +38,6 @@ abstract class MoneroAccountEditOrCreateViewModelBase with Store {
       await saveMonero();
     }
 
-    if (_wallet.type == WalletType.haven) {
-      await saveHaven();
-    }
-
     if (_wallet.type == WalletType.wownero) {
       await saveWownero();
     }
@@ -57,7 +50,7 @@ abstract class MoneroAccountEditOrCreateViewModelBase with Store {
       if (_accountListItem != null) {
         await _moneroAccountList.setLabelAccount(
             _wallet,
-            accountIndex: _accountListItem!.id,
+            accountIndex: _accountListItem.id,
             label: label);
       } else {
         await _moneroAccountList.addAccount(
@@ -72,32 +65,6 @@ abstract class MoneroAccountEditOrCreateViewModelBase with Store {
     }
   }
 
-  Future<void> saveHaven() async {
-    if (!(_wallet.type == WalletType.haven)) {
-      return;
-    }
-
-    try {
-      state = IsExecutingState();
-
-      if (_accountListItem != null) {
-        await _havenAccountList!.setLabelAccount(
-            _wallet,
-            accountIndex: _accountListItem!.id,
-            label: label);
-      } else {
-        await _havenAccountList!.addAccount(
-          _wallet,
-          label: label);
-      }
-
-      await _wallet.save();
-      state = ExecutedSuccessfullyState();
-    } catch (e) {
-      state = FailureState(e.toString());
-    }
-  }
-
   Future<void> saveWownero() async {
     try {
       state = IsExecutingState();
@@ -105,7 +72,7 @@ abstract class MoneroAccountEditOrCreateViewModelBase with Store {
       if (_accountListItem != null) {
         await _wowneroAccountList?.setLabelAccount(
             _wallet,
-            accountIndex: _accountListItem!.id,
+            accountIndex: _accountListItem.id,
             label: label);
       } else {
         await _wowneroAccountList?.addAccount(
diff --git a/lib/view_model/monero_account_list/monero_account_list_view_model.dart b/lib/view_model/monero_account_list/monero_account_list_view_model.dart
index 448106779..4ecffcfb3 100644
--- a/lib/view_model/monero_account_list/monero_account_list_view_model.dart
+++ b/lib/view_model/monero_account_list/monero_account_list_view_model.dart
@@ -5,7 +5,6 @@ import 'package:mobx/mobx.dart';
 import 'package:cw_core/wallet_base.dart';
 import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
 import 'package:cake_wallet/monero/monero.dart';
-import 'package:cake_wallet/haven/haven.dart';
 
 part 'monero_account_list_view_model.g.dart';
 
@@ -27,16 +26,6 @@ abstract class MoneroAccountListViewModelBase with Store {
 
   @computed
   List<AccountListItem> get accounts {
-    if (_wallet.type == WalletType.haven) {
-      return haven
-        !.getAccountList(_wallet)
-        .accounts.map((acc) => AccountListItem(
-            label: acc.label,
-            id: acc.id,
-            isSelected: acc.id == haven!.getCurrentAccount(_wallet).id))
-        .toList();
-    }
-
     if (_wallet.type == WalletType.monero) {
       return monero
         !.getAccountList(_wallet)
@@ -82,12 +71,5 @@ abstract class MoneroAccountListViewModelBase with Store {
         item.balance,
         );
     }
-
-    if (_wallet.type == WalletType.haven) {
-      haven!.setCurrentAccount(
-        _wallet,
-        item.id,
-        item.label);
-    }
   }
 }
diff --git a/lib/view_model/send/output.dart b/lib/view_model/send/output.dart
index fdaaeba0d..a59bf5852 100644
--- a/lib/view_model/send/output.dart
+++ b/lib/view_model/send/output.dart
@@ -4,7 +4,6 @@ import 'package:cake_wallet/entities/calculate_fiat_amount_raw.dart';
 import 'package:cake_wallet/entities/parse_address_from_domain.dart';
 import 'package:cake_wallet/entities/parsed_address.dart';
 import 'package:cake_wallet/ethereum/ethereum.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/polygon/polygon.dart';
 import 'package:cake_wallet/reactions/wallet_connect.dart';
 import 'package:cake_wallet/solana/solana.dart';
@@ -105,9 +104,6 @@ abstract class OutputBase with Store {
           case WalletType.decred:
             _amount = decred!.formatterStringDoubleToDecredAmount(_cryptoAmount);
             break;
-          case WalletType.haven:
-            _amount = haven!.formatterMoneroParseAmount(amount: _cryptoAmount);
-            break;
           case WalletType.ethereum:
             _amount = ethereum!.formatterEthereumParseAmount(_cryptoAmount);
             break;
@@ -120,7 +116,12 @@ abstract class OutputBase with Store {
           case WalletType.zano:
             _amount = zano!.formatterParseAmount(amount: _cryptoAmount, currency: cryptoCurrencyHandler());
             break;
-          default:
+          case WalletType.none:
+          case WalletType.haven:
+          case WalletType.nano:
+          case WalletType.banano:
+          case WalletType.solana:
+          case WalletType.tron:
             break;
         }
 
@@ -177,10 +178,6 @@ abstract class OutputBase with Store {
         return wownero!.formatterWowneroAmountToDouble(amount: fee);
       }
 
-      if (_wallet.type == WalletType.haven) {
-        return haven!.formatterMoneroAmountToDouble(amount: fee);
-      }
-
       if (_wallet.type == WalletType.ethereum) {
         return ethereum!.formatterEthereumAmountToDouble(amount: BigInt.from(fee));
       }
diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart
index 3bf85ef2f..52a8b06db 100644
--- a/lib/view_model/send/send_view_model.dart
+++ b/lib/view_model/send/send_view_model.dart
@@ -1,6 +1,5 @@
 import 'package:cake_wallet/entities/contact.dart';
 import 'package:cake_wallet/entities/evm_transaction_error_fees_handler.dart';
-import 'package:cake_wallet/entities/priority_for_wallet_type.dart';
 import 'package:cake_wallet/entities/transaction_description.dart';
 import 'package:cake_wallet/ethereum/ethereum.dart';
 import 'package:cake_wallet/exchange/provider/exchange_provider.dart';
@@ -25,7 +24,6 @@ import 'package:cake_wallet/wownero/wownero.dart';
 import 'package:cake_wallet/zano/zano.dart';
 import 'package:cw_core/exceptions.dart';
 import 'package:cw_core/transaction_info.dart';
-import 'package:cw_core/transaction_priority.dart';
 import 'package:cw_core/unspent_coin_type.dart';
 import 'package:cake_wallet/view_model/send/output.dart';
 import 'package:cake_wallet/view_model/send/send_template_view_model.dart';
@@ -49,9 +47,7 @@ import 'package:cake_wallet/store/settings_store.dart';
 import 'package:cake_wallet/view_model/send/send_view_model_state.dart';
 import 'package:cake_wallet/entities/parsed_address.dart';
 import 'package:cake_wallet/bitcoin/bitcoin.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/generated/i18n.dart';
-import 'package:collection/collection.dart';
 
 part 'send_view_model.g.dart';
 
@@ -521,10 +517,6 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
         return wownero!
             .createWowneroTransactionCreationCredentials(outputs: outputs, priority: priority!);
 
-      case WalletType.haven:
-        return haven!.createHavenTransactionCreationCredentials(
-            outputs: outputs, priority: priority!, assetType: selectedCryptoCurrency.title);
-
       case WalletType.ethereum:
         return ethereum!.createEthereumTransactionCredentials(outputs,
             priority: priority!, currency: selectedCryptoCurrency);
diff --git a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart
index 3a678ff0f..c417f6f4e 100644
--- a/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart
+++ b/lib/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart
@@ -4,7 +4,6 @@ import 'package:mobx/mobx.dart';
 import 'package:cw_core/wallet_base.dart';
 import 'package:cake_wallet/bitcoin/bitcoin.dart';
 import 'package:cake_wallet/monero/monero.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/decred/decred.dart';
 import 'package:cw_core/wallet_type.dart';
 
@@ -105,13 +104,6 @@ abstract class WalletAddressEditOrCreateViewModelBase with Store {
       wallet.walletAddresses.manualAddresses.add(addr);
       await wallet.save();
     }
-
-    if (wallet.type == WalletType.haven) {
-      await haven!
-          .getSubaddressList(wallet)
-          .addSubaddress(wallet, accountIndex: haven!.getCurrentAccount(wallet).id, label: label);
-      await wallet.save();
-    }
   }
 
   Future<void> _update() async {
@@ -137,11 +129,6 @@ abstract class WalletAddressEditOrCreateViewModelBase with Store {
             accountIndex: wownero!.getCurrentAccount(wallet).id, addressIndex: index, label: label);
         await wallet.save();
       }
-      if (wallet.type == WalletType.haven) {
-        await haven!.getSubaddressList(wallet).setLabelSubaddress(wallet,
-            accountIndex: haven!.getCurrentAccount(wallet).id, addressIndex: index, label: label);
-        await wallet.save();
-      }
     }
   }
 }
diff --git a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart
index 0b0873a60..5b9be9109 100644
--- a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart
+++ b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart
@@ -8,7 +8,6 @@ import 'package:cake_wallet/entities/fiat_api_mode.dart';
 import 'package:cake_wallet/entities/fiat_currency.dart';
 import 'package:cake_wallet/ethereum/ethereum.dart';
 import 'package:cake_wallet/generated/i18n.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/monero/monero.dart';
 import 'package:cake_wallet/polygon/polygon.dart';
 import 'package:cake_wallet/solana/solana.dart';
@@ -27,7 +26,6 @@ import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_i
 import 'package:cake_wallet/wownero/wownero.dart';
 import 'package:cw_core/amount_converter.dart';
 import 'package:cw_core/currency.dart';
-import 'package:cw_core/utils/print_verbose.dart';
 import 'package:cw_core/wallet_type.dart';
 import 'package:intl/intl.dart';
 import 'package:mobx/mobx.dart';
@@ -377,20 +375,6 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
       addressList.addAll(addressItems);
     }
 
-    if (wallet.type == WalletType.haven) {
-      final primaryAddress = haven!.getSubaddressList(wallet).subaddresses.first;
-      final addressItems = haven!.getSubaddressList(wallet).subaddresses.map((subaddress) {
-        final isPrimary = subaddress == primaryAddress;
-
-        return WalletAddressListItem(
-            id: subaddress.id,
-            isPrimary: isPrimary,
-            name: subaddress.label,
-            address: subaddress.address);
-      });
-      addressList.addAll(addressItems);
-    }
-
     if (isElectrumWallet) {
       if (bitcoin!.hasSelectedSilentPayments(wallet)) {
         final addressItems = bitcoin!.getSilentPaymentAddresses(wallet).map((address) {
@@ -556,10 +540,6 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
       wownero!
           .getSubaddressList(wallet)
           .update(wallet, accountIndex: wownero!.getCurrentAccount(wallet).id);
-    } else if (wallet.type == WalletType.haven) {
-      haven!
-          .getSubaddressList(wallet)
-          .update(wallet, accountIndex: haven!.getCurrentAccount(wallet).id);
     }
   }
 
@@ -573,8 +553,6 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
         return monero!.getCurrentAccount(wallet).label;
       case WalletType.wownero:
         wownero!.getCurrentAccount(wallet).label;
-      case WalletType.haven:
-        return haven!.getCurrentAccount(wallet).label;
       default:
         return '';
     }
diff --git a/lib/view_model/wallet_keys_view_model.dart b/lib/view_model/wallet_keys_view_model.dart
index 467b7c3a5..246227a80 100644
--- a/lib/view_model/wallet_keys_view_model.dart
+++ b/lib/view_model/wallet_keys_view_model.dart
@@ -1,5 +1,4 @@
 import 'package:cake_wallet/generated/i18n.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/monero/monero.dart';
 import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
 import 'package:cake_wallet/store/app_store.dart';
@@ -116,9 +115,6 @@ abstract class WalletKeysViewModelBase with Store {
       case WalletType.monero:
         keys = monero!.getKeys(_wallet);
         break;
-      case WalletType.haven:
-        keys = haven!.getKeys(_wallet);
-        break;
       case WalletType.wownero:
         keys = wownero!.getKeys(_wallet);
         break;
@@ -166,6 +162,7 @@ abstract class WalletKeysViewModelBase with Store {
       case WalletType.litecoin:
       case WalletType.bitcoinCash:
       case WalletType.none:
+      case WalletType.haven:
         //   final keys = bitcoin!.getWalletKeys(_appStore.wallet!);
         //
         //   items.addAll([
@@ -215,9 +212,6 @@ abstract class WalletKeysViewModelBase with Store {
   }
 
   Future<int?> _currentHeight() async {
-    if (_wallet.type == WalletType.haven) {
-      return await haven!.getCurrentHeight();
-    }
     if (_wallet.type == WalletType.monero) {
       return await monero!.getCurrentHeight();
     }
@@ -307,8 +301,6 @@ abstract class WalletKeysViewModelBase with Store {
   List<TransactionInfo> _getWalletTransactions(WalletBase wallet) {
     if (wallet.type == WalletType.monero) {
       return monero!.getTransactionHistory(wallet).transactions.values.toList();
-    } else if (wallet.type == WalletType.haven) {
-      return haven!.getTransactionHistory(wallet).transactions.values.toList();
     } else if (wallet.type == WalletType.wownero) {
       return wownero!.getTransactionHistory(wallet).transactions.values.toList();
     }
@@ -318,8 +310,6 @@ abstract class WalletKeysViewModelBase with Store {
   int _getRestoreHeightByTransactions(WalletType type, DateTime date) {
     if (type == WalletType.monero) {
       return monero!.getHeightByDate(date: date);
-    } else if (type == WalletType.haven) {
-      return haven!.getHeightByDate(date: date);
     } else if (type == WalletType.wownero) {
       return wownero!.getHeightByDate(date: date);
     }
diff --git a/lib/view_model/wallet_new_vm.dart b/lib/view_model/wallet_new_vm.dart
index e82ae8773..f4117f8ab 100644
--- a/lib/view_model/wallet_new_vm.dart
+++ b/lib/view_model/wallet_new_vm.dart
@@ -5,29 +5,21 @@ import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
 import 'package:cake_wallet/solana/solana.dart';
 import 'package:cake_wallet/tron/tron.dart';
 import 'package:cake_wallet/wownero/wownero.dart';
-import 'package:cake_wallet/zano/zano.dart';
 import 'package:hive/hive.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/bitcoin/bitcoin.dart';
-import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
 import 'package:cake_wallet/core/wallet_creation_service.dart';
 import 'package:cake_wallet/entities/seed_type.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/monero/monero.dart';
 import 'package:cake_wallet/nano/nano.dart';
-import 'package:cake_wallet/solana/solana.dart';
 import 'package:cake_wallet/store/app_store.dart';
-import 'package:cake_wallet/tron/tron.dart';
 import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
 import 'package:cake_wallet/view_model/wallet_creation_vm.dart';
-import 'package:cake_wallet/wownero/wownero.dart';
 import 'package:cake_wallet/decred/decred.dart';
 import 'package:cw_core/wallet_base.dart';
 import 'package:cw_core/wallet_credentials.dart';
 import 'package:cw_core/wallet_info.dart';
 import 'package:cw_core/wallet_type.dart';
-import 'package:hive/hive.dart';
-import 'package:mobx/mobx.dart';
 
 import '../polygon/polygon.dart';
 import 'advanced_privacy_settings_view_model.dart';
@@ -113,9 +105,6 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store {
           passphrase: passphrase,
           mnemonic: newWalletArguments!.mnemonic,
         );
-      case WalletType.haven:
-        return haven!.createHavenNewWalletCredentials(
-            name: name, language: options!.first as String, password: walletPassword);
       case WalletType.ethereum:
         return ethereum!.createEthereumNewWalletCredentials(
           name: name,
@@ -176,6 +165,7 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store {
       case WalletType.decred:
         return decred!.createDecredNewWalletCredentials(name: name);
       case WalletType.none:
+      case WalletType.haven:
         throw Exception('Unexpected type: ${type.toString()}');
     }
   }
diff --git a/lib/view_model/wallet_restore_view_model.dart b/lib/view_model/wallet_restore_view_model.dart
index 3e005e9bc..dec0be6b1 100644
--- a/lib/view_model/wallet_restore_view_model.dart
+++ b/lib/view_model/wallet_restore_view_model.dart
@@ -4,7 +4,6 @@ import 'package:cake_wallet/core/generate_wallet_password.dart';
 import 'package:cake_wallet/core/wallet_creation_service.dart';
 import 'package:cake_wallet/di.dart';
 import 'package:cake_wallet/ethereum/ethereum.dart';
-import 'package:cake_wallet/haven/haven.dart';
 import 'package:cake_wallet/monero/monero.dart';
 import 'package:cake_wallet/nano/nano.dart';
 import 'package:cake_wallet/polygon/polygon.dart';
@@ -117,9 +116,6 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
             derivationType: derivationInfo!.derivationType!,
             derivationPath: derivationInfo.derivationPath!,
           );
-        case WalletType.haven:
-          return haven!.createHavenRestoreWalletFromSeedCredentials(
-              name: name, height: height, mnemonic: seed, password: password);
         case WalletType.ethereum:
           return ethereum!.createEthereumRestoreWalletFromSeedCredentials(
             name: name,
@@ -187,6 +183,7 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
               password: password,
           );
         case WalletType.none:
+        case WalletType.haven:
           break;
       }
     }
@@ -208,17 +205,6 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store {
             language: 'English',
           );
 
-        case WalletType.haven:
-          return haven!.createHavenRestoreWalletFromKeysCredentials(
-            name: name,
-            height: height,
-            spendKey: spendKey!,
-            viewKey: viewKey!,
-            address: address!,
-            password: password,
-            language: 'English',
-          );
-
         case WalletType.ethereum:
           return ethereum!.createEthereumRestoreWalletFromPrivateKey(
             name: name,
diff --git a/lib/wallet_type_utils.dart b/lib/wallet_type_utils.dart
index 459ca992b..093aebc8e 100644
--- a/lib/wallet_type_utils.dart
+++ b/lib/wallet_type_utils.dart
@@ -6,11 +6,6 @@ bool get isMoneroOnly {
      	&& availableWalletTypes.first == WalletType.monero;
 }
 
-bool get isHaven {
-    return availableWalletTypes.length == 1
-        && availableWalletTypes.first == WalletType.haven;
-}
-
 
 bool get isSingleCoin {
      return availableWalletTypes.length == 1;
@@ -24,10 +19,6 @@ String get approximatedAppName {
     if (isMoneroOnly) {
         return 'Monero.com';   
     }
-
-    if (isHaven) {
-        return 'Haven';
-    }
      
     return 'Cake Wallet';
 }
diff --git a/model_generator.sh b/model_generator.sh
index 56b891903..7a5e3bfd7 100755
--- a/model_generator.sh
+++ b/model_generator.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 set -x -e
 
-for cwcoin in cw_{core,evm,monero,bitcoin,haven,nano,bitcoin_cash,solana,tron,wownero,zano,decred}
+for cwcoin in cw_{core,evm,monero,bitcoin,nano,bitcoin_cash,solana,tron,wownero,zano,decred}
 do
     if [[ "x$1" == "xasync" ]];
     then
diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh
index 41095ef26..597c0aa9a 100644
--- a/scripts/android/app_env.sh
+++ b/scripts/android/app_env.sh
@@ -9,9 +9,8 @@ APP_ANDROID_SCHEME=""
 
 MONERO_COM="monero.com"
 CAKEWALLET="cakewallet"
-HAVEN="haven"
 
-TYPES=($MONERO_COM $CAKEWALLET $HAVEN)
+TYPES=($MONERO_COM $CAKEWALLET)
 APP_ANDROID_TYPE=$1
 
 MONERO_COM_NAME="Monero.com"
@@ -28,11 +27,6 @@ CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
 CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
 CAKEWALLET_SCHEME="cakewallet"
 
-HAVEN_NAME="Haven"
-HAVEN_VERSION="1.0.0"
-HAVEN_BUILD_NUMBER=1
-HAVEN_BUNDLE_ID="com.cakewallet.haven"
-HAVEN_PACKAGE="com.cakewallet.haven"
 
 if ! [[ " ${TYPES[*]} " =~ " ${APP_ANDROID_TYPE} " ]]; then
     echo "Wrong app type."
diff --git a/scripts/android/app_icon.sh b/scripts/android/app_icon.sh
index 9db01f227..9d7be355a 100755
--- a/scripts/android/app_icon.sh
+++ b/scripts/android/app_icon.sh
@@ -23,11 +23,6 @@ case $APP_ANDROID_TYPE in
     	ANDROID_ICON=$CAKEWALLET_PATH
     	ANDROID_ICON_SET=$CAKEWALLET_ICON_SET_PATH
     	;;
-    "haven")
-    	APP_LOGO=$ASSETS_DIR/images/cakewallet_logo.png
-    	ANDROID_ICON=$CAKEWALLET_PATH
-    	ANDROID_ICON_SET=$CAKEWALLET_ICON_SET_PATH
-    	;;
 esac
 
 rm $APP_LOGO_DEST_PATH
diff --git a/scripts/android/build_all.sh b/scripts/android/build_all.sh
index dc730af55..25a395898 100755
--- a/scripts/android/build_all.sh
+++ b/scripts/android/build_all.sh
@@ -10,8 +10,6 @@ DIR=$(dirname "$0")
 case $APP_ANDROID_TYPE in
 	"monero.com") $DIR/build_monero_all.sh ;;
 	"cakewallet") $DIR/build_monero_all.sh
-				  $DIR/build_haven_all.sh
 					$DIR/build_mwebd.sh
 						$DIR/build_decred.sh ;;
-	"haven")      $DIR/build_haven_all.sh ;;
 esac
diff --git a/scripts/android/build_haven.sh b/scripts/android/build_haven.sh
deleted file mode 100755
index 16cf05039..000000000
--- a/scripts/android/build_haven.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/sh
-
-. ./config.sh
-HAVEN_VERSION=tags/v3.0.7
-HAVEN_SRC_DIR=${WORKDIR}/haven
-
-git clone https://github.com/haven-protocol-org/haven-main.git ${HAVEN_SRC_DIR}
-cd $HAVEN_SRC_DIR
-git checkout ${HAVEN_VERSION}
-git submodule init
-git submodule update
-
-for arch in "aarch" "aarch64" "i686" "x86_64"
-do
-FLAGS=""
-PREFIX=${WORKDIR}/prefix_${arch}
-DEST_LIB_DIR=${PREFIX}/lib/haven
-DEST_INCLUDE_DIR=${PREFIX}/include/haven
-export CMAKE_INCLUDE_PATH="${PREFIX}/include"
-export CMAKE_LIBRARY_PATH="${PREFIX}/lib"
-ANDROID_STANDALONE_TOOLCHAIN_PATH="${TOOLCHAIN_BASE_DIR}_${arch}"
-PATH="${ANDROID_STANDALONE_TOOLCHAIN_PATH}/bin:${ORIGINAL_PATH}"
-
-mkdir -p $DEST_LIB_DIR
-mkdir -p $DEST_INCLUDE_DIR
-
-case $arch in
-	"aarch"	)
-		CLANG=arm-linux-androideabi-clang
- 		CXXLANG=arm-linux-androideabi-clang++
-		BUILD_64=OFF
-		TAG="android-armv7"
-		ARCH="armv7-a"
-		ARCH_ABI="armeabi-v7a"
-		FLAGS="-D CMAKE_ANDROID_ARM_MODE=ON -D NO_AES=true";;
-	"aarch64"	)
-		CLANG=aarch64-linux-androideabi-clang
- 		CXXLANG=aarch64-linux-androideabi-clang++
-		BUILD_64=ON
-		TAG="android-armv8"
-		ARCH="armv8-a"
-		ARCH_ABI="arm64-v8a";;
-	"i686"		)
-		CLANG=i686-linux-androideabi-clang
- 		CXXLANG=i686-linux-androideabi-clang++
-		BUILD_64=OFF
-		TAG="android-x86"
-		ARCH="i686"
-		ARCH_ABI="x86";;
-	"x86_64"	)  
-		CLANG=x86_64-linux-androideabi-clang
- 		CXXLANG=x86_64-linux-androideabi-clang++
-		BUILD_64=ON
-		TAG="android-x86_64"
-		ARCH="x86-64"
-		ARCH_ABI="x86_64";;
-esac
-
-cd $HAVEN_SRC_DIR
-rm -rf ./build/release
-mkdir -p ./build/release
-cd ./build/release
-CC=${CLANG} CXX=${CXXLANG} cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH=${ARCH} -D STATIC=ON -D BUILD_64=${BUILD_64} -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D INSTALL_VENDORED_LIBUNBOUND=ON -D BUILD_TAG=${TAG} -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_STANDALONE_TOOLCHAIN="${ANDROID_STANDALONE_TOOLCHAIN_PATH}" -D CMAKE_ANDROID_ARCH_ABI=${ARCH_ABI} $FLAGS ../..
-    
-make wallet_api -j$THREADS
-find . -path ./lib -prune -o -name '*.a' -exec cp '{}' lib \;
-
-cp -r ./lib/* $DEST_LIB_DIR
-cp ../../src/wallet/api/wallet2_api.h  $DEST_INCLUDE_DIR
-done
diff --git a/scripts/android/build_haven_all.sh b/scripts/android/build_haven_all.sh
deleted file mode 100755
index daadadc6b..000000000
--- a/scripts/android/build_haven_all.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-./build_iconv.sh
-./build_boost.sh
-./build_openssl.sh
-./build_sodium.sh
-./build_zmq.sh
-./build_haven.sh
diff --git a/scripts/android/pubspec_gen.sh b/scripts/android/pubspec_gen.sh
index d3341f63d..b980f877d 100755
--- a/scripts/android/pubspec_gen.sh
+++ b/scripts/android/pubspec_gen.sh
@@ -11,12 +11,6 @@ case $APP_ANDROID_TYPE in
                 ;;
         $CAKEWALLET)
                 CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --zano --decred"
-                if [ "$CW_WITH_HAVEN" = true ];then
-                    CONFIG_ARGS="$CONFIG_ARGS --haven"
-                fi
-                ;;
-        $HAVEN)
-                CONFIG_ARGS="--haven"
                 ;;
 esac
 
diff --git a/scripts/docker/Dockerfile b/scripts/docker/Dockerfile
index a352cdc71..a41e6b3a6 100755
--- a/scripts/docker/Dockerfile
+++ b/scripts/docker/Dockerfile
@@ -12,8 +12,6 @@ WORKDIR /opt/android/cakewallet/
 
 # build_all.sh
 # build_boost.sh
-# build_haven.sh
-# build_haven_all.sh
 # build_iconv.sh
 # build_monero.sh
 # build_openssl.sh
@@ -56,7 +54,5 @@ RUN ./build_zmq.sh
 COPY entrypoint.sh /opt/android/cakewallet/
 COPY build_monero.sh /opt/android/cakewallet/
 COPY copy_monero_deps.sh /opt/android/cakewallet/
-COPY build_haven.sh /opt/android/cakewallet/
-COPY copy_haven_deps.sh /opt/android/cakewallet/
 
 ENTRYPOINT ["./entrypoint.sh"]
diff --git a/scripts/docker/build_all.sh b/scripts/docker/build_all.sh
index a4163c3f4..c53c3ac69 100755
--- a/scripts/docker/build_all.sh
+++ b/scripts/docker/build_all.sh
@@ -1,17 +1,15 @@
-#!/bin/sh
-
-set -x -e
-
-if [ -z "$APP_ANDROID_TYPE" ]; then
-	echo "Please set APP_ANDROID_TYPE"
-	exit 1
-fi
-
-DIR=$(dirname "$0")
-
-case $APP_ANDROID_TYPE in
-	"monero.com") $DIR/build_monero_all.sh ;;
-	"cakewallet") $DIR/build_monero_all.sh
-				  $DIR/build_haven.sh ;;
-	"haven")      $DIR/build_haven_all.sh ;;
-esac
+#!/bin/sh
+
+set -x -e
+
+if [ -z "$APP_ANDROID_TYPE" ]; then
+	echo "Please set APP_ANDROID_TYPE"
+	exit 1
+fi
+
+DIR=$(dirname "$0")
+
+case $APP_ANDROID_TYPE in
+	"monero.com") $DIR/build_monero_all.sh ;;
+	"cakewallet") $DIR/build_monero_all.sh
+esac
diff --git a/scripts/docker/build_haven.sh b/scripts/docker/build_haven.sh
deleted file mode 100755
index 1cfb16265..000000000
--- a/scripts/docker/build_haven.sh
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/sh
-set -x -e
-
-. ./config.sh
-HAVEN_VERSION=tags/v3.0.7
-HAVEN_SRC_DIR=${WORKDIR}/haven
-
-git clone https://github.com/haven-protocol-org/haven-main.git ${HAVEN_SRC_DIR}
-cd $HAVEN_SRC_DIR
-git checkout ${HAVEN_VERSION}
-git submodule init
-git submodule update
-
-for arch in "aarch" "aarch64" "i686" "x86_64"
-do
-FLAGS=""
-PREFIX=${WORKDIR}/prefix_${arch}
-DEST_LIB_DIR=${PREFIX}/lib/haven
-DEST_INCLUDE_DIR=${PREFIX}/include/haven
-export CMAKE_INCLUDE_PATH="${PREFIX}/include"
-export CMAKE_LIBRARY_PATH="${PREFIX}/lib"
-ANDROID_STANDALONE_TOOLCHAIN_PATH="${TOOLCHAIN_BASE_DIR}_${arch}"
-PATH="${ANDROID_STANDALONE_TOOLCHAIN_PATH}/bin:${ORIGINAL_PATH}"
-
-mkdir -p $DEST_LIB_DIR
-mkdir -p $DEST_INCLUDE_DIR
-
-case $arch in
-	"aarch"	)
-		CLANG=arm-linux-androideabi-clang
- 		CXXLANG=arm-linux-androideabi-clang++
-		BUILD_64=OFF
-		TAG="android-armv7"
-		ARCH="armv7-a"
-		ARCH_ABI="armeabi-v7a"
-		FLAGS="-D CMAKE_ANDROID_ARM_MODE=ON -D NO_AES=true";;
-	"aarch64"	)
-		CLANG=aarch64-linux-androideabi-clang
- 		CXXLANG=aarch64-linux-androideabi-clang++
-		BUILD_64=ON
-		TAG="android-armv8"
-		ARCH="armv8-a"
-		ARCH_ABI="arm64-v8a";;
-	"i686"		)
-		CLANG=i686-linux-androideabi-clang
- 		CXXLANG=i686-linux-androideabi-clang++
-		BUILD_64=OFF
-		TAG="android-x86"
-		ARCH="i686"
-		ARCH_ABI="x86";;
-	"x86_64"	)  
-		CLANG=x86_64-linux-androideabi-clang
- 		CXXLANG=x86_64-linux-androideabi-clang++
-		BUILD_64=ON
-		TAG="android-x86_64"
-		ARCH="x86-64"
-		ARCH_ABI="x86_64";;
-esac
-
-cd $HAVEN_SRC_DIR
-rm -rf ./build/release
-mkdir -p ./build/release
-cd ./build/release
-CC=${CLANG} CXX=${CXXLANG} cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH=${ARCH} -D STATIC=ON -D BUILD_64=${BUILD_64} -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D INSTALL_VENDORED_LIBUNBOUND=ON -D BUILD_TAG=${TAG} -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_STANDALONE_TOOLCHAIN="${ANDROID_STANDALONE_TOOLCHAIN_PATH}" -D CMAKE_ANDROID_ARCH_ABI=${ARCH_ABI} $FLAGS ../..
-    
-make wallet_api -j$THREADS
-find . -path ./lib -prune -o -name '*.a' -exec cp '{}' lib \;
-
-cp -r ./lib/* $DEST_LIB_DIR
-cp ../../src/wallet/api/wallet2_api.h  $DEST_INCLUDE_DIR
-done
diff --git a/scripts/docker/build_haven_all.sh b/scripts/docker/build_haven_all.sh
deleted file mode 100755
index ce8eb3f0e..000000000
--- a/scripts/docker/build_haven_all.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-set -x -e
-
-./build_iconv.sh
-./build_boost.sh
-./build_openssl.sh
-./build_sodium.sh
-./build_zmq.sh
-./build_haven.sh
diff --git a/scripts/docker/copy_haven_deps.sh b/scripts/docker/copy_haven_deps.sh
deleted file mode 100755
index cef644701..000000000
--- a/scripts/docker/copy_haven_deps.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/bash
-set -x
-
-WORKDIR=/opt/android
-CW_DIR=${WORKDIR}/cake_wallet
-CW_EXRTERNAL_DIR=${CW_DIR}/cw_shared_external/ios/External/android
-CW_HAVEN_EXTERNAL_DIR=${CW_DIR}/cw_haven/ios/External/android
-CW_MONERO_EXTERNAL_DIR=${CW_DIR}/cw_monero/ios/External/android
-for arch in "aarch" "aarch64" "i686" "x86_64"
-do
-
-PREFIX=${WORKDIR}/prefix_${arch}
-ABI=""
-
-case $arch in
-	"aarch"	)
-		ABI="armeabi-v7a";;
-	"aarch64"	)
-		ABI="arm64-v8a";;
-	"i686"		)
-		ABI="x86";;
-	"x86_64"	)
-		ABI="x86_64";;
-esac
-
-LIB_DIR=${CW_EXRTERNAL_DIR}/${ABI}/lib
-INCLUDE_DIR=${CW_EXRTERNAL_DIR}/${ABI}/include
-LIBANBOUND_PATH=${PREFIX}/lib/libunbound.a
-
-mkdir -p $LIB_DIR
-mkdir -p $INCLUDE_DIR
-
-cp -r ${PREFIX}/lib/* $LIB_DIR
-cp -r ${PREFIX}/include/* $INCLUDE_DIR
-
-if [ -f "$LIBANBOUND_PATH" ]; then
- cp $LIBANBOUND_PATH ${LIB_DIR}/monero
-fi
-
-done
-
-mkdir -p ${CW_HAVEN_EXTERNAL_DIR}/include
-mkdir -p ${CW_MONERO_EXTERNAL_DIR}/include
-
-cp $CW_EXRTERNAL_DIR/x86/include/monero/wallet2_api.h ${CW_MONERO_EXTERNAL_DIR}/include
-cp $CW_EXRTERNAL_DIR/x86/include/haven/wallet2_api.h ${CW_HAVEN_EXTERNAL_DIR}/include
diff --git a/scripts/docker/entrypoint.sh b/scripts/docker/entrypoint.sh
index 14f02a1f8..07257bb57 100755
--- a/scripts/docker/entrypoint.sh
+++ b/scripts/docker/entrypoint.sh
@@ -6,6 +6,4 @@ ls /opt/android
 rm -rf monero haven
 
 ./build_monero.sh
-./build_haven.sh
 ./copy_monero_deps.sh
-./copy_haven_deps.sh
diff --git a/scripts/ios/app_config.sh b/scripts/ios/app_config.sh
index 32d6d5edd..b642d67e4 100755
--- a/scripts/ios/app_config.sh
+++ b/scripts/ios/app_config.sh
@@ -3,7 +3,6 @@ source "$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/functions.sh"
 set -x -e
 MONERO_COM="monero.com"
 CAKEWALLET="cakewallet"
-HAVEN="haven"
 DIR=`pwd`
 
 if [ -z "$APP_IOS_TYPE" ]; then
@@ -33,13 +32,6 @@ case $APP_IOS_TYPE in
 
         $CAKEWALLET)
 		CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --zano --decred"
-		if [ "$CW_WITH_HAVEN" = true ];then
-		    CONFIG_ARGS="$CONFIG_ARGS --haven"
-		fi
-		;;
-
-	$HAVEN)
-		CONFIG_ARGS="--haven"
 		;;
 esac
 
diff --git a/scripts/ios/app_env.sh b/scripts/ios/app_env.sh
index 7d5bfff38..1c1579830 100644
--- a/scripts/ios/app_env.sh
+++ b/scripts/ios/app_env.sh
@@ -7,9 +7,8 @@ APP_IOS_BUNDLE_ID=""
 
 MONERO_COM="monero.com"
 CAKEWALLET="cakewallet"
-HAVEN="haven"
 
-TYPES=($MONERO_COM $CAKEWALLET $HAVEN)
+TYPES=($MONERO_COM $CAKEWALLET)
 APP_IOS_TYPE=$1
 
 MONERO_COM_NAME="Monero.com"
@@ -22,10 +21,6 @@ CAKEWALLET_VERSION="4.23.4"
 CAKEWALLET_BUILD_NUMBER=302
 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
 
-HAVEN_NAME="Haven"
-HAVEN_VERSION="1.0.0"
-HAVEN_BUILD_NUMBER=3
-HAVEN_BUNDLE_ID="com.cakewallet.haven"
 
 if ! [[ " ${TYPES[*]} " =~ " ${APP_IOS_TYPE} " ]]; then
     echo "Wrong app type."
diff --git a/scripts/ios/build_all.sh b/scripts/ios/build_all.sh
index f5b58d6fa..64b04a1be 100755
--- a/scripts/ios/build_all.sh
+++ b/scripts/ios/build_all.sh
@@ -9,6 +9,5 @@ DIR=$(dirname "$0")
 
 case $APP_IOS_TYPE in
 	"monero.com") $DIR/build_monero_all.sh ;;
-	"cakewallet") $DIR/build_monero_all.sh && $DIR/build_haven.sh && $DIR/build_mwebd.sh && $DIR/build_decred.sh ;;
-	"haven")      $DIR/build_haven_all.sh ;;
+	"cakewallet") $DIR/build_monero_all.sh && $DIR/build_mwebd.sh && $DIR/build_decred.sh ;;
 esac
diff --git a/scripts/ios/build_haven.sh b/scripts/ios/build_haven.sh
deleted file mode 100755
index 8de8b4c83..000000000
--- a/scripts/ios/build_haven.sh
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/sh
-
-. ./config.sh
-
-HAVEN_URL="https://github.com/haven-protocol-org/haven-main.git"
-HAVEN_DIR_PATH="${EXTERNAL_IOS_SOURCE_DIR}/haven"
-HAVEN_VERSION=tags/v3.0.7
-BUILD_TYPE=release
-PREFIX=${EXTERNAL_IOS_DIR}
-DEST_LIB_DIR=${EXTERNAL_IOS_LIB_DIR}/haven
-DEST_INCLUDE_DIR=${EXTERNAL_IOS_INCLUDE_DIR}/haven
-
-echo "Cloning haven from - $HAVEN_URL to - $HAVEN_DIR_PATH"		
-git clone $HAVEN_URL $HAVEN_DIR_PATH
-cd $HAVEN_DIR_PATH
-git checkout $HAVEN_VERSION
-git submodule update --init --force
-mkdir -p build
-cd ..
-
-ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-if [ -z $INSTALL_PREFIX ]; then
-    INSTALL_PREFIX=${ROOT_DIR}/haven
-fi
-
-for arch in "arm64" #"armv7" "arm64"
-do
-
-echo "Building IOS ${arch}"
-export CMAKE_INCLUDE_PATH="${PREFIX}/include"
-export CMAKE_LIBRARY_PATH="${PREFIX}/lib"
-
-case $arch in
-	"armv7"	)
-		DEST_LIB=../../lib-armv7;;
-	"arm64"	)
-		DEST_LIB=../../lib-armv8-a;;
-esac
-
-rm -rf haven/build > /dev/null
-
-mkdir -p haven/build/${BUILD_TYPE}
-pushd haven/build/${BUILD_TYPE}
-cmake -D IOS=ON \
-	-DARCH=${arch} \
-	-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-	-DSTATIC=ON \
-	-DBUILD_GUI_DEPS=ON \
-	-DINSTALL_VENDORED_LIBUNBOUND=ON \
-	-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}  \
-    -DUSE_DEVICE_TREZOR=OFF \
-	../..
-make -j4 && make install
-cp src/cryptonote_basic/libcryptonote_basic.a ${DEST_LIB}
-cp src/offshore/liboffshore.a ${DEST_LIB}
-popd
-
-done
-
-#only for arm64
-mkdir -p $DEST_LIB_DIR
-mkdir -p $DEST_INCLUDE_DIR
-cp ${HAVEN_DIR_PATH}/lib-armv8-a/* $DEST_LIB_DIR
-cp ${HAVEN_DIR_PATH}/include/wallet/api/* $DEST_INCLUDE_DIR
\ No newline at end of file
diff --git a/scripts/ios/build_haven_all.sh b/scripts/ios/build_haven_all.sh
deleted file mode 100755
index 116a30d25..000000000
--- a/scripts/ios/build_haven_all.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-. ./config.sh
-./install_missing_headers.sh
-./build_openssl.sh
-./build_boost.sh
-./build_sodium.sh
-./build_zmq.sh
-./build_haven.sh
\ No newline at end of file
diff --git a/scripts/macos/app_config.sh b/scripts/macos/app_config.sh
index ad1f04b3e..c10116136 100755
--- a/scripts/macos/app_config.sh
+++ b/scripts/macos/app_config.sh
@@ -36,7 +36,7 @@ case $APP_MACOS_TYPE in
         $MONERO_COM)
 		CONFIG_ARGS="--monero";;
         $CAKEWALLET)
-		CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --decred";; #--haven
+		CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --decred";;
 esac
 
 cp -rf pubspec_description.yaml pubspec.yaml
diff --git a/scripts/macos/build_haven.sh b/scripts/macos/build_haven.sh
deleted file mode 100755
index fb67da442..000000000
--- a/scripts/macos/build_haven.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-
-. ./config.sh
-
-HAVEN_URL="https://github.com/haven-protocol-org/haven-main.git"
-HAVEN_DIR_PATH="${EXTERNAL_MACOS_SOURCE_DIR}/haven"
-HAVEN_VERSION=tags/v3.0.0
-BUILD_TYPE=release
-PREFIX=${EXTERNAL_MACOS_DIR}
-DEST_LIB_DIR=${EXTERNAL_MACOS_LIB_DIR}/haven
-DEST_INCLUDE_DIR=${EXTERNAL_MACOS_INCLUDE_DIR}/haven
-ARCH=`uname -m`
-
-echo "Cloning haven from - $HAVEN_URL to - $HAVEN_DIR_PATH"		
-git clone $HAVEN_URL $HAVEN_DIR_PATH
-cd $HAVEN_DIR_PATH
-git checkout $HAVEN_VERSION
-git submodule update --init --force
-mkdir -p build
-cd ..
-
-ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-if [ -z $INSTALL_PREFIX ]; then
-    INSTALL_PREFIX=${ROOT_DIR}/haven
-fi
-
-mkdir -p $DEST_LIB_DIR
-mkdir -p $DEST_INCLUDE_DIR
-
-echo "Building MACOS ${ARCH}"
-export CMAKE_INCLUDE_PATH="${PREFIX}/include"
-export CMAKE_LIBRARY_PATH="${PREFIX}/lib"
-rm -rf haven/build > /dev/null
-
-mkdir -p haven/build/${BUILD_TYPE}
-pushd haven/build/${BUILD_TYPE}
-cmake -DARCH=${ARCH} \
-	-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-	-DSTATIC=ON \
-	-DBUILD_GUI_DEPS=ON \
-	-DINSTALL_VENDORED_LIBUNBOUND=ON \
-	-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}  \
-    -DUSE_DEVICE_TREZOR=OFF \
-	../..
-make -j4 && make install
-find . -path ./lib -prune -o -name '*.a' -exec cp '{}' lib \;
-cp -r ./lib/* $DEST_LIB_DIR
-cp ../../src/wallet/api/wallet2_api.h  $DEST_INCLUDE_DIR
-popd
-
diff --git a/tool/configure.dart b/tool/configure.dart
index d1c9326c8..63ed2de84 100644
--- a/tool/configure.dart
+++ b/tool/configure.dart
@@ -2,7 +2,6 @@ import 'dart:io';
 
 const bitcoinOutputPath = 'lib/bitcoin/bitcoin.dart';
 const moneroOutputPath = 'lib/monero/monero.dart';
-const havenOutputPath = 'lib/haven/haven.dart';
 const ethereumOutputPath = 'lib/ethereum/ethereum.dart';
 const bitcoinCashOutputPath = 'lib/bitcoin_cash/bitcoin_cash.dart';
 const nanoOutputPath = 'lib/nano/nano.dart';
@@ -21,7 +20,6 @@ Future<void> main(List<String> args) async {
   const prefix = '--';
   final hasBitcoin = args.contains('${prefix}bitcoin');
   final hasMonero = args.contains('${prefix}monero');
-  final hasHaven = args.contains('${prefix}haven');
   final hasEthereum = args.contains('${prefix}ethereum');
   final hasBitcoinCash = args.contains('${prefix}bitcoinCash');
   final hasNano = args.contains('${prefix}nano');
@@ -36,7 +34,6 @@ Future<void> main(List<String> args) async {
 
   await generateBitcoin(hasBitcoin);
   await generateMonero(hasMonero);
-  await generateHaven(hasHaven);
   await generateEthereum(hasEthereum);
   await generateBitcoinCash(hasBitcoinCash);
   await generateNano(hasNano);
@@ -51,7 +48,6 @@ Future<void> main(List<String> args) async {
   await generatePubspec(
     hasMonero: hasMonero,
     hasBitcoin: hasBitcoin,
-    hasHaven: hasHaven,
     hasEthereum: hasEthereum,
     hasNano: hasNano,
     hasBanano: hasBanano,
@@ -67,7 +63,6 @@ Future<void> main(List<String> args) async {
   await generateWalletTypes(
     hasMonero: hasMonero,
     hasBitcoin: hasBitcoin,
-    hasHaven: hasHaven,
     hasEthereum: hasEthereum,
     hasNano: hasNano,
     hasBanano: hasBanano,
@@ -654,194 +649,6 @@ abstract class WowneroAccountList {
   await outputFile.writeAsString(output);
 }
 
-Future<void> generateHaven(bool hasImplementation) async {
-  final outputFile = File(havenOutputPath);
-  const havenCommonHeaders = """
-import 'package:mobx/mobx.dart';
-import 'package:flutter/foundation.dart';
-import 'package:cw_core/wallet_credentials.dart';
-import 'package:cw_core/wallet_info.dart';
-import 'package:cw_core/transaction_priority.dart';
-import 'package:cw_core/transaction_history.dart';
-import 'package:cw_core/transaction_info.dart';
-import 'package:cw_core/balance.dart';
-import 'package:cw_core/output_info.dart';
-import 'package:cake_wallet/view_model/send/output.dart';
-import 'package:cw_core/wallet_service.dart';
-import 'package:hive/hive.dart';
-import 'package:cw_core/crypto_currency.dart';
-import 'package:cake_wallet/core/key_service.dart';
-import 'package:cake_wallet/core/secure_storage.dart';
-import 'package:cake_wallet/entities/haven_seed_store.dart';
-import 'package:cw_core/cake_hive.dart';
-import 'package:cw_core/wallet_info.dart';
-import 'package:cw_core/wallet_type.dart';
-""";
-  const havenCWHeaders = """
-import 'package:cw_core/get_height_by_date.dart';
-import 'package:cw_core/monero_amount_format.dart';
-import 'package:cw_core/monero_transaction_priority.dart';
-import 'package:cw_haven/haven_wallet_service.dart';
-import 'package:cw_haven/haven_wallet.dart';
-import 'package:cw_haven/haven_transaction_info.dart';
-import 'package:cw_haven/haven_transaction_history.dart';
-import 'package:cw_core/account.dart' as monero_account;
-import 'package:cw_haven/api/wallet.dart' as monero_wallet_api;
-import 'package:cw_haven/mnemonics/english.dart';
-import 'package:cw_haven/mnemonics/chinese_simplified.dart';
-import 'package:cw_haven/mnemonics/dutch.dart';
-import 'package:cw_haven/mnemonics/german.dart';
-import 'package:cw_haven/mnemonics/japanese.dart';
-import 'package:cw_haven/mnemonics/russian.dart';
-import 'package:cw_haven/mnemonics/spanish.dart';
-import 'package:cw_haven/mnemonics/portuguese.dart';
-import 'package:cw_haven/mnemonics/french.dart';
-import 'package:cw_haven/mnemonics/italian.dart';
-import 'package:cw_haven/haven_transaction_creation_credentials.dart';
-import 'package:cw_haven/api/balance_list.dart';
-import 'package:cw_haven/haven_wallet_service.dart';
-""";
-  const havenCwPart = "part 'cw_haven.dart';";
-  const havenContent = """
-class Account {
-  Account({required this.id, required this.label});
-  final int id;
-  final String label;
-}
-
-class Subaddress {
-  Subaddress({
-    required this.id,
-    required this.label,
-    required this.address});
-  final int id;
-  final String label;
-  final String address;
-}
-
-class HavenBalance extends Balance {
-  HavenBalance({required this.fullBalance, required this.unlockedBalance})
-      : formattedFullBalance = haven!.formatterMoneroAmountToString(amount: fullBalance),
-        formattedUnlockedBalance =
-            haven!.formatterMoneroAmountToString(amount: unlockedBalance),
-        super(unlockedBalance, fullBalance);
-
-  HavenBalance.fromString(
-      {required this.formattedFullBalance,
-      required this.formattedUnlockedBalance})
-      : fullBalance = haven!.formatterMoneroParseAmount(amount: formattedFullBalance),
-        unlockedBalance = haven!.formatterMoneroParseAmount(amount: formattedUnlockedBalance),
-        super(haven!.formatterMoneroParseAmount(amount: formattedUnlockedBalance),
-            haven!.formatterMoneroParseAmount(amount: formattedFullBalance));
-
-  final int fullBalance;
-  final int unlockedBalance;
-  final String formattedFullBalance;
-  final String formattedUnlockedBalance;
-
-  @override
-  String get formattedAvailableBalance => formattedUnlockedBalance;
-
-  @override
-  String get formattedAdditionalBalance => formattedFullBalance;
-}
-
-class AssetRate {
-  AssetRate(this.asset, this.rate);
-
-  final String asset;
-  final int rate;
-}
-
-abstract class HavenWalletDetails {
-  // FIX-ME: it's abstract class
-  @observable
-  late Account account;
-  // FIX-ME: it's abstract class
-  @observable
-  late HavenBalance balance;
-}
-
-abstract class Haven {
-  HavenAccountList getAccountList(Object wallet);
-  
-  MoneroSubaddressList getSubaddressList(Object wallet);
-
-  TransactionHistoryBase getTransactionHistory(Object wallet);
-
-  HavenWalletDetails getMoneroWalletDetails(Object wallet);
-
-  String getTransactionAddress(Object wallet, int accountIndex, int addressIndex);
-
-  int getHeightByDate({required DateTime date});
-  Future<int> getCurrentHeight();
-  TransactionPriority getDefaultTransactionPriority();
-  TransactionPriority deserializeMoneroTransactionPriority({required int raw});
-  List<TransactionPriority> getTransactionPriorities();
-  List<String> getMoneroWordList(String language);
-
-  WalletCredentials createHavenRestoreWalletFromKeysCredentials({
-      required String name,
-      required String spendKey,
-      required String viewKey,
-      required String address,
-      required String password,
-      required String language,
-      required int height});
-  WalletCredentials createHavenRestoreWalletFromSeedCredentials({required String name, required String password, required int height, required String mnemonic});
-  WalletCredentials createHavenNewWalletCredentials({required String name, required String language, String? password});
-  Map<String, String> getKeys(Object wallet);
-  Object createHavenTransactionCreationCredentials({required List<Output> outputs, required TransactionPriority priority, required String assetType});
-  String formatterMoneroAmountToString({required int amount});
-  double formatterMoneroAmountToDouble({required int amount});
-  int formatterMoneroParseAmount({required String amount});
-  Account getCurrentAccount(Object wallet);
-  void setCurrentAccount(Object wallet, int id, String label);
-  void onStartup();
-  int getTransactionInfoAccountId(TransactionInfo tx);
-  WalletService createHavenWalletService(Box<WalletInfo> walletInfoSource);
-  Future<void> backupHavenSeeds(Box<HavenSeedStore> havenSeedStore);
-  CryptoCurrency assetOfTransaction(TransactionInfo tx);
-  List<AssetRate> getAssetRate();
-}
-
-abstract class MoneroSubaddressList {
-  ObservableList<Subaddress> get subaddresses;
-  void update(Object wallet, {required int accountIndex});
-  void refresh(Object wallet, {required int accountIndex});
-  List<Subaddress> getAll(Object wallet);
-  Future<void> addSubaddress(Object wallet, {required int accountIndex, required String label});
-  Future<void> setLabelSubaddress(Object wallet,
-      {required int accountIndex, required int addressIndex, required String label});
-}
-
-abstract class HavenAccountList {
-  ObservableList<Account> get accounts;
-  void update(Object wallet);
-  void refresh(Object wallet);
-  List<Account> getAll(Object wallet);
-  Future<void> addAccount(Object wallet, {required String label});
-  Future<void> setLabelAccount(Object wallet, {required int accountIndex, required String label});
-}
-  """;
-
-  const havenEmptyDefinition = 'Haven? haven;\n';
-  const havenCWDefinition = 'Haven? haven = CWHaven();\n';
-
-  final output = '$havenCommonHeaders\n' +
-      (hasImplementation ? '$havenCWHeaders\n' : '\n') +
-      (hasImplementation ? '$havenCwPart\n\n' : '\n') +
-      (hasImplementation ? havenCWDefinition : havenEmptyDefinition) +
-      '\n' +
-      havenContent;
-
-  if (outputFile.existsSync()) {
-    await outputFile.delete();
-  }
-
-  await outputFile.writeAsString(output);
-}
-
 Future<void> generateEthereum(bool hasImplementation) async {
   final outputFile = File(ethereumOutputPath);
   const ethereumCommonHeaders = """
@@ -1573,7 +1380,6 @@ abstract class Decred {
 Future<void> generatePubspec({
   required bool hasMonero,
   required bool hasBitcoin,
-  required bool hasHaven,
   required bool hasEthereum,
   required bool hasNano,
   required bool hasBanano,
@@ -1598,14 +1404,6 @@ Future<void> generatePubspec({
   cw_bitcoin:
     path: ./cw_bitcoin
   """;
-  const cwHaven = """
-  cw_haven:
-    path: ./cw_haven
-  """;
-  const cwSharedExternal = """
-  cw_shared_external:
-    path: ./cw_shared_external
-  """;
   const flutterSecureStorage = """
   flutter_secure_storage:
     git:
@@ -1702,10 +1500,6 @@ Future<void> generatePubspec({
     output += '\n$cwTron';
   }
 
-  if (hasHaven) {
-    output += '\n$cwSharedExternal\n$cwHaven';
-  }
-
   if (hasDecred) {
     output += '\n$cwDecred';
   }
@@ -1741,7 +1535,6 @@ Future<void> generatePubspec({
 Future<void> generateWalletTypes({
   required bool hasMonero,
   required bool hasBitcoin,
-  required bool hasHaven,
   required bool hasEthereum,
   required bool hasNano,
   required bool hasBanano,
@@ -1815,10 +1608,6 @@ Future<void> generateWalletTypes({
     outputContent += '\tWalletType.wownero,\n';
   }
 
-  if (hasHaven) {
-    outputContent += '\tWalletType.haven,\n';
-  }
-
   outputContent += '];\n';
   await walletTypesFile.writeAsString(outputContent);
 }