diff --git a/duniter4j-client/pom.xml b/duniter4j-client/pom.xml
index e470589df59c3e3ebcfd79df6e60b245e906e741..95a85237d0794d79ce9e0c3b2a59162ff9b2b1b1 100644
--- a/duniter4j-client/pom.xml
+++ b/duniter4j-client/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <artifactId>duniter4j</artifactId>
         <groupId>org.duniter</groupId>
-        <version>1.4.1-SNAPSHOT</version>
+        <version>1.5.7-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/duniter4j-core-client/pom.xml b/duniter4j-core-client/pom.xml
index 1f7a0c205dd1555998976e73d7dd5d4701b268ae..ab88a741ca9707282a92adeb1c80a733708095f0 100644
--- a/duniter4j-core-client/pom.xml
+++ b/duniter4j-core-client/pom.xml
@@ -6,7 +6,7 @@
   <parent>
     <groupId>org.duniter</groupId>
     <artifactId>duniter4j</artifactId>
-    <version>1.4.1-SNAPSHOT</version>
+    <version>1.5.7-SNAPSHOT</version>
   </parent>
 
   <artifactId>duniter4j-core-client</artifactId>
@@ -24,12 +24,6 @@
 
   </properties>
   <dependencies>
-    <!-- Compile -->
-    <dependency>
-      <groupId>org.projectlombok</groupId>
-      <artifactId>lombok</artifactId>
-    </dependency>
-
     <dependency>
       <groupId>org.duniter</groupId>
       <artifactId>duniter4j-core-shared</artifactId>
@@ -52,7 +46,6 @@
         <groupId>org.glassfish.tyrus</groupId>
         <artifactId>tyrus-client</artifactId>
     </dependency>
-
     <dependency>
         <groupId>org.glassfish.tyrus</groupId>
         <artifactId>tyrus-container-grizzly-client</artifactId>
@@ -91,6 +84,12 @@
       <artifactId>jackson-databind</artifactId>
     </dependency>
 
+    <!-- Compile -->
+    <dependency>
+      <groupId>org.projectlombok</groupId>
+      <artifactId>lombok</artifactId>
+    </dependency>
+
     <!-- Spring (need for spring compatibility) -->
     <dependency>
       <groupId>org.springframework</groupId>
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/config/Configuration.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/config/Configuration.java
index fde296ab11b891e8c8f982ad188836e3d2778030..0414cbab0eecf482b2b47b197d5b33d4383ad5c7 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/config/Configuration.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/config/Configuration.java
@@ -82,6 +82,7 @@ public class Configuration  {
         super();
         this.applicationConfig = applicationConfig;
         this.optionKeyToNotSave = null;
+
         // Override application version
         initVersion(applicationConfig);
     }
@@ -316,25 +317,25 @@ public class Configuration  {
         return applicationConfig.getOptionAsInt(ConfigurationOption.NETWORK_PEER_UP_MAX_AGE.getKey());
     }
 
