Repository: eclipse/leshan
Pull request #828 (2020-04-09 14:06:04)

Renaming some packages in leshan-core
Some packages have inconsistent name. This PR fix that.


| Before   | After   |
|---|---|
| org.eclipse.leshan   |  org.eclipse.leshan.**core** |
|  org.eclipse.leshan.json |   org.eclipse.leshan.**core**.json |
| org.eclipse.leshan.tlv  |  org.eclipse.leshan.**core**.tlv  |
|  org.eclipse.leshan.util |  org.eclipse.leshan.**core**.util   |
|  org.eclipse.leshan.util.json |  org.eclipse.leshan.**core**.util.json   |


Patch:
diff --git a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/BootstrapConfigSecurityStore.java b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/BootstrapConfigSecurityStore.java
index 7a23c708..aeb9ec55 100644
--- a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/BootstrapConfigSecurityStore.java
+++ b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/BootstrapConfigSecurityStore.java
@@ -22,14 +22,14 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.leshan.SecurityMode;
+import org.eclipse.leshan.core.SecurityMode;
+import org.eclipse.leshan.core.util.SecurityUtil;
 import org.eclipse.leshan.server.bootstrap.BootstrapConfig;
 import org.eclipse.leshan.server.bootstrap.BootstrapConfig.ServerSecurity;
 import org.eclipse.leshan.server.bootstrap.BootstrapConfigStore;
 import org.eclipse.leshan.server.bootstrap.EditableBootstrapConfigStore;
 import org.eclipse.leshan.server.security.BootstrapSecurityStore;
 import org.eclipse.leshan.server.security.SecurityInfo;
-import org.eclipse.leshan.util.SecurityUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/JSONFileBootstrapStore.java b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/JSONFileBootstrapStore.java
index b5d53233..c70492b3 100644
--- a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/JSONFileBootstrapStore.java
+++ b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/JSONFileBootstrapStore.java
@@ -27,11 +27,11 @@ import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
+import org.eclipse.leshan.core.util.Validate;
 import org.eclipse.leshan.server.bootstrap.BootstrapConfig;
 import org.eclipse.leshan.server.bootstrap.EditableBootstrapConfigStore;
 import org.eclipse.leshan.server.bootstrap.InMemoryBootstrapConfigStore;
 import org.eclipse.leshan.server.bootstrap.InvalidConfigurationException;
-import org.eclipse.leshan.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/LeshanBootstrapServerDemo.java b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/LeshanBootstrapServerDemo.java
index a6e9517f..49bb86dc 100755
--- a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/LeshanBootstrapServerDemo.java
+++ b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/LeshanBootstrapServerDemo.java
@@ -39,16 +39,16 @@ import org.eclipse.californium.scandium.dtls.x509.CertificateVerifier;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.webapp.WebAppContext;
-import org.eclipse.leshan.LwM2m;
+import org.eclipse.leshan.core.LwM2m;
 import org.eclipse.leshan.core.model.ObjectLoader;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.model.StaticModel;
+import org.eclipse.leshan.core.util.SecurityUtil;
 import org.eclipse.leshan.server.bootstrap.demo.servlet.BootstrapServlet;
 import org.eclipse.leshan.server.bootstrap.demo.servlet.ServerServlet;
 import org.eclipse.leshan.server.californium.LeshanServerBuilder;
 import org.eclipse.leshan.server.californium.bootstrap.LeshanBootstrapServer;
 import org.eclipse.leshan.server.californium.bootstrap.LeshanBootstrapServerBuilder;
-import org.eclipse.leshan.util.SecurityUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/PublicKeySerDes.java b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/PublicKeySerDes.java
index db0e3ace..6c2c4f4f 100644
--- a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/PublicKeySerDes.java
+++ b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/PublicKeySerDes.java
@@ -19,9 +19,9 @@ import java.security.PublicKey;
 import java.security.interfaces.ECPublicKey;
 import java.util.Arrays;
 
-import org.eclipse.leshan.util.Base64;
-import org.eclipse.leshan.util.Hex;
-import org.eclipse.leshan.util.json.JsonSerDes;
+import org.eclipse.leshan.core.util.Base64;
+import org.eclipse.leshan.core.util.Hex;
+import org.eclipse.leshan.core.util.json.JsonSerDes;
 
 import com.eclipsesource.json.JsonObject;
 
diff --git a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/SecuritySerializer.java b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/SecuritySerializer.java
index 439b2fce..55436c82 100644
--- a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/SecuritySerializer.java
+++ b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/SecuritySerializer.java
@@ -20,9 +20,9 @@ import java.security.PublicKey;
 import java.security.interfaces.ECPublicKey;
 import java.util.Arrays;
 
+import org.eclipse.leshan.core.util.Base64;
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.leshan.server.security.SecurityInfo;
-import org.eclipse.leshan.util.Base64;
-import org.eclipse.leshan.util.Hex;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
diff --git a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/X509CertificateSerDes.java b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/X509CertificateSerDes.java
index d8ac5197..e4e12959 100644
--- a/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/X509CertificateSerDes.java
+++ b/leshan-bsserver-demo/src/main/java/org/eclipse/leshan/server/bootstrap/demo/json/X509CertificateSerDes.java
@@ -18,8 +18,8 @@ package org.eclipse.leshan.server.bootstrap.demo.json;
 import java.security.cert.CertificateEncodingException;
 import java.security.cert.X509Certificate;
 
-import org.eclipse.leshan.util.Base64;
-import org.eclipse.leshan.util.json.JsonSerDes;
+import org.eclipse.leshan.core.util.Base64;
+import org.eclipse.leshan.core.util.json.JsonSerDes;
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonObject;
diff --git a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/CaliforniumEndpointsManager.java b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/CaliforniumEndpointsManager.java
index 23046ce6..ee40c1a1 100644
--- a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/CaliforniumEndpointsManager.java
+++ b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/CaliforniumEndpointsManager.java
@@ -40,11 +40,11 @@ import org.eclipse.californium.scandium.dtls.HandshakeException;
 import org.eclipse.californium.scandium.dtls.pskstore.StaticPskStore;
 import org.eclipse.californium.scandium.dtls.rpkstore.TrustedRpkStore;
 import org.eclipse.californium.scandium.dtls.x509.CertificateVerifier;
-import org.eclipse.leshan.SecurityMode;
 import org.eclipse.leshan.client.EndpointsManager;
 import org.eclipse.leshan.client.servers.ServerIdentity;
 import org.eclipse.leshan.client.servers.ServerIdentity.Role;
 import org.eclipse.leshan.client.servers.ServerInfo;
+import org.eclipse.leshan.core.SecurityMode;
 import org.eclipse.leshan.core.californium.EndpointContextUtil;
 import org.eclipse.leshan.core.californium.EndpointFactory;
 import org.eclipse.leshan.core.request.Identity;
diff --git a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/LeshanClient.java b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/LeshanClient.java
index cbf6e934..d03e556b 100644
--- a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/LeshanClient.java
+++ b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/LeshanClient.java
@@ -46,7 +46,7 @@ import org.eclipse.leshan.client.servers.ServerIdentity;
 import org.eclipse.leshan.core.californium.EndpointFactory;
 import org.eclipse.leshan.core.node.codec.LwM2mNodeDecoder;
 import org.eclipse.leshan.core.node.codec.LwM2mNodeEncoder;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/LeshanClientBuilder.java b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/LeshanClientBuilder.java
index 3c69db7d..67e8a7bf 100644
--- a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/LeshanClientBuilder.java
+++ b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/LeshanClientBuilder.java
@@ -29,7 +29,6 @@ import org.eclipse.californium.elements.UDPConnector;
 import org.eclipse.californium.scandium.DTLSConnector;
 import org.eclipse.californium.scandium.config.DtlsConnectorConfig;
 import org.eclipse.californium.scandium.config.DtlsConnectorConfig.Builder;
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.engine.DefaultRegistrationEngineFactory;
 import org.eclipse.leshan.client.engine.RegistrationEngine;
 import org.eclipse.leshan.client.engine.RegistrationEngineFactory;
@@ -38,6 +37,7 @@ import org.eclipse.leshan.client.object.Security;
 import org.eclipse.leshan.client.object.Server;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.ObjectsInitializer;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.californium.DefaultEndpointFactory;
 import org.eclipse.leshan.core.californium.EndpointFactory;
 import org.eclipse.leshan.core.node.LwM2mNode;
@@ -46,7 +46,7 @@ import org.eclipse.leshan.core.node.codec.DefaultLwM2mNodeEncoder;
 import org.eclipse.leshan.core.node.codec.LwM2mNodeDecoder;
 import org.eclipse.leshan.core.node.codec.LwM2mNodeEncoder;
 import org.eclipse.leshan.core.request.BindingMode;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * Helper class to build and configure a Californium based Leshan Lightweight M2M client.
diff --git a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/RootResource.java b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/RootResource.java
index 67413c5f..d705d188 100644
--- a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/RootResource.java
+++ b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/RootResource.java
@@ -30,7 +30,7 @@ import org.eclipse.leshan.client.engine.RegistrationEngine;
 import org.eclipse.leshan.client.servers.ServerIdentity;
 import org.eclipse.leshan.core.request.BootstrapDeleteRequest;
 import org.eclipse.leshan.core.response.BootstrapDeleteResponse;
-import org.eclipse.leshan.util.StringUtils;
+import org.eclipse.leshan.core.util.StringUtils;
 
 /**
  * A root {@link CoapResource} resource in charge of handling Bootstrap Delete requests targeting the "/" URI.
diff --git a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/SecurityObjectPskStore.java b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/SecurityObjectPskStore.java
index 0303a553..2d763265 100644
--- a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/SecurityObjectPskStore.java
+++ b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/SecurityObjectPskStore.java
@@ -16,8 +16,8 @@
  *******************************************************************************/
 package org.eclipse.leshan.client.californium;
 
-import static org.eclipse.leshan.LwM2mId.*;
 import static org.eclipse.leshan.client.servers.ServerIdentity.SYSTEM;
+import static org.eclipse.leshan.core.LwM2mId.*;
 
 import java.net.InetSocketAddress;
 import java.net.URI;
@@ -30,9 +30,9 @@ import org.eclipse.californium.scandium.dtls.PskPublicInformation;
 import org.eclipse.californium.scandium.dtls.pskstore.PskStore;
 import org.eclipse.californium.scandium.util.SecretUtil;
 import org.eclipse.californium.scandium.util.ServerNames;
-import org.eclipse.leshan.SecurityMode;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.servers.ServerInfo;
+import org.eclipse.leshan.core.SecurityMode;
 import org.eclipse.leshan.core.node.LwM2mObject;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
 import org.eclipse.leshan.core.request.ReadRequest;
diff --git a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/object/ObjectResource.java b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/object/ObjectResource.java
index 25a20877..318f9130 100644
--- a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/object/ObjectResource.java
+++ b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/object/ObjectResource.java
@@ -27,12 +27,12 @@ import org.eclipse.californium.core.coap.CoAP.ResponseCode;
 import org.eclipse.californium.core.coap.MediaTypeRegistry;
 import org.eclipse.californium.core.server.resources.CoapExchange;
 import org.eclipse.californium.core.server.resources.Resource;
-import org.eclipse.leshan.Link;
 import org.eclipse.leshan.client.californium.LwM2mClientCoapResource;
 import org.eclipse.leshan.client.engine.RegistrationEngine;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.listener.ObjectListener;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.attributes.AttributeSet;
 import org.eclipse.leshan.core.model.LwM2mModel;
 import org.eclipse.leshan.core.model.StaticModel;
