diff --git a/crates/cashu/src/lib.rs b/crates/cashu/src/lib.rs
index 9ca087236..fba0ecc49 100644
--- a/crates/cashu/src/lib.rs
+++ b/crates/cashu/src/lib.rs
@@ -1,5 +1,4 @@
 //! CDK common types and traits
-//!
 pub mod amount;
 pub mod dhke;
 #[cfg(feature = "mint")]
diff --git a/crates/cdk-integration-tests/src/init_fake_wallet.rs b/crates/cdk-integration-tests/src/init_fake_wallet.rs
index b24f5b522..0534eb6de 100644
--- a/crates/cdk-integration-tests/src/init_fake_wallet.rs
+++ b/crates/cdk-integration-tests/src/init_fake_wallet.rs
@@ -3,18 +3,15 @@ use std::sync::Arc;
 
 use anyhow::Result;
 use axum::Router;
+use bip39::Mnemonic;
 use cdk::cdk_database::{self, MintDatabase};
-use cdk::cdk_lightning::MintLightning;
-use cdk::mint::FeeReserve;
-use cdk::nuts::CurrencyUnit;
-use cdk::types::LnKey;
+use cdk::mint::{FeeReserve, MintBuilder, MintMeltLimits};
+use cdk::nuts::{CurrencyUnit, PaymentMethod};
 use cdk_fake_wallet::FakeWallet;
 use tokio::sync::Notify;
 use tower_http::cors::CorsLayer;
 use tracing_subscriber::EnvFilter;
 
-use crate::init_regtest::create_mint;
-
 pub async fn start_fake_mint<D>(addr: &str, port: u16, database: D) -> Result<()>
 where
     D: MintDatabase<Err = cdk_database::Error> + Send + Sync + 'static,
@@ -32,11 +29,6 @@ where
     // Parse input
     tracing_subscriber::fmt().with_env_filter(env_filter).init();
 