-    public String getNodeElasticSearchHost() {
-        return applicationConfig.getOption(ConfigurationOption.NODE_ELASTICSEARCH_HOST.getKey());
+    public String getCesiumPlusPodHost() {
+        return applicationConfig.getOption(ConfigurationOption.CESIUM_PLUS_POD_HOST.getKey());
     }
-    public int getNodeElasticSearchPort() {
-        return applicationConfig.getOptionAsInt(ConfigurationOption.NODE_ELASTICSEARCH_PORT.getKey());
+    public int getCesiumPlusPodPort() {
+        return applicationConfig.getOptionAsInt(ConfigurationOption.CESIUM_PLUS_POD_PORT.getKey());
     }
 
-    public URL getNodeElasticSearchUrl() {
+    public URL getCesiumPlusPodUrl() {
         // Force SSL for 443 port
-        if (getNodeElasticSearchPort() == 443) {
+        if (getCesiumPlusPodPort() == 443) {
             try {
-                return new URL(applicationConfig.getOption(ConfigurationOption.NODE_ELASTICSEARCH_URL.getKey())
+                return new URL(applicationConfig.getOption(ConfigurationOption.CESIUM_PLUS_POD_URL.getKey())
                         .replaceAll("http://", "https://"));
             } catch(MalformedURLException e) {
-                return applicationConfig.getOptionAsURL(ConfigurationOption.NODE_ELASTICSEARCH_URL.getKey());
+                return applicationConfig.getOptionAsURL(ConfigurationOption.CESIUM_PLUS_POD_URL.getKey());
             }
         }
         else {
-            return applicationConfig.getOptionAsURL(ConfigurationOption.NODE_ELASTICSEARCH_URL.getKey());
+            return applicationConfig.getOptionAsURL(ConfigurationOption.CESIUM_PLUS_POD_URL.getKey());
         }
     }
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/config/ConfigurationOption.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/config/ConfigurationOption.java
index 35b44db712cad0ccffb10eb2e14582a98ec8a944..67f64e227193c61b96eb12be3ca223e34d714d1d 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/config/ConfigurationOption.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/config/ConfigurationOption.java
@@ -201,28 +201,28 @@ public enum ConfigurationOption implements ConfigOptionDef {
             Integer.class,
             false),
 
-    NODE_ELASTICSEARCH_PROTOCOL(
+    CESIUM_PLUS_POD_PROTOCOL(
             "duniter4j.node.elasticsearch.protocol",
             n("duniter4j.config.option.node.elasticsearch.protocol.description"),
             "http",
             String.class,
             false),
 
-    NODE_ELASTICSEARCH_HOST(
+    CESIUM_PLUS_POD_HOST(
             "duniter4j.node.elasticsearch.host",
             n("duniter4j.config.option.node.elasticsearch.host.description"),
             "localhost",
             String.class,
             false),
 
-    NODE_ELASTICSEARCH_PORT(
+    CESIUM_PLUS_POD_PORT(
             "duniter4j.node.elasticsearch.port",
             n("duniter4j.config.option.node.elasticsearch.port.description"),
             "9200",
             Integer.class,
             false),
 
-    NODE_ELASTICSEARCH_URL(
+    CESIUM_PLUS_POD_URL(
             "duniter4j.node.elasticsearch.url",
             n("duniter4j.config.option.node.elasticsearch.url.description"),
             "${duniter4j.node.elasticsearch.protocol}://${duniter4j.node.elasticsearch.host}:${duniter4j.node.elasticsearch.port}",
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/example/Example1.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/example/Example1.java
index f3f4331617a63a285047304733af21a66db5b6d9..220c23664e7d1b872794b255869ab56a6b96613f 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/example/Example1.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/example/Example1.java
@@ -47,7 +47,10 @@ public class Example1 {
                 .build();
 
         // Do something fun !
-        BlockchainBlock currentBlock = ServiceLocator.instance().getBlockchainRemoteService().getCurrentBlock(aPeer);
+        BlockchainBlock currentBlock = ServiceLocator.instance()
+            .getBlockchainRemoteService()
+            .getCurrentBlock(aPeer);
+
         System.out.println(String.format("Hello %s world !", currentBlock.getCurrency()));
     }
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/Account.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/Account.java
index 002b21117bbfe030b5d195f0755e73ce9f21485b..2607e3d053f4ca06d4fe67d054fdafc59629cd4e 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/Account.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/Account.java
@@ -23,11 +23,15 @@ package org.duniter.core.client.model;
  */
 
 
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 import org.duniter.core.model.IEntity;
 
 /**
  * Created by eis on 07/02/15.
  */
+@Data
+@FieldNameConstants
 public class Account implements IEntity<Long> {
 
     private Long id;
@@ -36,46 +40,4 @@ public class Account implements IEntity<Long> {
     private String salt;
     private String cryptPin;
 
-    @Override
-    public Long getId() {
-        return id;
-    }
-
-    @Override
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-
-    public String getUid() {
-        return uid;
-    }
-
-    public void setUid(String uid) {
-        this.uid = uid;
-    }
-
-    public String getPubkey() {
-        return pubkey;
-    }
-
-    public void setPubkey(String pubkey) {
-        this.pubkey = pubkey;
-    }
-
-    public String getSalt() {
-        return salt;
-    }
-
-    public void setSalt(String salt) {
-        this.salt = salt;
-    }
-
-    public String getCryptPin() {
-        return cryptPin;
-    }
-
-    public void setCryptPin(String cryptPin) {
-        this.cryptPin = cryptPin;
-    }
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/BaseIdentity.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/BaseIdentity.java
index a6f06b86f059e9c2ee8d2fe97b17e3213188c577..7d3904097b25530f26fb187d94bc5f5557258218 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/BaseIdentity.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/BaseIdentity.java
@@ -24,6 +24,10 @@ package org.duniter.core.client.model;
 
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.FieldNameConstants;
 
 import java.io.Serializable;
 
@@ -34,13 +38,14 @@ import java.io.Serializable;
  * @since 1.0
  *
  */
+@Data
+@FieldNameConstants
 public abstract class BaseIdentity implements Serializable {
 
     private static final long serialVersionUID = 8080689271400316984L;
 
-    public static final String PROPERTY_UID = "uid";
-    public static final String PROPERTY_PUBKEY = "pubkey";
-    public static final String PROPERTY_SIGNATURE = "signature";
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class Fields {}
 
     private String pubkey;
 
@@ -48,22 +53,6 @@ public abstract class BaseIdentity implements Serializable {
 
     private String uid;
 
-    public String getPubkey() {
-        return pubkey;
-    }
-
-    public void setPubkey(String pubkey) {
-        this.pubkey = pubkey;
-    }
-
-    public String getSignature() {
-        return signature;
-    }
-
-    public void setSignature(String signature) {
-        this.signature = signature;
-    }
-
     @JsonIgnore
     @Deprecated
     public String getSelf() {
@@ -76,14 +65,6 @@ public abstract class BaseIdentity implements Serializable {
         this.signature = signature;
     }
 
-    public String getUid() {
-        return uid;
-    }
-
-    public void setUid(String uid) {
-        this.uid = uid;
-    }
-    
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder()
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/TxOutput.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/TxOutput.java
index f363fbd62c4b304d2f0b71c936b151b44206ac2b..38c4ecf075c48a2d2c42ddaf506f4871e44bb1f7 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/TxOutput.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/TxOutput.java
@@ -23,8 +23,13 @@ package org.duniter.core.client.model;
  */
 
 
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
+
 import java.io.Serializable;
 
+@Data
+@FieldNameConstants
 public class TxOutput implements Serializable {
 
 	private static final long serialVersionUID = 8084087351543574142L;
@@ -35,27 +40,4 @@ public class TxOutput implements Serializable {
 
 	private int base;
 
-	public String getPubKey() {
-		return pubKey;
-	}
-
-	public void setPubKey(String pubKey) {
-		this.pubKey = pubKey;
-	}
-
-	public long getAmount() {
-		return amount;
-	}
-
-	public void setAmount(long amount) {
-		this.amount = amount;
-	}
-
-	public int getBase() {
-		return base;
-	}
-
-	public void setBase(int base) {
-		this.base = base;
-	}
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainBlock.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainBlock.java
index e4871cd0be986234f9a0cf88268bffccd7ea7de9..d27f54a559be20dfd56fe42338d12e35418722d0 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainBlock.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainBlock.java
@@ -72,7 +72,7 @@ public class BlockchainBlock implements Serializable {
     private String previousHash;
     private String previousIssuer;
     private String innerHash;
-    private Long dividend;
+    private BigInteger dividend;
     private Identity[] identities;
     private Joiner[] joiners;
     private Joiner[] leavers;
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainDifficulties.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainDifficulties.java
index 66ee5a2397f3dc5096f24032eb1c5b234c69c130..9b90a67aeb8098c9c14f196f4eb064d1f62cb43a 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainDifficulties.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainDifficulties.java
@@ -23,6 +23,8 @@ package org.duniter.core.client.model.bma;
  */
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 import org.apache.commons.lang3.ArrayUtils;
 
 import java.io.Serializable;
@@ -30,46 +32,21 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+@Data
+@FieldNameConstants
 public class BlockchainDifficulties implements Serializable {
 	private static final long serialVersionUID = -5631089862715942431L;
 
 	private Long block;
 	private DifficultyLevel[] levels;
 
-	public Long getBlock() {
-		return block;
-	}
-	public void setBlock(Long block) {
-		this.block = block;
-	}
-	public DifficultyLevel[] getLevels() {
-		return levels;
-	}
-	public void setLevels(DifficultyLevel[] levels) {
-		this.levels = levels;
-	}
-
+	@Data
+	@FieldNameConstants
 	public static class DifficultyLevel implements Serializable {
 		private static final long serialVersionUID = 1L;
 
 		private String uid;
 		private int level;
-
-		public String getUid() {
-			return uid;
-		}
-
-		public void setUid(String uid) {
-			this.uid = uid;
-		}
-
-		public int getLevel() {
-			return level;
-		}
-
-		public void setLevel(int level) {
-			this.level = level;
-		}
 	}
 
 	@JsonIgnore
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainMemberships.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainMemberships.java
index e200d19c908bd3187971508e94ce5058bfb91b92..18bf931e082d13d88f2b632bdb18674116be3b3d 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainMemberships.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainMemberships.java
@@ -22,29 +22,22 @@ package org.duniter.core.client.model.bma;
  * #L%
  */
 
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 import org.duniter.core.client.model.BaseIdentity;
 
 import java.io.Serializable;
 
+@Data
+@FieldNameConstants
 public class BlockchainMemberships extends BaseIdentity {
 	private static final long serialVersionUID = -5631089862725952431L;
 
 	private long sigDate;
 	private Membership[] memberships;
 
-	public long getSigDate() {
-		return sigDate;
-	}
-	public void setSigDate(long sigDate) {
-		this.sigDate = sigDate;
-	}
-	public Membership[] getMemberships() {
-		return memberships;
-	}
-	public void setMemberships(Membership[] memberships) {
-		this.memberships = memberships;
-	}
-
+	@Data
+	@FieldNameConstants
 	public static class Membership implements Serializable {
 		private static final long serialVersionUID = 1L;
 
@@ -54,35 +47,5 @@ public class BlockchainMemberships extends BaseIdentity {
 		private long blockNumber;
 		private String blockHash;
 
-		public String getVersion() {
-			return version;
-		}
-		public void setVersion(String version) {
-			this.version = version;
-		}
-		public String getCurrency() {
-			return currency;
-		}
-		public void setCurrency(String currency) {
-			this.currency = currency;
-		}
-		public String getMembership() {
-			return membership;
-		}
-		public void setMembership(String membership) {
-			this.membership = membership;
-		}
-		public long getBlockNumber() {
-			return blockNumber;
-		}
-		public void setBlockNumber(long blockNumber) {
-			this.blockNumber = blockNumber;
-		}
-		public String getBlockHash() {
-			return blockHash;
-		}
-		public void setBlockHash(String blockHash) {
-			this.blockHash = blockHash;
-		}
 	}
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainParameters.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainParameters.java
index b7386add121d123fad5bc0713be1c519fd728e70..8b643bcb1b7b8786619f0a8214aadd061f2dd691 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainParameters.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/BlockchainParameters.java
@@ -24,15 +24,19 @@ package org.duniter.core.client.model.bma;
 
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 
 import java.io.Serializable;
 
 /**
- * Blockwhain parameters.
+ * Blockchain parameters.
  * 
  * @author Benoit Lavenier <benoit.lavenier@e-is.pro>
  * @since 1.0
  */
+@Data
+@FieldNameConstants
 // FIXME: next ignore is due to issue on Duniter v1.4 - should be removed later
 @JsonIgnoreProperties(ignoreUnknown=true)
 public class BlockchainParameters implements Serializable{
@@ -147,119 +151,6 @@ public class BlockchainParameters implements Serializable{
      */
     private Double percentRot;
 
-    public String getCurrency() {
-        return currency;
-    }
-
-    public void setCurrency(String currency) {
-        this.currency = currency;
-    }
-
-    public Double getC() {
-        return c;
-    }
-
-    public void setC(Double c) {
-        this.c = c;
-    }
-
-    public Integer getDt() {
-        return dt;
-    }
-
-    public void setDt(Integer dt) {
-        this.dt = dt;
-    }
-
-    public Long getUdTime0() {
-        return udTime0;
-    }
-
-    public void setUdTime0(Long udTime0) {
-        this.udTime0 = udTime0;
-    }
-
-    public Long getUd0() {
-        return ud0;
-    }
-
-    public void setUd0(Long ud0) {
-        this.ud0 = ud0;
-    }
-
-    public Long getUdReevalTime0() {
-        return udReevalTime0;
-    }
-
-    public void setUdReevalTime0(Long udReevalTime0) {
-        this.udReevalTime0 = udReevalTime0;
-    }
-
-    public Long getDtReeval() {
-        return dtReeval;
-    }
-
-    public void setDtReeval(Long dtReeval) {
-        this.dtReeval = dtReeval;
-    }
-
-    public Integer getSigValidity() {
-        return sigValidity;
-    }
-
-    public void setSigValidity(Integer sigValidity) {
-        this.sigValidity = sigValidity;
-    }
-
-    public Integer getSigQty() {
-        return sigQty;
-    }
-
-    public void setSigQty(Integer sigQty) {
-        this.sigQty = sigQty;
-    }
-
-
-    public Integer getMsValidity() {
-        return msValidity;
-    }
-
-    public void setMsValidity(Integer msValidity) {
-        this.msValidity = msValidity;
-    }
-
-    public Integer getStepMax() {
-        return stepMax;
-    }
-
-    public void setStepMax(Integer stepMax) {
-        this.stepMax = stepMax;
-    }
-
-    public Integer getMedianTimeBlocks() {
-        return medianTimeBlocks;
-    }
-
-    public void setMedianTimeBlocks(Integer medianTimeBlocks) {
-        this.medianTimeBlocks = medianTimeBlocks;
-    }
-
-    public Integer getAvgGenTime() {
-        return avgGenTime;
-    }
-
-    public void setAvgGenTime(Integer avgGenTime) {
-        this.avgGenTime = avgGenTime;
-    }
-
-    public Integer getDtDiffEval() {
-        return dtDiffEval;
-    }
-
-    public void setDtDiffEval(Integer dtDiffEval) {
-        this.dtDiffEval = dtDiffEval;
-    }
-
     @Deprecated
     public Integer getBlocksRot() {
         return blocksRot;
@@ -270,54 +161,6 @@ public class BlockchainParameters implements Serializable{
         this.blocksRot = blocksRot;
     }
 
-    public Double getPercentRot() {
-        return percentRot;
-    }
-
-    public void setPercentRot(Double percentRot) {
-        this.percentRot = percentRot;
-    }
-
-    public Integer getSigPeriod() {
-        return sigPeriod;
-    }
-
-    public void setSigPeriod(Integer sigPeriod) {
-        this.sigPeriod = sigPeriod;
-    }
-
-    public Integer getSigStock() {
-        return sigStock;
-    }
-
-    public void setSigStock(Integer sigStock) {
-        this.sigStock = sigStock;
-    }
-
-    public Integer getSigWindow() {
-        return sigWindow;
-    }
-
-    public void setSigWindow(Integer sigWindow) {
-        this.sigWindow = sigWindow;
-    }
-
-    public Integer getIdtyWindow() {
-        return idtyWindow;
-    }
-
-    public void setIdtyWindow(Integer idtyWindow) {
-        this.idtyWindow = idtyWindow;
-    }
-
-    public Integer getMsWindow() {
-        return msWindow;
-    }
-
-    public void setMsWindow(Integer msWindow) {
-        this.msWindow = msWindow;
-    }
-
     @Override
     public String toString() {
         return new StringBuilder()
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java
index 21c56c53bb7763ff7fa5a7213ea057f80cf5b179..9749bf5d7ed0d961456e73cf79cae90596734dcd 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java
@@ -41,7 +41,7 @@ public class Endpoints {
     private static final Logger log = LoggerFactory.getLogger(Endpoints.class);
 
     // Path regexp (can have no starting slash - see issue https://git.duniter.org/clients/cesium-grp/cesium-plus-pod/-/issues/41)
-    public static final String PATH_REGEXP = "\\/?[^\\/\\s]+(?:\\/[^\\/\\s]+)*";
+    public static final String PATH_REGEXP = "(?:\\/|\\/?[^\\/\\s]+(?:\\/[^\\/\\s]+)*)";
     public static final String EP_END_REGEXP = "(?: ([a-z0-9_ğĞ][a-z0-9-_.ğĞ]*))?(?: ([0-9.]+))?(?: ([0-9a-f:]+)(?:%[a-z0-9]+)?)?(?: ([0-9]+))(?: ("+PATH_REGEXP + "))?$";
     public static final String BMA_API_REGEXP = "^BASIC_MERKLED_API" + EP_END_REGEXP;
     public static final String BMAS_API_REGEXP = "^BMAS" + EP_END_REGEXP;
@@ -137,7 +137,7 @@ public class Endpoints {
             }
         }
 
-        log.warn("Unable to parse Endpoint: " + raw);
+        log.debug("Unable to parse Endpoint: " + raw);
         return Optional.empty();
     }
 
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java
index b4be598abc5f7a29e1d799ba887c54d8d1752422..6e87fa1eaa5ca6af4f6987ac8754661501b4972b 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java
@@ -23,6 +23,8 @@ package org.duniter.core.client.model.bma;
  */
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 import org.duniter.core.util.CollectionUtils;
 import org.duniter.core.util.Preconditions;
 import org.duniter.core.util.StringUtils;
@@ -35,6 +37,8 @@ import java.util.stream.Stream;
 /**
  * Created by eis on 05/02/15.
  */
+@Data
+@FieldNameConstants
 public class NetworkPeering implements Serializable {
     private Integer version;
     private String currency;
@@ -47,74 +51,6 @@ public class NetworkPeering implements Serializable {
 
     public Endpoint[] endpoints;
 
-    public Integer getVersion() {
-        return version;
-    }
-
-    public void setVersion(Integer version) {
-        this.version = version;
-    }
-
-    public String getCurrency() {
-        return currency;
-    }
-
-    public void setCurrency(String currency) {
-        this.currency = currency;
-    }
-
-    public String getBlock() {
-        return block;
-    }
-
-    public void setBlock(String block) {
-        this.block = block;
-    }
-
-    public String getSignature() {
-        return signature;
-    }
-
-    public void setSignature(String signature) {
-        this.signature = signature;
-    }
-
-    public String getPubkey() {
-        return pubkey;
-    }
-
-    public void setPubkey(String pubkey) {
-        this.pubkey = pubkey;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    /**
-     * Unsigned peering document
-     * @return
-     */
-    public String getRaw() {
-        return raw;
-    }
-
-    public void setRaw(String raw) {
-        this.raw = raw;
-    }
-
-    public Endpoint[] getEndpoints() {
-        return endpoints;
-    }
-
-    public void setEndpoints(Endpoint[] endpoints) {
-        this.endpoints = endpoints;
-    }
-
     public String toString() {
         // Use raw, if exists
         String raw = this.raw != null ? this.raw : toUnsignedRaw();
@@ -161,6 +97,8 @@ public class NetworkPeering implements Serializable {
                 .toString();
     }
 
+    @Data
+    @FieldNameConstants
     public static class Endpoint implements Serializable {
         public String api;
         public String dns;
@@ -172,80 +110,6 @@ public class NetworkPeering implements Serializable {
         public Boolean useSsl;
         public String raw;
 
-        public String getApi() {
-            return api;
-        }
-
-        public void setApi(String api) {
-            this.api = api;
-        }
-
-        public String getDns() {
-            return dns;
-        }
-
-        public void setDns(String dns) {
-            this.dns = dns;
-        }
-
-        public String getIpv4() {
-            return ipv4;
-        }
-
-        public void setIpv4(String ipv4) {
-            this.ipv4 = ipv4;
-        }
-
-        public String getIpv6() {
-            return ipv6;
-        }
-
-        public void setIpv6(String ipv6) {
-            this.ipv6 = ipv6;
-        }
-
-        public Integer getPort() {
-            return port;
-        }
-
-        public void setPort(Integer port) {
-            this.port = port;
-        }
-
-        public String getId() {
-            return id;
-        }
-
-        public void setId(String id) {
-            this.id = id;
-        }
-
-        public String getPath() {
-            return path;
-        }
-
-        public void setPath(String path) {
-            this.path = path;
-        }
-
-        public Boolean useSsl() {
-            return useSsl;
-        }
-
-        public void setUseSsl(Boolean useSsl) {
-            this.useSsl = useSsl;
-        }
-
-        @JsonIgnore
-        public String getRaw() {
-            return raw;
-        }
-
-        @JsonIgnore
-        public void setRaw(String raw) {
-            this.raw = raw;
-        }
-
         @Override
         public String toString() {
             if (raw != null) return raw;
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeers.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeers.java
index 94b6d1c6b9ea7c18d1cb6d4e41cb6c8b0919d425..0ea639975c5145f63a0a1e79c5b3a8485af01088 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeers.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeers.java
@@ -26,12 +26,16 @@ import com.fasterxml.jackson.annotation.JsonGetter;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonSetter;
 import com.google.common.base.Joiner;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 
 import java.io.Serializable;
 
 /**
  * Created by eis on 05/02/15.
  */
+@Data
+@FieldNameConstants
 public class NetworkPeers implements Serializable {
 
     public Peer[] peers;
@@ -40,42 +44,38 @@ public class NetworkPeers implements Serializable {
         return Joiner.on(",").join(peers);
     }
 
+    @Data
+    @FieldNameConstants
     public static class Peer extends NetworkPeering implements Serializable {
+
+        public interface JsonFields {
+            String FIRST_DOWN = "first_down";
+            String  LAST_TRY = "last_try";
+        }
         public Long firstDown;
         public Long lastTry;
-        public Long lastContact;
         public String hash;
 
-        @JsonGetter("first_down")
+        @JsonGetter(JsonFields.FIRST_DOWN)
         public Long getFirstDown() {
             return firstDown;
         }
 
-        @JsonSetter("first_down")
+        @JsonSetter(JsonFields.FIRST_DOWN)
         public void setFirstDown(Long firstDown) {
             this.firstDown = firstDown;
         }
 
-        @JsonGetter("last_try")
+        @JsonGetter(JsonFields.LAST_TRY)
         public Long getLastTry() {
             return lastTry;
         }
 
-        @JsonSetter("last_try")
+        @JsonSetter(JsonFields.LAST_TRY)
         public void setLastTry(Long lastTry) {
             this.lastTry = lastTry;
         }
 
-        @JsonGetter("lastContact")
-        public Long getLastContact() {
-            return lastContact;
-        }
-
-        @JsonSetter("lastContact")
-        public void setLastContact(Long lastContact) {
-            this.lastContact = lastContact;
-        }
-
         @JsonIgnore
         public String getHash() {
             return hash;
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxHistory.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxHistory.java
index abbcab556f03b1721345c5306eff8732146ef4a9..a0fdbea9260bb682582044596b9bf7fee09068da 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxHistory.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxHistory.java
@@ -22,6 +22,14 @@ package org.duniter.core.client.model.bma;
  * #L%
  */
 
+import com.fasterxml.jackson.annotation.JsonGetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonSetter;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
+
+@Data
+@FieldNameConstants
 public class TxHistory {
 
     private String currency;
@@ -30,31 +38,9 @@ public class TxHistory {
 
     private History history;
 
-	public String getCurrency() {
-		return currency;
-	}
-
-	public void setCurrency(String currency) {
-		this.currency = currency;
-	}
-
-	public String getPubkey() {
-		return pubkey;
-	}
-
-	public void setPubkey(String pubkey) {
-		this.pubkey = pubkey;
-	}
-
-    public History getHistory() {
-        return history;
-    }
-
-    public void setHistory(History history) {
-        this.history = history;
-    }
-
-	public class History {
+	@Data
+	@FieldNameConstants
+	public static class History {
 
 		private Movement[] sent;
 
@@ -63,42 +49,16 @@ public class TxHistory {
 		private Movement[] sending;
 
 		private Movement[] receiving;
-
-		public Movement[] getSent() {
-			return sent;
-		}
-
-		public void setSent(Movement[] sent) {
-			this.sent = sent;
-		}
-
-		public Movement[] getReceived() {
-			return received;
-		}
-
-		public void setReceived(Movement[] received) {
-			this.received = received;
-		}
-
-		public Movement[] getSending() {
-			return sending;
-		}
-
-		public void setSending(Movement[] sending) {
-			this.sending = sending;
-		}
-
-		public Movement[] getReceiving() {
-			return receiving;
-		}
-
-		public void setReceiving(Movement[] receiving) {
-			this.receiving = receiving;
-		}
 	}
 
+	@Data
+	@FieldNameConstants
 	public static class Movement {
 
+		public interface JsonFields {
+			String BLOCK_NUMBER = "block_number";
+		}
+
 		private String version;
 
 		private String[] issuers;
@@ -113,102 +73,19 @@ public class TxHistory {
 
 		private String hash;
 
-		private int block_number;
+		private int blockNumber;
 
 		private long time;
 
-		public String getVersion() {
-			return version;
-		}
-
-		public void setVersion(String version) {
-			this.version = version;
-		}
-
-		public String[] getIssuers() {
-			return issuers;
-		}
-
-		public void setIssuers(String[] issuers) {
-			this.issuers = issuers;
-		}
-
-		public String[] getInputs() {
-			return inputs;
-		}
-
-		public void setInputs(String[] inputs) {
-			this.inputs = inputs;
-		}
-
-		public String[] getOutputs() {
-			return outputs;
-		}
-
-		public void setOutputs(String[] outputs) {
-			this.outputs = outputs;
-		}
-
-		public String getComment() {
-			return comment;
-		}
-
-		public void setComment(String comment) {
-			this.comment = comment;
-		}
-
-		public String[] getSignatures() {
-			return signatures;
-		}
-
-		public void setSignatures(String[] signatures) {
-			this.signatures = signatures;
-		}
-
-		public String getHash() {
-			return hash;
-		}
-
-		public String getFingerprint() {
-			return hash;
-		}
-
-		public void setHash(String hash) {
-			this.hash = hash;
-		}
-
-		/**
-		 * @deprecated use getBlockNumber() instead
-		 * @return
-		 */
-		@Deprecated
-		public int getBlock_number() {
-			return block_number;
-		}
-
-		/**
-		 * @deprecated use setBlockNumber() instead
-		 * @return
-		 */
-		@Deprecated
-		public void setBlock_number(int block_number) {
-			this.block_number = block_number;
-		}
-
+		@JsonGetter(JsonFields.BLOCK_NUMBER)
 		public int getBlockNumber() {
-			return block_number;
-		}
-
-		public void setNumber(int block_number) {
-			this.block_number = block_number;
+			return blockNumber;
 		}
 
-		public long getTime() {
-			return time;
+		@JsonSetter(JsonFields.BLOCK_NUMBER)
+		public void setBlockNumber(int blockNumber) {
+			this.blockNumber = blockNumber;
 		}
 
-		public void setTime(long time) {
-			this.time = time;
-		}
 	}
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxSource.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxSource.java
index 010f225924c1d3f4ed1009595ea9533dc17bd3ff..2192174446b283c6befb241b6fc7558858477069 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxSource.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/TxSource.java
@@ -23,8 +23,13 @@ package org.duniter.core.client.model.bma;
  */
 
 
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
+
 import java.io.Serializable;
 
+@Data
+@FieldNameConstants
 public class TxSource {
 
 	private String currency;
@@ -33,37 +38,20 @@ public class TxSource {
 	    
     private Source[] sources;
 
-	public TxSource() {
-	}
-
-	public String getCurrency() {
-		return currency;
-	}
-
-	public void setCurrency(String currency) {
-		this.currency = currency;
-	}
-
-	public String getPubkey() {
-		return pubkey;
-	}
-
-	public void setPubkey(String pubkey) {
-		this.pubkey = pubkey;
-	}
-
-	public Source[] getSources() {
-		return sources;
-	}
-
-	public void setSources(Source[] sources) {
-		this.sources = sources;
-	}
-
+	@Data
+	@FieldNameConstants
 	public static class Source implements Serializable, Cloneable {
 
 		private static final long serialVersionUID = 8084087351543574142L;
 
+
+		/**
+		 * Source type : <ul>
+		 * <li><code>D</code> : Universal Dividend</li>
+		 * <li><code>T</code> : Transaction</li>
+		 * </ul>
+		 * @return
+		 */
 		private String type;
 		private String identifier;
 		private String noffset;
@@ -71,9 +59,6 @@ public class TxSource {
 		private String conditions;
 		private int base;
 
-		public Source() {
-		}
-
 		@Override
 		public Object clone() throws CloneNotSupportedException {
 
@@ -86,64 +71,5 @@ public class TxSource {
 			clone.base = base;
 			return clone;
 		}
-
-		/**
-		 * Source type : <ul>
-		 * <li><code>D</code> : Universal Dividend</li>
-		 * <li><code>T</code> : Transaction</li>
-		 * </ul>
-		 * @return
-		 */
-		public String getType() {
-			return type;
-		}
-
-		public void setType(String type) {
-			this.type = type;
-		}
-
-		public String getIdentifier() {
-			return identifier;
-		}
-
-		public void setIdentifier(String identifier) {
-			this.identifier = identifier;
-		}
-
-		public String getNoffset() {
-			return noffset;
-		}
-
-		public void setNoffset(String noffset) {
-			this.noffset = noffset;
-		}
-
-		public long getAmount() {
-			return amount;
-		}
-
-		public void setAmount(long amount) {
-			this.amount = amount;
-		}
-
-
-		public String getConditions() {
-			return conditions;
-		}
-
-		public void setConditions(String conditions) {
-			this.conditions = conditions;
-		}
-
-		public int getBase() {
-			return base;
-		}
-
-		public void setBase(int base) {
-			this.base = base;
-		}
-
 	}
-
-
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotCertification.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotCertification.java
index 2ec3cc3fb673ceb0cc32eae941a445f32d92b9d3..c325d4931c0fe16000b2302c352e3a665a88f51b 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotCertification.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotCertification.java
@@ -25,6 +25,8 @@ package org.duniter.core.client.model.bma;
 
 import com.fasterxml.jackson.annotation.JsonGetter;
 import com.fasterxml.jackson.annotation.JsonSetter;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 import org.duniter.core.client.model.local.Identity;
 
 import java.io.Serializable;
@@ -35,65 +37,28 @@ import java.io.Serializable;
  * @since 1.0
  *
  */
+@Data
+@FieldNameConstants
 public class WotCertification implements Serializable{
     
     private static final long serialVersionUID = 8568496827055074607L;
 
     private String pubkey;
-
     private String uid;
-
     private String sigDate;
-
     private boolean isMember;
-
     private Certification[] certifications;
 
-    public Certification[] getCertifications() {
-        return certifications;
-    }
-
-    public void setCertifications(Certification[] certifications) {
-        this.certifications = certifications;
-    }
-
-    public String getPubkey() {
-        return pubkey;
-    }
-
-    public void setPubkey(String pubkey) {
-        this.pubkey = pubkey;
-    }
-
-    public String getUid() {
-        return uid;
-    }
-
-    public void setUid(String uid) {
-        this.uid = uid;
-    }
-
-    @JsonGetter("is_member")
-    public boolean isMember() {
-        return isMember;
-    }
-
-    public void setIsMember(boolean isMember) {
-        this.isMember = isMember;
-    }
-
-    public String getSigDate() {
-        return sigDate;
-    }
-
-    public void setSigDate(String sigDate) {
-        this.sigDate = sigDate;
-    }
 
+    @Data
+    @FieldNameConstants
     public static class Certification extends Identity {
 
         private static final long serialVersionUID = 2204517069552693026L;
 
+        public interface JsonFields {
+            String CERT_TIME = "cert_time";
+        }
         private CertTime certTime;
 
         private String sigDate;
@@ -105,91 +70,35 @@ public class WotCertification implements Serializable{
 
         private boolean wasMember;
 
-        @JsonGetter("cert_time")
+        @JsonGetter(JsonFields.CERT_TIME)
         public CertTime getCertTime() {
             return certTime;
         }
 
-        @JsonSetter("cert_time")
+        @JsonSetter(JsonFields.CERT_TIME)
         public void setCertTime(CertTime certTime) {
             this.certTime = certTime;
         }
 
-        /**
-         * Indicate whether the certification is written in the blockchain or not.
-         */
-        public Written getWritten() {
-            return written;
-        }
-
-        public void setWritten(Written written) {
-            this.written = written;
-        }
-
-        public String getSigDate() {
-            return sigDate;
-        }
-
-        public void setSigDate(String sigDate) {
-            this.sigDate = sigDate;
-        }
-
-        @JsonGetter("wasMember")
-        public boolean wasMember() {
-            return wasMember;
-        }
-
-        public void setWasMember(boolean wasMember) {
-            this.wasMember = wasMember;
-        }
     }
 
+    @Data
+    @FieldNameConstants
     public static class CertTime implements Serializable {
 
         private static final long serialVersionUID = -358639516878884523L;
 
         private int block = -1;
-
         private long medianTime = -1;
 
-        public int getBlock() {
-            return block;
-        }
-
-        public void setBlock(int block) {
-            this.block = block;
-        }
-
-        public long getMedianTime() {
-            return medianTime;
-        }
-
-        public void setMedianTime(long medianTime) {
-            this.medianTime = medianTime;
-        }
-
     }
 
+    @Data
+    @FieldNameConstants
     public static class Written implements Serializable{
 
         private long number = -1;
-
         private String hash = "";
 
-        public long getNumber() {
-            return number;
-        }
-
-        public void setNumber(long number) {
-            this.number = number;
-        }
-
-        public String getHash() {
-            return hash;
-        }
-
-        public void setHash(String hash) {
-            this.hash = hash;
-        }
     }
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotLookup.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotLookup.java
index 9118eceef928c50d30167b17635e5e30893f26f0..ae6df0db2e8f5afefc1c39892c5ea4b604d89135 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotLookup.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotLookup.java
@@ -25,30 +25,17 @@ package org.duniter.core.client.model.bma;
 
 import com.fasterxml.jackson.annotation.JsonGetter;
 import com.fasterxml.jackson.annotation.JsonSetter;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 
 import java.io.Serializable;
-
+@Data
+@FieldNameConstants
 public class WotLookup {
 
     private boolean partial;
     private Result[] results;
 
-    public boolean isPartial() {
-        return partial;
-    }
-
-    public void setPartial(boolean partial) {
-        this.partial = partial;
-    }
-
-    public Result[] getResults() {
-        return results;
-    }
-
-    public void setResults(Result[] results) {
-        this.results = results;
-    }
-
     public String toString() {
         String s = "";
         for (Result result : results) {
@@ -62,6 +49,8 @@ public class WotLookup {
         return s;
     }
 
+    @Data
+    @FieldNameConstants
     public static class Result implements Serializable {
 
         private static final long serialVersionUID = -39452685440482106L;
@@ -70,33 +59,16 @@ public class WotLookup {
         private Uid[] uids;
         private SignedSignature[] signed;
 
-        public String getPubkey() {
-            return pubkey;
-        }
-
-        public void setPubkey(String pubkey) {
-            this.pubkey = pubkey;
-        }
-
-        public Uid[] getUids() {
-            return uids;
-        }
-
-        public void setUids(Uid[] uids) {
-            this.uids = uids;
-        }
-
-        public SignedSignature[] getSigned() {
-            return signed;
-        }
-
-        public void setSigned(SignedSignature[] signed) {
-            this.signed = signed;
-        }
     }
 
+    @Data
+    @FieldNameConstants
     public static class Uid {
 
+        public interface JsonFields {
+            String REVOCATION_SIG="revocation_sig";
+            String REVOKED_ON="revoked_on";
+        }
         private String uid;
         private Meta meta;
         private String self;
@@ -105,106 +77,65 @@ public class WotLookup {
         private String revocationSig;
         private OtherSignature[] others;
 
-        public Uid(){
-
-        }
-
-        public String getUid() {
-            return uid;
-        }
-
-        public void setUid(String uid) {
-            this.uid = uid;
-        }
 
-        public Meta getMeta() {
-            return meta;
-        }
-
-        public void setMeta(Meta meta) {
-            this.meta = meta;
-        }
-
-        public String getSelf() {
-            return self;
-        }
-
-        public void setSelf(String self) {
-            this.self = self;
-        }
-
-        public OtherSignature[] getOthers() {
-            return others;
-        }
-
-        public void setOthers(OtherSignature[] others) {
-            this.others = others;
-        }
-
-        public Boolean getRevoked() {
-            return revoked;
-        }
-
-        public void setRevoked(Boolean revoked) {
-            this.revoked = revoked;
-        }
-
-        @JsonGetter("revocation_sig")
+        @JsonGetter(JsonFields.REVOCATION_SIG)
         public String getRevocationSig() {
             return revocationSig;
         }
 
-        @JsonSetter("revocation_sig")
+        @JsonSetter(JsonFields.REVOCATION_SIG)
         public void setRevocationSig(String revocationSig) {
             this.revocationSig = revocationSig;
         }
 
-        @JsonGetter("revoked_on")
+        @JsonGetter(JsonFields.REVOKED_ON)
         public Long getRevokedOn() {
             return revokedOn;
         }
 
-        @JsonSetter("revoked_on")
+        @JsonSetter(JsonFields.REVOKED_ON)
         public void setRevokedOn(Long revokedOn) {
             this.revokedOn = revokedOn;
         }
     }
 
-
+    @Data
+    @FieldNameConstants
     public static class Meta implements Serializable {
+
+        public interface JsonFields {
+            String BLOCK_HASH="block_hash";
+            String BLOCK_NUMBER="block_number";
+        }
+
         private String timestamp;
         private String blockHash;
         private Long blockNumber;
 
-        public String getTimestamp() {
-            return timestamp;
-        }
-
-        public void setTimestamp(String timestamp) {
-            this.timestamp = timestamp;
-        }
 
-        @JsonGetter("block_hash")
+        @JsonGetter(JsonFields.BLOCK_HASH)
         public String getBlockHash() {
             return blockHash;
         }
 
-        @JsonSetter("block_hash")
+        @JsonSetter(JsonFields.BLOCK_HASH)
         public void setBlockHash(String blockHash) {
             this.blockHash = blockHash;
         }
-        @JsonGetter("block_number")
+        @JsonGetter(JsonFields.BLOCK_NUMBER)
         public Long getBlockNumber() {
             return blockNumber;
         }
 
-        @JsonSetter("block_number")
+        @JsonSetter(JsonFields.BLOCK_NUMBER)
         public void setBlockNumberH(Long blockNumber) {
             this.blockNumber = blockNumber;
         }
 
     }
 
+    @Data
+    @FieldNameConstants
     public static class OtherSignature {
 
         private String pubkey;
@@ -213,60 +144,14 @@ public class WotLookup {
         private String[] uids;
         private boolean isMember;
         private boolean wasMember;
-
-        public String getPubkey() {
-            return pubkey;
-        }
-
-        public void setPubkey(String pubkey) {
-            this.pubkey = pubkey;
-        }
-
-        public Meta getMeta() {
-            return meta;
-        }
-
-        public void setMeta(Meta meta) {
-            this.meta = meta;
-        }
-
-        public String getSignature() {
-            return signature;
-        }
-
-        public void setSignature(String signature) {
-            this.signature = signature;
-        }
-
-        public String[] getUids() {
-            return uids;
-        }
-
-        public void setUids(String[] uids) {
-            this.uids = uids;
-        }
-
-        @JsonGetter("isMember")
-        public boolean isMember() {
-            return isMember;
-        }
-
-        @JsonSetter("isMember")
-        public void setMember(boolean member) {
-            isMember = member;
-        }
-
-        @JsonGetter("wasMember")
-        public boolean wasMember() {
-            return wasMember;
-        }
-
-        public void setWasMember(boolean wasMember) {
-            this.wasMember = wasMember;
-        }
     }
 
+    @Data
+    @FieldNameConstants
     public static class SignedSignature {
+        public interface JsonFields {
+            String CERT_TIME="cert_time";
+        }
 
         private String uid;
         private String pubkey;
@@ -276,85 +161,33 @@ public class WotLookup {
         private boolean isMember;
         private boolean wasMember;
 
-        public String getUid() {
-            return uid;
-        }
-
-        public void setUid(String uid) {
-            this.uid = uid;
-        }
-
-        public String getPubkey() {
-            return pubkey;
-        }
-
-        public void setPubkey(String pubkey) {
-            this.pubkey = pubkey;
-        }
-
-        public Meta getMeta() {
-            return meta;
-        }
-
-        public void setMeta(Meta meta) {
-            this.meta = meta;
-        }
-
-        public String getSignature() {
-            return signature;
-        }
-
-        public void setSignature(String signature) {
-            this.signature = signature;
-        }
-
-        @JsonGetter("isMember")
-        public boolean isMember() {
-            return isMember;
-        }
-
-        public void setIsMember(boolean isMember) {
-            this.isMember = isMember;
-        }
-
-        @JsonGetter("wasMember")
-        public boolean wasMember() {
-            return wasMember;
-        }
-
-        public void setWasMember(boolean wasMember) {
-            this.wasMember = wasMember;
-        }
-
-        @JsonGetter("cert_time")
+        @JsonGetter(JsonFields.CERT_TIME)
         public CertTime getCerTime() {
             return cerTime;
         }
 
-        @JsonSetter("cert_time")
+        @JsonSetter(JsonFields.CERT_TIME)
         public void setCerTime(CertTime cerTime) {
             this.cerTime = cerTime;
         }
     }
 
+    @Data
+    @FieldNameConstants
     public static class CertTime implements Serializable {
-        private Long block;
-        private String blockHash;
-
-        public Long getBlock() {
-            return block;
+        public interface JsonFields {
+            String BLOCK_HASH="block_hash";
         }
 
-        public void setBlock(Long block) {
-            this.block = block;
-        }
+        private Long block;
+        private String blockHash;
 
-        @JsonGetter("block_hash")
+        @JsonGetter(JsonFields.BLOCK_HASH)
         public String getBlockHash() {
             return blockHash;
         }
 
-        @JsonSetter("block_hash")
+        @JsonSetter(JsonFields.BLOCK_HASH)
         public void setBlockHash(String blockHash) {
             this.blockHash = blockHash;
         }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMembership.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMembership.java
index 814fa61ffbd0d83d4801e788e1956fef563ed255..918e3a3da0855360dd02ff99b6b8bf65401f0983 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMembership.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMembership.java
@@ -22,20 +22,16 @@ package org.duniter.core.client.model.bma;
  * #L%
  */
 
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
+
 import java.io.Serializable;
 
+@Data
+@FieldNameConstants
 public class WotPendingMembership implements Serializable {
-		private static final long serialVersionUID = 1L;
-
 
-	public static final String PROPERTY_PUBKEY = "pubkey";
-	public static final String PROPERTY_UID = "uid";
-	public static final String PROPERTY_VERSION = "version";
-	public static final String PROPERTY_CURRENCY = "currency";
-	public static final String PROPERTY_MEMBERSHIP = "membership";
-	public static final String PROPERTY_BLOCK_NUMBER = "blockNumber";
-	public static final String PROPERTY_BLOCK_HASH = "blockHash";
-	public static final String PROPERTY_WRITTEN = "written";
+	private static final long serialVersionUID = 1L;
 
 	private String pubkey;
 	private String uid;
@@ -46,54 +42,5 @@ public class WotPendingMembership implements Serializable {
 	private String blockHash;
 	private Boolean written;
 
-	public String getPubkey() {
-		return pubkey;
-	}
-	public void setPubkey(String pubkey) {
-		this.pubkey = pubkey;
-	}
-	public String getUid() {
-		return uid;
-	}
-	public void setUid(String uid) {
-		this.uid = uid;
-	}
-	public String getVersion() {
-		return version;
-	}
-	public void setVersion(String version) {
-		this.version = version;
-	}
-	public String getCurrency() {
-		return currency;
-	}
-	public void setCurrency(String currency) {
-		this.currency = currency;
-	}
-	public String getMembership() {
-		return membership;
-	}
-	public void setMembership(String membership) {
-		this.membership = membership;
-	}
-	public long getBlockNumber() {
-		return blockNumber;
-	}
-	public void setBlockNumber(Integer blockNumber) {
-		this.blockNumber = blockNumber;
-	}
-	public String getBlockHash() {
-		return blockHash;
-	}
-	public void setBlockHash(String blockHash) {
-		this.blockHash = blockHash;
-	}
-
-	public Boolean getWritten() {
-		return written;
-	}
 
-	public void setWritten(Boolean written) {
-		this.written = written;
-	}
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMemberships.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMemberships.java
index 55c677e93357fadef53cf12d866acac7baf1361e..79a0eb1542139eb28f89721eb19e32de0f0055da 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMemberships.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotPendingMemberships.java
@@ -22,15 +22,16 @@ package org.duniter.core.client.model.bma;
  * #L%
  */
 
-import org.duniter.core.client.model.BaseIdentity;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 
-public class WotPendingMemberships extends BaseIdentity {
+import java.io.Serializable;
+
+@Data
+@FieldNameConstants
+public class WotPendingMemberships implements Serializable {
 	private static final long serialVersionUID = -5631089862725952431L;
 
 	private WotPendingMembership[] memberships;
 
-	public WotPendingMembership[] getMemberships() {
-		return memberships;
-	}
-
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirements.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirements.java
index 5aaedf5b9b01e01079d030eebc3bafb7791276cf..45f2bb90ec5b7ffe7c5fa245313c99e60fbf85a8 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirements.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirements.java
@@ -24,9 +24,13 @@ package org.duniter.core.client.model.bma;
 
 import com.fasterxml.jackson.annotation.JsonGetter;
 import com.fasterxml.jackson.annotation.JsonSetter;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 
 import java.io.Serializable;
 
+@Data
+@FieldNameConstants
 public class WotRequirements implements Serializable {
 	private static final long serialVersionUID = 1L;
 
@@ -42,163 +46,21 @@ public class WotRequirements implements Serializable {
 	private Boolean isSentry;
 	private Boolean wasMember;
 
-
 	private Certification[] certifications;
 
-	public String getPubkey() {
-		return pubkey;
-	}
-
-	public void setPubkey(String pubkey) {
-		this.pubkey = pubkey;
-	}
-
-	public String getUid() {
-		return uid;
-	}
-
-	public void setUid(String uid) {
-		this.uid = uid;
-	}
-
-	public String getSig() {
-		return sig;
-	}
-
-	public void setSig(String sig) {
-		this.sig = sig;
-	}
-
-	public Meta getMeta() {
-		return meta;
-	}
-
-	public void setMeta(Meta meta) {
-		this.meta = meta;
-	}
-
-	public String getRevocation_sig() {
-		return revocation_sig;
-	}
-
-	public void setRevocation_sig(String revocation_sig) {
-		this.revocation_sig = revocation_sig;
-	}
-
-	public Boolean getRevoked() {
-		return revoked;
-	}
-
-	public void setRevoked(Boolean revoked) {
-		this.revoked = revoked;
-	}
-
-	public Long getRevoked_on() {
-		return revoked_on;
-	}
-
-	public void setRevoked_on(Long revoked_on) {
-		this.revoked_on = revoked_on;
-	}
-
-	public Boolean getExpired() {
-		return expired;
-	}
-
-	public void setExpired(Boolean expired) {
-		this.expired = expired;
-	}
-
-	public Boolean getOutdistanced() {
-		return outdistanced;
-	}
-
-	public void setOutdistanced(Boolean outdistanced) {
-		this.outdistanced = outdistanced;
-	}
-
-	public Boolean getIsSentry() {
-		return isSentry;
-	}
-
-	public void setIsSentry(Boolean sentry) {
-		isSentry = sentry;
-	}
-
-	public Boolean getWasMember() {
-		return wasMember;
-	}
-
-	public void setWasMember(Boolean wasMember) {
-		this.wasMember = wasMember;
-	}
-
-
-	public Certification[] getCertifications() {
-		return certifications;
-	}
-
-	public void setCertifications(Certification[] certifications) {
-		this.certifications = certifications;
-	}
-
+	@Data
+	@FieldNameConstants
 	public static class Meta implements Serializable {
 		private String timestamp;
-
-		public String getTimestamp() {
-			return timestamp;
-		}
-
-		public void setTimestamp(String timestamp) {
-			this.timestamp = timestamp;
-		}
 	}
 
+	@Data
+	@FieldNameConstants
 	public static class Certification implements Serializable {
 		private long timestamp;
 		private String from;
 		private String to;
 		private String sig;
 		private long expiresIn;
-
-		public long getTimestamp() {
-			return timestamp;
-		}
-
-		public void setTimestamp(long timestamp) {
-			this.timestamp = timestamp;
-		}
-
-		public String getFrom() {
-			return from;
-		}
-
-		public void setFrom(String from) {
-			this.from = from;
-		}
-
-		public String getTo() {
-			return to;
-		}
-
-		public void setTo(String to) {
-			this.to = to;
-		}
-
-		public String getSig() {
-			return sig;
-		}
-
-		public void setSig(String sig) {
-			this.sig = sig;
-		}
-
-		public long getExpiresIn() {
-			return expiresIn;
-		}
-
-		public void setExpiresIn(long expiresIn) {
-			this.expiresIn = expiresIn;
-		}
 	}
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirementsResponse.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirementsResponse.java
index cb6bb7344a21ee3a9d9ca53460c108fb55c1a8ab..3fbcc01aa8158b4d27ea77a2ff5b9c087cb6c398 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirementsResponse.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/WotRequirementsResponse.java
@@ -22,15 +22,14 @@ package org.duniter.core.client.model.bma;
  * #L%
  */
 
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 import org.duniter.core.client.model.BaseIdentity;
 
+@Data
+@FieldNameConstants
 public class WotRequirementsResponse extends BaseIdentity {
 	private static final long serialVersionUID = -5631089862725952141L;
 
 	private WotRequirements[] identities;
-
-	public WotRequirements[] getIdentities() {
-		return identities;
-	}
-
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Ws2pHead.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Ws2pHead.java
index 0813f9327129efe1a71c1e6c221dc6aff7bc7225..f481a325708c847f6a38079aab05a78901867093 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Ws2pHead.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Ws2pHead.java
@@ -24,36 +24,18 @@ package org.duniter.core.client.model.bma;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.google.common.base.Joiner;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 
 import java.io.Serializable;
 
 /**
  * Created by blavenie on 22/01/19.
  */
+@Data
+@FieldNameConstants
 public class Ws2pHead implements Serializable {
 
-
-    public class AccessConfig {
-        public boolean useTor;
-        private String mode;
-
-        public boolean isUseTor() {
-            return useTor;
-        }
-
-        public void setUseTor(boolean useTor) {
-            this.useTor = useTor;
-        }
-
-        public String getMode() {
-            return mode;
-        }
-
-        public void setMode(String mode) {
-            this.mode = mode;
-        }
-    }
-
     public Integer version;
     public String pubkey;
     public String block;
@@ -67,84 +49,12 @@ public class Ws2pHead implements Serializable {
     public AccessConfig privateConfig = new AccessConfig();
     public AccessConfig publicConfig = new AccessConfig();
 
-    public Integer getVersion() {
-        return version;
-    }
-
-    public void setVersion(Integer version) {
-        this.version = version;
-    }
-
-    public String getPubkey() {
-        return pubkey;
-    }
-
-    public void setPubkey(String pubkey) {
-        this.pubkey = pubkey;
-    }
-
-    public String getBlock() {
-        return block;
-    }
-
-    public void setBlock(String block) {
-        this.block = block;
-    }
-
-    public String getWs2pid() {
-        return ws2pid;
-    }
-
-    public void setWs2pid(String ws2pid) {
-        this.ws2pid = ws2pid;
-    }
-
-    public String getSoftware() {
-        return software;
-    }
-
-    public void setSoftware(String software) {
-        this.software = software;
-    }
-
-    public String getSoftwareVersion() {
-        return softwareVersion;
-    }
-
-    public void setSoftwareVersion(String softwareVersion) {
-        this.softwareVersion = softwareVersion;
-    }
-
-    public String getPowPrefix() {
-        return powPrefix;
-    }
-
-    public void setPowPrefix(String powPrefix) {
-        this.powPrefix = powPrefix;
-    }
-
-    public AccessConfig getPrivateConfig() {
-        return privateConfig;
-    }
-
-    public void setPrivateConfig(AccessConfig privateConfig) {
-        this.privateConfig = privateConfig;
-    }
-
-    public AccessConfig getPublicConfig() {
-        return publicConfig;
-    }
 
-    public void setPublicConfig(AccessConfig publicConfig) {
-        this.publicConfig = publicConfig;
-    }
-
-    public String getSignature() {
-        return signature;
-    }
-
-    public void setSignature(String signature) {
-        this.signature = signature;
+    @Data
+    @FieldNameConstants
+    public static class AccessConfig {
+        public boolean useTor;
+        private String mode;
     }
 
     @Override
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Currency.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Currency.java
index a6aa5d6d31e55f145fabdec981f452a5ec2c0783..8019418b45b473dd3ba90af9aa2a94df2c2d5bd5 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Currency.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Currency.java
@@ -25,10 +25,8 @@ package org.duniter.core.client.model.local;
 import java.io.Serializable;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.*;
+import lombok.experimental.FieldNameConstants;
 import org.duniter.core.client.model.bma.BlockchainParameters;
 
 /**
@@ -36,9 +34,13 @@ import org.duniter.core.client.model.bma.BlockchainParameters;
  */
 @Data
 @Builder
+@FieldNameConstants
 @NoArgsConstructor
 @AllArgsConstructor
 public class Currency implements ICurrency {
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class Fields {}
+
     private String id;
     private BlockchainParameters parameters;
     private String firstBlockSignature;
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Identity.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Identity.java
index 5588633cabb4b09d2e471efea4893e100eeeb41e..fed22a920ce2deeff4b545aad1a0d2909b89f68d 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Identity.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Identity.java
@@ -24,12 +24,19 @@ package org.duniter.core.client.model.local;
 
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.AccessLevel;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.FieldNameConstants;
 import org.duniter.core.client.model.BaseIdentity;
 
 @Data
+@FieldNameConstants
 public class Identity extends BaseIdentity {
 
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class Fields extends BaseIdentity.Fields {}
+
     private String currency;
 
     // The timestamp value of the signature date (a BLOCK_UID)
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Member.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Member.java
index f462d71b74d1e9588e7c8f45764e544c28d6d1c9..fc416e154f0d3f5e6dcb8150a9dd74737c8071de 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Member.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Member.java
@@ -24,10 +24,17 @@ package org.duniter.core.client.model.local;
 
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+import lombok.experimental.FieldNameConstants;
+import org.duniter.core.client.model.BaseIdentity;
 import org.duniter.core.model.IEntity;
 
+@Data
+@FieldNameConstants
 public class Member extends Identity implements IEntity<String> {
 
+    public static class Fields extends Identity.Fields {}
+
     private static final long serialVersionUID = 8448049949323699700L;
 
     @JsonIgnore
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peer.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peer.java
index a6fdf0595826d1f1555a7735fbdac1049a95d744..bb1e7d7bcfb37741415824438c47e1f1b8d8f9c6 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peer.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/local/Peer.java
@@ -26,6 +26,7 @@ package org.duniter.core.client.model.local;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.google.common.base.Preconditions;
 import lombok.Data;
+import lombok.experimental.FieldNameConstants;
 import org.apache.commons.lang3.StringUtils;
 import org.duniter.core.client.model.bma.EndpointApi;
 import org.duniter.core.client.model.bma.NetworkPeering;
@@ -35,6 +36,7 @@ import org.duniter.core.util.http.InetAddressUtils;
 import java.util.StringJoiner;
 
 @Data
+@FieldNameConstants
 public class Peer implements IEntity<String> {
 
     public static Builder builder() {
@@ -309,7 +311,7 @@ public class Peer implements IEntity<String> {
         // else (if define) use dns
         // else (if define) use ipv6
         host = ((port == 443 || useSsl) && dns != null) ? dns :
-                (ipv4 != null && InetAddressUtils.isNotLocalIPv4Address(ipv4) ? ipv4 :
+                (ipv4 != null && InetAddressUtils.isInternetIPv4Address(ipv4) ? ipv4 :
                     (dns != null ? dns :
                         (ipv6 != null ? "[" + ipv6 + "]" : "")));
         // Use local IPv4 if no other host found
@@ -483,12 +485,9 @@ public class Peer implements IEntity<String> {
         ERROR
     }
 
+    @Data
+    @FieldNameConstants
     public static class Peering {
-        public static final String PROPERTY_VERSION = "version";
-        public static final String PROPERTY_SIGNATURE = "signature";
-        public static final String PROPERTY_BLOCK_NUMBER = "blockNumber";
-        public static final String PROPERTY_BLOCK_HASH = "blockHash";
-        public static final String PROPERTY_RAW = "raw";
 
         private Integer version;
         private String signature;
@@ -496,58 +495,11 @@ public class Peer implements IEntity<String> {
         private String blockHash;
         private String raw;
 
-        public Integer getVersion() {
-            return version;
-        }
-
-        public void setVersion(Integer version) {
-            this.version = version;
-        }
-
-        public String getSignature() {
-            return signature;
-        }
-
-        public void setSignature(String signature) {
-            this.signature = signature;
-        }
-
-        public Integer getBlockNumber() {
-            return blockNumber;
-        }
-
-        public void setBlockNumber(Integer blockNumber) {
-            this.blockNumber = blockNumber;
-        }
-
-        public String getBlockHash() {
-            return blockHash;
-        }
-
-        public void setBlockHash(String blockHash) {
-            this.blockHash = blockHash;
-        }
-
-        /**
-         * The raw peering document (unsigned)
-         * @return
-         */
-        public String getRaw() {
-            return raw;
-        }
-
-        public void setRaw(String raw) {
-            this.raw = raw;
-        }
     }
 
+    @Data
+    @FieldNameConstants
     public static class Stats {
-        public static final String PROPERTY_SOFTWARE = "software";
-        public static final String PROPERTY_VERSION = "version";
-        public static final String PROPERTY_STATUS = "status";
-        public static final String PROPERTY_UID = "uid";
-        public static final String PROPERTY_LAST_UP_TIME = "lastUpTime";
-        public static final String PROPERTY_FIRST_DOWN_TIME = "firstDownTime";
 
         private String software;
         private String version;
@@ -564,133 +516,12 @@ public class Peer implements IEntity<String> {
         private Long lastUpTime;
         private Long firstDownTime;
 
-        public Stats() {
-
-        }
-
-        public PeerStatus getStatus() {
-            return status;
-        }
 
         @JsonIgnore
         public boolean isReacheable() {
             return status != null && status == PeerStatus.UP;
         }
 
-        public void setStatus(PeerStatus status) {
-            this.status = status;
-        }
-
-        public String getError() {
-            return error;
-        }
-
-        public void setError(String error) {
-            this.error = error;
-        }
-
-        public String getSoftware() {
-            return software;
-        }
-
-        public void setSoftware(String software) {
-            this.software = software;
-        }
-
-        public String getVersion() {
-            return version;
-        }
-
-        public void setVersion(String version) {
-            this.version = version;
-        }
-
-        public Integer getBlockNumber() {
-            return blockNumber;
-        }
 
-        public void setBlockNumber(Integer blockNumber) {
-            this.blockNumber = blockNumber;
-        }
-
-        public String getBlockHash() {
-            return blockHash;
-        }
-
-        public void setBlockHash(String blockHash) {
-            this.blockHash = blockHash;
-        }
-
-        public Long getMedianTime() {
-            return medianTime;
-        }
-
-        public void setMedianTime(Long medianTime) {
-            this.medianTime = medianTime;
-        }
-
-        public boolean isMainConsensus() {
-            return isMainConsensus;
-        }
-
-        public void setMainConsensus(boolean mainConsensus) {
-            this.isMainConsensus = mainConsensus;
-        }
-
-        public boolean isForkConsensus() {
-            return isForkConsensus;
-        }
-
-        public void setForkConsensus(boolean forkConsensus) {
-            this.isForkConsensus = forkConsensus;
-        }
-
-        public Double getConsensusPct() {
-            return consensusPct;
-        }
-
-        public void setConsensusPct(Double consensusPct) {
-            this.consensusPct = consensusPct;
-        }
-
-        public Integer getHardshipLevel() {
-            return hardshipLevel;
-        }
-
-        public void setHardshipLevel(Integer hardshipLevel) {
-            this.hardshipLevel = hardshipLevel;
-        }
-
-        public String getUid() {
-            return uid;
-        }
-
-        public void setUid(String uid) {
-            this.uid = uid;
-        }
-
-        /**
-         * Last time the peer was UP (in second)
-         * @return
-         */
-        public Long getLastUpTime() {
-            return lastUpTime;
-        }
-
-        public void setLastUpTime(Long lastUpTime) {
-            this.lastUpTime = lastUpTime;
-        }
-
-        /**
-         * First time the peer was DOWN (in second)
-         * @return
-         */
-        public Long getFirstDownTime() {
-            return firstDownTime;
-        }
-
-        public void setFirstDownTime(Long firstDownTime) {
-            this.firstDownTime = firstDownTime;
-        }
     }
 }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/ServiceLocator.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/ServiceLocator.java
index c4d2c22db26f9785570218c8b68803a669d7d840..79258e8e985e401e4ce7edccf89f32395f1b85de 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/ServiceLocator.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/ServiceLocator.java
@@ -23,6 +23,7 @@ package org.duniter.core.client.service;
  */
 
 
+import lombok.extern.slf4j.Slf4j;
 import org.duniter.core.beans.Bean;
 import org.duniter.core.beans.BeanFactory;
 import org.duniter.core.client.repositories.PeerRepository;
@@ -43,12 +44,10 @@ import org.slf4j.LoggerFactory;
 import java.io.Closeable;
 import java.io.IOException;
 
+@Slf4j
 public class ServiceLocator implements Closeable {
 
 
-    /* Logger */
-    private static final Logger log = LoggerFactory.getLogger(ServiceLocator.class);
-
     /**
      * The shared instance of this ServiceLocator.
      */
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java
index e6d48bb839ac93950ec375578900d35292ef52dc..41fa40d60e273d92b53a2f2985e8944c3d3120d5 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java
@@ -30,6 +30,8 @@ import org.duniter.core.client.model.local.Peer;
 import org.duniter.core.client.model.local.Wallet;
 import org.duniter.core.client.service.exception.InsufficientCreditException;
 
+import java.util.Map;
+
 
 public interface TransactionRemoteService extends Service {
 
@@ -46,6 +48,18 @@ public interface TransactionRemoteService extends Service {
     String transfer(Peer peer, Wallet wallet, String destPubKey, long amount,
                     String comment) throws InsufficientCreditException;
 
+    /**
+     * Transfer TX to the given peer, or if null to currency's default peer
+     * @param peer
+     * @param wallet
+     * @param mapPubkeyAmount
+     * @param comment
+     * @return
+     * @throws InsufficientCreditException
+     */
+    String transfer(Peer peer, Wallet wallet, Map<String,Long> mapPubkeyAmount,
+                    String comment) throws InsufficientCreditException;
+
     /**
      * Same, using the default currency's peer
      * @param wallet
@@ -58,6 +72,8 @@ public interface TransactionRemoteService extends Service {
 	String transfer(Wallet wallet, String destPubKey, long amount,
                     String comment) throws InsufficientCreditException;
 
+    String transfer(Wallet wallet, Map<String,Long> mapPubkeyAmount, String comment) throws InsufficientCreditException;
+
     TxSource getSources(Peer peer, String pubKey);
 	TxSource getSources(String currencyId, String pubKey);
 
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java
index d97b4d455116a2f7bf5e1872057db4e9bd295620..f59f74a443b129812caa580ac3fa55d7930244d4 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java
@@ -48,7 +48,9 @@ import org.slf4j.LoggerFactory;
 
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implements TransactionRemoteService {
@@ -65,6 +67,7 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 
 
 	private CryptoService cryptoService;
+	private BlockchainRemoteService blockchainService;
 
 	public TransactionRemoteServiceImpl() {
 		super();
@@ -74,6 +77,7 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 	public void afterPropertiesSet() {
 		super.afterPropertiesSet();
         cryptoService = ServiceLocator.instance().getCryptoService();
+		blockchainService = ServiceLocator.instance().getBlockchainRemoteService();
 	}
 
 
@@ -85,20 +89,34 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 		return transfer(null, wallet, destPubKey, amount, comment);
 	}
 
+	@Override
+	public String transfer(Wallet wallet, Map<String, Long> mapPubkeyAmount, String comment) throws InsufficientCreditException {
+		return transfer(null, wallet, mapPubkeyAmount, comment);
+	}
+
 	public String transfer(Peer peer, Wallet wallet, String destPubKey, long amount,
 						   String comment) throws InsufficientCreditException {
+		Map<String,Long> mapPubkeyAmount = new HashMap<String,Long>();
+		mapPubkeyAmount.put(destPubKey,amount);
+		return transfer(peer,wallet,mapPubkeyAmount,comment);
+	}
+
+	public String transfer(Peer peer, Wallet wallet, Map<String,Long> mapPubkeyAmount,
+					String comment) throws InsufficientCreditException{
+
 		Preconditions.checkNotNull(wallet);
 		Preconditions.checkArgument(peer != null || wallet.getCurrency() != null);
 
 		peer = peer != null ? peer : peerService.getActivePeerByCurrency(wallet.getCurrency());
+
 		// Get current block
-		BlockchainBlock currentBlock = httpService.executeRequest(peer, BlockchainRemoteServiceImpl.URL_BLOCK_CURRENT, BlockchainBlock.class);
+		BlockchainBlock currentBlock = blockchainService.getCurrentBlock(peer, true);
 
 		// http post /tx/process
 		HttpPost httpPost = new HttpPost(httpService.getPath(peer, URL_TX_PROCESS));
 
 		// compute transaction
-		String transaction = getSignedTransaction(peer, wallet, currentBlock, destPubKey, 0, amount,
+		String transaction = getSignedTransaction(peer, wallet, currentBlock, mapPubkeyAmount , 0,
 				comment);
 
 		if (log.isDebugEnabled()) {
@@ -220,9 +238,8 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 	protected String getSignedTransaction(Peer peer,
 									   Wallet wallet,
 									   BlockchainBlock block,
-									   String destPubKey,
+									   Map<String,Long> mapPubkeyAmount,
 									   int locktime,
-									   long amount,
 									   String comment) throws InsufficientCreditException {
 		Preconditions.checkNotNull(wallet);
         Preconditions.checkArgument(StringUtils.isNotBlank(wallet.getCurrency()));
@@ -245,8 +262,8 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 		List<TxSource.Source> txInputs = new ArrayList<>();
 		List<TxOutput> txOutputs = new ArrayList<>();
 		computeTransactionInputsAndOuputs(block.getUnitbase(),
-				wallet.getPubKeyHash(), destPubKey,
-				sources, amount, txInputs, txOutputs);
+				wallet.getPubKeyHash(),mapPubkeyAmount,
+				sources, txInputs, txOutputs);
 
 		String transaction = getTransaction(wallet.getCurrency(),
 				block.getNumber(), block.getHash(),
@@ -363,9 +380,14 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 
 	public void computeTransactionInputsAndOuputs(int currentUnitBase,
 												  String srcPubKey,
-			String destPubKey, TxSource.Source[] sources, long amount,
+												  Map<String,Long> mapPubkeyAmount,
+												  TxSource.Source[] sources,
 			List<TxSource.Source> resultInputs, List<TxOutput> resultOutputs) throws InsufficientCreditException{
 
+		long amount =0;
+		for(String pubKey : mapPubkeyAmount.keySet()){
+			amount += mapPubkeyAmount.get(pubKey);
+		}
 		TxInputs inputs = new TxInputs();
 		inputs.amount = 0;
 		inputs.minBase = currentUnitBase;
@@ -402,18 +424,23 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 		long rest = amount;
 		int outputBase = inputs.maxBase;
 		long outputAmount;
-		while(rest > 0) {
-			outputAmount = truncBase(rest, outputBase);
-			rest -= outputAmount;
-			if (outputAmount > 0) {
-				outputAmount = inversePowBase(outputAmount, outputBase);
-				TxOutput output = new TxOutput();
-				output.setAmount(outputAmount);
-				output.setBase(outputBase);
-				output.setPubKey(destPubKey);
-				resultOutputs.add(output);
+		for(String destPubKey : mapPubkeyAmount.keySet()) {
+			rest = mapPubkeyAmount.get(destPubKey);
+			outputBase = inputs.maxBase;
+
+			while (rest > 0) {
+				outputAmount = truncBase(rest, outputBase);
+				rest -= outputAmount;
+				if (outputAmount > 0) {
+					outputAmount = inversePowBase(outputAmount, outputBase);
+					TxOutput output = new TxOutput();
+					output.setAmount(outputAmount);
+					output.setBase(outputBase);
+					output.setPubKey(destPubKey);
+					resultOutputs.add(output);
+				}
+				outputBase--;
 			}
-			outputBase--;
 		}
 		rest = inputs.amount - amount;
 		outputBase = inputs.maxBase;
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceImpl.java
index 8c03aecf9abdd592698e270202e029fee66bc761..1a5c320e84bee223b134bcc6d301e9ce36b6afb7 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceImpl.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceImpl.java
@@ -58,7 +58,7 @@ public class CurrencyPodRemoteServiceImpl extends BaseRemoteServiceImpl implemen
     public void afterPropertiesSet() {
         super.afterPropertiesSet();
         config = Configuration.instance();
-        peer = Peer.builder().host(config.getNodeElasticSearchHost()).port(config.getNodeElasticSearchPort()).build();
+        peer = Peer.builder().host(config.getCesiumPlusPodHost()).port(config.getCesiumPlusPodPort()).build();
     }
 
     @Override
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendService.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendService.java
index b07d3765d3838653458f74de5a059c7b6516be3b..8ebc362e615ffc2cb2c17575feda1740923429cd 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendService.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendService.java
@@ -23,11 +23,9 @@ package org.duniter.core.client.service.local;
  */
 
 import org.duniter.core.beans.Service;
-import org.duniter.core.client.model.local.Currency;
 
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 
 /**
  * Created by eis on 07/02/15.
@@ -51,7 +49,7 @@ public interface DividendService extends Service {
      * Return a map of UD (key=blockNumber, value=amount)
      * @return
      */
-    Map<Integer, Long> findAllUdByCurrency(String currency);
+    Map<Integer, Long> findAllDividendsByCurrency(String currency);
 
     /**
      * Update the last currency dividend
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendServiceImpl.java
index 55f24b1d59c8ab84bf068e134a563f821795f105..9766d987487b2a22290e15effcad2d226dd2a64d 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendServiceImpl.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/DividendServiceImpl.java
@@ -140,14 +140,14 @@ public class DividendServiceImpl implements DividendService, InitializingBean {
         }
 
         // Return the full list
-        return findAllUdByCurrency(currency);
+        return findAllDividendsByCurrency(currency);
     }
 
     /**
      * Return a map of UD (key=blockNumber, value=amount)
      * @return
      */
-    public Map<Integer, Long> findAllUdByCurrency(String currency) {
+    public Map<Integer, Long> findAllDividendsByCurrency(String currency) {
         return Beans.getStream(dividendRepository.findAllByCurrency(currency))
                 .collect(Collectors.toMap(Dividend::getNumber, Dividend::getDividend));
     }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/PeerServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/PeerServiceImpl.java
index 2e35e8b5e5252e944aa4851b255223ef27e60b51..6d28b170c0f9f43c1c17109163a22f2153b54325 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/PeerServiceImpl.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/PeerServiceImpl.java
@@ -91,7 +91,6 @@ public class PeerServiceImpl implements PeerService, InitializingBean {
         Preconditions.checkArgument(StringUtils.isNotBlank(peer.getHost()));
         Preconditions.checkArgument(peer.getPort() >= 0);
 
-
         peer.setHash(Peers.computeHash(peer, cryptoService));
 
         Peer result = peerRepository.save(peer);
diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/TestResource.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/TestResource.java
index a237cb1f7d2931f8002d64edb3ecfe3818394f9a..f3d266dd8cc7242ce4b6afd40b8ddac6376e6a32 100644
--- a/duniter4j-core-client/src/test/java/org/duniter/core/client/TestResource.java
+++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/TestResource.java
@@ -24,6 +24,7 @@ package org.duniter.core.client;
 
 
 import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
 import org.duniter.core.client.config.Configuration;
 import org.duniter.core.client.config.ConfigurationOption;
 import org.duniter.core.client.model.local.Peer;
@@ -41,9 +42,9 @@ import java.io.IOException;
 import java.util.List;
 import java.util.Locale;
 
+@Slf4j
 public class TestResource extends org.duniter.core.test.TestResource {
 
-    private static final Logger log = LoggerFactory.getLogger(TestResource.class);
 
     public static TestResource create() {
         return new TestResource(null);
@@ -102,7 +103,7 @@ public class TestResource extends org.duniter.core.test.TestResource {
     /* -- -- */
 
     /**
-     * Convenience methods that could be override to initialize other configuration
+     * Convenience methods that could be overridden to initialize other configuration
      *
      * @param configFilename
      */
diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java
index bd51f576aa56b52e6516dab182cad373502d5bfe..e0fe70181825b12c18417638751b7d4f60884162 100644
--- a/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java
+++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java
@@ -114,6 +114,13 @@ public class EndpointsTest {
         Assert.assertNull(ep.id);
         Assert.assertNull(ep.path);
 
+        ep = Endpoints.parse("WS2P bb5e697f node.g1cotis.fr 20901 /").orElse(null);
+        Assert.assertNotNull(ep);
+        Assert.assertEquals(ep.api, "WS2P");
+        Assert.assertEquals("bb5e697f", ep.id);
+        Assert.assertEquals("/", ep.path);
+        Assert.assertEquals(new Integer(20901), ep.port);
+
         // Parse Invalid endpoints
 
         // This must failed (missing port)
@@ -124,6 +131,22 @@ public class EndpointsTest {
         ep = Endpoints.parse("WS2P R8t2sg7w g1.ambau.ovh 443").orElse(null);
         Assert.assertNull(ep);
 
+        // Parse invalid
+        String[] errorEndpoints = new String[]{
+            "WS2P 93.8.54.71 20910", // no id
+            "GVA 77.131.240.28 [2a02:8428:471:6701:cc3e:ef7a:ef19:81f] 30901 gva", // Bad ipV6 (character '[' not need)
+            "BMAS duniter.adn.life/bma/ 443", // Bad path position
+            "BMAS duniter.adn.life/bma 443",
+            "WS2P  duniter.vincentux.fr 443 /ws2p",
+            "WS2P 93.8.54.71 20910",
+            "BMAS cloudanua.ddns.net/bma 192.168.0.46 443",
+            "WS2P 9938ae63 cloudanua.ddns.net/bma 443 /ws2p"
+        };
+        for (String epStr: errorEndpoints) {
+            ep = Endpoints.parse(epStr).orElse(null);
+            Assert.assertNull(ep);
+        }
+
     }
 
 }
diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java
index d3e00fa5ce572aac30e9372be238c66ab164a921..f526632f73246601c3f845dfdd23471c555fabed 100644
--- a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java
+++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java
@@ -23,8 +23,12 @@ package org.duniter.core.client.service.bma;
  */
 
 
+import com.google.common.collect.ImmutableMap;
+import lombok.extern.slf4j.Slf4j;
 import org.duniter.core.client.TestResource;
 import org.duniter.core.client.config.Configuration;
+import org.duniter.core.client.model.bma.BlockchainBlock;
+import org.duniter.core.client.model.bma.BlockchainBlocks;
 import org.duniter.core.client.model.bma.TxSource;
 import org.duniter.core.client.model.local.Peer;
 import org.duniter.core.client.model.local.Wallet;
@@ -32,20 +36,20 @@ import org.duniter.core.client.service.ServiceLocator;
 import org.duniter.core.client.service.exception.InsufficientCreditException;
 import org.duniter.core.util.crypto.CryptoUtils;
 import org.junit.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+import java.util.Map;
 import java.util.Objects;
 
+@Slf4j
 public class TransactionRemoteServiceTest {
 
-	private static final Logger log = LoggerFactory.getLogger(TransactionRemoteServiceTest.class);
-
 	@ClassRule
 	public static final TestResource resource = TestResource.create();
 	
 	private TransactionRemoteService service;
-	
+
+	private int unitBase = 0;
+
 	@Before
 	public void setUp() {
 		service = ServiceLocator.instance().getTransactionRemoteService();
@@ -54,6 +58,12 @@ public class TransactionRemoteServiceTest {
 		Assume.assumeTrue(
 				"Invalid currencies in test fixtures",
 				Objects.equals(resource.getFixtures().getDefaultCurrency(), resource.getFixtures().getCurrency()));
+
+		// Get the current unit base
+		 BlockchainBlock currentBlock = ServiceLocator.instance().getBlockchainRemoteService()
+			.getCurrentBlock(resource.getFixtures().getDefaultCurrency());
+		 Assume.assumeNotNull(currentBlock);
+		this.unitBase = currentBlock.getUnitbase();
 	}
 
 	@Test
@@ -61,12 +71,30 @@ public class TransactionRemoteServiceTest {
 
 		try {
 			service.transfer(
-					createTestWallet(),
-					resource.getFixtures().getOtherUserPublicKey(),
-					1,
-					"my comments" + System.currentTimeMillis());
+				createTestWallet(),
+				resource.getFixtures().getOtherUserPublicKey(0),
+				BlockchainBlocks.powBase(1, unitBase),
+				"Unit test Duniter4j at " + System.currentTimeMillis());
+		} catch (InsufficientCreditException e) {
+			Assume.assumeNoException(String.format("No credit on the test wallet '%s'", resource.getFixtures().getUserPublicKey().substring(0,8)), e);
+		}
+	}
+
+	@Test
+	public void transferMulti() throws Exception {
+
+		Map<String, Long> destPubkeyAmount = ImmutableMap.<String, Long>builder()
+			.put(resource.getFixtures().getOtherUserPublicKey(0), BlockchainBlocks.powBase(1, unitBase))
+			.put(resource.getFixtures().getOtherUserPublicKey(1), BlockchainBlocks.powBase(2, unitBase))
+			.build();
+
+		try {
+			service.transfer(
+				createTestWallet(),
+				destPubkeyAmount,
+				"Unit test Duniter4j at " + System.currentTimeMillis());
 		} catch (InsufficientCreditException e) {
-			// OK continue
+			Assume.assumeNoException(String.format("No credit on the test wallet '%s'", resource.getFixtures().getUserPublicKey().substring(0,8)), e);
 		}
 	}
 	
diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceTest.java
index e80465989f4286160235ee1111840b959bef0e61..486e9669754af4f7dabb35c66bcfa1a3b421f995 100644
--- a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceTest.java
+++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/elasticsearch/CurrencyPodRemoteServiceTest.java
@@ -49,8 +49,8 @@ public class CurrencyPodRemoteServiceTest {
         // Make sure ES node is alive
         if (!service.isNodeAlive()) {
             log.warn(String.format("Unable to connect to elasticsearch node [%s:%s]. Skipping test.",
-                    config.getNodeElasticSearchHost(),
-                    config.getNodeElasticSearchPort()));
+                    config.getCesiumPlusPodHost(),
+                    config.getCesiumPlusPodPort()));
             Assume.assumeTrue(false);
         }
     }
diff --git a/duniter4j-core-shared/pom.xml b/duniter4j-core-shared/pom.xml
index 99e919fdc48763088d4453cde7ad69ad7b3ab3fb..2981c90a49665467abc327e7cd1a94885a80a95b 100644
--- a/duniter4j-core-shared/pom.xml
+++ b/duniter4j-core-shared/pom.xml
@@ -6,7 +6,7 @@
   <parent>
     <groupId>org.duniter</groupId>
     <artifactId>duniter4j</artifactId>
-    <version>1.4.1-SNAPSHOT</version>
+    <version>1.5.7-SNAPSHOT</version>
   </parent>
 
   <artifactId>duniter4j-core-shared</artifactId>
@@ -83,8 +83,8 @@
 
     </dependency>
     <dependency>
-      <groupId>javax.mail</groupId>
-      <artifactId>mail</artifactId>
+      <groupId>com.sun.mail</groupId>
+      <artifactId>jakarta.mail</artifactId>
     </dependency>
 
     <!-- Unit test -->
diff --git a/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java b/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java
index 37af62d89d21a1bc3e4afd3b72c640bbe609dd93..2a37194a4a64a9faf5066d73616ed5904f96eb85 100644
--- a/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java
+++ b/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java
@@ -85,9 +85,15 @@ public class TestFixtures {
      * Get a public key of another user, encode in base 58.
      * @return
      */
-    public String getOtherUserPublicKey() {
-    	// = kimamila
-        return "5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of";
+    public String getOtherUserPublicKey(int index) {
+        switch (index) {
+            case 0:
+                // = kimamila
+                return "5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of";
+            default:
+                // TODO
+                return "5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of";
+        }
     }
 
 }
diff --git a/duniter4j-core-shared/src/main/java/org/duniter/core/util/http/InetAddressUtils.java b/duniter4j-core-shared/src/main/java/org/duniter/core/util/http/InetAddressUtils.java
index 184eb8d52f0e00702dcd401ebfdcd13065c64027..1a31e0cc75fd1c76d3ddd57338e59b64da384d48 100644
--- a/duniter4j-core-shared/src/main/java/org/duniter/core/util/http/InetAddressUtils.java
+++ b/duniter4j-core-shared/src/main/java/org/duniter/core/util/http/InetAddressUtils.java
@@ -29,19 +29,11 @@ import java.util.regex.Pattern;
  */
 public class InetAddressUtils {
 
-    public static final Pattern LOCAL_IP_ADDRESS_PATTERN = Pattern.compile("^127[.]0[.]0.|192[.]168[.]|10[.]0[.]0[.]|172[.]16[.]");
+    public static final Pattern LOCAL_IP_ADDRESS_PATTERN = Pattern.compile("^127[.]0[.]0.");
 
-    private InetAddressUtils() {
-    }
-
-    public static boolean isNotLocalIPv4Address(String input) {
-        return org.apache.http.conn.util.InetAddressUtils.isIPv4Address(input) &&
-                !LOCAL_IP_ADDRESS_PATTERN.matcher(input).find();
-    }
+    public static final Pattern INTRANET_ADDRESS_PATTERN = Pattern.compile("^127[.]0[.]0.|192[.]168[.]|10[.]0[.]0[.]|172[.]16[.]");
 
-    public static boolean isLocalIPv4Address(String input) {
-        return org.apache.http.conn.util.InetAddressUtils.isIPv4Address(input) &&
-                LOCAL_IP_ADDRESS_PATTERN.matcher(input).find();
+    private InetAddressUtils() {
     }
 
     public static boolean isIPv4Address(String input) {
@@ -52,11 +44,29 @@ public class InetAddressUtils {
         return org.apache.http.conn.util.InetAddressUtils.isIPv6Address(input);
     }
 
+    public static boolean isInternetIPv4Address(String input) {
+        return isIPv4Address(input) &&
+                !INTRANET_ADDRESS_PATTERN.matcher(input).find();
+    }
+
+    public static boolean isIntranetIPv4Address(String input) {
+        return isIPv4Address(input) && INTRANET_ADDRESS_PATTERN.matcher(input).find();
+    }
+
+
+    public static boolean isIntranetAddress(String input) {
+        return isIntranetIPv4Address(input) || "localhost".equalsIgnoreCase(input);
+    }
+
+    public static boolean isInternetAddress(String input) {
+        return isIPv6Address(input) || isInternetIPv4Address(input);
+    }
+
     public static boolean isLocalAddress(String input) {
-        return isLocalIPv4Address(input) || "localhost".equalsIgnoreCase(input);
+        return (isIPv4Address(input) && LOCAL_IP_ADDRESS_PATTERN.matcher(input).find()) || "localhost".equalsIgnoreCase(input);
     }
 
     public static boolean isNotLocalAddress(String input) {
-        return !isLocalAddress(input);
+        return isIPv6Address(input) || (isIPv4Address(input) && !LOCAL_IP_ADDRESS_PATTERN.matcher(input).find());
     }
 }
diff --git a/duniter4j-core-shared/src/test/java/org/duniter/core/util/http/InetAddressUtilsTest.java b/duniter4j-core-shared/src/test/java/org/duniter/core/util/http/InetAddressUtilsTest.java
index 4453e9917ece32de735bb8a99189987d9e6a5253..0ede067e330aaffea70a5f2212ba1223e5b2cc71 100644
--- a/duniter4j-core-shared/src/test/java/org/duniter/core/util/http/InetAddressUtilsTest.java
+++ b/duniter4j-core-shared/src/test/java/org/duniter/core/util/http/InetAddressUtilsTest.java
@@ -30,29 +30,80 @@ import org.junit.Test;
  */
 public class InetAddressUtilsTest {
 
+    @Test
+    public void isIPv4Address() {
+
+        boolean check = InetAddressUtils.isIPv4Address("192.168.0.254");
+        Assert.assertTrue(check);
+    }
+
     @Test
     public void isNotLocalIPv4Address() {
 
-        Assert.assertFalse(InetAddressUtils.isNotLocalIPv4Address("192.168.1.11"));
-        Assert.assertFalse(InetAddressUtils.isNotLocalIPv4Address("abc"));
+        Assert.assertFalse(InetAddressUtils.isInternetIPv4Address("192.168.1.11"));
+        Assert.assertFalse(InetAddressUtils.isInternetIPv4Address("abc"));
 
-        Assert.assertTrue(InetAddressUtils.isNotLocalIPv4Address("82.239.120.237"));
+        Assert.assertTrue(InetAddressUtils.isInternetIPv4Address("82.239.120.237"));
     }
 
     @Test
     public void isLocalIPv4Address() {
 
-        boolean check = InetAddressUtils.isLocalIPv4Address("192.168.1.11");
+        boolean check = InetAddressUtils.isIntranetIPv4Address("192.168.1.11");
         Assert.assertTrue(check);
 
-        check = InetAddressUtils.isLocalIPv4Address("127.0.0.1");
+        check = InetAddressUtils.isIntranetIPv4Address("127.0.0.1");
         Assert.assertTrue(check);
     }
 
     @Test
     public void isLocalAddress() {
 
-        boolean check = InetAddressUtils.isLocalAddress("localhost");
-        Assert.assertTrue(check);
+        boolean checkTrue = InetAddressUtils.isLocalAddress("127.0.0.1");
+        Assert.assertTrue(checkTrue);
+
+        checkTrue = InetAddressUtils.isLocalAddress("localhost");
+        Assert.assertTrue(checkTrue);
+
+        boolean checkFalse = InetAddressUtils.isLocalAddress("192.168.0.254");
+        Assert.assertFalse(checkFalse);
+
+        checkFalse = InetAddressUtils.isLocalAddress("10.0.0.1");
+        Assert.assertFalse(checkFalse);
+    }
+
+    @Test
+    public void isIntranetAddress() {
+
+        boolean checkTrue = InetAddressUtils.isIntranetAddress("127.0.0.1");
+        Assert.assertTrue(checkTrue);
+
+        checkTrue = InetAddressUtils.isIntranetAddress("10.0.0.1");
+        Assert.assertTrue(checkTrue);
+
+        checkTrue = InetAddressUtils.isIntranetAddress("localhost");
+        Assert.assertTrue(checkTrue);
+
+        checkTrue = InetAddressUtils.isIntranetAddress("192.168.0.254");
+        Assert.assertTrue(checkTrue);
+    }
+
+    @Test
+    public void isInternetAddress() {
+
+        boolean checkTrue = InetAddressUtils.isInternetAddress("88.168.0.254");
+        Assert.assertTrue(checkTrue);
+
+        boolean checkFalse = InetAddressUtils.isInternetAddress("127.0.0.1");
+        Assert.assertFalse(checkFalse);
+
+        checkFalse = InetAddressUtils.isInternetAddress("10.0.0.1");
+        Assert.assertFalse(checkFalse);
+
+        checkFalse = InetAddressUtils.isInternetAddress("localhost");
+        Assert.assertFalse(checkFalse);
+
+        checkFalse = InetAddressUtils.isInternetAddress("192.168.0.254");
+        Assert.assertFalse(checkFalse);
     }
 }
diff --git a/pom.xml b/pom.xml
index c56c69f287084f773e38a649a1cb7e2f86365697..15ca46d9830c0cca2af89252563c70e0134e34e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
   <groupId>org.duniter</groupId>
   <artifactId>duniter4j</artifactId>
-  <version>1.4.1-SNAPSHOT</version>
+  <version>1.5.7-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>Duniter4j</name>
   <description>a Duniter Java Client API</description>
@@ -24,7 +24,7 @@
     <slf4j.version>1.7.30</slf4j.version>
     <guava.version>23.0</guava.version>
     <xml-apis.version>2.0.2</xml-apis.version>
-    <kalium.version>0.8.1-SNAPSHOT</kalium.version>
+    <kalium.version>0.8.2</kalium.version>
     <jna.version>5.8.0</jna.version>
     <jnr-ffi.version>2.2.2</jnr-ffi.version>
     <jnr-jffi.version>1.3.2</jnr-jffi.version>
@@ -34,7 +34,7 @@
     <stringtemplate.version>4.1</stringtemplate.version>
     <jTextUtilsVersion>0.3.3</jTextUtilsVersion>
     <lombok.version>1.18.20</lombok.version>
-    <httpclient.version>4.5.10</httpclient.version>
+    <httpclient.version>4.5.13</httpclient.version>
 
     <nuitonConfigVersion>3.4</nuitonConfigVersion>
     <nuitonVersionVersion>1.0-rc-2</nuitonVersionVersion>
@@ -43,6 +43,7 @@
     <!-- UI versions -->
     <spring.version>5.3.5</spring.version>
     <aspectj.version>1.8.7</aspectj.version>
+    <javaMail.version>1.6.7</javaMail.version>
 
     <!-- Unit test -->
     <junit.version>4.12</junit.version>
@@ -194,7 +195,7 @@
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-lang3</artifactId>
-        <version>3.4</version>
+        <version>3.12.0</version>
       </dependency>
       <dependency>
         <groupId>org.antlr</groupId>
@@ -215,27 +216,28 @@
       <dependency>
         <groupId>commons-logging</groupId>
         <artifactId>commons-logging</artifactId>
-        <version>1.1.1</version>
+        <version>1.2</version>
       </dependency>
       <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
-        <version>2.6</version>
+        <version>2.11.0</version>
       </dependency>
       <dependency>
-        <groupId>javax.mail</groupId>
-        <artifactId>mail</artifactId>
-        <version>1.4.7</version>
+        <groupId>com.sun.mail</groupId>
+        <artifactId>jakarta.mail</artifactId>
+        <version>${javaMail.version}</version>
+        <scope>provided</scope>
       </dependency>
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-collections4</artifactId>
-        <version>4.0</version>
+        <version>4.4</version>
       </dependency>
       <dependency>
         <groupId>commons-beanutils</groupId>
         <artifactId>commons-beanutils</artifactId>
-        <version>1.8.3</version>
+        <version>1.9.4</version>
       </dependency>
       <dependency>
         <groupId>org.nuiton</groupId>