@@ -120,7 +120,7 @@ public class ObjectResource extends LwM2mClientCoapResource implements ObjectLis
             if (exchange.getRequestOptions().hasObserve()) {
                 ObserveRequest observeRequest = new ObserveRequest(URI);
                 ObserveResponse response = nodeEnabler.observe(identity, observeRequest);
-                if (response.getCode() == org.eclipse.leshan.ResponseCode.CONTENT) {
+                if (response.getCode() == org.eclipse.leshan.core.ResponseCode.CONTENT) {
                     LwM2mPath path = new LwM2mPath(URI);
                     LwM2mNode content = response.getContent();
                     LwM2mModel model = new StaticModel(nodeEnabler.getObjectModel());
@@ -137,7 +137,7 @@ public class ObjectResource extends LwM2mClientCoapResource implements ObjectLis
             else {
                 ReadRequest readRequest = new ReadRequest(URI);
                 ReadResponse response = nodeEnabler.read(identity, readRequest);
-                if (response.getCode() == org.eclipse.leshan.ResponseCode.CONTENT) {
+                if (response.getCode() == org.eclipse.leshan.core.ResponseCode.CONTENT) {
                     LwM2mPath path = new LwM2mPath(URI);
                     LwM2mNode content = response.getContent();
                     LwM2mModel model = new StaticModel(nodeEnabler.getObjectModel());
@@ -311,7 +311,7 @@ public class ObjectResource extends LwM2mClientCoapResource implements ObjectLis
             }
 
             CreateResponse response = nodeEnabler.create(identity, createRequest);
-            if (response.getCode() == org.eclipse.leshan.ResponseCode.CREATED) {
+            if (response.getCode() == org.eclipse.leshan.core.ResponseCode.CREATED) {
                 if (response.getLocation() != null)
                     exchange.setLocationPath(response.getLocation());
                 exchange.respond(toCoapResponseCode(response.getCode()));
diff --git a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/request/CaliforniumLwM2mRequestSender.java b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/request/CaliforniumLwM2mRequestSender.java
index 684e4954..a568806d 100644
--- a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/request/CaliforniumLwM2mRequestSender.java
+++ b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/request/CaliforniumLwM2mRequestSender.java
@@ -31,7 +31,7 @@ import org.eclipse.leshan.core.request.UplinkRequest;
 import org.eclipse.leshan.core.response.ErrorCallback;
 import org.eclipse.leshan.core.response.LwM2mResponse;
 import org.eclipse.leshan.core.response.ResponseCallback;
-import org.eclipse.leshan.util.NamedThreadFactory;
+import org.eclipse.leshan.core.util.NamedThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/request/CoapRequestBuilder.java b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/request/CoapRequestBuilder.java
index 4b0307a5..02db2436 100644
--- a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/request/CoapRequestBuilder.java
+++ b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/request/CoapRequestBuilder.java
@@ -20,7 +20,7 @@ import java.util.Map.Entry;
 
 import org.eclipse.californium.core.coap.Request;
 import org.eclipse.californium.elements.EndpointContext;
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.californium.EndpointContextUtil;
 import org.eclipse.leshan.core.request.BindingMode;
 import org.eclipse.leshan.core.request.BootstrapRequest;
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/RegistrationUpdate.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/RegistrationUpdate.java
index df5540cc..b2f11ef6 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/RegistrationUpdate.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/RegistrationUpdate.java
@@ -17,7 +17,7 @@ package org.eclipse.leshan.client;
 
 import java.util.Map;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.BindingMode;
 
 /**
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/RegistrationUpdateHandler.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/RegistrationUpdateHandler.java
index 848c09c9..3338f216 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/RegistrationUpdateHandler.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/RegistrationUpdateHandler.java
@@ -15,7 +15,6 @@
  *******************************************************************************/
 package org.eclipse.leshan.client;
 
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.bootstrap.BootstrapHandler;
 import org.eclipse.leshan.client.engine.RegistrationEngine;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
@@ -24,6 +23,7 @@ import org.eclipse.leshan.client.resource.listener.ObjectsListener;
 import org.eclipse.leshan.client.servers.ServerIdentity;
 import org.eclipse.leshan.client.servers.ServersInfoExtractor;
 import org.eclipse.leshan.client.util.LinkFormatHelper;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.request.BindingMode;
 
 /**
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/engine/DefaultRegistrationEngine.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/engine/DefaultRegistrationEngine.java
index 0d95eb02..7f075ac1 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/engine/DefaultRegistrationEngine.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/engine/DefaultRegistrationEngine.java
@@ -28,8 +28,6 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.eclipse.leshan.LwM2m;
-import org.eclipse.leshan.ResponseCode;
 import org.eclipse.leshan.client.EndpointsManager;
 import org.eclipse.leshan.client.RegistrationUpdate;
 import org.eclipse.leshan.client.bootstrap.BootstrapHandler;
@@ -42,6 +40,8 @@ import org.eclipse.leshan.client.servers.ServerIdentity;
 import org.eclipse.leshan.client.servers.ServerInfo;
 import org.eclipse.leshan.client.servers.ServersInfoExtractor;
 import org.eclipse.leshan.client.util.LinkFormatHelper;
+import org.eclipse.leshan.core.LwM2m;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.BootstrapRequest;
 import org.eclipse.leshan.core.request.DeregisterRequest;
 import org.eclipse.leshan.core.request.Identity;
@@ -52,7 +52,7 @@ import org.eclipse.leshan.core.response.BootstrapResponse;
 import org.eclipse.leshan.core.response.DeregisterResponse;
 import org.eclipse.leshan.core.response.RegisterResponse;
 import org.eclipse.leshan.core.response.UpdateResponse;
-import org.eclipse.leshan.util.NamedThreadFactory;
+import org.eclipse.leshan.core.util.NamedThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/object/Security.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/object/Security.java
index 48aff51b..d85bc54a 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/object/Security.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/object/Security.java
@@ -15,15 +15,15 @@
  *******************************************************************************/
 package org.eclipse.leshan.client.object;
 
-import static org.eclipse.leshan.LwM2mId.*;
+import static org.eclipse.leshan.core.LwM2mId.*;
 
 import java.util.Arrays;
 import java.util.List;
 
-import org.eclipse.leshan.SecurityMode;
 import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mInstanceEnabler;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.SecurityMode;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.model.ResourceModel.Type;
 import org.eclipse.leshan.core.node.LwM2mResource;
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserver.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserver.java
index 406fbbc7..0ff789f6 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserver.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserver.java
@@ -15,8 +15,8 @@
  *******************************************************************************/
 package org.eclipse.leshan.client.observer;
 
-import org.eclipse.leshan.ResponseCode;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.BootstrapRequest;
 import org.eclipse.leshan.core.request.DeregisterRequest;
 import org.eclipse.leshan.core.request.RegisterRequest;
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserverAdapter.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserverAdapter.java
index 816010b0..52fc10ba 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserverAdapter.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserverAdapter.java
@@ -15,8 +15,8 @@
  *******************************************************************************/
 package org.eclipse.leshan.client.observer;
 
-import org.eclipse.leshan.ResponseCode;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.BootstrapRequest;
 import org.eclipse.leshan.core.request.DeregisterRequest;
 import org.eclipse.leshan.core.request.RegisterRequest;
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserverDispatcher.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserverDispatcher.java
index 7091caca..39002d13 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserverDispatcher.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/observer/LwM2mClientObserverDispatcher.java
@@ -13,8 +13,8 @@ package org.eclipse.leshan.client.observer;
 
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.eclipse.leshan.ResponseCode;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.BootstrapRequest;
 import org.eclipse.leshan.core.request.DeregisterRequest;
 import org.eclipse.leshan.core.request.RegisterRequest;
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/BaseObjectEnabler.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/BaseObjectEnabler.java
index 364a42e4..065b0cb4 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/BaseObjectEnabler.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/BaseObjectEnabler.java
@@ -27,12 +27,12 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import org.eclipse.leshan.Link;
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.LwM2mClient;
 import org.eclipse.leshan.client.resource.listener.ObjectListener;
 import org.eclipse.leshan.client.servers.ServerIdentity;
 import org.eclipse.leshan.client.util.LinkFormatHelper;
+import org.eclipse.leshan.core.Link;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.model.ResourceModel;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/ObjectEnabler.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/ObjectEnabler.java
index 6e33ee96..e0930669 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/ObjectEnabler.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/ObjectEnabler.java
@@ -25,10 +25,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.LwM2mClient;
 import org.eclipse.leshan.client.servers.ServerIdentity;
 import org.eclipse.leshan.client.servers.ServersInfoExtractor;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.node.LwM2mObject;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/ObjectsInitializer.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/ObjectsInitializer.java
index 4f70b452..fa45a8c2 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/ObjectsInitializer.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/resource/ObjectsInitializer.java
@@ -28,7 +28,7 @@ import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.model.StaticModel;
 import org.eclipse.leshan.core.request.ContentFormat;
 import org.eclipse.leshan.core.request.CreateRequest;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * An helper to create {@link LwM2mObjectEnabler}.
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/servers/ServerInfo.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/servers/ServerInfo.java
index 70caeb57..06d2d992 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/servers/ServerInfo.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/servers/ServerInfo.java
@@ -22,8 +22,8 @@ import java.security.PrivateKey;
 import java.security.PublicKey;
 import java.security.cert.Certificate;
 
-import org.eclipse.leshan.LwM2m;
-import org.eclipse.leshan.SecurityMode;
+import org.eclipse.leshan.core.LwM2m;
+import org.eclipse.leshan.core.SecurityMode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/servers/ServersInfoExtractor.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/servers/ServersInfoExtractor.java
index 89a0b4ea..a183e6d4 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/servers/ServersInfoExtractor.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/servers/ServersInfoExtractor.java
@@ -16,8 +16,8 @@
  *******************************************************************************/
 package org.eclipse.leshan.client.servers;
 
-import static org.eclipse.leshan.LwM2mId.*;
 import static org.eclipse.leshan.client.servers.ServerIdentity.SYSTEM;
+import static org.eclipse.leshan.core.LwM2mId.*;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -35,17 +35,17 @@ import java.security.spec.InvalidKeySpecException;
 import java.security.spec.X509EncodedKeySpec;
 import java.util.Map;
 
-import org.eclipse.leshan.LwM2mId;
-import org.eclipse.leshan.SecurityMode;
 import org.eclipse.leshan.client.resource.LwM2mInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
+import org.eclipse.leshan.core.LwM2mId;
+import org.eclipse.leshan.core.SecurityMode;
 import org.eclipse.leshan.core.node.LwM2mObject;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
 import org.eclipse.leshan.core.node.LwM2mResource;
 import org.eclipse.leshan.core.request.BindingMode;
 import org.eclipse.leshan.core.request.ReadRequest;
 import org.eclipse.leshan.core.response.ReadResponse;
-import org.eclipse.leshan.util.SecurityUtil;
+import org.eclipse.leshan.core.util.SecurityUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-client-core/src/main/java/org/eclipse/leshan/client/util/LinkFormatHelper.java b/leshan-client-core/src/main/java/org/eclipse/leshan/client/util/LinkFormatHelper.java
index a956aeee..e9ce384a 100644
--- a/leshan-client-core/src/main/java/org/eclipse/leshan/client/util/LinkFormatHelper.java
+++ b/leshan-client-core/src/main/java/org/eclipse/leshan/client/util/LinkFormatHelper.java
@@ -24,12 +24,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.leshan.Link;
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
+import org.eclipse.leshan.core.Link;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.model.LwM2mModel;
 import org.eclipse.leshan.core.model.ObjectModel;
-import org.eclipse.leshan.util.StringUtils;
+import org.eclipse.leshan.core.util.StringUtils;
 
 /**
  * An Utility class which help to generate @{link Link} from {@link LwM2mObjectEnabler} and {@link LwM2mModel}.<br>
diff --git a/leshan-client-demo/src/main/java/org/eclipse/leshan/client/demo/LeshanClientDemo.java b/leshan-client-demo/src/main/java/org/eclipse/leshan/client/demo/LeshanClientDemo.java
index 8941f0be..e139485d 100644
--- a/leshan-client-demo/src/main/java/org/eclipse/leshan/client/demo/LeshanClientDemo.java
+++ b/leshan-client-demo/src/main/java/org/eclipse/leshan/client/demo/LeshanClientDemo.java
@@ -18,8 +18,8 @@
 
 package org.eclipse.leshan.client.demo;
 
-import static org.eclipse.leshan.LwM2mId.*;
 import static org.eclipse.leshan.client.object.Security.*;
+import static org.eclipse.leshan.core.LwM2mId.*;
 
 import java.io.File;
 import java.net.InetAddress;
@@ -56,7 +56,6 @@ import org.eclipse.californium.scandium.dtls.ResumingClientHandshaker;
 import org.eclipse.californium.scandium.dtls.ResumingServerHandshaker;
 import org.eclipse.californium.scandium.dtls.ServerHandshaker;
 import org.eclipse.californium.scandium.dtls.SessionAdapter;
-import org.eclipse.leshan.LwM2m;
 import org.eclipse.leshan.client.californium.LeshanClient;
 import org.eclipse.leshan.client.californium.LeshanClientBuilder;
 import org.eclipse.leshan.client.engine.DefaultRegistrationEngineFactory;
@@ -64,6 +63,7 @@ import org.eclipse.leshan.client.object.Server;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.ObjectsInitializer;
 import org.eclipse.leshan.client.resource.listener.ObjectsListenerAdapter;
+import org.eclipse.leshan.core.LwM2m;
 import org.eclipse.leshan.core.californium.DefaultEndpointFactory;
 import org.eclipse.leshan.core.model.LwM2mModel;
 import org.eclipse.leshan.core.model.ObjectLoader;
@@ -72,8 +72,8 @@ import org.eclipse.leshan.core.model.StaticModel;
 import org.eclipse.leshan.core.node.codec.DefaultLwM2mNodeDecoder;
 import org.eclipse.leshan.core.node.codec.DefaultLwM2mNodeEncoder;
 import org.eclipse.leshan.core.request.BindingMode;
-import org.eclipse.leshan.util.Hex;
-import org.eclipse.leshan.util.SecurityUtil;
+import org.eclipse.leshan.core.util.Hex;
+import org.eclipse.leshan.core.util.SecurityUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-client-demo/src/main/java/org/eclipse/leshan/client/demo/RandomTemperatureSensor.java b/leshan-client-demo/src/main/java/org/eclipse/leshan/client/demo/RandomTemperatureSensor.java
index 2e3aa404..7719a55f 100644
--- a/leshan-client-demo/src/main/java/org/eclipse/leshan/client/demo/RandomTemperatureSensor.java
+++ b/leshan-client-demo/src/main/java/org/eclipse/leshan/client/demo/RandomTemperatureSensor.java
@@ -14,7 +14,7 @@ import org.eclipse.leshan.client.servers.ServerIdentity;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.response.ExecuteResponse;
 import org.eclipse.leshan.core.response.ReadResponse;
-import org.eclipse.leshan.util.NamedThreadFactory;
+import org.eclipse.leshan.core.util.NamedThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core-cf/src/main/java/org/eclipse/leshan/core/californium/ResponseCodeUtil.java b/leshan-core-cf/src/main/java/org/eclipse/leshan/core/californium/ResponseCodeUtil.java
index a805ebac..f6381840 100644
--- a/leshan-core-cf/src/main/java/org/eclipse/leshan/core/californium/ResponseCodeUtil.java
+++ b/leshan-core-cf/src/main/java/org/eclipse/leshan/core/californium/ResponseCodeUtil.java
@@ -17,8 +17,8 @@ package org.eclipse.leshan.core.californium;
 
 import org.eclipse.californium.core.coap.CoAP;
 import org.eclipse.californium.core.coap.MessageFormatException;
-import org.eclipse.leshan.ResponseCode;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.ResponseCode;
+import org.eclipse.leshan.core.util.Validate;
 
 public class ResponseCodeUtil {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/Link.java b/leshan-core/src/main/java/org/eclipse/leshan/core/Link.java
similarity index 98%
rename from leshan-core/src/main/java/org/eclipse/leshan/Link.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/Link.java
index f5fe8330..eefc9f98 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/Link.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/Link.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan;
+package org.eclipse.leshan.core;
 
 import java.io.Serializable;
 import java.nio.charset.Charset;
@@ -23,8 +23,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.eclipse.leshan.util.StringUtils;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.StringUtils;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * A Link as defined in http://tools.ietf.org/html/rfc6690.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/LwM2m.java b/leshan-core/src/main/java/org/eclipse/leshan/core/LwM2m.java
similarity index 97%
rename from leshan-core/src/main/java/org/eclipse/leshan/LwM2m.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/LwM2m.java
index 0c75dda9..e67101b8 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/LwM2m.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/LwM2m.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan;
+package org.eclipse.leshan.core;
 
 public interface LwM2m {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/LwM2mId.java b/leshan-core/src/main/java/org/eclipse/leshan/core/LwM2mId.java
similarity index 98%
rename from leshan-core/src/main/java/org/eclipse/leshan/LwM2mId.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/LwM2mId.java
index 6817f79e..24a71737 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/LwM2mId.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/LwM2mId.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan;
+package org.eclipse.leshan.core;
 
 /**
  * LWM2M Object/Resource IDs
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/ResponseCode.java b/leshan-core/src/main/java/org/eclipse/leshan/core/ResponseCode.java
similarity index 98%
rename from leshan-core/src/main/java/org/eclipse/leshan/ResponseCode.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/ResponseCode.java
index 221aed93..04f5d2d0 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/ResponseCode.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/ResponseCode.java
@@ -13,9 +13,9 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan;
+package org.eclipse.leshan.core;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * Response codes defined for LWM2M enabler
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/SecurityMode.java b/leshan-core/src/main/java/org/eclipse/leshan/core/SecurityMode.java
similarity index 97%
rename from leshan-core/src/main/java/org/eclipse/leshan/SecurityMode.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/SecurityMode.java
index a0ad6bdc..83137432 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/SecurityMode.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/SecurityMode.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan;
+package org.eclipse.leshan.core;
 
 /**
  * The different DTLS security modes
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/attributes/Attribute.java b/leshan-core/src/main/java/org/eclipse/leshan/core/attributes/Attribute.java
index 1c526fd3..4d20f03d 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/attributes/Attribute.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/attributes/Attribute.java
@@ -21,7 +21,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * Represents an LwM2m attribute that can be attached to an object, instance or resource.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/json/JsonArrayEntry.java b/leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonArrayEntry.java
similarity index 99%
rename from leshan-core/src/main/java/org/eclipse/leshan/json/JsonArrayEntry.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonArrayEntry.java
index 84551795..372a9bc5 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/json/JsonArrayEntry.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonArrayEntry.java
@@ -15,7 +15,7 @@
  *     Gemalto M2M GmbH
  *******************************************************************************/
 
-package org.eclipse.leshan.json;
+package org.eclipse.leshan.core.json;
 
 import org.eclipse.leshan.core.model.ResourceModel;
 import org.eclipse.leshan.core.model.ResourceModel.Type;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/json/JsonArrayEntrySerDes.java b/leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonArrayEntrySerDes.java
similarity index 95%
rename from leshan-core/src/main/java/org/eclipse/leshan/json/JsonArrayEntrySerDes.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonArrayEntrySerDes.java
index 8c64cd25..69e20afb 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/json/JsonArrayEntrySerDes.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonArrayEntrySerDes.java
@@ -13,11 +13,11 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.json;
+package org.eclipse.leshan.core.json;
 
 import org.eclipse.leshan.core.model.ResourceModel.Type;
-import org.eclipse.leshan.util.json.JsonException;
-import org.eclipse.leshan.util.json.JsonSerDes;
+import org.eclipse.leshan.core.util.json.JsonException;
+import org.eclipse.leshan.core.util.json.JsonSerDes;
 
 import com.eclipsesource.json.JsonObject;
 import com.eclipsesource.json.JsonValue;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/json/JsonRootObject.java b/leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonRootObject.java
similarity index 98%
rename from leshan-core/src/main/java/org/eclipse/leshan/json/JsonRootObject.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonRootObject.java
index a8dd1569..f63bbc30 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/json/JsonRootObject.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonRootObject.java
@@ -15,7 +15,7 @@
  *     Gemalto M2M GmbH
  *******************************************************************************/
 
-package org.eclipse.leshan.json;
+package org.eclipse.leshan.core.json;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/json/JsonRootObjectSerDes.java b/leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonRootObjectSerDes.java
similarity index 93%
rename from leshan-core/src/main/java/org/eclipse/leshan/json/JsonRootObjectSerDes.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonRootObjectSerDes.java
index 201b8092..72796cc4 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/json/JsonRootObjectSerDes.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/json/JsonRootObjectSerDes.java
@@ -13,10 +13,10 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.json;
+package org.eclipse.leshan.core.json;
 
-import org.eclipse.leshan.util.json.JsonException;
-import org.eclipse.leshan.util.json.JsonSerDes;
+import org.eclipse.leshan.core.util.json.JsonException;
+import org.eclipse.leshan.core.util.json.JsonSerDes;
 
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/json/LwM2mJson.java b/leshan-core/src/main/java/org/eclipse/leshan/core/json/LwM2mJson.java
similarity index 94%
rename from leshan-core/src/main/java/org/eclipse/leshan/json/LwM2mJson.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/json/LwM2mJson.java
index b911d753..8dd57d9e 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/json/LwM2mJson.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/json/LwM2mJson.java
@@ -15,9 +15,9 @@
  *     Gemalto M2M GmbH
  *******************************************************************************/
 
-package org.eclipse.leshan.json;
+package org.eclipse.leshan.core.json;
 
-import org.eclipse.leshan.util.json.JsonException;
+import org.eclipse.leshan.core.util.json.JsonException;
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.ParseException;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/json/LwM2mJsonException.java b/leshan-core/src/main/java/org/eclipse/leshan/core/json/LwM2mJsonException.java
similarity index 97%
rename from leshan-core/src/main/java/org/eclipse/leshan/json/LwM2mJsonException.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/json/LwM2mJsonException.java
index 0c1315d8..cf68d900 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/json/LwM2mJsonException.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/json/LwM2mJsonException.java
@@ -14,7 +14,7 @@
  *     Sierra Wireless - initial API and implementation
  *     Gemalto M2M GmbH
  *******************************************************************************/
-package org.eclipse.leshan.json;
+package org.eclipse.leshan.core.json;
 
 /**
  * Exception thrown in case of JSON parsing error
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/model/DDFFileParser.java b/leshan-core/src/main/java/org/eclipse/leshan/core/model/DDFFileParser.java
index 1cddd6c6..feda9f88 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/model/DDFFileParser.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/model/DDFFileParser.java
@@ -27,7 +27,7 @@ import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.eclipse.leshan.core.model.ResourceModel.Operations;
 import org.eclipse.leshan.core.model.ResourceModel.Type;
-import org.eclipse.leshan.util.StringUtils;
+import org.eclipse.leshan.core.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/model/LwM2mModelRepository.java b/leshan-core/src/main/java/org/eclipse/leshan/core/model/LwM2mModelRepository.java
index 54cc64ec..fb58a01e 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/model/LwM2mModelRepository.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/model/LwM2mModelRepository.java
@@ -22,7 +22,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/model/ObjectLoader.java b/leshan-core/src/main/java/org/eclipse/leshan/core/model/ObjectLoader.java
index 1714100b..10a0b8c9 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/model/ObjectLoader.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/model/ObjectLoader.java
@@ -25,7 +25,7 @@ import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.leshan.util.StringUtils;
+import org.eclipse.leshan.core.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/model/ObjectModel.java b/leshan-core/src/main/java/org/eclipse/leshan/core/model/ObjectModel.java
index ff823618..277563e3 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/model/ObjectModel.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/model/ObjectModel.java
@@ -21,7 +21,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/LwM2mObjectInstance.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/LwM2mObjectInstance.java
index 86108e2f..dc7d283e 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/LwM2mObjectInstance.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/LwM2mObjectInstance.java
@@ -22,7 +22,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.eclipse.leshan.core.node.codec.tlv.LwM2mNodeTlvDecoder;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * An instance of {@link LwM2mObject}.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/LwM2mPath.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/LwM2mPath.java
index c988d365..584b7a8a 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/LwM2mPath.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/LwM2mPath.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.node;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * A path pointing to a LwM2M node (root, object, object instance, resource or resource instance).
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/ObjectLink.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/ObjectLink.java
index 4aefc19c..d17daf2a 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/ObjectLink.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/ObjectLink.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.node;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * The object link is used to refer an Instance of a given Object. An Object link value is composed of two concatenated
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/TimestampedLwM2mNode.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/TimestampedLwM2mNode.java
index cb075e6f..00018f8a 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/TimestampedLwM2mNode.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/TimestampedLwM2mNode.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.node;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 public class TimestampedLwM2mNode {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/DefaultLwM2mNodeDecoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/DefaultLwM2mNodeDecoder.java
index f1592277..7ee8ee81 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/DefaultLwM2mNodeDecoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/DefaultLwM2mNodeDecoder.java
@@ -32,7 +32,7 @@ import org.eclipse.leshan.core.node.codec.opaque.LwM2mNodeOpaqueDecoder;
 import org.eclipse.leshan.core.node.codec.text.LwM2mNodeTextDecoder;
 import org.eclipse.leshan.core.node.codec.tlv.LwM2mNodeTlvDecoder;
 import org.eclipse.leshan.core.request.ContentFormat;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/DefaultLwM2mNodeEncoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/DefaultLwM2mNodeEncoder.java
index 60b27108..e8f5018d 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/DefaultLwM2mNodeEncoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/DefaultLwM2mNodeEncoder.java
@@ -27,7 +27,7 @@ import org.eclipse.leshan.core.node.codec.opaque.LwM2mNodeOpaqueEncoder;
 import org.eclipse.leshan.core.node.codec.text.LwM2mNodeTextEncoder;
 import org.eclipse.leshan.core.node.codec.tlv.LwM2mNodeTlvEncoder;
 import org.eclipse.leshan.core.request.ContentFormat;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/json/LwM2mNodeJsonDecoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/json/LwM2mNodeJsonDecoder.java
index d1c84c40..8675ba93 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/json/LwM2mNodeJsonDecoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/json/LwM2mNodeJsonDecoder.java
@@ -27,6 +27,10 @@ import java.util.Map.Entry;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
+import org.eclipse.leshan.core.json.JsonArrayEntry;
+import org.eclipse.leshan.core.json.JsonRootObject;
+import org.eclipse.leshan.core.json.LwM2mJson;
+import org.eclipse.leshan.core.json.LwM2mJsonException;
 import org.eclipse.leshan.core.model.LwM2mModel;
 import org.eclipse.leshan.core.model.ResourceModel;
 import org.eclipse.leshan.core.model.ResourceModel.Type;
@@ -40,11 +44,7 @@ import org.eclipse.leshan.core.node.LwM2mResource;
 import org.eclipse.leshan.core.node.LwM2mSingleResource;
 import org.eclipse.leshan.core.node.TimestampedLwM2mNode;
 import org.eclipse.leshan.core.node.codec.CodecException;
-import org.eclipse.leshan.json.JsonArrayEntry;
-import org.eclipse.leshan.json.JsonRootObject;
-import org.eclipse.leshan.json.LwM2mJson;
-import org.eclipse.leshan.json.LwM2mJsonException;
-import org.eclipse.leshan.util.Base64;
+import org.eclipse.leshan.core.util.Base64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/json/LwM2mNodeJsonEncoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/json/LwM2mNodeJsonEncoder.java
index 3888981f..87beb1d1 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/json/LwM2mNodeJsonEncoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/json/LwM2mNodeJsonEncoder.java
@@ -20,6 +20,10 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map.Entry;
 
+import org.eclipse.leshan.core.json.JsonArrayEntry;
+import org.eclipse.leshan.core.json.JsonRootObject;
+import org.eclipse.leshan.core.json.LwM2mJson;
+import org.eclipse.leshan.core.json.LwM2mJsonException;
 import org.eclipse.leshan.core.model.LwM2mModel;
 import org.eclipse.leshan.core.model.ResourceModel;
 import org.eclipse.leshan.core.model.ResourceModel.Type;
@@ -32,12 +36,8 @@ import org.eclipse.leshan.core.node.LwM2mResource;
 import org.eclipse.leshan.core.node.TimestampedLwM2mNode;
 import org.eclipse.leshan.core.node.codec.CodecException;
 import org.eclipse.leshan.core.node.codec.LwM2mValueConverter;
-import org.eclipse.leshan.json.JsonArrayEntry;
-import org.eclipse.leshan.json.JsonRootObject;
-import org.eclipse.leshan.json.LwM2mJson;
-import org.eclipse.leshan.json.LwM2mJsonException;
-import org.eclipse.leshan.util.Base64;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Base64;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/opaque/LwM2mNodeOpaqueEncoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/opaque/LwM2mNodeOpaqueEncoder.java
index f75ade53..74b5d593 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/opaque/LwM2mNodeOpaqueEncoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/opaque/LwM2mNodeOpaqueEncoder.java
@@ -26,7 +26,7 @@ import org.eclipse.leshan.core.node.LwM2mPath;
 import org.eclipse.leshan.core.node.LwM2mResource;
 import org.eclipse.leshan.core.node.codec.CodecException;
 import org.eclipse.leshan.core.node.codec.LwM2mValueConverter;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/text/LwM2mNodeTextDecoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/text/LwM2mNodeTextDecoder.java
index 06d58a8f..917a96bd 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/text/LwM2mNodeTextDecoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/text/LwM2mNodeTextDecoder.java
@@ -27,7 +27,7 @@ import org.eclipse.leshan.core.node.LwM2mPath;
 import org.eclipse.leshan.core.node.LwM2mSingleResource;
 import org.eclipse.leshan.core.node.ObjectLink;
 import org.eclipse.leshan.core.node.codec.CodecException;
-import org.eclipse.leshan.util.Base64;
+import org.eclipse.leshan.core.util.Base64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/text/LwM2mNodeTextEncoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/text/LwM2mNodeTextEncoder.java
index 0ee2806d..8894e5df 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/text/LwM2mNodeTextEncoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/text/LwM2mNodeTextEncoder.java
@@ -30,8 +30,8 @@ import org.eclipse.leshan.core.node.LwM2mResource;
 import org.eclipse.leshan.core.node.ObjectLink;
 import org.eclipse.leshan.core.node.codec.CodecException;
 import org.eclipse.leshan.core.node.codec.LwM2mValueConverter;
-import org.eclipse.leshan.util.Base64;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Base64;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/tlv/LwM2mNodeTlvDecoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/tlv/LwM2mNodeTlvDecoder.java
index 6ebce464..c3506dc9 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/tlv/LwM2mNodeTlvDecoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/tlv/LwM2mNodeTlvDecoder.java
@@ -33,11 +33,11 @@ import org.eclipse.leshan.core.node.LwM2mPath;
 import org.eclipse.leshan.core.node.LwM2mResource;
 import org.eclipse.leshan.core.node.LwM2mSingleResource;
 import org.eclipse.leshan.core.node.codec.CodecException;
-import org.eclipse.leshan.tlv.Tlv;
-import org.eclipse.leshan.tlv.Tlv.TlvType;
-import org.eclipse.leshan.tlv.TlvDecoder;
-import org.eclipse.leshan.tlv.TlvException;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.tlv.Tlv;
+import org.eclipse.leshan.core.tlv.TlvDecoder;
+import org.eclipse.leshan.core.tlv.TlvException;
+import org.eclipse.leshan.core.tlv.Tlv.TlvType;
+import org.eclipse.leshan.core.util.Hex;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/tlv/LwM2mNodeTlvEncoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/tlv/LwM2mNodeTlvEncoder.java
index cc086e5b..6ac3f7d0 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/tlv/LwM2mNodeTlvEncoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/node/codec/tlv/LwM2mNodeTlvEncoder.java
@@ -34,10 +34,10 @@ import org.eclipse.leshan.core.node.LwM2mResource;
 import org.eclipse.leshan.core.node.ObjectLink;
 import org.eclipse.leshan.core.node.codec.CodecException;
 import org.eclipse.leshan.core.node.codec.LwM2mValueConverter;
-import org.eclipse.leshan.tlv.Tlv;
-import org.eclipse.leshan.tlv.Tlv.TlvType;
-import org.eclipse.leshan.tlv.TlvEncoder;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.tlv.Tlv;
+import org.eclipse.leshan.core.tlv.TlvEncoder;
+import org.eclipse.leshan.core.tlv.Tlv.TlvType;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/observation/Observation.java b/leshan-core/src/main/java/org/eclipse/leshan/core/observation/Observation.java
index 7dfb315f..c26dff52 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/observation/Observation.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/observation/Observation.java
@@ -22,7 +22,7 @@ import java.util.Map;
 
 import org.eclipse.leshan.core.node.LwM2mPath;
 import org.eclipse.leshan.core.request.ContentFormat;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.util.Hex;
 
 /**
  * An observation of a resource provided by a LWM2M Client.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/request/CancelObservationRequest.java b/leshan-core/src/main/java/org/eclipse/leshan/core/request/CancelObservationRequest.java
index 3a494387..062c0c02 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/request/CancelObservationRequest.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/request/CancelObservationRequest.java
@@ -18,7 +18,7 @@ package org.eclipse.leshan.core.request;
 import org.eclipse.leshan.core.observation.Observation;
 import org.eclipse.leshan.core.request.exception.InvalidRequestException;
 import org.eclipse.leshan.core.response.CancelObservationResponse;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.util.Hex;
 
 /**
  * A Lightweight M2M request for actively cancel an observation.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/request/Identity.java b/leshan-core/src/main/java/org/eclipse/leshan/core/request/Identity.java
index 1b501d18..601cc34a 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/request/Identity.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/request/Identity.java
@@ -21,7 +21,7 @@ import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.security.PublicKey;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * Contains all data which could identify a peer like peer address, PSK identity, Raw Public Key or Certificate Common
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/request/RegisterRequest.java b/leshan-core/src/main/java/org/eclipse/leshan/core/request/RegisterRequest.java
index c97adf94..0415a928 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/request/RegisterRequest.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/request/RegisterRequest.java
@@ -19,7 +19,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.exception.InvalidRequestException;
 import org.eclipse.leshan.core.response.RegisterResponse;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/request/UpdateRequest.java b/leshan-core/src/main/java/org/eclipse/leshan/core/request/UpdateRequest.java
index caea826d..37bc78d7 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/request/UpdateRequest.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/request/UpdateRequest.java
@@ -19,7 +19,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.exception.InvalidRequestException;
 import org.eclipse.leshan.core.response.UpdateResponse;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/AbstractLwM2mResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/AbstractLwM2mResponse.java
index 968fd6ba..303797ee 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/AbstractLwM2mResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/AbstractLwM2mResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.exception.InvalidResponseException;
 
 /**
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapDeleteResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapDeleteResponse.java
index 763d7f22..34e71e94 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapDeleteResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapDeleteResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 /**
  * Response to a delete request from the bootstrap server.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapFinishResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapFinishResponse.java
index 0d314b83..76877bbb 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapFinishResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapFinishResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 /**
  * Response to a bootstrap finish request from the bootstrap server.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapResponse.java
index 9feb5a00..3b8333ec 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 /**
  * The response to a client bootstrap request.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapWriteResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapWriteResponse.java
index 6092f57c..aaae050c 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapWriteResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/BootstrapWriteResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 /**
  * Response to a write request from the bootstrap server.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/CancelObservationResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/CancelObservationResponse.java
index c2f09728..fd606706 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/CancelObservationResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/CancelObservationResponse.java
@@ -17,7 +17,7 @@ package org.eclipse.leshan.core.response;
 
 import java.util.List;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.node.LwM2mNode;
 import org.eclipse.leshan.core.node.TimestampedLwM2mNode;
 import org.eclipse.leshan.core.observation.Observation;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/CreateResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/CreateResponse.java
index 6f58ba93..4c3785fb 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/CreateResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/CreateResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 public class CreateResponse extends AbstractLwM2mResponse {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/DeleteResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/DeleteResponse.java
index f3d8a2f5..8e75daa3 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/DeleteResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/DeleteResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 public class DeleteResponse extends AbstractLwM2mResponse {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/DeregisterResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/DeregisterResponse.java
index 7d86c1b4..cc938bd1 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/DeregisterResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/DeregisterResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 public class DeregisterResponse extends AbstractLwM2mResponse {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/DiscoverResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/DiscoverResponse.java
index 625e082e..d516fd12 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/DiscoverResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/DiscoverResponse.java
@@ -17,8 +17,8 @@ package org.eclipse.leshan.core.response;
 
 import java.util.Arrays;
 
-import org.eclipse.leshan.Link;
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.Link;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.exception.InvalidResponseException;
 
 public class DiscoverResponse extends AbstractLwM2mResponse {
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/ExecuteResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/ExecuteResponse.java
index c58a47fc..bf5f042a 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/ExecuteResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/ExecuteResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 public class ExecuteResponse extends AbstractLwM2mResponse {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/LwM2mResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/LwM2mResponse.java
index 9fb50af1..7bf19454 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/LwM2mResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/LwM2mResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 /**
  * A response to Lightweight M2M request.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/ObserveResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/ObserveResponse.java
index 44e3feb9..1a865d09 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/ObserveResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/ObserveResponse.java
@@ -17,7 +17,7 @@ package org.eclipse.leshan.core.response;
 
 import java.util.List;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.node.LwM2mNode;
 import org.eclipse.leshan.core.node.TimestampedLwM2mNode;
 import org.eclipse.leshan.core.observation.Observation;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/ReadResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/ReadResponse.java
index 9263c485..f26421a8 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/ReadResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/ReadResponse.java
@@ -18,7 +18,7 @@ package org.eclipse.leshan.core.response;
 import java.util.Date;
 import java.util.Map;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.model.ResourceModel.Type;
 import org.eclipse.leshan.core.node.LwM2mMultipleResource;
 import org.eclipse.leshan.core.node.LwM2mNode;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/RegisterResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/RegisterResponse.java
index 1309dae9..7c5e8ff8 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/RegisterResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/RegisterResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 /**
  * Response to a client registration request
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/UpdateResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/UpdateResponse.java
index 21ac6b1d..973cd5b1 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/UpdateResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/UpdateResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 public class UpdateResponse extends AbstractLwM2mResponse {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/WriteAttributesResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/WriteAttributesResponse.java
index 166cd2e5..8c5aefdd 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/WriteAttributesResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/WriteAttributesResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 public class WriteAttributesResponse extends AbstractLwM2mResponse {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/core/response/WriteResponse.java b/leshan-core/src/main/java/org/eclipse/leshan/core/response/WriteResponse.java
index f69dd893..c7c9ebbc 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/core/response/WriteResponse.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/response/WriteResponse.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.core.response;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 
 public class WriteResponse extends AbstractLwM2mResponse {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/tlv/Tlv.java b/leshan-core/src/main/java/org/eclipse/leshan/core/tlv/Tlv.java
similarity index 99%
rename from leshan-core/src/main/java/org/eclipse/leshan/tlv/Tlv.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/tlv/Tlv.java
index 02c62c35..e66603ad 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/tlv/Tlv.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/tlv/Tlv.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.tlv;
+package org.eclipse.leshan.core.tlv;
 
 import java.util.Arrays;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/tlv/TlvDecoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/tlv/TlvDecoder.java
similarity index 98%
rename from leshan-core/src/main/java/org/eclipse/leshan/tlv/TlvDecoder.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/tlv/TlvDecoder.java
index a2aea616..f2f0da3f 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/tlv/TlvDecoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/tlv/TlvDecoder.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.tlv;
+package org.eclipse.leshan.core.tlv;
 
 import java.math.BigInteger;
 import java.nio.Buffer;
@@ -27,8 +27,8 @@ import java.util.Date;
 import java.util.List;
 
 import org.eclipse.leshan.core.node.ObjectLink;
-import org.eclipse.leshan.tlv.Tlv.TlvType;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.tlv.Tlv.TlvType;
+import org.eclipse.leshan.core.util.Hex;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/tlv/TlvEncoder.java b/leshan-core/src/main/java/org/eclipse/leshan/core/tlv/TlvEncoder.java
similarity index 99%
rename from leshan-core/src/main/java/org/eclipse/leshan/tlv/TlvEncoder.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/tlv/TlvEncoder.java
index fce399b7..02dae0da 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/tlv/TlvEncoder.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/tlv/TlvEncoder.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.tlv;
+package org.eclipse.leshan.core.tlv;
 
 import java.nio.Buffer;
 import java.nio.ByteBuffer;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/tlv/TlvException.java b/leshan-core/src/main/java/org/eclipse/leshan/core/tlv/TlvException.java
similarity index 96%
rename from leshan-core/src/main/java/org/eclipse/leshan/tlv/TlvException.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/tlv/TlvException.java
index 631497ca..9e625b84 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/tlv/TlvException.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/tlv/TlvException.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.tlv;
+package org.eclipse.leshan.core.tlv;
 
 public class TlvException extends Exception {
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/Base64.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/Base64.java
similarity index 99%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/Base64.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/Base64.java
index 048c6bc7..82e276a4 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/Base64.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/Base64.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.eclipse.leshan.util;
+package org.eclipse.leshan.core.util;
 
 import java.math.BigInteger;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/BaseNCodec.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/BaseNCodec.java
similarity index 99%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/BaseNCodec.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/BaseNCodec.java
index 6a8f95b6..9ba21b9b 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/BaseNCodec.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/BaseNCodec.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.eclipse.leshan.util;
+package org.eclipse.leshan.core.util;
 
 import java.util.Arrays;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/Hex.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/Hex.java
similarity index 99%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/Hex.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/Hex.java
index 7179613f..3803dd76 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/Hex.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/Hex.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.eclipse.leshan.util;
+package org.eclipse.leshan.core.util;
 
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/NamedThreadFactory.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/NamedThreadFactory.java
similarity index 98%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/NamedThreadFactory.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/NamedThreadFactory.java
index c16dbbef..8f3aa156 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/NamedThreadFactory.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/NamedThreadFactory.java
@@ -14,7 +14,7 @@
  *     Alexander Ellwein, Daniel Maier (Bosch Software Innovations GmbH)
  *                                - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.util;
+package org.eclipse.leshan.core.util;
 
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/RandomStringUtils.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/RandomStringUtils.java
similarity index 99%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/RandomStringUtils.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/RandomStringUtils.java
index 67534023..d3b134c2 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/RandomStringUtils.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/RandomStringUtils.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eclipse.leshan.util;
+package org.eclipse.leshan.core.util;
 
 import java.util.Random;
 
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/SecurityUtil.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/SecurityUtil.java
similarity index 98%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/SecurityUtil.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/SecurityUtil.java
index 15975007..5f52bc78 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/SecurityUtil.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/SecurityUtil.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.util;
+package org.eclipse.leshan.core.util;
 
 import java.io.InputStream;
 import java.security.KeyFactory;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/StringUtils.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/StringUtils.java
similarity index 99%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/StringUtils.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/StringUtils.java
index c5e2eeaa..d1c2d043 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/StringUtils.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/StringUtils.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eclipse.leshan.util;
+package org.eclipse.leshan.core.util;
 
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/Validate.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/Validate.java
similarity index 99%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/Validate.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/Validate.java
index cdd0326a..fe5157bb 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/Validate.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/Validate.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eclipse.leshan.util;
+package org.eclipse.leshan.core.util;
 
 import java.util.Collection;
 import java.util.Iterator;
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/json/JsonException.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/json/JsonException.java
similarity index 96%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/json/JsonException.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/json/JsonException.java
index 25d91852..683b8378 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/json/JsonException.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/json/JsonException.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.util.json;
+package org.eclipse.leshan.core.util.json;
 
 /**
  * Exception raised by concrete implementation of {@link JsonSerDes} during serialization and deserialization.
diff --git a/leshan-core/src/main/java/org/eclipse/leshan/util/json/JsonSerDes.java b/leshan-core/src/main/java/org/eclipse/leshan/core/util/json/JsonSerDes.java
similarity index 98%
rename from leshan-core/src/main/java/org/eclipse/leshan/util/json/JsonSerDes.java
rename to leshan-core/src/main/java/org/eclipse/leshan/core/util/json/JsonSerDes.java
index f6a967cb..9f3a495c 100644
--- a/leshan-core/src/main/java/org/eclipse/leshan/util/json/JsonSerDes.java
+++ b/leshan-core/src/main/java/org/eclipse/leshan/core/util/json/JsonSerDes.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.util.json;
+package org.eclipse.leshan.core.util.json;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/LeshanServer.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/LeshanServer.java
index b67965a5..ae62542c 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/LeshanServer.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/LeshanServer.java
@@ -43,6 +43,7 @@ import org.eclipse.leshan.core.request.exception.TimeoutException;
 import org.eclipse.leshan.core.response.ErrorCallback;
 import org.eclipse.leshan.core.response.LwM2mResponse;
 import org.eclipse.leshan.core.response.ResponseCallback;
+import org.eclipse.leshan.core.util.Validate;
 import org.eclipse.leshan.server.Destroyable;
 import org.eclipse.leshan.server.Startable;
 import org.eclipse.leshan.server.Stoppable;
@@ -73,7 +74,6 @@ import org.eclipse.leshan.server.security.EditableSecurityStore;
 import org.eclipse.leshan.server.security.SecurityInfo;
 import org.eclipse.leshan.server.security.SecurityStore;
 import org.eclipse.leshan.server.security.SecurityStoreListener;
-import org.eclipse.leshan.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/LeshanServerBuilder.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/LeshanServerBuilder.java
index 4115de90..ca8f465e 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/LeshanServerBuilder.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/LeshanServerBuilder.java
@@ -34,7 +34,7 @@ import org.eclipse.californium.scandium.DTLSConnector;
 import org.eclipse.californium.scandium.config.DtlsConnectorConfig;
 import org.eclipse.californium.scandium.config.DtlsConnectorConfig.Builder;
 import org.eclipse.californium.scandium.dtls.CertificateType;
-import org.eclipse.leshan.LwM2m;
+import org.eclipse.leshan.core.LwM2m;
 import org.eclipse.leshan.core.californium.DefaultEndpointFactory;
 import org.eclipse.leshan.core.californium.EndpointFactory;
 import org.eclipse.leshan.core.node.LwM2mNode;
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/bootstrap/LeshanBootstrapServer.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/bootstrap/LeshanBootstrapServer.java
index 0ac7c6b3..fa6b21fc 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/bootstrap/LeshanBootstrapServer.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/bootstrap/LeshanBootstrapServer.java
@@ -26,6 +26,7 @@ import org.eclipse.californium.core.server.resources.Resource;
 import org.eclipse.leshan.core.model.LwM2mModel;
 import org.eclipse.leshan.core.node.codec.LwM2mNodeDecoder;
 import org.eclipse.leshan.core.node.codec.LwM2mNodeEncoder;
+import org.eclipse.leshan.core.util.Validate;
 import org.eclipse.leshan.server.Destroyable;
 import org.eclipse.leshan.server.Startable;
 import org.eclipse.leshan.server.Stoppable;
@@ -36,7 +37,6 @@ import org.eclipse.leshan.server.bootstrap.BootstrapSessionManager;
 import org.eclipse.leshan.server.bootstrap.LwM2mBootstrapRequestSender;
 import org.eclipse.leshan.server.californium.RootResource;
 import org.eclipse.leshan.server.security.BootstrapSecurityStore;
-import org.eclipse.leshan.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/bootstrap/LeshanBootstrapServerBuilder.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/bootstrap/LeshanBootstrapServerBuilder.java
index d6cf6e27..1534e2a0 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/bootstrap/LeshanBootstrapServerBuilder.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/bootstrap/LeshanBootstrapServerBuilder.java
@@ -31,7 +31,7 @@ import org.eclipse.californium.scandium.DTLSConnector;
 import org.eclipse.californium.scandium.config.DtlsConnectorConfig;
 import org.eclipse.californium.scandium.config.DtlsConnectorConfig.Builder;
 import org.eclipse.californium.scandium.dtls.CertificateType;
-import org.eclipse.leshan.LwM2m;
+import org.eclipse.leshan.core.LwM2m;
 import org.eclipse.leshan.core.californium.DefaultEndpointFactory;
 import org.eclipse.leshan.core.californium.EndpointFactory;
 import org.eclipse.leshan.core.model.LwM2mModel;
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/observation/ObservationServiceImpl.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/observation/ObservationServiceImpl.java
index 2774266d..729d3c7c 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/observation/ObservationServiceImpl.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/observation/ObservationServiceImpl.java
@@ -40,12 +40,12 @@ import org.eclipse.leshan.core.observation.Observation;
 import org.eclipse.leshan.core.request.ContentFormat;
 import org.eclipse.leshan.core.request.exception.InvalidResponseException;
 import org.eclipse.leshan.core.response.ObserveResponse;
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.leshan.server.californium.registration.CaliforniumRegistrationStore;
 import org.eclipse.leshan.server.model.LwM2mModelProvider;
 import org.eclipse.leshan.server.observation.ObservationListener;
 import org.eclipse.leshan.server.observation.ObservationService;
 import org.eclipse.leshan.server.registration.Registration;
-import org.eclipse.leshan.util.Hex;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/registration/InMemoryRegistrationStore.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/registration/InMemoryRegistrationStore.java
index 2c4202b4..a25fa0bd 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/registration/InMemoryRegistrationStore.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/registration/InMemoryRegistrationStore.java
@@ -47,6 +47,7 @@ import org.eclipse.californium.core.observe.ObservationStoreException;
 import org.eclipse.californium.core.observe.ObservationUtil;
 import org.eclipse.californium.elements.EndpointContext;
 import org.eclipse.leshan.core.observation.Observation;
+import org.eclipse.leshan.core.util.NamedThreadFactory;
 import org.eclipse.leshan.server.Destroyable;
 import org.eclipse.leshan.server.Startable;
 import org.eclipse.leshan.server.Stoppable;
@@ -56,7 +57,6 @@ import org.eclipse.leshan.server.registration.ExpirationListener;
 import org.eclipse.leshan.server.registration.Registration;
 import org.eclipse.leshan.server.registration.RegistrationUpdate;
 import org.eclipse.leshan.server.registration.UpdatedRegistration;
-import org.eclipse.leshan.util.NamedThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/registration/RegisterResource.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/registration/RegisterResource.java
index 8844499f..818c2b87 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/registration/RegisterResource.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/registration/RegisterResource.java
@@ -26,7 +26,7 @@ import org.eclipse.californium.core.coap.CoAP.Type;
 import org.eclipse.californium.core.coap.Request;
 import org.eclipse.californium.core.server.resources.CoapExchange;
 import org.eclipse.californium.core.server.resources.Resource;
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.californium.LwM2mCoapResource;
 import org.eclipse.leshan.core.request.BindingMode;
 import org.eclipse.leshan.core.request.DeregisterRequest;
@@ -167,7 +167,7 @@ public class RegisterResource extends LwM2mCoapResource {
 
         // Create CoAP Response from LwM2m request
         // -------------------------------
-        if (response.getCode() == org.eclipse.leshan.ResponseCode.CREATED) {
+        if (response.getCode() == org.eclipse.leshan.core.ResponseCode.CREATED) {
             exchange.setLocationPath(RESOURCE_NAME + "/" + response.getRegistrationID());
             exchange.respond(ResponseCode.CREATED);
         } else {
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/CaliforniumLwM2mRequestSender.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/CaliforniumLwM2mRequestSender.java
index 02d714c9..8c16188c 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/CaliforniumLwM2mRequestSender.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/CaliforniumLwM2mRequestSender.java
@@ -36,12 +36,12 @@ import org.eclipse.leshan.core.response.ErrorCallback;
 import org.eclipse.leshan.core.response.LwM2mResponse;
 import org.eclipse.leshan.core.response.ObserveResponse;
 import org.eclipse.leshan.core.response.ResponseCallback;
+import org.eclipse.leshan.core.util.Validate;
 import org.eclipse.leshan.server.Destroyable;
 import org.eclipse.leshan.server.californium.observation.ObservationServiceImpl;
 import org.eclipse.leshan.server.model.LwM2mModelProvider;
 import org.eclipse.leshan.server.registration.Registration;
 import org.eclipse.leshan.server.request.LwM2mRequestSender;
-import org.eclipse.leshan.util.Validate;
 
 /**
  * An implementation of {@link LwM2mRequestSender} and {@link CoapRequestSender} based on Californium.
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/CoapRequestBuilder.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/CoapRequestBuilder.java
index b93951eb..85ee87ec 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/CoapRequestBuilder.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/CoapRequestBuilder.java
@@ -44,8 +44,8 @@ import org.eclipse.leshan.core.request.ObserveRequest;
 import org.eclipse.leshan.core.request.ReadRequest;
 import org.eclipse.leshan.core.request.WriteAttributesRequest;
 import org.eclipse.leshan.core.request.WriteRequest;
+import org.eclipse.leshan.core.util.StringUtils;
 import org.eclipse.leshan.server.californium.observation.ObserveUtil;
-import org.eclipse.leshan.util.StringUtils;
 
 /**
  * This class is able to create CoAP request from LWM2M {@link DownlinkRequest}.
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/LwM2mResponseBuilder.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/LwM2mResponseBuilder.java
index 7500a29f..4af44b9d 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/LwM2mResponseBuilder.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/LwM2mResponseBuilder.java
@@ -20,8 +20,8 @@ import static org.eclipse.leshan.core.californium.ResponseCodeUtil.toLwM2mRespon
 import org.eclipse.californium.core.coap.MediaTypeRegistry;
 import org.eclipse.californium.core.coap.Request;
 import org.eclipse.californium.core.coap.Response;
-import org.eclipse.leshan.Link;
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.Link;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.model.LwM2mModel;
 import org.eclipse.leshan.core.node.LwM2mNode;
 import org.eclipse.leshan.core.node.LwM2mPath;
@@ -57,8 +57,8 @@ import org.eclipse.leshan.core.response.ObserveResponse;
 import org.eclipse.leshan.core.response.ReadResponse;
 import org.eclipse.leshan.core.response.WriteAttributesResponse;
 import org.eclipse.leshan.core.response.WriteResponse;
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.leshan.server.californium.observation.ObserveUtil;
-import org.eclipse.leshan.util.Hex;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/RequestSender.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/RequestSender.java
index 8630e56e..8778c1fe 100644
--- a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/RequestSender.java
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/request/RequestSender.java
@@ -51,9 +51,9 @@ import org.eclipse.leshan.core.request.exception.UnconnectedPeerException;
 import org.eclipse.leshan.core.response.ErrorCallback;
 import org.eclipse.leshan.core.response.LwM2mResponse;
 import org.eclipse.leshan.core.response.ResponseCallback;
+import org.eclipse.leshan.core.util.NamedThreadFactory;
+import org.eclipse.leshan.core.util.Validate;
 import org.eclipse.leshan.server.Destroyable;
-import org.eclipse.leshan.util.NamedThreadFactory;
-import org.eclipse.leshan.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfig.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfig.java
index 351ecb85..bcb60dd4 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfig.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/BootstrapConfig.java
@@ -22,7 +22,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.leshan.SecurityMode;
+import org.eclipse.leshan.core.SecurityMode;
 import org.eclipse.leshan.core.request.BindingMode;
 
 /**
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/ConfigurationChecker.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/ConfigurationChecker.java
index 4004a9e8..02177197 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/ConfigurationChecker.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/ConfigurationChecker.java
@@ -24,9 +24,9 @@ import java.security.cert.Certificate;
 import java.util.Arrays;
 import java.util.Map;
 
+import org.eclipse.leshan.core.util.SecurityUtil;
+import org.eclipse.leshan.core.util.StringUtils;
 import org.eclipse.leshan.server.bootstrap.BootstrapConfig.ServerSecurity;
-import org.eclipse.leshan.util.SecurityUtil;
-import org.eclipse.leshan.util.StringUtils;
 
 /**
  * Check a BootstrapConfig is correct. This is a complex process, we need to check if the different objects are in
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapSession.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapSession.java
index 4bde5e50..4b0cf02f 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapSession.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/DefaultBootstrapSession.java
@@ -17,7 +17,7 @@ package org.eclipse.leshan.server.bootstrap;
 
 import org.eclipse.leshan.core.request.ContentFormat;
 import org.eclipse.leshan.core.request.Identity;
-import org.eclipse.leshan.util.RandomStringUtils;
+import org.eclipse.leshan.core.util.RandomStringUtils;
 
 /**
  * A default implementation for {@link BootstrapSession}
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/InMemoryBootstrapConfigStore.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/InMemoryBootstrapConfigStore.java
index 2a0fda47..b6e74a7b 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/InMemoryBootstrapConfigStore.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/bootstrap/InMemoryBootstrapConfigStore.java
@@ -19,7 +19,7 @@ import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.eclipse.leshan.SecurityMode;
+import org.eclipse.leshan.core.SecurityMode;
 import org.eclipse.leshan.core.request.Identity;
 import org.eclipse.leshan.server.bootstrap.BootstrapConfig.ServerSecurity;
 
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/queue/PresenceServiceImpl.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/queue/PresenceServiceImpl.java
index 617389da..6b261839 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/queue/PresenceServiceImpl.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/queue/PresenceServiceImpl.java
@@ -26,9 +26,9 @@ import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
+import org.eclipse.leshan.core.util.NamedThreadFactory;
 import org.eclipse.leshan.server.Destroyable;
 import org.eclipse.leshan.server.registration.Registration;
-import org.eclipse.leshan.util.NamedThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/queue/QueueModeLwM2mRequestSender.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/queue/QueueModeLwM2mRequestSender.java
index 3bf4c1f4..2104c038 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/queue/QueueModeLwM2mRequestSender.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/queue/QueueModeLwM2mRequestSender.java
@@ -22,9 +22,9 @@ import org.eclipse.leshan.core.request.exception.UnconnectedPeerException;
 import org.eclipse.leshan.core.response.ErrorCallback;
 import org.eclipse.leshan.core.response.LwM2mResponse;
 import org.eclipse.leshan.core.response.ResponseCallback;
+import org.eclipse.leshan.core.util.Validate;
 import org.eclipse.leshan.server.registration.Registration;
 import org.eclipse.leshan.server.request.LwM2mRequestSender;
-import org.eclipse.leshan.util.Validate;
 
 /**
  * A {@link LwM2mRequestSender} which supports LWM2M Queue Mode.
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/RandomStringRegistrationIdProvider.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/RandomStringRegistrationIdProvider.java
index 80272c05..83580724 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/RandomStringRegistrationIdProvider.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/RandomStringRegistrationIdProvider.java
@@ -16,7 +16,7 @@
 package org.eclipse.leshan.server.registration;
 
 import org.eclipse.leshan.core.request.RegisterRequest;
-import org.eclipse.leshan.util.RandomStringUtils;
+import org.eclipse.leshan.core.util.RandomStringUtils;
 
 public class RandomStringRegistrationIdProvider implements RegistrationIdProvider {
 
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/Registration.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/Registration.java
index f3ea8dab..c57ec545 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/Registration.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/Registration.java
@@ -29,13 +29,13 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.attributes.Attribute;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.request.BindingMode;
 import org.eclipse.leshan.core.request.Identity;
-import org.eclipse.leshan.util.StringUtils;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.StringUtils;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * An immutable structure which represent a LW-M2M client registration on the server
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/RegistrationUpdate.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/RegistrationUpdate.java
index 1f306301..acc24c81 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/RegistrationUpdate.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/registration/RegistrationUpdate.java
@@ -23,10 +23,10 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.BindingMode;
 import org.eclipse.leshan.core.request.Identity;
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * A container object for updating a LW-M2M client's registration properties on the server.
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/Authorizer.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/Authorizer.java
index d8c4dc9c..be56cd84 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/Authorizer.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/Authorizer.java
@@ -15,7 +15,7 @@
  *******************************************************************************/
 package org.eclipse.leshan.server.security;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.Identity;
 import org.eclipse.leshan.core.request.UplinkRequest;
 import org.eclipse.leshan.server.registration.Registration;
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/FileSecurityStore.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/FileSecurityStore.java
index aa03632e..3fee9c08 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/FileSecurityStore.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/FileSecurityStore.java
@@ -22,7 +22,7 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/SecurityChecker.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/SecurityChecker.java
index c74ed792..9ff3ae94 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/SecurityChecker.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/SecurityChecker.java
@@ -19,7 +19,7 @@ import java.security.PublicKey;
 import java.util.List;
 
 import org.eclipse.leshan.core.request.Identity;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.util.Hex;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/SecurityInfo.java b/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/SecurityInfo.java
index 1a2d5f41..060f00f0 100644
--- a/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/SecurityInfo.java
+++ b/leshan-server-core/src/main/java/org/eclipse/leshan/server/security/SecurityInfo.java
@@ -19,7 +19,7 @@ import java.io.Serializable;
 import java.security.PublicKey;
 import java.util.Arrays;
 
-import org.eclipse.leshan.util.Validate;
+import org.eclipse.leshan.core.util.Validate;
 
 /**
  * The security info for a client.
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/LeshanServerDemo.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/LeshanServerDemo.java
index c1507f3e..80f1cbf7 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/LeshanServerDemo.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/LeshanServerDemo.java
@@ -47,12 +47,13 @@ import org.eclipse.californium.scandium.config.DtlsConnectorConfig;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.webapp.WebAppContext;
-import org.eclipse.leshan.LwM2m;
+import org.eclipse.leshan.core.LwM2m;
 import org.eclipse.leshan.core.model.ObjectLoader;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.node.codec.DefaultLwM2mNodeDecoder;
 import org.eclipse.leshan.core.node.codec.DefaultLwM2mNodeEncoder;
 import org.eclipse.leshan.core.node.codec.LwM2mNodeDecoder;
+import org.eclipse.leshan.core.util.SecurityUtil;
 import org.eclipse.leshan.server.californium.LeshanServer;
 import org.eclipse.leshan.server.californium.LeshanServerBuilder;
 import org.eclipse.leshan.server.demo.servlet.ClientServlet;
@@ -66,7 +67,6 @@ import org.eclipse.leshan.server.redis.RedisRegistrationStore;
 import org.eclipse.leshan.server.redis.RedisSecurityStore;
 import org.eclipse.leshan.server.security.EditableSecurityStore;
 import org.eclipse.leshan.server.security.FileSecurityStore;
-import org.eclipse.leshan.util.SecurityUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/Ddf2JsonGenerator.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/Ddf2JsonGenerator.java
index 77026966..8cb460cb 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/Ddf2JsonGenerator.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/Ddf2JsonGenerator.java
@@ -29,7 +29,7 @@ import java.util.List;
 
 import org.eclipse.leshan.core.model.DDFFileParser;
 import org.eclipse.leshan.core.model.ObjectModel;
-import org.eclipse.leshan.util.json.JsonException;
+import org.eclipse.leshan.core.util.json.JsonException;
 
 public class Ddf2JsonGenerator {
 
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/DdfList2JsonGenerator.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/DdfList2JsonGenerator.java
index 3e9bac8b..c9c0dfed 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/DdfList2JsonGenerator.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/DdfList2JsonGenerator.java
@@ -32,7 +32,7 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
-import org.eclipse.leshan.util.json.JsonException;
+import org.eclipse.leshan.core.util.json.JsonException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/ObjectModelSerDes.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/ObjectModelSerDes.java
index 341d608a..7a2b95a5 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/ObjectModelSerDes.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/ObjectModelSerDes.java
@@ -22,8 +22,8 @@ import java.util.List;
 
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.model.ResourceModel;
-import org.eclipse.leshan.util.json.JsonException;
-import org.eclipse.leshan.util.json.JsonSerDes;
+import org.eclipse.leshan.core.util.json.JsonException;
+import org.eclipse.leshan.core.util.json.JsonSerDes;
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonArray;
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/ResourceModelSerDes.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/ResourceModelSerDes.java
index c9df6169..76c08417 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/ResourceModelSerDes.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/model/ResourceModelSerDes.java
@@ -18,7 +18,7 @@ package org.eclipse.leshan.server.demo.model;
 import org.eclipse.leshan.core.model.ResourceModel;
 import org.eclipse.leshan.core.model.ResourceModel.Operations;
 import org.eclipse.leshan.core.model.ResourceModel.Type;
-import org.eclipse.leshan.util.json.JsonSerDes;
+import org.eclipse.leshan.core.util.json.JsonSerDes;
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonObject;
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/ObjectSpecServlet.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/ObjectSpecServlet.java
index 94228038..ea098bb0 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/ObjectSpecServlet.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/ObjectSpecServlet.java
@@ -24,11 +24,11 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang.StringUtils;
 import org.eclipse.leshan.core.model.LwM2mModel;
+import org.eclipse.leshan.core.util.json.JsonException;
 import org.eclipse.leshan.server.demo.model.ObjectModelSerDes;
 import org.eclipse.leshan.server.model.LwM2mModelProvider;
 import org.eclipse.leshan.server.registration.Registration;
 import org.eclipse.leshan.server.registration.RegistrationService;
-import org.eclipse.leshan.util.json.JsonException;
 
 public class ObjectSpecServlet extends HttpServlet {
 
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/LwM2mNodeSerializer.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/LwM2mNodeSerializer.java
index 40107c47..12092261 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/LwM2mNodeSerializer.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/LwM2mNodeSerializer.java
@@ -22,7 +22,7 @@ import org.eclipse.leshan.core.node.LwM2mNode;
 import org.eclipse.leshan.core.node.LwM2mObject;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
 import org.eclipse.leshan.core.node.LwM2mResource;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.util.Hex;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/PublicKeySerDes.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/PublicKeySerDes.java
index 904cc7e8..f6aa4671 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/PublicKeySerDes.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/PublicKeySerDes.java
@@ -19,9 +19,9 @@ import java.security.PublicKey;
 import java.security.interfaces.ECPublicKey;
 import java.util.Arrays;
 
-import org.eclipse.leshan.util.Base64;
-import org.eclipse.leshan.util.Hex;
-import org.eclipse.leshan.util.json.JsonSerDes;
+import org.eclipse.leshan.core.util.Base64;
+import org.eclipse.leshan.core.util.Hex;
+import org.eclipse.leshan.core.util.json.JsonSerDes;
 
 import com.eclipsesource.json.JsonObject;
 
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/SecurityDeserializer.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/SecurityDeserializer.java
index 04468d9f..38723b60 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/SecurityDeserializer.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/SecurityDeserializer.java
@@ -29,8 +29,8 @@ import java.security.spec.InvalidKeySpecException;
 import java.security.spec.InvalidParameterSpecException;
 import java.security.spec.KeySpec;
 
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.leshan.server.security.SecurityInfo;
-import org.eclipse.leshan.util.Hex;
 
 import com.google.gson.JsonDeserializationContext;
 import com.google.gson.JsonDeserializer;
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/SecuritySerializer.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/SecuritySerializer.java
index 1ef4bdee..030f871c 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/SecuritySerializer.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/SecuritySerializer.java
@@ -20,9 +20,9 @@ import java.security.PublicKey;
 import java.security.interfaces.ECPublicKey;
 import java.util.Arrays;
 
+import org.eclipse.leshan.core.util.Base64;
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.leshan.server.security.SecurityInfo;
-import org.eclipse.leshan.util.Base64;
-import org.eclipse.leshan.util.Hex;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/X509CertificateSerDes.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/X509CertificateSerDes.java
index a0b8cd1f..cc4a93ba 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/X509CertificateSerDes.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/json/X509CertificateSerDes.java
@@ -18,8 +18,8 @@ package org.eclipse.leshan.server.demo.servlet.json;
 import java.security.cert.CertificateEncodingException;
 import java.security.cert.X509Certificate;
 
-import org.eclipse.leshan.util.Base64;
-import org.eclipse.leshan.util.json.JsonSerDes;
+import org.eclipse.leshan.core.util.Base64;
+import org.eclipse.leshan.core.util.json.JsonSerDes;
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonObject;
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/log/CoapMessage.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/log/CoapMessage.java
index 86943acd..f1ae8969 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/log/CoapMessage.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/servlet/log/CoapMessage.java
@@ -24,13 +24,13 @@ import java.util.Map.Entry;
 
 import org.apache.commons.lang.StringUtils;
 import org.eclipse.californium.core.coap.CoAP.Type;
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.californium.core.coap.EmptyMessage;
 import org.eclipse.californium.core.coap.Option;
 import org.eclipse.californium.core.coap.OptionNumberRegistry;
 import org.eclipse.californium.core.coap.OptionSet;
 import org.eclipse.californium.core.coap.Request;
 import org.eclipse.californium.core.coap.Response;
-import org.eclipse.leshan.util.Hex;
 
 public class CoapMessage {
 
diff --git a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/utils/MagicLwM2mValueConverter.java b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/utils/MagicLwM2mValueConverter.java
index 02a3d8a0..cd96de18 100644
--- a/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/utils/MagicLwM2mValueConverter.java
+++ b/leshan-server-demo/src/main/java/org/eclipse/leshan/server/demo/utils/MagicLwM2mValueConverter.java
@@ -28,8 +28,8 @@ import org.eclipse.leshan.core.model.ResourceModel.Type;
 import org.eclipse.leshan.core.node.LwM2mPath;
 import org.eclipse.leshan.core.node.codec.CodecException;
 import org.eclipse.leshan.core.node.codec.LwM2mValueConverter;
-import org.eclipse.leshan.util.Hex;
-import org.eclipse.leshan.util.StringUtils;
+import org.eclipse.leshan.core.util.Hex;
+import org.eclipse.leshan.core.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/RedisRegistrationStore.java b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/RedisRegistrationStore.java
index 63062691..7cb2883f 100644
--- a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/RedisRegistrationStore.java
+++ b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/RedisRegistrationStore.java
@@ -39,6 +39,8 @@ import org.eclipse.californium.core.coap.Token;
 import org.eclipse.californium.core.observe.ObservationStoreException;
 import org.eclipse.californium.elements.EndpointContext;
 import org.eclipse.leshan.core.observation.Observation;
+import org.eclipse.leshan.core.util.NamedThreadFactory;
+import org.eclipse.leshan.core.util.Validate;
 import org.eclipse.leshan.server.Destroyable;
 import org.eclipse.leshan.server.Startable;
 import org.eclipse.leshan.server.Stoppable;
@@ -51,8 +53,6 @@ import org.eclipse.leshan.server.registration.ExpirationListener;
 import org.eclipse.leshan.server.registration.Registration;
 import org.eclipse.leshan.server.registration.RegistrationUpdate;
 import org.eclipse.leshan.server.registration.UpdatedRegistration;
-import org.eclipse.leshan.util.NamedThreadFactory;
-import org.eclipse.leshan.util.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/EndpointContextSerDes.java b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/EndpointContextSerDes.java
index d75e2a87..d6b4cc09 100644
--- a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/EndpointContextSerDes.java
+++ b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/EndpointContextSerDes.java
@@ -32,7 +32,7 @@ import org.eclipse.californium.elements.MapBasedEndpointContext;
 import org.eclipse.californium.elements.auth.PreSharedKeyIdentity;
 import org.eclipse.californium.elements.auth.RawPublicKeyIdentity;
 import org.eclipse.californium.elements.auth.X509CertPath;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.util.Hex;
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonObject;
diff --git a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/IdentitySerDes.java b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/IdentitySerDes.java
index 2678f28e..fc7d5666 100644
--- a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/IdentitySerDes.java
+++ b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/IdentitySerDes.java
@@ -24,7 +24,7 @@ import java.security.spec.X509EncodedKeySpec;
 
 import org.eclipse.californium.elements.EndpointContext;
 import org.eclipse.leshan.core.request.Identity;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.util.Hex;
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonObject;
diff --git a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/ObservationSerDes.java b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/ObservationSerDes.java
index ce375373..1a2bc7e3 100644
--- a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/ObservationSerDes.java
+++ b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/ObservationSerDes.java
@@ -29,7 +29,7 @@ import org.eclipse.californium.core.network.serialization.UdpDataSerializer;
 import org.eclipse.californium.core.observe.Observation;
 import org.eclipse.californium.elements.EndpointContext;
 import org.eclipse.californium.elements.RawData;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.util.Hex;
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonObject;
diff --git a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/RegistrationSerDes.java b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/RegistrationSerDes.java
index 3190bf92..1fe5c23d 100644
--- a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/RegistrationSerDes.java
+++ b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/RegistrationSerDes.java
@@ -19,7 +19,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.BindingMode;
 import org.eclipse.leshan.server.registration.Registration;
 
diff --git a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/SecurityInfoSerDes.java b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/SecurityInfoSerDes.java
index 0c049e0b..67422739 100644
--- a/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/SecurityInfoSerDes.java
+++ b/leshan-server-redis/src/main/java/org/eclipse/leshan/server/redis/serialization/SecurityInfoSerDes.java
@@ -30,8 +30,8 @@ import java.security.spec.InvalidParameterSpecException;
 import java.security.spec.KeySpec;
 import java.util.Arrays;
 
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.leshan.server.security.SecurityInfo;
-import org.eclipse.leshan.util.Hex;
 
 import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonObject;
diff --git a/pom.xml b/pom.xml
index c94438ae..52045e1a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -292,7 +292,7 @@ Contributors:
                     <artifactId>maven-javadoc-plugin</artifactId>
                     <version>3.1.1</version>
                     <configuration>
-                        <excludePackageNames>org.eclipse.leshan.util</excludePackageNames>
+                        <excludePackageNames>org.eclipse.leshan.core.util;org.eclipse.leshan.**.demo;org.eclipse.leshan.**.demo.**</excludePackageNames>
                         <quiet>true</quiet>
                         <doclint>all,-missing</doclint>
                     </configuration>


Test patch:
diff --git a/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/BaseInstanceEnablerFactoryTest.java b/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/BaseInstanceEnablerFactoryTest.java
index 57d60f11..3019f47a 100644
--- a/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/BaseInstanceEnablerFactoryTest.java
+++ b/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/BaseInstanceEnablerFactoryTest.java
@@ -21,10 +21,10 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.resource.BaseInstanceEnablerFactory;
 import org.eclipse.leshan.client.resource.DummyInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mInstanceEnabler;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.model.LwM2mModel;
 import org.eclipse.leshan.core.model.ObjectLoader;
 import org.eclipse.leshan.core.model.StaticModel;
diff --git a/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/LinkFormatHelperTest.java b/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/LinkFormatHelperTest.java
index 2231fc0a..40241adf 100644
--- a/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/LinkFormatHelperTest.java
+++ b/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/LinkFormatHelperTest.java
@@ -22,13 +22,13 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.leshan.Link;
 import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
 import org.eclipse.leshan.client.resource.BaseInstanceEnablerFactory;
 import org.eclipse.leshan.client.resource.DummyInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.ObjectEnabler;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.model.ObjectLoader;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.request.ContentFormat;
diff --git a/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/ObjectEnablerTest.java b/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/ObjectEnablerTest.java
index ffd21bae..69e65b56 100644
--- a/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/ObjectEnablerTest.java
+++ b/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/ObjectEnablerTest.java
@@ -22,11 +22,11 @@ import static org.junit.Assert.assertTrue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.ObjectsInitializer;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.request.DeleteRequest;
 import org.junit.Test;
 
diff --git a/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/ObjectsInitializerTest.java b/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/ObjectsInitializerTest.java
index c871277c..aa30a09d 100644
--- a/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/ObjectsInitializerTest.java
+++ b/leshan-client-core/src/test/java/org/eclipse/leshan/client/util/ObjectsInitializerTest.java
@@ -20,11 +20,11 @@ import static org.junit.Assert.assertTrue;
 import java.util.Arrays;
 import java.util.List;
 
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.ObjectsInitializer;
+import org.eclipse.leshan.core.LwM2mId;
 import org.junit.Test;
 
 public class ObjectsInitializerTest {
diff --git a/leshan-core-cf/src/test/java/org/eclipse/leshan/core/californium/ResponseCodeUtilTest.java b/leshan-core-cf/src/test/java/org/eclipse/leshan/core/californium/ResponseCodeUtilTest.java
index 1dae07f1..2525ea48 100644
--- a/leshan-core-cf/src/test/java/org/eclipse/leshan/core/californium/ResponseCodeUtilTest.java
+++ b/leshan-core-cf/src/test/java/org/eclipse/leshan/core/californium/ResponseCodeUtilTest.java
@@ -23,45 +23,45 @@ public class ResponseCodeUtilTest {
 
     @Test
     public void known_coap_code_to_known_lwm2m_Code() {
-        org.eclipse.leshan.ResponseCode lwM2mResponseCode = ResponseCodeUtil.toLwM2mResponseCode(ResponseCode.CREATED);
+        org.eclipse.leshan.core.ResponseCode lwM2mResponseCode = ResponseCodeUtil.toLwM2mResponseCode(ResponseCode.CREATED);
 
-        Assert.assertEquals(org.eclipse.leshan.ResponseCode.CREATED, lwM2mResponseCode);
+        Assert.assertEquals(org.eclipse.leshan.core.ResponseCode.CREATED, lwM2mResponseCode);
         Assert.assertEquals("CREATED", lwM2mResponseCode.toString());
     }
 
     @Test
     public void known_coap_code_to_unknown_lwm2m_code() {
-        org.eclipse.leshan.ResponseCode lwM2mResponseCode = ResponseCodeUtil
+        org.eclipse.leshan.core.ResponseCode lwM2mResponseCode = ResponseCodeUtil
                 .toLwM2mResponseCode(ResponseCode.GATEWAY_TIMEOUT);
 
         Assert.assertEquals(504, lwM2mResponseCode.getCode());
-        Assert.assertEquals(org.eclipse.leshan.ResponseCode.UNKNOWN, lwM2mResponseCode.getName());
+        Assert.assertEquals(org.eclipse.leshan.core.ResponseCode.UNKNOWN, lwM2mResponseCode.getName());
         Assert.assertEquals("UNKNOWN(504)", lwM2mResponseCode.toString());
     }
 
     @Test
     public void known_lwm2m_code_to_known_coap_code() {
         ResponseCode coapResponseCode = ResponseCodeUtil
-                .toCoapResponseCode(org.eclipse.leshan.ResponseCode.BAD_REQUEST);
+                .toCoapResponseCode(org.eclipse.leshan.core.ResponseCode.BAD_REQUEST);
 
         Assert.assertEquals(ResponseCode.BAD_REQUEST, coapResponseCode);
     }
 
     @Test
     public void unknown_lwm2m_code_to_known_coap_code() {
-        ResponseCode coapResponseCode = ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.ResponseCode(503));
+        ResponseCode coapResponseCode = ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.core.ResponseCode(503));
 
         Assert.assertEquals(ResponseCode.SERVICE_UNAVAILABLE, coapResponseCode);
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void unknown_lwm2m_code_to_invalid_coap_code() {
-        ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.ResponseCode(301));
+        ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.core.ResponseCode(301));
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void unknown_lwm2m_code_to_invalid_coap_code2() {
-        ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.ResponseCode(441));
+        ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.core.ResponseCode(441));
     }
 
     @Test
@@ -69,15 +69,15 @@ public class ResponseCodeUtilTest {
         // californium behavior is not really consistent
 
         // for success : code value is lost but we know we use an unknown code
-        ResponseCode coapResponseCode = ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.ResponseCode(206));
+        ResponseCode coapResponseCode = ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.core.ResponseCode(206));
         Assert.assertEquals(ResponseCode._UNKNOWN_SUCCESS_CODE, coapResponseCode);
 
         // for client error,: unknown code is replace by BAD REQUEST ...
-        coapResponseCode = ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.ResponseCode(425));
+        coapResponseCode = ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.core.ResponseCode(425));
         Assert.assertEquals(ResponseCode.BAD_REQUEST, coapResponseCode);
 
         // for server error : unknown code is replace by INTERNAL SERVER ERROR ...
-        coapResponseCode = ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.ResponseCode(509));
+        coapResponseCode = ResponseCodeUtil.toCoapResponseCode(new org.eclipse.leshan.core.ResponseCode(509));
         Assert.assertEquals(ResponseCode.INTERNAL_SERVER_ERROR, coapResponseCode);
 
     }
diff --git a/leshan-core/src/test/java/org/eclipse/leshan/LinkObjectTest.java b/leshan-core/src/test/java/org/eclipse/leshan/core/LinkObjectTest.java
similarity index 98%
rename from leshan-core/src/test/java/org/eclipse/leshan/LinkObjectTest.java
rename to leshan-core/src/test/java/org/eclipse/leshan/core/LinkObjectTest.java
index ecdc1719..f48df53e 100644
--- a/leshan-core/src/test/java/org/eclipse/leshan/LinkObjectTest.java
+++ b/leshan-core/src/test/java/org/eclipse/leshan/core/LinkObjectTest.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan;
+package org.eclipse.leshan.core;
 
 import static org.junit.Assert.assertEquals;
 
@@ -21,6 +21,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.leshan.core.Link;
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/leshan-core/src/test/java/org/eclipse/leshan/json/JsonDeserializerTest.java b/leshan-core/src/test/java/org/eclipse/leshan/core/json/JsonDeserializerTest.java
similarity index 95%
rename from leshan-core/src/test/java/org/eclipse/leshan/json/JsonDeserializerTest.java
rename to leshan-core/src/test/java/org/eclipse/leshan/core/json/JsonDeserializerTest.java
index 1c9f175a..0cb8b023 100644
--- a/leshan-core/src/test/java/org/eclipse/leshan/json/JsonDeserializerTest.java
+++ b/leshan-core/src/test/java/org/eclipse/leshan/core/json/JsonDeserializerTest.java
@@ -14,8 +14,11 @@
  *     Sierra Wireless - initial API and implementation
  *     Gemalto M2M GmbH
  *******************************************************************************/
-package org.eclipse.leshan.json;
+package org.eclipse.leshan.core.json;
 
+import org.eclipse.leshan.core.json.JsonRootObject;
+import org.eclipse.leshan.core.json.LwM2mJson;
+import org.eclipse.leshan.core.json.LwM2mJsonException;
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
diff --git a/leshan-core/src/test/java/org/eclipse/leshan/json/JsonSerializerTest.java b/leshan-core/src/test/java/org/eclipse/leshan/core/json/JsonSerializerTest.java
similarity index 93%
rename from leshan-core/src/test/java/org/eclipse/leshan/json/JsonSerializerTest.java
rename to leshan-core/src/test/java/org/eclipse/leshan/core/json/JsonSerializerTest.java
index fa225107..ad246230 100644
--- a/leshan-core/src/test/java/org/eclipse/leshan/json/JsonSerializerTest.java
+++ b/leshan-core/src/test/java/org/eclipse/leshan/core/json/JsonSerializerTest.java
@@ -14,10 +14,14 @@
  *     Sierra Wireless - initial API and implementation
  *     Gemalto M2M GmbH
  *******************************************************************************/
-package org.eclipse.leshan.json;
+package org.eclipse.leshan.core.json;
 
 import java.util.ArrayList;
 
+import org.eclipse.leshan.core.json.JsonArrayEntry;
+import org.eclipse.leshan.core.json.JsonRootObject;
+import org.eclipse.leshan.core.json.LwM2mJson;
+import org.eclipse.leshan.core.json.LwM2mJsonException;
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
diff --git a/leshan-core/src/test/java/org/eclipse/leshan/core/node/codec/LwM2mNodeDecoderTest.java b/leshan-core/src/test/java/org/eclipse/leshan/core/node/codec/LwM2mNodeDecoderTest.java
index 4698aa70..c1eb4c60 100644
--- a/leshan-core/src/test/java/org/eclipse/leshan/core/node/codec/LwM2mNodeDecoderTest.java
+++ b/leshan-core/src/test/java/org/eclipse/leshan/core/node/codec/LwM2mNodeDecoderTest.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import org.eclipse.leshan.core.json.LwM2mJsonException;
 import org.eclipse.leshan.core.model.LwM2mModel;
 import org.eclipse.leshan.core.model.ObjectLoader;
 import org.eclipse.leshan.core.model.ObjectModel;
@@ -39,11 +40,10 @@ import org.eclipse.leshan.core.node.LwM2mSingleResource;
 import org.eclipse.leshan.core.node.ObjectLink;
 import org.eclipse.leshan.core.node.TimestampedLwM2mNode;
 import org.eclipse.leshan.core.request.ContentFormat;
-import org.eclipse.leshan.json.LwM2mJsonException;
-import org.eclipse.leshan.tlv.Tlv;
-import org.eclipse.leshan.tlv.Tlv.TlvType;
-import org.eclipse.leshan.tlv.TlvEncoder;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.tlv.Tlv;
+import org.eclipse.leshan.core.tlv.TlvEncoder;
+import org.eclipse.leshan.core.tlv.Tlv.TlvType;
+import org.eclipse.leshan.core.util.Hex;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
diff --git a/leshan-core/src/test/java/org/eclipse/leshan/core/node/codec/LwM2mNodeEncoderTest.java b/leshan-core/src/test/java/org/eclipse/leshan/core/node/codec/LwM2mNodeEncoderTest.java
index f1ae992d..6131e393 100644
--- a/leshan-core/src/test/java/org/eclipse/leshan/core/node/codec/LwM2mNodeEncoderTest.java
+++ b/leshan-core/src/test/java/org/eclipse/leshan/core/node/codec/LwM2mNodeEncoderTest.java
@@ -35,7 +35,7 @@ import org.eclipse.leshan.core.node.LwM2mResource;
 import org.eclipse.leshan.core.node.LwM2mSingleResource;
 import org.eclipse.leshan.core.node.TimestampedLwM2mNode;
 import org.eclipse.leshan.core.request.ContentFormat;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.util.Hex;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/leshan-core/src/test/java/org/eclipse/leshan/tlv/TlvDecoderTest.java b/leshan-core/src/test/java/org/eclipse/leshan/core/tlv/TlvDecoderTest.java
similarity index 91%
rename from leshan-core/src/test/java/org/eclipse/leshan/tlv/TlvDecoderTest.java
rename to leshan-core/src/test/java/org/eclipse/leshan/core/tlv/TlvDecoderTest.java
index fcacdd9f..b1659d25 100644
--- a/leshan-core/src/test/java/org/eclipse/leshan/tlv/TlvDecoderTest.java
+++ b/leshan-core/src/test/java/org/eclipse/leshan/core/tlv/TlvDecoderTest.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.tlv;
+package org.eclipse.leshan.core.tlv;
 
 import static org.junit.Assert.*;
 
@@ -21,7 +21,11 @@ import java.nio.ByteBuffer;
 import java.util.Arrays;
 
 import org.eclipse.leshan.core.node.ObjectLink;
-import org.eclipse.leshan.util.Hex;
+import org.eclipse.leshan.core.tlv.Tlv;
+import org.eclipse.leshan.core.tlv.TlvDecoder;
+import org.eclipse.leshan.core.tlv.TlvEncoder;
+import org.eclipse.leshan.core.tlv.TlvException;
+import org.eclipse.leshan.core.util.Hex;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/leshan-core/src/test/java/org/eclipse/leshan/tlv/TlvEncoderTest.java b/leshan-core/src/test/java/org/eclipse/leshan/core/tlv/TlvEncoderTest.java
similarity index 90%
rename from leshan-core/src/test/java/org/eclipse/leshan/tlv/TlvEncoderTest.java
rename to leshan-core/src/test/java/org/eclipse/leshan/core/tlv/TlvEncoderTest.java
index f0663c83..41bd64e2 100644
--- a/leshan-core/src/test/java/org/eclipse/leshan/tlv/TlvEncoderTest.java
+++ b/leshan-core/src/test/java/org/eclipse/leshan/core/tlv/TlvEncoderTest.java
@@ -13,7 +13,7 @@
  * Contributors:
  *     Sierra Wireless - initial API and implementation
  *******************************************************************************/
-package org.eclipse.leshan.tlv;
+package org.eclipse.leshan.core.tlv;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
@@ -21,7 +21,11 @@ import static org.junit.Assert.assertEquals;
 import java.nio.ByteBuffer;
 import java.util.Date;
 
-import org.eclipse.leshan.tlv.Tlv.TlvType;
+import org.eclipse.leshan.core.tlv.Tlv;
+import org.eclipse.leshan.core.tlv.TlvDecoder;
+import org.eclipse.leshan.core.tlv.TlvEncoder;
+import org.eclipse.leshan.core.tlv.TlvException;
+import org.eclipse.leshan.core.tlv.Tlv.TlvType;
 import org.junit.Test;
 
 public class TlvEncoderTest {
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/BootstrapIntegrationTestHelper.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/BootstrapIntegrationTestHelper.java
index 7df6313f..4b52018e 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/BootstrapIntegrationTestHelper.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/BootstrapIntegrationTestHelper.java
@@ -35,14 +35,15 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 
-import org.eclipse.leshan.LwM2mId;
-import org.eclipse.leshan.SecurityMode;
 import org.eclipse.leshan.client.californium.LeshanClientBuilder;
 import org.eclipse.leshan.client.object.Device;
 import org.eclipse.leshan.client.object.Security;
 import org.eclipse.leshan.client.resource.DummyInstanceEnabler;
 import org.eclipse.leshan.client.resource.ObjectsInitializer;
+import org.eclipse.leshan.core.LwM2mId;
+import org.eclipse.leshan.core.SecurityMode;
 import org.eclipse.leshan.core.request.Identity;
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.leshan.server.bootstrap.BootstrapConfig;
 import org.eclipse.leshan.server.bootstrap.BootstrapConfig.ACLConfig;
 import org.eclipse.leshan.server.bootstrap.BootstrapConfig.ServerConfig;
@@ -54,7 +55,6 @@ import org.eclipse.leshan.server.californium.bootstrap.LeshanBootstrapServerBuil
 import org.eclipse.leshan.server.security.BootstrapSecurityStore;
 import org.eclipse.leshan.server.security.EditableSecurityStore;
 import org.eclipse.leshan.server.security.SecurityInfo;
-import org.eclipse.leshan.util.Hex;
 
 /**
  * Helper for running a server and executing a client against it.
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/BootstrapTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/BootstrapTest.java
index 605fed08..ec628a00 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/BootstrapTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/BootstrapTest.java
@@ -20,12 +20,12 @@ import static org.hamcrest.CoreMatchers.hasItems;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.*;
 
-import org.eclipse.leshan.LwM2mId;
-import org.eclipse.leshan.SecurityMode;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.ObjectsInitializer;
 import org.eclipse.leshan.client.resource.SimpleInstanceEnabler;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.LwM2mId;
+import org.eclipse.leshan.core.SecurityMode;
 import org.eclipse.leshan.core.node.LwM2mObject;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
 import org.eclipse.leshan.core.request.ReadRequest;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/Callback.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/Callback.java
index 52530155..d7b49aaf 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/Callback.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/Callback.java
@@ -19,7 +19,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.response.ErrorCallback;
 import org.eclipse.leshan.core.response.LwM2mResponse;
 import org.eclipse.leshan.core.response.ResponseCallback;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/CreateTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/CreateTest.java
index b90e4aea..bb376983 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/CreateTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/CreateTest.java
@@ -26,7 +26,7 @@ import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.*;
 
 import org.eclipse.californium.core.coap.Response;
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.node.LwM2mObject;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
 import org.eclipse.leshan.core.node.LwM2mResource;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/DeleteTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/DeleteTest.java
index 40d186a5..dc1c48c7 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/DeleteTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/DeleteTest.java
@@ -26,7 +26,7 @@ import static org.junit.Assert.*;
 
 import org.eclipse.californium.core.coap.Request;
 import org.eclipse.californium.core.coap.Response;
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
 import org.eclipse.leshan.core.node.LwM2mSingleResource;
 import org.eclipse.leshan.core.request.CreateRequest;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/DiscoverTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/DiscoverTest.java
index 94c4caff..0c774c80 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/DiscoverTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/DiscoverTest.java
@@ -16,14 +16,14 @@
 
 package org.eclipse.leshan.integration.tests;
 
-import static org.eclipse.leshan.ResponseCode.*;
+import static org.eclipse.leshan.core.ResponseCode.*;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.*;
 
 import org.eclipse.californium.core.coap.Response;
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.DiscoverRequest;
 import org.eclipse.leshan.core.response.DiscoverResponse;
 import org.junit.After;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ExecuteTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ExecuteTest.java
index fc32db87..e9b346f1 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ExecuteTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ExecuteTest.java
@@ -25,7 +25,7 @@ import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.*;
 
 import org.eclipse.californium.core.coap.Response;
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.ExecuteRequest;
 import org.eclipse.leshan.core.response.ExecuteResponse;
 import org.junit.After;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/FailingTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/FailingTest.java
index ed568786..e91ac85a 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/FailingTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/FailingTest.java
@@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.eclipse.californium.core.coap.CoAP.Type;
 import org.eclipse.californium.core.network.config.NetworkConfig;
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.BindingMode;
 import org.eclipse.leshan.core.request.ReadRequest;
 import org.eclipse.leshan.core.request.RegisterRequest;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/IntegrationTestHelper.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/IntegrationTestHelper.java
index a92784b8..f05334b6 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/IntegrationTestHelper.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/IntegrationTestHelper.java
@@ -27,7 +27,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.californium.LeshanClient;
 import org.eclipse.leshan.client.californium.LeshanClientBuilder;
 import org.eclipse.leshan.client.object.Device;
@@ -37,6 +36,7 @@ import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.ObjectsInitializer;
 import org.eclipse.leshan.client.resource.SimpleInstanceEnabler;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.model.ObjectLoader;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.model.ResourceModel;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ObserveTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ObserveTest.java
index 16d11160..938f1dc0 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ObserveTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ObserveTest.java
@@ -40,9 +40,9 @@ import org.eclipse.californium.elements.AddressEndpointContext;
 import org.eclipse.californium.elements.Connector;
 import org.eclipse.californium.elements.EndpointContext;
 import org.eclipse.californium.elements.RawData;
-import org.eclipse.leshan.ResponseCode;
 import org.eclipse.leshan.client.californium.LeshanClient;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.model.StaticModel;
 import org.eclipse.leshan.core.node.LwM2mObject;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/QueueModeIntegrationTestHelper.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/QueueModeIntegrationTestHelper.java
index 9e884000..e3bf3b3f 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/QueueModeIntegrationTestHelper.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/QueueModeIntegrationTestHelper.java
@@ -22,13 +22,13 @@ import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.californium.LeshanClientBuilder;
 import org.eclipse.leshan.client.object.Security;
 import org.eclipse.leshan.client.object.Server;
 import org.eclipse.leshan.client.resource.DummyInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.ObjectsInitializer;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.model.StaticModel;
 import org.eclipse.leshan.core.request.BindingMode;
 import org.eclipse.leshan.core.response.LwM2mResponse;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/QueueModeTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/QueueModeTest.java
index 171a5576..6e97eb37 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/QueueModeTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/QueueModeTest.java
@@ -18,7 +18,7 @@ package org.eclipse.leshan.integration.tests;
 
 import static org.junit.Assert.*;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.ReadRequest;
 import org.eclipse.leshan.core.response.ReadResponse;
 import org.junit.After;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ReadTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ReadTest.java
index 460d934b..5b6e2d39 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ReadTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/ReadTest.java
@@ -18,7 +18,7 @@
 
 package org.eclipse.leshan.integration.tests;
 
-import static org.eclipse.leshan.ResponseCode.*;
+import static org.eclipse.leshan.core.ResponseCode.*;
 import static org.eclipse.leshan.integration.tests.IntegrationTestHelper.*;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/RegistrationTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/RegistrationTest.java
index 819c7b9c..27640c43 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/RegistrationTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/RegistrationTest.java
@@ -36,8 +36,8 @@ import org.eclipse.californium.core.coap.Request;
 import org.eclipse.californium.core.coap.Response;
 import org.eclipse.californium.core.network.CoapEndpoint;
 import org.eclipse.californium.elements.AddressEndpointContext;
-import org.eclipse.leshan.Link;
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.Link;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.node.LwM2mPath;
 import org.eclipse.leshan.core.observation.Observation;
 import org.eclipse.leshan.core.request.ContentFormat;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/SecureIntegrationTestHelper.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/SecureIntegrationTestHelper.java
index 02040f1d..e9b9d83f 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/SecureIntegrationTestHelper.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/SecureIntegrationTestHelper.java
@@ -49,7 +49,6 @@ import org.eclipse.californium.scandium.config.DtlsConnectorConfig;
 import org.eclipse.californium.scandium.config.DtlsConnectorConfig.Builder;
 import org.eclipse.californium.scandium.dtls.PskPublicInformation;
 import org.eclipse.californium.scandium.dtls.cipher.CipherSuite;
-import org.eclipse.leshan.LwM2mId;
 import org.eclipse.leshan.client.californium.LeshanClientBuilder;
 import org.eclipse.leshan.client.object.Device;
 import org.eclipse.leshan.client.object.Security;
@@ -57,15 +56,16 @@ import org.eclipse.leshan.client.object.Server;
 import org.eclipse.leshan.client.resource.DummyInstanceEnabler;
 import org.eclipse.leshan.client.resource.LwM2mObjectEnabler;
 import org.eclipse.leshan.client.resource.ObjectsInitializer;
+import org.eclipse.leshan.core.LwM2mId;
 import org.eclipse.leshan.core.californium.EndpointFactory;
 import org.eclipse.leshan.core.request.BindingMode;
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.leshan.server.californium.LeshanServerBuilder;
 import org.eclipse.leshan.server.security.DefaultAuthorizer;
 import org.eclipse.leshan.server.security.EditableSecurityStore;
 import org.eclipse.leshan.server.security.InMemorySecurityStore;
 import org.eclipse.leshan.server.security.SecurityChecker;
 import org.eclipse.leshan.server.security.SecurityStore;
-import org.eclipse.leshan.util.Hex;
 
 public class SecureIntegrationTestHelper extends IntegrationTestHelper {
 
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/SynchronousClientObserver.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/SynchronousClientObserver.java
index de5525dd..192f494e 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/SynchronousClientObserver.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/SynchronousClientObserver.java
@@ -20,9 +20,9 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.eclipse.leshan.ResponseCode;
 import org.eclipse.leshan.client.observer.LwM2mClientObserverAdapter;
 import org.eclipse.leshan.client.servers.ServerIdentity;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.BootstrapRequest;
 import org.eclipse.leshan.core.request.DeregisterRequest;
 import org.eclipse.leshan.core.request.RegisterRequest;
diff --git a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/WriteTest.java b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/WriteTest.java
index 0e046836..fcf3c0c8 100644
--- a/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/WriteTest.java
+++ b/leshan-integration-tests/src/test/java/org/eclipse/leshan/integration/tests/WriteTest.java
@@ -29,7 +29,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.eclipse.californium.core.coap.Response;
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.model.ResourceModel.Type;
 import org.eclipse.leshan.core.node.LwM2mMultipleResource;
 import org.eclipse.leshan.core.node.LwM2mObjectInstance;
diff --git a/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/CaliforniumTestSupport.java b/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/CaliforniumTestSupport.java
index b89d8984..b337c717 100644
--- a/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/CaliforniumTestSupport.java
+++ b/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/CaliforniumTestSupport.java
@@ -22,7 +22,7 @@ import java.net.UnknownHostException;
 import java.util.Random;
 import java.util.concurrent.ThreadLocalRandom;
 
-import org.eclipse.leshan.LwM2m;
+import org.eclipse.leshan.core.LwM2m;
 import org.eclipse.leshan.core.request.Identity;
 import org.eclipse.leshan.server.registration.Registration;
 
diff --git a/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/registration/InMemoryRegistrationStoreTest.java b/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/registration/InMemoryRegistrationStoreTest.java
index 1f2bf43d..aa1ca6e7 100644
--- a/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/registration/InMemoryRegistrationStoreTest.java
+++ b/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/registration/InMemoryRegistrationStoreTest.java
@@ -18,7 +18,7 @@ package org.eclipse.leshan.server.californium.registration;
 import java.net.InetAddress;
 import java.nio.charset.StandardCharsets;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.BindingMode;
 import org.eclipse.leshan.core.request.Identity;
 import org.eclipse.leshan.server.californium.registration.InMemoryRegistrationStore;
diff --git a/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/request/CoapRequestBuilderTest.java b/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/request/CoapRequestBuilderTest.java
index ab61a344..36f6c418 100644
--- a/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/request/CoapRequestBuilderTest.java
+++ b/leshan-server-cf/src/test/java/org/eclipse/leshan/server/californium/request/CoapRequestBuilderTest.java
@@ -26,7 +26,7 @@ import java.util.Map;
 import org.eclipse.californium.core.coap.CoAP;
 import org.eclipse.californium.core.coap.MediaTypeRegistry;
 import org.eclipse.californium.core.coap.Request;
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.attributes.Attribute;
 import org.eclipse.leshan.core.attributes.AttributeSet;
 import org.eclipse.leshan.core.model.LwM2mModel;
@@ -47,11 +47,11 @@ import org.eclipse.leshan.core.request.ReadRequest;
 import org.eclipse.leshan.core.request.WriteAttributesRequest;
 import org.eclipse.leshan.core.request.WriteRequest;
 import org.eclipse.leshan.core.request.WriteRequest.Mode;
+import org.eclipse.leshan.core.tlv.Tlv;
+import org.eclipse.leshan.core.tlv.TlvDecoder;
+import org.eclipse.leshan.core.tlv.Tlv.TlvType;
 import org.eclipse.leshan.server.registration.Registration;
 import org.eclipse.leshan.server.registration.Registration.Builder;
-import org.eclipse.leshan.tlv.Tlv;
-import org.eclipse.leshan.tlv.Tlv.TlvType;
-import org.eclipse.leshan.tlv.TlvDecoder;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
diff --git a/leshan-server-core/src/test/java/org/eclipse/leshan/server/bootstrap/BootstrapHandlerTest.java b/leshan-server-core/src/test/java/org/eclipse/leshan/server/bootstrap/BootstrapHandlerTest.java
index c1e2fda9..af41b7c3 100644
--- a/leshan-server-core/src/test/java/org/eclipse/leshan/server/bootstrap/BootstrapHandlerTest.java
+++ b/leshan-server-core/src/test/java/org/eclipse/leshan/server/bootstrap/BootstrapHandlerTest.java
@@ -23,7 +23,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.leshan.ResponseCode;
+import org.eclipse.leshan.core.ResponseCode;
 import org.eclipse.leshan.core.request.BootstrapDeleteRequest;
 import org.eclipse.leshan.core.request.BootstrapFinishRequest;
 import org.eclipse.leshan.core.request.BootstrapRequest;
diff --git a/leshan-server-core/src/test/java/org/eclipse/leshan/server/registration/RegistrationSortObjectLinksTest.java b/leshan-server-core/src/test/java/org/eclipse/leshan/server/registration/RegistrationSortObjectLinksTest.java
index c8a8dea4..b6497f2c 100644
--- a/leshan-server-core/src/test/java/org/eclipse/leshan/server/registration/RegistrationSortObjectLinksTest.java
+++ b/leshan-server-core/src/test/java/org/eclipse/leshan/server/registration/RegistrationSortObjectLinksTest.java
@@ -19,7 +19,7 @@ package org.eclipse.leshan.server.registration;
 import java.net.Inet4Address;
 import java.net.UnknownHostException;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.Identity;
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/leshan-server-core/src/test/java/org/eclipse/leshan/server/registration/RegistrationTest.java b/leshan-server-core/src/test/java/org/eclipse/leshan/server/registration/RegistrationTest.java
index 371d59b6..4dc7cc8b 100644
--- a/leshan-server-core/src/test/java/org/eclipse/leshan/server/registration/RegistrationTest.java
+++ b/leshan-server-core/src/test/java/org/eclipse/leshan/server/registration/RegistrationTest.java
@@ -20,7 +20,7 @@ import static org.junit.Assert.*;
 import java.net.InetSocketAddress;
 import java.util.Map;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.model.ObjectModel;
 import org.eclipse.leshan.core.request.Identity;
 import org.eclipse.leshan.server.registration.Registration.Builder;
diff --git a/leshan-server-redis/src/test/java/org/eclipse/leshan/server/redis/serialization/RegistrationSerDesTest.java b/leshan-server-redis/src/test/java/org/eclipse/leshan/server/redis/serialization/RegistrationSerDesTest.java
index 57745037..de7c62cb 100644
--- a/leshan-server-redis/src/test/java/org/eclipse/leshan/server/redis/serialization/RegistrationSerDesTest.java
+++ b/leshan-server-redis/src/test/java/org/eclipse/leshan/server/redis/serialization/RegistrationSerDesTest.java
@@ -22,7 +22,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.leshan.Link;
+import org.eclipse.leshan.core.Link;
 import org.eclipse.leshan.core.request.Identity;
 import org.eclipse.leshan.server.registration.Registration;
 import org.junit.Test;
diff --git a/leshan-server-redis/src/test/java/org/eclipse/leshan/server/redis/serialization/SecurityInfoSerDesTest.java b/leshan-server-redis/src/test/java/org/eclipse/leshan/server/redis/serialization/SecurityInfoSerDesTest.java
index 0abe9e68..aca37ebf 100644
--- a/leshan-server-redis/src/test/java/org/eclipse/leshan/server/redis/serialization/SecurityInfoSerDesTest.java
+++ b/leshan-server-redis/src/test/java/org/eclipse/leshan/server/redis/serialization/SecurityInfoSerDesTest.java
@@ -26,9 +26,9 @@ import java.security.spec.ECPoint;
 import java.security.spec.ECPublicKeySpec;
 import java.security.spec.KeySpec;
 
+import org.eclipse.leshan.core.util.Hex;
 import org.eclipse.leshan.server.redis.serialization.SecurityInfoSerDes;
 import org.eclipse.leshan.server.security.SecurityInfo;
-import org.eclipse.leshan.util.Hex;
 import org.junit.Test;
 
 public class SecurityInfoSerDesTest {