-    let mut ln_backends: HashMap<
-        LnKey,
-        Arc<dyn MintLightning<Err = cdk::cdk_lightning::Error> + Sync + Send>,
-    > = HashMap::new();
-
     let fee_reserve = FeeReserve {
         min_fee_reserve: 1.into(),
         percent_fee_reserve: 1.0,
@@ -44,12 +36,28 @@ where
 
     let fake_wallet = FakeWallet::new(fee_reserve, HashMap::default(), HashSet::default(), 0);
 
-    ln_backends.insert(
-        LnKey::new(CurrencyUnit::Sat, cdk::nuts::PaymentMethod::Bolt11),
+    let mut mint_builder = MintBuilder::new();
+
+    mint_builder = mint_builder.with_localstore(Arc::new(database));
+
+    mint_builder = mint_builder.add_ln_backend(
+        CurrencyUnit::Sat,
+        PaymentMethod::Bolt11,
+        MintMeltLimits::default(),
         Arc::new(fake_wallet),
     );
 
-    let mint = create_mint(database, ln_backends.clone()).await?;
+    let mnemonic = Mnemonic::generate(12)?;
+
+    mint_builder = mint_builder
+        .with_name("fake test mint".to_string())
+        .with_mint_url(format!("http://{addr}:{port}"))
+        .with_description("fake test mint".to_string())
+        .with_quote_ttl(10000, 10000)
+        .with_seed(mnemonic.to_seed_normalized("").to_vec());
+
+    let mint = mint_builder.build().await?;
+
     let mint_arc = Arc::new(mint);
 
     let v1_service = cdk_axum::create_mint_router(Arc::clone(&mint_arc))
diff --git a/crates/cdk-integration-tests/src/init_regtest.rs b/crates/cdk-integration-tests/src/init_regtest.rs
index a16ddde30..b014271f7 100644
--- a/crates/cdk-integration-tests/src/init_regtest.rs
+++ b/crates/cdk-integration-tests/src/init_regtest.rs
@@ -1,4 +1,3 @@
-use std::collections::HashMap;
 use std::env;
 use std::path::PathBuf;
 use std::sync::Arc;
@@ -7,10 +6,8 @@ use anyhow::Result;
 use axum::Router;
 use bip39::Mnemonic;
 use cdk::cdk_database::{self, MintDatabase};
-use cdk::cdk_lightning::MintLightning;
-use cdk::mint::{FeeReserve, Mint};
-use cdk::nuts::{CurrencyUnit, MintInfo};
-use cdk::types::{LnKey, QuoteTTL};
+use cdk::mint::{FeeReserve, MintBuilder, MintMeltLimits};
+use cdk::nuts::{CurrencyUnit, PaymentMethod};
 use cdk_cln::Cln as CdkCln;
 use ln_regtest_rs::bitcoin_client::BitcoinClient;
 use ln_regtest_rs::bitcoind::Bitcoind;
@@ -145,49 +142,6 @@ pub async fn create_cln_backend(cln_client: &ClnClient) -> Result<CdkCln> {
     Ok(CdkCln::new(rpc_path, fee_reserve).await?)
 }
 
-pub async fn create_mint<D>(
-    database: D,
-    ln_backends: HashMap<
-        LnKey,
-        Arc<dyn MintLightning<Err = cdk::cdk_lightning::Error> + Sync + Send>,
-    >,
-) -> Result<Mint>
-where
-    D: MintDatabase<Err = cdk_database::Error> + Send + Sync + 'static,
-{
-    let nuts = cdk::nuts::Nuts::new()
-        .nut07(true)
-        .nut08(true)
-        .nut09(true)
-        .nut10(true)
-        .nut11(true)
-        .nut12(true)
-        .nut14(true);
-
-    let mint_info = MintInfo::new().nuts(nuts);
-
-    let mnemonic = Mnemonic::generate(12)?;
-
-    let mut supported_units: HashMap<CurrencyUnit, (u64, u8)> = HashMap::new();
-    supported_units.insert(CurrencyUnit::Sat, (0, 32));
-
-    let quote_ttl = QuoteTTL::new(10000, 10000);
-
-    let mint = Mint::new(
-        &get_mint_url(),
-        &mnemonic.to_seed_normalized(""),
-        mint_info,
-        quote_ttl,
-        Arc::new(database),
-        ln_backends,
-        supported_units,
-        HashMap::new(),
-    )
-    .await?;
-
-    Ok(mint)
-}
-
 pub async fn start_cln_mint<D>(addr: &str, port: u16, database: D) -> Result<()>
 where
     D: MintDatabase<Err = cdk_database::Error> + Send + Sync + 'static,
@@ -196,17 +150,28 @@ where
 
     let cln_backend = create_cln_backend(&cln_client).await?;
 
-    let mut ln_backends: HashMap<
-        LnKey,
-        Arc<dyn MintLightning<Err = cdk::cdk_lightning::Error> + Sync + Send>,
-    > = HashMap::new();
+    let mut mint_builder = MintBuilder::new();
+
+    mint_builder = mint_builder.with_localstore(Arc::new(database));
 
-    ln_backends.insert(
-        LnKey::new(CurrencyUnit::Sat, cdk::nuts::PaymentMethod::Bolt11),
+    mint_builder = mint_builder.add_ln_backend(
+        CurrencyUnit::Sat,
+        PaymentMethod::Bolt11,
+        MintMeltLimits::default(),
         Arc::new(cln_backend),
     );
 
-    let mint = create_mint(database, ln_backends.clone()).await?;
+    let mnemonic = Mnemonic::generate(12)?;
+
+    mint_builder = mint_builder
+        .with_name("regtest mint".to_string())
+        .with_mint_url(format!("http://{addr}:{port}"))
+        .with_description("regtest mint".to_string())
+        .with_quote_ttl(10000, 10000)
+        .with_seed(mnemonic.to_seed_normalized("").to_vec());
+
+    let mint = mint_builder.build().await?;
+
     let mint_arc = Arc::new(mint);
 
     let v1_service = cdk_axum::create_mint_router(Arc::clone(&mint_arc))
diff --git a/crates/cdk/src/wallet/mint.rs b/crates/cdk/src/wallet/mint.rs
index 67f25fe73..e340cca3e 100644
--- a/crates/cdk/src/wallet/mint.rs
+++ b/crates/cdk/src/wallet/mint.rs
@@ -145,8 +145,8 @@ impl Wallet {
     /// use anyhow::Result;
     /// use cdk::amount::{Amount, SplitTarget};
     /// use cdk::cdk_database::WalletMemoryDatabase;
-    /// use cdk::nuts::CurrencyUnit;
     /// use cdk::nuts::nut00::ProofsMethods;
+    /// use cdk::nuts::CurrencyUnit;
     /// use cdk::wallet::Wallet;
     /// use rand::Rng;
     ///