diff --git a/node/src/chain_spec/gtest.rs b/node/src/chain_spec/gtest.rs
index 791749e4e0bfa2185fa7e721fa1e0ce34e5e2541..d458907219a535b592cd010264cab1b392404e83 100644
--- a/node/src/chain_spec/gtest.rs
+++ b/node/src/chain_spec/gtest.rs
@@ -95,7 +95,7 @@ pub fn development_chain_spec() -> Result<ChainSpec, String> {
         // return chainspecs
         Ok(ChainSpec::from_genesis(
             // Name
-            "Ğtest Development",
+            "ĞTest Development",
             // ID
             "gtest_dev",
             // chain type
@@ -139,7 +139,7 @@ pub fn development_chain_spec() -> Result<ChainSpec, String> {
         // generated genesis
         Ok(ChainSpec::from_genesis(
             // Name
-            "Ğtest Development",
+            "ĞTest Development",
             // ID
             "gtest_dev",
             // chain type
@@ -192,7 +192,7 @@ pub fn local_testnet_config(
 
     Ok(ChainSpec::from_genesis(
         // Name
-        "Ğtest Local Testnet",
+        "ĞTest Local Testnet",
         // ID
         "gtest_local",
         ChainType::Local,
diff --git a/node/src/chain_spec/gtest_genesis.rs b/node/src/chain_spec/gtest_genesis.rs
index dd4d6882c687b86dc9a14c50d5bc5e823e93f0fd..0aea4611e8b52f4342a487c16fe461856e66a34d 100644
--- a/node/src/chain_spec/gtest_genesis.rs
+++ b/node/src/chain_spec/gtest_genesis.rs
@@ -185,7 +185,7 @@ pub fn build_genesis(
     for (pubkey, balance) in &genesis_data.wallets {
         // check existential deposit
         if balance < &EXISTENTIAL_DEPOSIT {
-            log::warn!("wallet {pubkey} has {balance} which is below {EXISTENTIAL_DEPOSIT}");
+            log::warn!("wallet {pubkey} has {balance} cǦT which is below {EXISTENTIAL_DEPOSIT}");
             fatal = true;
         }
 
@@ -193,6 +193,7 @@ pub fn build_genesis(
         monetary_mass += balance;
 
         wallet_index += 1;
+        // json prevents duplicate wallets
         accounts.insert(
             pubkey.clone(),
             GenesisAccountData {
@@ -210,7 +211,33 @@ pub fn build_genesis(
             return Err(format!("Identity name '{}' is invalid", &name));
         }
 
+        // check existential deposit
+        if identity.balance < EXISTENTIAL_DEPOSIT {
+            if identity.membership_expire_on != 0 {
+                log::warn!(
+                    "expired identity {name} has {} cǦT which is below {EXISTENTIAL_DEPOSIT}",
+                    identity.balance
+                );
+                fatal = true;
+            } else {
+                // member identities can still be below existential deposit thanks to sufficient
+                log::info!(
+                    "identity {name} has {} cǦT which is below {EXISTENTIAL_DEPOSIT}",
+                    identity.balance
+                );
+            }
+        }
+
         // Money
+        // check that wallet with same owner_key does not exist
+        if accounts.get(&identity.owner_key).is_some() {
+            log::warn!(
+                "{name} owner_key {} already exists as a simple wallet",
+                identity.owner_key
+            );
+            fatal = true;
+        }
+        // insert as an account
         accounts.insert(
             identity.owner_key.clone(),
             GenesisAccountData {
@@ -274,7 +301,8 @@ pub fn build_genesis(
         if let Some(identity) = &genesis_data.identities.get(name) {
             technical_committee_members.push(identity.owner_key.clone());
         } else {
-            return Err(format!("Identity '{}' not exist", name));
+            log::error!("Identity '{}' does not exist", name);
+            fatal = true;
         }
     }
 
@@ -282,72 +310,73 @@ pub fn build_genesis(
     for (_, identity) in &genesis_data.identities {
         let mut certs = BTreeMap::new();
         for (issuer, expire_on) in &identity.certs_received {
-            let issuer_index = &genesis_data
-                .identities
-                .get(issuer)
-                .ok_or(format!("Identity '{}' not exist", issuer))?
-                .index;
-            certs.insert(*issuer_index, Some(expire_on.clone()));
-            counter_cert += 1;
+            if let Some(issuer) = &genesis_data.identities.get(issuer) {
+                certs.insert(issuer.index, Some(expire_on.clone()));
+                counter_cert += 1;
+            } else {
+                log::error!("Identity '{}' does not exist", issuer);
+                fatal = true;
+            };
         }
         certs_by_receiver.insert(identity.index, certs);
     }
 
     // SMITHS SUB-WOT //
     for (name, smith_data) in &genesis_data.smiths {
-        let identity = &genesis_data
-            .identities
-            .get(&name.clone())
-            .ok_or(format!("Identity '{}' not exist", &name))?;
-
-        // Initial authorities and session keys
-        let session_keys_bytes = if let Some(declared_session_keys) = &smith_data.session_keys {
-            counter_online_authorities += 1;
-            // insert authority as online
-            initial_authorities.insert(identity.index, (identity.owner_key.clone(), true));
-            // decode session keys or force to given value
-            match maybe_force_authority {
-                Some(ref bytes) => bytes.clone(),
-                None => hex::decode(&declared_session_keys[2..])
-                    .map_err(|_| format!("invalid session keys for idty {}", &name))?,
-            }
-        } else {
-            // still authority but offline
-            initial_authorities.insert(identity.index, (identity.owner_key.clone(), false));
-            // fake session keys
-            let mut fake_bytes = Vec::with_capacity(128);
-            for _ in 0..4 {
-                fake_bytes.extend_from_slice(identity.owner_key.as_ref())
-            }
-            fake_bytes
-        };
+        // check that smith exists
+        if let Some(identity) = &genesis_data.identities.get(&name.clone()) {
+            // Initial authorities and session keys
+            let session_keys_bytes = if let Some(declared_session_keys) = &smith_data.session_keys {
+                counter_online_authorities += 1;
+                // insert authority as online
+                initial_authorities.insert(identity.index, (identity.owner_key.clone(), true));
+                // decode session keys or force to given value
+                match maybe_force_authority {
+                    Some(ref bytes) => bytes.clone(),
+                    None => hex::decode(&declared_session_keys[2..])
+                        .map_err(|_| format!("invalid session keys for idty {}", &name))?,
+                }
+            } else {
+                // still authority but offline
+                initial_authorities.insert(identity.index, (identity.owner_key.clone(), false));
+                // fake session keys
+                let mut fake_bytes = Vec::with_capacity(128);
+                for _ in 0..4 {
+                    fake_bytes.extend_from_slice(identity.owner_key.as_ref())
+                }
+                fake_bytes
+            };
+
+            // insert session keys to map
+            session_keys_map.insert(
+                identity.owner_key.clone(),
+                SessionKeys::decode(&mut &session_keys_bytes[..]).unwrap(),
+            );
 
-        // insert session keys to map
-        session_keys_map.insert(
-            identity.owner_key.clone(),
-            SessionKeys::decode(&mut &session_keys_bytes[..]).unwrap(),
-        );
+            // smith certifications
+            let mut certs = BTreeMap::new();
+            for issuer in &smith_data.certs_received {
+                let issuer_index = &genesis_data
+                    .identities
+                    .get(issuer)
+                    .ok_or(format!("Identity '{}' does not exist", issuer))?
+                    .index;
+                certs.insert(*issuer_index, Some(GENESIS_SMITH_CERTS_EXPIRE_ON));
+                counter_smith_cert += 1;
+            }
+            smith_certs_by_receiver.insert(identity.index, certs);
 
-        // smith certifications
-        let mut certs = BTreeMap::new();
-        for issuer in &smith_data.certs_received {
-            let issuer_index = &genesis_data
-                .identities
-                .get(issuer)
-                .ok_or(format!("Identity '{}' does not exist", issuer))?
-                .index;
-            certs.insert(*issuer_index, Some(GENESIS_SMITH_CERTS_EXPIRE_ON));
-            counter_smith_cert += 1;
+            // smith memberships
+            smith_memberships.insert(
+                identity.index,
+                MembershipData {
+                    expire_on: GENESIS_SMITH_MEMBERSHIP_EXPIRE_ON,
+                },
+            );
+        } else {
+            log::error!("Smith '{}' does not correspond to exising identity", &name);
+            fatal = true;
         }
-        smith_certs_by_receiver.insert(identity.index, certs);
-
-        // smith memberships
-        smith_memberships.insert(
-            identity.index,
-            MembershipData {
-                expire_on: GENESIS_SMITH_MEMBERSHIP_EXPIRE_ON,
-            },
-        );
     }
 
     // Verify certifications coherence (can be ignored for old users)
@@ -394,30 +423,9 @@ pub fn build_genesis(
         fatal = true;
     }
 
-    // some more checks
-    assert_eq!(identities.len(), memberships.len());
-    assert_eq!(smith_memberships.len(), initial_authorities.len());
-    assert_eq!(smith_memberships.len(), session_keys_map.len());
-    assert_eq!(
-        identity_index.len(),
-        identities.len() + inactive_identities.len()
-    );
-    assert_eq!(
-        accounts.len(),
-        identity_index.len() + &genesis_data.wallets.len()
-    );
-    // no inactive tech comm
-    for tech_com_member in &genesis_data.technical_committee {
-        assert!(!inactive_identities.values().any(|&v| v == tech_com_member));
-    }
-    // no inactive smith
-    for (smith, _) in &genesis_data.smiths {
-        assert!(!inactive_identities.values().any(|&v| v == smith));
-    }
-
     // give genesis info
     log::info!(
-        "inserted genesis with:
+        "prepared genesis with:
         - {} accounts ({} identities, {} simple wallets)
         - {} total identities ({} active, {} inactive)
         - {} smiths
@@ -438,8 +446,30 @@ pub fn build_genesis(
         technical_committee_members.len(),
     );
 
+    // some more checks
+    assert_eq!(identities.len(), memberships.len());
+    assert_eq!(smith_memberships.len(), initial_authorities.len());
+    assert_eq!(smith_memberships.len(), session_keys_map.len());
+    assert_eq!(
+        identity_index.len(),
+        identities.len() + inactive_identities.len()
+    );
+    assert_eq!(
+        accounts.len(),
+        identity_index.len() + &genesis_data.wallets.len()
+    );
+    // no inactive tech comm
+    for tech_com_member in &genesis_data.technical_committee {
+        assert!(!inactive_identities.values().any(|&v| v == tech_com_member));
+    }
+    // no inactive smith
+    for (smith, _) in &genesis_data.smiths {
+        assert!(!inactive_identities.values().any(|&v| v == smith));
+    }
+
     // check the logs to see all the fatal error preventing from starting gtest currency
     if fatal {
+        log::error!("some previously logged error prevent from building a sane genesis");
         panic!();
     }