diff --git a/vpp-api/java/Makefile.am b/vpp-api/java/Makefile.am
index 8e3d457..b9c0844 100644
--- a/vpp-api/java/Makefile.am
+++ b/vpp-api/java/Makefile.am
@@ -50,12 +50,12 @@
 EXTRA_libjvpp_registry_la_DEPENDENCIES=libjvpp_common.la
 
 jarfile_jvpp_registry = jvpp-registry-$(PACKAGE_VERSION).jar
-packagedir_jvpp_registry = org/openvpp/jvpp
+packagedir_jvpp_registry = io/fd/vpp/jvpp
 
-BUILT_SOURCES += jvpp-registry/org_openvpp_jvpp_VppJNIConnection.h
+BUILT_SOURCES += jvpp-registry/io_fd_vpp_jvpp_VppJNIConnection.h
 
 
-jvpp-registry/org_openvpp_jvpp_VppJNIConnection.h:
+jvpp-registry/io_fd_vpp_jvpp_VppJNIConnection.h:
 	@echo " jvpp-registry.jar generation ";				\
 	mkdir -p jvpp-registry/target;				\
 	cp -rf @srcdir@/jvpp-registry/* -t jvpp-registry/;
@@ -66,8 +66,8 @@
 		jvpp-registry/$(packagedir_jvpp_registry)/future/*.java 	\
 		jvpp-registry/$(packagedir_jvpp_registry)/test/*.java 	\
 		|| (echo "jvpp-registry compilation failed: $$?"; exit 1);	\
-	$(JAVAH) -classpath jvpp-registry/target -d jvpp-registry org.openvpp.jvpp.VppJNIConnection ;
-	$(JAVAH) -classpath jvpp-registry/target -d jvpp-registry org.openvpp.jvpp.JVppRegistryImpl ;
+	$(JAVAH) -classpath jvpp-registry/target -d jvpp-registry io.fd.vpp.jvpp.VppJNIConnection ;
+	$(JAVAH) -classpath jvpp-registry/target -d jvpp-registry io.fd.vpp.jvpp.JVppRegistryImpl ;
 
 $(jarfile_jvpp_registry): libjvpp_registry.la
 	cp .libs/libjvpp_registry.so.0.0.0 jvpp-registry/target;	\
@@ -86,17 +86,17 @@
 EXTRA_libjvpp_core_la_DEPENDENCIES=libjvpp_registry.la
 
 jarfile_jvpp_core = jvpp-core-$(PACKAGE_VERSION).jar
-packagedir_jvpp_core = org/openvpp/jvpp/core
+packagedir_jvpp_core = io/fd/vpp/jvpp/core
 api_file = $(prefix)/../vpp/vpp-api/vpe.api
 
-BUILT_SOURCES += jvpp-core/org_openvpp_jvpp_core_JVppCoreImpl.h
+BUILT_SOURCES += jvpp-core/io_fd_vpp_jvpp_core_JVppCoreImpl.h
 
 
 defs_vpp_papi.py:
 	@echo "jVpp API";				\
 	vppapigen --input $(api_file) --python jvpp-core/defs_vpp_papi.py;
 
-jvpp-core/org_openvpp_jvpp_core_JVppCoreImpl.h: jvpp-registry/org_openvpp_jvpp_VppJNIConnection.h defs_vpp_papi.py 
+jvpp-core/io_fd_vpp_jvpp_core_JVppCoreImpl.h: jvpp-registry/io_fd_vpp_jvpp_VppJNIConnection.h defs_vpp_papi.py
 	cp -rf @srcdir@/jvpp-core/* -t jvpp-core/; \
 	mkdir -p jvpp-core/target; \
 	cd jvpp-core; \
@@ -113,7 +113,7 @@
 		jvpp-core/$(packagedir_jvpp_core)/callfacade/*.java 	\
 		jvpp-core/$(packagedir_jvpp_core)/test/*.java \
 		|| (echo "jvpp-core compilation failed: $$?"; exit 1); \
-	$(JAVAH) -classpath jvpp-registry/target:jvpp-core/target -d jvpp-core org.openvpp.jvpp.core.JVppCoreImpl ;
+	$(JAVAH) -classpath jvpp-registry/target:jvpp-core/target -d jvpp-core io.fd.vpp.jvpp.core.JVppCoreImpl ;
 	
 $(jarfile_jvpp_core): libjvpp_core.la
 	cp .libs/libjvpp_core.so.0.0.0 jvpp-core/target;	\
diff --git a/vpp-api/java/Readme.txt b/vpp-api/java/Readme.txt
index 6926d74..689b9b3 100644
--- a/vpp-api/java/Readme.txt
+++ b/vpp-api/java/Readme.txt
@@ -137,10 +137,10 @@
 
 == Package structure
 
-* *org.openvpp.jvpp* - top level package for generated JVpp interface+ implementation and hand-crafted
+* *io.fd.vpp.jvpp* - top level package for generated JVpp interface+ implementation and hand-crafted
 VppConnection interface + implementation - packaged as jvpp-registry-version.jar
 
-* *org.openvpp.jvpp.[plugin]* - top level package for generated JVpp interface + implementation
+* *io.fd.vpp.jvpp.[plugin]* - top level package for generated JVpp interface + implementation
 + plugin's API tests - packaged as jvpp-[plugin]-version.jar
 
 ** *dto* - package for DTOs generated from VPP API structures + base/marker hand-crafted interfaces
diff --git a/vpp-api/java/jvpp-common/jvpp_common.c b/vpp-api/java/jvpp-common/jvpp_common.c
index ebec9e9..a161c09 100644
--- a/vpp-api/java/jvpp-common/jvpp_common.c
+++ b/vpp-api/java/jvpp-common/jvpp_common.c
@@ -46,7 +46,7 @@
         return;
     }
     jmethodID callbackExcMethod = (*env)->GetMethodID(env, callbackClass,
-            "onError", "(Lorg/openvpp/jvpp/VppCallbackException;)V");
+            "onError", "(Lio/fd/vpp/jvpp/VppCallbackException;)V");
     if (!callbackExcMethod) {
         DEBUG_LOG("CallOnError : callbackExcMethod is null!\n");
         return;
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackApiTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackApiTest.java
similarity index 82%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackApiTest.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackApiTest.java
index 61c92b1..32c796d 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackApiTest.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackApiTest.java
@@ -14,22 +14,22 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
-import org.openvpp.jvpp.VppCallbackException;
-import org.openvpp.jvpp.core.JVppCoreImpl;
-import org.openvpp.jvpp.core.callback.GetNodeIndexCallback;
-import org.openvpp.jvpp.core.callback.ShowVersionCallback;
-import org.openvpp.jvpp.core.callback.SwInterfaceCallback;
-import org.openvpp.jvpp.core.dto.GetNodeIndex;
-import org.openvpp.jvpp.core.dto.GetNodeIndexReply;
-import org.openvpp.jvpp.core.dto.ShowVersion;
-import org.openvpp.jvpp.core.dto.ShowVersionReply;
-import org.openvpp.jvpp.core.dto.SwInterfaceDetails;
-import org.openvpp.jvpp.core.dto.SwInterfaceDump;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.VppCallbackException;
+import io.fd.vpp.jvpp.core.JVppCoreImpl;
+import io.fd.vpp.jvpp.core.callback.GetNodeIndexCallback;
+import io.fd.vpp.jvpp.core.callback.ShowVersionCallback;
+import io.fd.vpp.jvpp.core.callback.SwInterfaceCallback;
+import io.fd.vpp.jvpp.core.dto.GetNodeIndex;
+import io.fd.vpp.jvpp.core.dto.GetNodeIndexReply;
+import io.fd.vpp.jvpp.core.dto.ShowVersion;
+import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceDetails;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceDump;
 
 public class CallbackApiTest {
 
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java
similarity index 87%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java
index a4b528a..1713e22 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeNotificationTest.java
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
-import org.openvpp.jvpp.VppCallbackException;
-import org.openvpp.jvpp.core.JVppCore;
-import org.openvpp.jvpp.core.JVppCoreImpl;
-import org.openvpp.jvpp.core.callback.WantInterfaceEventsCallback;
-import org.openvpp.jvpp.core.callfacade.CallbackJVppCoreFacade;
-import org.openvpp.jvpp.core.dto.WantInterfaceEventsReply;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.VppCallbackException;
+import io.fd.vpp.jvpp.core.JVppCore;
+import io.fd.vpp.jvpp.core.JVppCoreImpl;
+import io.fd.vpp.jvpp.core.callback.WantInterfaceEventsCallback;
+import io.fd.vpp.jvpp.core.callfacade.CallbackJVppCoreFacade;
+import io.fd.vpp.jvpp.core.dto.WantInterfaceEventsReply;
 
 public class CallbackJVppFacadeNotificationTest {
 
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackJVppFacadeTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeTest.java
similarity index 87%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackJVppFacadeTest.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeTest.java
index 63a399d..4a0fd3e 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackJVppFacadeTest.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackJVppFacadeTest.java
@@ -14,19 +14,19 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
-import org.openvpp.jvpp.VppCallbackException;
-import org.openvpp.jvpp.core.JVppCore;
-import org.openvpp.jvpp.core.JVppCoreImpl;
-import org.openvpp.jvpp.core.callback.GetNodeIndexCallback;
-import org.openvpp.jvpp.core.callback.ShowVersionCallback;
-import org.openvpp.jvpp.core.callfacade.CallbackJVppCoreFacade;
-import org.openvpp.jvpp.core.dto.GetNodeIndex;
-import org.openvpp.jvpp.core.dto.GetNodeIndexReply;
-import org.openvpp.jvpp.core.dto.ShowVersionReply;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.VppCallbackException;
+import io.fd.vpp.jvpp.core.JVppCore;
+import io.fd.vpp.jvpp.core.JVppCoreImpl;
+import io.fd.vpp.jvpp.core.callback.GetNodeIndexCallback;
+import io.fd.vpp.jvpp.core.callback.ShowVersionCallback;
+import io.fd.vpp.jvpp.core.callfacade.CallbackJVppCoreFacade;
+import io.fd.vpp.jvpp.core.dto.GetNodeIndex;
+import io.fd.vpp.jvpp.core.dto.GetNodeIndexReply;
+import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
 
 /**
  * CallbackJVppFacade together with CallbackJVppFacadeCallback allow for setting different callback for each request.
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackNotificationApiTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackNotificationApiTest.java
similarity index 73%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackNotificationApiTest.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackNotificationApiTest.java
index bb99fef..ad65632 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CallbackNotificationApiTest.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CallbackNotificationApiTest.java
@@ -14,24 +14,24 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
-import static org.openvpp.jvpp.core.test.NotificationUtils.getChangeInterfaceState;
-import static org.openvpp.jvpp.core.test.NotificationUtils.getDisableInterfaceNotificationsReq;
-import static org.openvpp.jvpp.core.test.NotificationUtils.getEnableInterfaceNotificationsReq;
-import static org.openvpp.jvpp.core.test.NotificationUtils.printNotification;
+import static io.fd.vpp.jvpp.core.test.NotificationUtils.getChangeInterfaceState;
+import static io.fd.vpp.jvpp.core.test.NotificationUtils.getDisableInterfaceNotificationsReq;
+import static io.fd.vpp.jvpp.core.test.NotificationUtils.getEnableInterfaceNotificationsReq;
+import static io.fd.vpp.jvpp.core.test.NotificationUtils.printNotification;
 
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
-import org.openvpp.jvpp.VppCallbackException;
-import org.openvpp.jvpp.core.JVppCoreImpl;
-import org.openvpp.jvpp.core.callback.SwInterfaceSetFlagsCallback;
-import org.openvpp.jvpp.core.callback.SwInterfaceSetFlagsNotificationCallback;
-import org.openvpp.jvpp.core.callback.WantInterfaceEventsCallback;
-import org.openvpp.jvpp.core.dto.SwInterfaceSetFlagsNotification;
-import org.openvpp.jvpp.core.dto.SwInterfaceSetFlagsReply;
-import org.openvpp.jvpp.core.dto.WantInterfaceEventsReply;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.VppCallbackException;
+import io.fd.vpp.jvpp.core.JVppCoreImpl;
+import io.fd.vpp.jvpp.core.callback.SwInterfaceSetFlagsCallback;
+import io.fd.vpp.jvpp.core.callback.SwInterfaceSetFlagsNotificationCallback;
+import io.fd.vpp.jvpp.core.callback.WantInterfaceEventsCallback;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceSetFlagsNotification;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceSetFlagsReply;
+import io.fd.vpp.jvpp.core.dto.WantInterfaceEventsReply;
 
 public class CallbackNotificationApiTest {
 
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/ControlPingTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/ControlPingTest.java
similarity index 84%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/ControlPingTest.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/ControlPingTest.java
index b411999..939ba88 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/ControlPingTest.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/ControlPingTest.java
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
-import org.openvpp.jvpp.VppCallbackException;
-import org.openvpp.jvpp.core.JVppCoreImpl;
-import org.openvpp.jvpp.callback.ControlPingCallback;
-import org.openvpp.jvpp.dto.ControlPing;
-import org.openvpp.jvpp.dto.ControlPingReply;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.VppCallbackException;
+import io.fd.vpp.jvpp.core.JVppCoreImpl;
+import io.fd.vpp.jvpp.callback.ControlPingCallback;
+import io.fd.vpp.jvpp.dto.ControlPing;
+import io.fd.vpp.jvpp.dto.ControlPingReply;
 
 public class ControlPingTest {
 
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CreateSubInterfaceTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CreateSubInterfaceTest.java
similarity index 90%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CreateSubInterfaceTest.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CreateSubInterfaceTest.java
index a22aec6..e63a713 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/CreateSubInterfaceTest.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/CreateSubInterfaceTest.java
@@ -14,19 +14,19 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
 import static java.util.Objects.requireNonNull;
 
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
-import org.openvpp.jvpp.core.JVppCoreImpl;
-import org.openvpp.jvpp.core.dto.CreateSubif;
-import org.openvpp.jvpp.core.dto.CreateSubifReply;
-import org.openvpp.jvpp.core.dto.SwInterfaceDetailsReplyDump;
-import org.openvpp.jvpp.core.dto.SwInterfaceDump;
-import org.openvpp.jvpp.core.future.FutureJVppCoreFacade;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.core.JVppCoreImpl;
+import io.fd.vpp.jvpp.core.dto.CreateSubif;
+import io.fd.vpp.jvpp.core.dto.CreateSubifReply;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceDetailsReplyDump;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceDump;
+import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
 
 /**
  * <p>Tests sub-interface creation.<br> Equivalent to:<br>
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/FutureApiNotificationTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiNotificationTest.java
similarity index 79%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/FutureApiNotificationTest.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiNotificationTest.java
index 20f8ae4..2ba1b09 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/FutureApiNotificationTest.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiNotificationTest.java
@@ -14,17 +14,17 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
-import static org.openvpp.jvpp.core.test.NotificationUtils.getChangeInterfaceState;
-import static org.openvpp.jvpp.core.test.NotificationUtils.getDisableInterfaceNotificationsReq;
-import static org.openvpp.jvpp.core.test.NotificationUtils.getEnableInterfaceNotificationsReq;
+import static io.fd.vpp.jvpp.core.test.NotificationUtils.getChangeInterfaceState;
+import static io.fd.vpp.jvpp.core.test.NotificationUtils.getDisableInterfaceNotificationsReq;
+import static io.fd.vpp.jvpp.core.test.NotificationUtils.getEnableInterfaceNotificationsReq;
 
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
-import org.openvpp.jvpp.core.JVppCoreImpl;
-import org.openvpp.jvpp.core.future.FutureJVppCoreFacade;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.core.JVppCoreImpl;
+import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
 
 public class FutureApiNotificationTest {
 
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/FutureApiTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiTest.java
similarity index 87%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/FutureApiTest.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiTest.java
index dc17247..f570e12 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/FutureApiTest.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/FutureApiTest.java
@@ -14,27 +14,27 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
 import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Future;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
-import org.openvpp.jvpp.core.JVppCoreImpl;
-import org.openvpp.jvpp.core.dto.BridgeDomainDetailsReplyDump;
-import org.openvpp.jvpp.core.dto.BridgeDomainDump;
-import org.openvpp.jvpp.core.dto.GetNodeIndex;
-import org.openvpp.jvpp.core.dto.GetNodeIndexReply;
-import org.openvpp.jvpp.core.dto.ShowVersion;
-import org.openvpp.jvpp.core.dto.ShowVersionReply;
-import org.openvpp.jvpp.core.dto.SwInterfaceDetails;
-import org.openvpp.jvpp.core.dto.SwInterfaceDetailsReplyDump;
-import org.openvpp.jvpp.core.dto.SwInterfaceDump;
-import org.openvpp.jvpp.core.future.FutureJVppCoreFacade;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.core.JVppCoreImpl;
+import io.fd.vpp.jvpp.core.dto.BridgeDomainDetailsReplyDump;
+import io.fd.vpp.jvpp.core.dto.BridgeDomainDump;
+import io.fd.vpp.jvpp.core.dto.GetNodeIndex;
+import io.fd.vpp.jvpp.core.dto.GetNodeIndexReply;
+import io.fd.vpp.jvpp.core.dto.ShowVersion;
+import io.fd.vpp.jvpp.core.dto.ShowVersionReply;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceDetails;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceDetailsReplyDump;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceDump;
+import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
 
 public class FutureApiTest {
 
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/L2AclTest.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/L2AclTest.java
similarity index 86%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/L2AclTest.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/L2AclTest.java
index 33716c3..583f71d 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/L2AclTest.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/L2AclTest.java
@@ -14,28 +14,28 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
 import javax.xml.bind.DatatypeConverter;
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
-import org.openvpp.jvpp.core.JVppCoreImpl;
-import org.openvpp.jvpp.core.dto.ClassifyAddDelSession;
-import org.openvpp.jvpp.core.dto.ClassifyAddDelSessionReply;
-import org.openvpp.jvpp.core.dto.ClassifyAddDelTable;
-import org.openvpp.jvpp.core.dto.ClassifyAddDelTableReply;
-import org.openvpp.jvpp.core.dto.ClassifySessionDetailsReplyDump;
-import org.openvpp.jvpp.core.dto.ClassifySessionDump;
-import org.openvpp.jvpp.core.dto.ClassifyTableByInterface;
-import org.openvpp.jvpp.core.dto.ClassifyTableByInterfaceReply;
-import org.openvpp.jvpp.core.dto.ClassifyTableIds;
-import org.openvpp.jvpp.core.dto.ClassifyTableIdsReply;
-import org.openvpp.jvpp.core.dto.ClassifyTableInfo;
-import org.openvpp.jvpp.core.dto.ClassifyTableInfoReply;
-import org.openvpp.jvpp.core.dto.InputAclSetInterface;
-import org.openvpp.jvpp.core.dto.InputAclSetInterfaceReply;
-import org.openvpp.jvpp.core.future.FutureJVppCoreFacade;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.core.JVppCoreImpl;
+import io.fd.vpp.jvpp.core.dto.ClassifyAddDelSession;
+import io.fd.vpp.jvpp.core.dto.ClassifyAddDelSessionReply;
+import io.fd.vpp.jvpp.core.dto.ClassifyAddDelTable;
+import io.fd.vpp.jvpp.core.dto.ClassifyAddDelTableReply;
+import io.fd.vpp.jvpp.core.dto.ClassifySessionDetailsReplyDump;
+import io.fd.vpp.jvpp.core.dto.ClassifySessionDump;
+import io.fd.vpp.jvpp.core.dto.ClassifyTableByInterface;
+import io.fd.vpp.jvpp.core.dto.ClassifyTableByInterfaceReply;
+import io.fd.vpp.jvpp.core.dto.ClassifyTableIds;
+import io.fd.vpp.jvpp.core.dto.ClassifyTableIdsReply;
+import io.fd.vpp.jvpp.core.dto.ClassifyTableInfo;
+import io.fd.vpp.jvpp.core.dto.ClassifyTableInfoReply;
+import io.fd.vpp.jvpp.core.dto.InputAclSetInterface;
+import io.fd.vpp.jvpp.core.dto.InputAclSetInterfaceReply;
+import io.fd.vpp.jvpp.core.future.FutureJVppCoreFacade;
 
 /**
  * <p>Tests L2 ACL creation and read.<br> Equivalent to the following vppctl commands:<br>
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/NotificationUtils.java b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/NotificationUtils.java
similarity index 89%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/NotificationUtils.java
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/NotificationUtils.java
index 02875bb..46d57ad 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/NotificationUtils.java
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/NotificationUtils.java
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.core.test;
+package io.fd.vpp.jvpp.core.test;
 
 import java.io.PrintStream;
-import org.openvpp.jvpp.core.dto.SwInterfaceSetFlags;
-import org.openvpp.jvpp.core.dto.SwInterfaceSetFlagsNotification;
-import org.openvpp.jvpp.core.dto.WantInterfaceEvents;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceSetFlags;
+import io.fd.vpp.jvpp.core.dto.SwInterfaceSetFlagsNotification;
+import io.fd.vpp.jvpp.core.dto.WantInterfaceEvents;
 
 final class NotificationUtils {
 
diff --git a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/Readme.txt b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/Readme.txt
similarity index 95%
rename from vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/Readme.txt
rename to vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/Readme.txt
index c24af24..2c9c424 100644
--- a/vpp-api/java/jvpp-core/org/openvpp/jvpp/core/test/Readme.txt
+++ b/vpp-api/java/jvpp-core/io/fd/vpp/jvpp/core/test/Readme.txt
@@ -2,7 +2,7 @@
 
 - Make sure VPP is running
 - From VPP's build-root/ folder execute:
-  - sudo java -cp build-vpp_debug-native/vpp-api/java/jvpp-registry-16.12.jar:build-vpp_debug-native/vpp-api/java/jvpp-core-16.12.jar org.openvpp.jvpp.core.test.[test name]
+  - sudo java -cp build-vpp_debug-native/vpp-api/java/jvpp-registry-16.12.jar:build-vpp_debug-native/vpp-api/java/jvpp-core-16.12.jar io.fd.vpp.jvpp.core.test.[test name]
 
 Available tests:
 CallbackApiTest - Similar to ControlPingTest, invokes more complex calls (e.g. interface dump) using low level JVpp APIs
diff --git a/vpp-api/java/jvpp-core/jvpp_core.c b/vpp-api/java/jvpp-core/jvpp_core.c
index cc1f9b5..8872ef5 100644
--- a/vpp-api/java/jvpp-core/jvpp_core.c
+++ b/vpp-api/java/jvpp-core/jvpp_core.c
@@ -55,10 +55,10 @@
 
 core_main_t core_main __attribute__((aligned (64)));
 
-#include "org_openvpp_jvpp_core_JVppCoreImpl.h"
+#include "io_fd_vpp_jvpp_core_JVppCoreImpl.h"
 #include "jvpp_core_gen.h"
 
-JNIEXPORT void JNICALL Java_org_openvpp_jvpp_core_JVppCoreImpl_init0
+JNIEXPORT void JNICALL Java_io_fd_vpp_jvpp_core_JVppCoreImpl_init0
 (JNIEnv * env, jclass clazz, jobject callback, jlong queue_address, jint my_client_index) {
     core_main_t * plugin_main = &core_main;
     plugin_main->my_client_index = my_client_index;
@@ -78,7 +78,7 @@
     #undef _
 }
 
-JNIEXPORT void JNICALL Java_org_openvpp_jvpp_core_JVppCoreImpl_close0
+JNIEXPORT void JNICALL Java_io_fd_vpp_jvpp_core_JVppCoreImpl_close0
 (JNIEnv *env, jclass clazz) {
     core_main_t * plugin_main = &core_main;
 
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/JVpp.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVpp.java
similarity index 91%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/JVpp.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVpp.java
index 53bae04..55f25a7 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/JVpp.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVpp.java
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp;
+package io.fd.vpp.jvpp;
 
-import org.openvpp.jvpp.callback.JVppCallback;
-import org.openvpp.jvpp.dto.ControlPing;
-import org.openvpp.jvpp.dto.JVppRequest;
+import io.fd.vpp.jvpp.callback.JVppCallback;
+import io.fd.vpp.jvpp.dto.ControlPing;
+import io.fd.vpp.jvpp.dto.JVppRequest;
 
 /**
  * Base interface for plugin's Java API.
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/JVppRegistry.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistry.java
similarity index 96%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/JVppRegistry.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistry.java
index 4515bb3..6535db0 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/JVppRegistry.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistry.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp;
+package io.fd.vpp.jvpp;
 
-import org.openvpp.jvpp.callback.JVppCallback;
+import io.fd.vpp.jvpp.callback.JVppCallback;
 
 /**
  * Manages VPP connection and stores plugin callbacks.
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/JVppRegistryImpl.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistryImpl.java
similarity index 96%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/JVppRegistryImpl.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistryImpl.java
index bb6730f..fb2ef1c 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/JVppRegistryImpl.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/JVppRegistryImpl.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp;
+package io.fd.vpp.jvpp;
 
 import static java.util.Objects.requireNonNull;
 
@@ -23,9 +23,9 @@
 import java.util.concurrent.ConcurrentMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import org.openvpp.jvpp.callback.ControlPingCallback;
-import org.openvpp.jvpp.callback.JVppCallback;
-import org.openvpp.jvpp.dto.ControlPingReply;
+import io.fd.vpp.jvpp.callback.ControlPingCallback;
+import io.fd.vpp.jvpp.callback.JVppCallback;
+import io.fd.vpp.jvpp.dto.ControlPingReply;
 
 /**
  * Default implementation of JVppRegistry.
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/NativeLibraryLoader.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/NativeLibraryLoader.java
similarity index 98%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/NativeLibraryLoader.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/NativeLibraryLoader.java
index d00c41d..ce6d1bf 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/NativeLibraryLoader.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/NativeLibraryLoader.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp;
+package io.fd.vpp.jvpp;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppBaseCallException.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppBaseCallException.java
similarity index 98%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppBaseCallException.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppBaseCallException.java
index 792af2c..d71e305 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppBaseCallException.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppBaseCallException.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp;
+package io.fd.vpp.jvpp;
 
 /**
  * Base exception representing failed operation of JVpp request call
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppCallbackException.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppCallbackException.java
similarity index 98%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppCallbackException.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppCallbackException.java
index 3d2a1cb..ccfcbd3 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppCallbackException.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppCallbackException.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp;
+package io.fd.vpp.jvpp;
 
 /**
  * Callback Exception representing failed operation of JVpp request call
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppConnection.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppConnection.java
similarity index 97%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppConnection.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppConnection.java
index e7055f9..e6fd3bd 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppConnection.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppConnection.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp;
+package io.fd.vpp.jvpp;
 
 import java.io.IOException;
 
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppInvocationException.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppInvocationException.java
similarity index 97%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppInvocationException.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppInvocationException.java
index 298bcd0..a7ccb19 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppInvocationException.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppInvocationException.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp;
+package io.fd.vpp.jvpp;
 
 /**
  * Exception thrown when Vpp jAPI method invocation failed.
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppJNIConnection.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppJNIConnection.java
similarity index 97%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppJNIConnection.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppJNIConnection.java
index f352987..7178bcf 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/VppJNIConnection.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/VppJNIConnection.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp;
+package io.fd.vpp.jvpp;
 
-import static org.openvpp.jvpp.NativeLibraryLoader.loadLibrary;
+import static io.fd.vpp.jvpp.NativeLibraryLoader.loadLibrary;
 
 import java.io.IOException;
 import java.util.HashMap;
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/callback/ControlPingCallback.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/ControlPingCallback.java
similarity index 90%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/callback/ControlPingCallback.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/ControlPingCallback.java
index 529ea22..efddfdb 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/callback/ControlPingCallback.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/ControlPingCallback.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.callback;
+package io.fd.vpp.jvpp.callback;
 
-import org.openvpp.jvpp.dto.ControlPingReply;
+import io.fd.vpp.jvpp.dto.ControlPingReply;
 
 /**
  * Represents callback for control_ping message.
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/callback/JVppCallback.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppCallback.java
similarity index 91%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/callback/JVppCallback.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppCallback.java
index f681e37..ae02063 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/callback/JVppCallback.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppCallback.java
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.callback;
-import org.openvpp.jvpp.VppCallbackException;
+package io.fd.vpp.jvpp.callback;
+import io.fd.vpp.jvpp.VppCallbackException;
 
 /**
  * Base JVppCallback interface
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/callback/JVppNotificationCallback.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppNotificationCallback.java
similarity index 94%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/callback/JVppNotificationCallback.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppNotificationCallback.java
index 72a75c8..8ab0cb2 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/callback/JVppNotificationCallback.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/callback/JVppNotificationCallback.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.callback;
+package io.fd.vpp.jvpp.callback;
 
 /**
 * Notification callback
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/ControlPing.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPing.java
similarity index 88%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/ControlPing.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPing.java
index cc59836..984e167 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/ControlPing.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPing.java
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.dto;
+package io.fd.vpp.jvpp.dto;
 
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.VppInvocationException;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.VppInvocationException;
 
 /**
  * Represents request DTO for control_ping message.
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/ControlPingReply.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPingReply.java
similarity index 97%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/ControlPingReply.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPingReply.java
index 6377fcd..61e4d0e 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/ControlPingReply.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/ControlPingReply.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.dto;
+package io.fd.vpp.jvpp.dto;
 
 import java.util.Objects;
 
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppDump.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppDump.java
similarity index 95%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppDump.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppDump.java
index 295bbba..60b9898 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppDump.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppDump.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.dto;
+package io.fd.vpp.jvpp.dto;
 
 /**
 * Base interface for all dump requests
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppNotification.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppNotification.java
similarity index 95%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppNotification.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppNotification.java
index 7d0fecb..5554f50 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppNotification.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppNotification.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.dto;
+package io.fd.vpp.jvpp.dto;
 
 /**
 * Base interface for all notification DTOs
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppReply.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReply.java
similarity index 95%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppReply.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReply.java
index 2f4964c..73f512d 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppReply.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReply.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.dto;
+package io.fd.vpp.jvpp.dto;
 
 /**
 * Base interface for all reply DTOs
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppReplyDump.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReplyDump.java
similarity index 96%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppReplyDump.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReplyDump.java
index 4aecedc..1511139 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppReplyDump.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppReplyDump.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.dto;
+package io.fd.vpp.jvpp.dto;
 
 /**
 * Base interface for all dump replies
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppRequest.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppRequest.java
similarity index 89%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppRequest.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppRequest.java
index 1216edf..9b301da 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/dto/JVppRequest.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/dto/JVppRequest.java
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.dto;
+package io.fd.vpp.jvpp.dto;
 
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.VppInvocationException;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.VppInvocationException;
 
 /**
 * Base interface for all request DTOs
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/future/AbstractFutureJVppInvoker.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/AbstractFutureJVppInvoker.java
similarity index 94%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/future/AbstractFutureJVppInvoker.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/AbstractFutureJVppInvoker.java
index 53a445e..2067a91 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/future/AbstractFutureJVppInvoker.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/AbstractFutureJVppInvoker.java
@@ -14,20 +14,20 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.future;
+package io.fd.vpp.jvpp.future;
 
 
 import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletionStage;
-import org.openvpp.jvpp.JVpp;
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.VppInvocationException;
-import org.openvpp.jvpp.dto.JVppDump;
-import org.openvpp.jvpp.dto.JVppReply;
-import org.openvpp.jvpp.dto.JVppReplyDump;
-import org.openvpp.jvpp.dto.JVppRequest;
+import io.fd.vpp.jvpp.JVpp;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.VppInvocationException;
+import io.fd.vpp.jvpp.dto.JVppDump;
+import io.fd.vpp.jvpp.dto.JVppReply;
+import io.fd.vpp.jvpp.dto.JVppReplyDump;
+import io.fd.vpp.jvpp.dto.JVppRequest;
 
 /**
  * Future facade on top of JVpp
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/future/FutureJVppInvoker.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/FutureJVppInvoker.java
similarity index 76%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/future/FutureJVppInvoker.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/FutureJVppInvoker.java
index 721f95c..7a48e41 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/future/FutureJVppInvoker.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/future/FutureJVppInvoker.java
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.future;
+package io.fd.vpp.jvpp.future;
 
 
-import org.openvpp.jvpp.dto.JVppReply;
-import org.openvpp.jvpp.dto.JVppReplyDump;
-import org.openvpp.jvpp.dto.JVppRequest;
+import io.fd.vpp.jvpp.dto.JVppReply;
+import io.fd.vpp.jvpp.dto.JVppReplyDump;
+import io.fd.vpp.jvpp.dto.JVppRequest;
 
 import java.util.concurrent.CompletionStage;
-import org.openvpp.jvpp.notification.NotificationRegistryProvider;
+import io.fd.vpp.jvpp.notification.NotificationRegistryProvider;
 
 /**
 * Future facade on top of JVpp
@@ -33,7 +33,7 @@
      * Invoke asynchronous operation on VPP
      *
      * @return CompletionStage with future result of an async VPP call
-     * @throws org.openvpp.jvpp.VppInvocationException when send request failed with details
+     * @throws io.fd.vpp.jvpp.VppInvocationException when send request failed with details
      */
     <REQ extends JVppRequest, REPLY extends JVppReply<REQ>> CompletionStage<REPLY> send(REQ req);
 
@@ -42,7 +42,7 @@
      * Invoke asynchronous dump operation on VPP
      *
      * @return CompletionStage with aggregated future result of an async VPP dump call
-     * @throws org.openvpp.jvpp.VppInvocationException when send request failed with details
+     * @throws io.fd.vpp.jvpp.VppInvocationException when send request failed with details
      */
     <REQ extends JVppRequest, REPLY extends JVppReply<REQ>, DUMP extends JVppReplyDump<REQ, REPLY>> CompletionStage<DUMP> send(
             REQ req, DUMP emptyReplyDump);
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/notification/NotificationRegistry.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistry.java
similarity index 94%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/notification/NotificationRegistry.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistry.java
index 27349f2..3c72ff7 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/notification/NotificationRegistry.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistry.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.notification;
+package io.fd.vpp.jvpp.notification;
 
 /**
  * Base registry for notification callbacks.
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/notification/NotificationRegistryProvider.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistryProvider.java
similarity index 95%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/notification/NotificationRegistryProvider.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistryProvider.java
index 46c534a..4a6e06b 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/notification/NotificationRegistryProvider.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/notification/NotificationRegistryProvider.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.notification;
+package io.fd.vpp.jvpp.notification;
 
 /**
  * Provides notification registry
diff --git a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/test/ConnectionTest.java b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/test/ConnectionTest.java
similarity index 88%
rename from vpp-api/java/jvpp-registry/org/openvpp/jvpp/test/ConnectionTest.java
rename to vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/test/ConnectionTest.java
index d134a1c..ea1d864 100644
--- a/vpp-api/java/jvpp-registry/org/openvpp/jvpp/test/ConnectionTest.java
+++ b/vpp-api/java/jvpp-registry/io/fd/vpp/jvpp/test/ConnectionTest.java
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package org.openvpp.jvpp.test;
+package io.fd.vpp.jvpp.test;
 
-import org.openvpp.jvpp.JVppRegistry;
-import org.openvpp.jvpp.JVppRegistryImpl;
+import io.fd.vpp.jvpp.JVppRegistry;
+import io.fd.vpp.jvpp.JVppRegistryImpl;
 
 /**
  * Run using:
- * sudo java -cp build-vpp-native/vpp-api/java/jvpp-registry-16.09.jar org.openvpp.jvpp.test.ConnectionTest
+ * sudo java -cp build-vpp-native/vpp-api/java/jvpp-registry-16.09.jar io.fd.vpp.jvpp.test.ConnectionTest
  */
 public class ConnectionTest {
 
diff --git a/vpp-api/java/jvpp-registry/jvpp_registry.c b/vpp-api/java/jvpp-registry/jvpp_registry.c
index 1c9871b..af20916 100644
--- a/vpp-api/java/jvpp-registry/jvpp_registry.c
+++ b/vpp-api/java/jvpp-registry/jvpp_registry.c
@@ -21,8 +21,8 @@
 
 #include <jni.h>
 #include <jvpp-common/jvpp_common.h>
-#include "org_openvpp_jvpp_VppJNIConnection.h"
-#include "org_openvpp_jvpp_JVppRegistryImpl.h"
+#include "io_fd_vpp_jvpp_VppJNIConnection.h"
+#include "io_fd_vpp_jvpp_JVppRegistryImpl.h"
 
 #include <vpp-api/vpe_msg_enum.h>
 #define vl_typedefs             /* define message structures */
@@ -135,7 +135,7 @@
                     rm->controlPingReplyClass, "<init>", "()V");
             jmethodID callbackMethod = (*env)->GetMethodID(env,
                     rm->registryClass, "onControlPingReply",
-                    "(Lorg/openvpp/jvpp/dto/ControlPingReply;)V");
+                    "(Lio/fd/vpp/jvpp/dto/ControlPingReply;)V");
 
             jobject dto = (*env)->NewObject(env, rm->controlPingReplyClass,
                     constructor);
@@ -220,7 +220,7 @@
     return 0;
 }
 
-JNIEXPORT jobject JNICALL Java_org_openvpp_jvpp_VppJNIConnection_clientConnect(
+JNIEXPORT jobject JNICALL Java_io_fd_vpp_jvpp_VppJNIConnection_clientConnect(
         JNIEnv *env, jclass obj, jstring clientName) {
     int rv;
     const char *client_name;
@@ -229,7 +229,7 @@
     jvpp_registry_main_t * rm = &jvpp_registry_main;
 
     jclass connectionInfoClass = (*env)->FindClass(env,
-            "org/openvpp/jvpp/VppJNIConnection$ConnectionInfo");
+            "io/fd/vpp/jvpp/VppJNIConnection$ConnectionInfo");
     jmethodID connectionInfoConstructor = (*env)->GetMethodID(env,
             connectionInfoClass, "<init>", "(JII)V");
 
@@ -266,7 +266,7 @@
             (jint) jm->my_client_index, (jint) rv);
 }
 
-JNIEXPORT jint JNICALL Java_org_openvpp_jvpp_JVppRegistryImpl_controlPing0(
+JNIEXPORT jint JNICALL Java_io_fd_vpp_jvpp_JVppRegistryImpl_controlPing0(
         JNIEnv *env, jobject regstryObject) {
     jvpp_main_t * jm = &jvpp_main;
     vl_api_control_ping_t * mp;
@@ -292,7 +292,7 @@
     return my_context_id;
 }
 
-JNIEXPORT void JNICALL Java_org_openvpp_jvpp_VppJNIConnection_clientDisconnect(
+JNIEXPORT void JNICALL Java_io_fd_vpp_jvpp_VppJNIConnection_clientDisconnect(
         JNIEnv *env, jclass clazz) {
     jvpp_registry_main_t * rm = &jvpp_registry_main;
     rm->is_connected = 0; // TODO make thread safe
@@ -319,7 +319,7 @@
     }
 
     rm->controlPingReplyClass = (jclass) (*env)->NewGlobalRef(env,
-            (*env)->FindClass(env, "org/openvpp/jvpp/dto/ControlPingReply"));
+            (*env)->FindClass(env, "io/fd/vpp/jvpp/dto/ControlPingReply"));
     if ((*env)->ExceptionCheck(env)) {
         (*env)->ExceptionDescribe(env);
         clib_warning("Failed to cache class references\n");
@@ -327,7 +327,7 @@
     }
 
     rm->callbackExceptionClass = (jclass) (*env)->NewGlobalRef(env,
-            (*env)->FindClass(env, "org/openvpp/jvpp/VppCallbackException"));
+            (*env)->FindClass(env, "io/fd/vpp/jvpp/VppCallbackException"));
     if ((*env)->ExceptionCheck(env)) {
         (*env)->ExceptionDescribe(env);
         return JNI_ERR;
diff --git a/vpp-api/java/jvpp/gen/jvpp_gen.py b/vpp-api/java/jvpp/gen/jvpp_gen.py
index 551ce7d..d8ee6a1 100755
--- a/vpp-api/java/jvpp/gen/jvpp_gen.py
+++ b/vpp-api/java/jvpp/gen/jvpp_gen.py
@@ -29,11 +29,11 @@
 from jvppgen import util
 
 # Invocation:
-# ~/Projects/vpp/vpp-api/jvpp/gen$ mkdir -p java/org/openvpp/jvpp && cd java/org/openvpp/jvpp
-# ~/Projects/vpp/vpp-api/jvpp/gen/java/org/openvpp/jvpp$ ../../../../jvpp_gen.py -idefs_api_vpp_papi.py
+# ~/Projects/vpp/vpp-api/jvpp/gen$ mkdir -p java/io/fd/vpp/jvpp && cd java/io/fd/vpp/jvpp
+# ~/Projects/vpp/vpp-api/jvpp/gen/java/io/fd/vpp/jvpp$ ../../../../jvpp_gen.py -idefs_api_vpp_papi.py
 #
 # Compilation:
-# ~/Projects/vpp/vpp-api/jvpp/gen/java/org/openvpp/jvpp$ javac *.java dto/*.java callback/*.java
+# ~/Projects/vpp/vpp-api/jvpp/gen/java/io/fd/vpp/jvpp$ javac *.java dto/*.java callback/*.java
 #
 # where
 # defs_api_vpp_papi.py - vpe.api in python format (generated by vppapigen)
@@ -137,7 +137,7 @@
 
 func_list, func_name = get_definitions()
 
-base_package = 'org.openvpp.jvpp'
+base_package = 'io.fd.vpp.jvpp'
 plugin_package = base_package + '.' + plugin_name
 dto_package = 'dto'
 callback_package = 'callback'
diff --git a/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py b/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py
index 0f74a1d..b117288 100644
--- a/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py
+++ b/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py
@@ -38,7 +38,7 @@
 field_template = Template("""    public $type $name;\n""")
 
 send_template = Template("""    @Override
-    public int send(final $base_package.JVpp jvpp) throws org.openvpp.jvpp.VppInvocationException {
+    public int send(final $base_package.JVpp jvpp) throws io.fd.vpp.jvpp.VppInvocationException {
         return (($plugin_package.JVpp${plugin_name})jvpp).$method_name($args);
     }""")
 
diff --git a/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py b/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py
index cd3a356..ef07709 100644
--- a/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py
+++ b/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py
@@ -25,7 +25,7 @@
 """)
 
 find_class_invocation_template = Template("""
-    ${ref_name}Class = (jclass)(*env)->NewGlobalRef(env, (*env)->FindClass(env, "org/openvpp/jvpp/${plugin_name}/dto/${class_name}"));
+    ${ref_name}Class = (jclass)(*env)->NewGlobalRef(env, (*env)->FindClass(env, "io/fd/vpp/jvpp/${plugin_name}/dto/${class_name}"));
     if ((*env)->ExceptionCheck(env)) {
         (*env)->ExceptionDescribe(env);
         return JNI_ERR;
@@ -86,7 +86,7 @@
 
     # add exception class to class cache
     ref_name = 'callbackException'
-    class_name = 'org/openvpp/jvpp/VppCallbackException'
+    class_name = 'io/fd/vpp/jvpp/VppCallbackException'
     class_references.append(class_reference_template.substitute(
             ref_name=ref_name))
     find_class_invocations.append(find_class_template.substitute(
@@ -102,7 +102,7 @@
 # TODO: cache method and field identifiers to achieve better performance
 # https://jira.fd.io/browse/HONEYCOMB-42
 request_class_template = Template("""
-    jclass requestClass = (*env)->FindClass(env, "org/openvpp/jvpp/${plugin_name}/dto/${java_name_upper}");""")
+    jclass requestClass = (*env)->FindClass(env, "io/fd/vpp/jvpp/${plugin_name}/dto/${java_name_upper}");""")
 
 request_field_identifier_template = Template("""
     jfieldID ${java_name}FieldId = (*env)->GetFieldID(env, requestClass, "${java_name}", "${jni_signature}");
@@ -200,7 +200,7 @@
  * Generated based on $inputfile preparsed data:
 $api_data
  */
-JNIEXPORT jint JNICALL Java_org_openvpp_jvpp_${plugin_name}_JVpp${java_plugin_name}Impl_${java_name}0
+JNIEXPORT jint JNICALL Java_io_fd_vpp_jvpp_${plugin_name}_JVpp${java_plugin_name}Impl_${java_name}0
 (JNIEnv * env, jclass clazz$args) {
     ${plugin_name}_main_t *plugin_main = &${plugin_name}_main;
     vl_api_${c_name}_t * mp;
@@ -405,7 +405,7 @@
     $err_handler
 
     jmethodID constructor = (*env)->GetMethodID(env, ${class_ref_name}Class, "<init>", "()V");
-    jmethodID callbackMethod = (*env)->GetMethodID(env, plugin_main->callbackClass, "on${dto_name}", "(Lorg/openvpp/jvpp/${plugin_name}/dto/${dto_name};)V");
+    jmethodID callbackMethod = (*env)->GetMethodID(env, plugin_main->callbackClass, "on${dto_name}", "(Lio/fd/vpp/jvpp/${plugin_name}/dto/${dto_name};)V");
 
     jobject dto = (*env)->NewObject(env, ${class_ref_name}Class, constructor);
     $dto_setters
diff --git a/vpp-api/java/jvpp/gen/jvppgen/jvpp_impl_gen.py b/vpp-api/java/jvpp/gen/jvppgen/jvpp_impl_gen.py
index 41df4f2..16c84ce 100644
--- a/vpp-api/java/jvpp/gen/jvppgen/jvpp_impl_gen.py
+++ b/vpp-api/java/jvpp/gen/jvppgen/jvpp_impl_gen.py
@@ -29,9 +29,9 @@
     /**
      * Generic dispatch method for sending requests to VPP
      *
-     * @throws org.openvpp.jvpp.VppInvocationException if send request had failed
+     * @throws io.fd.vpp.jvpp.VppInvocationException if send request had failed
      */
-    int send($base_package.$dto_package.JVppRequest request) throws org.openvpp.jvpp.VppInvocationException;
+    int send($base_package.$dto_package.JVppRequest request) throws io.fd.vpp.jvpp.VppInvocationException;
 
 $methods
 }
@@ -120,12 +120,12 @@
     }
 
     @Override
-    public int send($base_package.$dto_package.JVppRequest request) throws org.openvpp.jvpp.VppInvocationException {
+    public int send($base_package.$dto_package.JVppRequest request) throws io.fd.vpp.jvpp.VppInvocationException {
         return request.send(this);
     }
 
     @Override
-    public final int controlPing(final org.openvpp.jvpp.dto.ControlPing controlPing) throws org.openvpp.jvpp.VppInvocationException {
+    public final int controlPing(final io.fd.vpp.jvpp.dto.ControlPing controlPing) throws io.fd.vpp.jvpp.VppInvocationException {
         return registry.controlPing(JVpp${plugin_name}Impl.class);
     }
 
@@ -133,27 +133,27 @@
 }
 """)
 
-method_template = Template("""    int $name($plugin_package.$dto_package.$request request) throws org.openvpp.jvpp.VppInvocationException;""")
+method_template = Template("""    int $name($plugin_package.$dto_package.$request request) throws io.fd.vpp.jvpp.VppInvocationException;""")
 method_native_template = Template(
     """    private static native int ${name}0($plugin_package.$dto_package.$request request);""")
-method_impl_template = Template("""    public final int $name($plugin_package.$dto_package.$request request) throws org.openvpp.jvpp.VppInvocationException {
+method_impl_template = Template("""    public final int $name($plugin_package.$dto_package.$request request) throws io.fd.vpp.jvpp.VppInvocationException {
         java.util.Objects.requireNonNull(request,"Null request object");
         connection.checkActive();
         int result=${name}0(request);
         if(result<0){
-            throw new org.openvpp.jvpp.VppInvocationException("${name}",result);
+            throw new io.fd.vpp.jvpp.VppInvocationException("${name}",result);
         }
         return result;
     }
 """)
 
-no_arg_method_template = Template("""    int $name() throws org.openvpp.jvpp.VppInvocationException;""")
-no_arg_method_native_template = Template("""    private static native int ${name}0() throws org.openvpp.jvpp.VppInvocationException;""")
-no_arg_method_impl_template = Template("""    public final int $name() throws org.openvpp.jvpp.VppInvocationException {
+no_arg_method_template = Template("""    int $name() throws io.fd.vpp.jvpp.VppInvocationException;""")
+no_arg_method_native_template = Template("""    private static native int ${name}0() throws io.fd.vpp.jvpp.VppInvocationException;""")
+no_arg_method_impl_template = Template("""    public final int $name() throws io.fd.vpp.jvpp.VppInvocationException {
         connection.checkActive();
         int result=${name}0();
         if(result<0){
-            throw new org.openvpp.jvpp.VppInvocationException("${name}",result);
+            throw new io.fd.vpp.jvpp.VppInvocationException("${name}",result);
         }
         return result;
     }
