diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
index dc221ab..97808bb 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
@@ -39,7 +39,7 @@
     private final String segmentId;
     private final IpAddress gatewayIp;
     private final String cidr;
-    private final Set<KubevirtHostRoute> hostRouts;
+    private final Set<KubevirtHostRoute> hostRoutes;
     private final KubevirtIpPool ipPool;
 
     /**
@@ -52,12 +52,12 @@
      * @param segmentId         segment identifier
      * @param gatewayIp         gateway IP address
      * @param cidr              CIDR of network
-     * @param hostRouts         a set of host routes
+     * @param hostRoutes        a set of host routes
      * @param ipPool            IP pool
      */
     public DefaultKubevirtNetwork(String networkId, Type type, String name,
                                   Integer mtu, String segmentId, IpAddress gatewayIp,
-                                  String cidr, Set<KubevirtHostRoute> hostRouts,
+                                  String cidr, Set<KubevirtHostRoute> hostRoutes,
                                   KubevirtIpPool ipPool) {
         this.networkId = networkId;
         this.type = type;
@@ -66,7 +66,7 @@
         this.segmentId = segmentId;
         this.gatewayIp = gatewayIp;
         this.cidr = cidr;
-        this.hostRouts = hostRouts;
+        this.hostRoutes = hostRoutes;
         this.ipPool = ipPool;
     }
 
@@ -106,8 +106,8 @@
     }
 
     @Override
-    public Set<KubevirtHostRoute> hostRouts() {
-        return ImmutableSet.copyOf(hostRouts);
+    public Set<KubevirtHostRoute> hostRoutes() {
+        return ImmutableSet.copyOf(hostRoutes);
     }
 
     @Override
@@ -127,14 +127,14 @@
         return networkId.equals(that.networkId) && type == that.type &&
                 name.equals(that.name) && mtu.equals(that.mtu) &&
                 gatewayIp.equals(that.gatewayIp) &&
-                cidr.equals(that.cidr) && hostRouts.equals(that.hostRouts) &&
+                cidr.equals(that.cidr) && hostRoutes.equals(that.hostRoutes) &&
                 ipPool.equals(that.ipPool);
     }
 
     @Override
     public int hashCode() {
         return Objects.hash(networkId, type, name, mtu, segmentId, gatewayIp,
-                cidr, hostRouts, ipPool);
+                cidr, hostRoutes, ipPool);
     }
 
     @Override
@@ -147,7 +147,7 @@
                 .add("segmentId", segmentId)
                 .add("gatewayIp", gatewayIp)
                 .add("cidr", cidr)
-                .add("hostRouts", hostRouts)
+                .add("hostRouts", hostRoutes)
                 .add("ipPool", ipPool)
                 .toString();
     }
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtHostRoute.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtHostRoute.java
index 37cfc6b..b435cd6 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtHostRoute.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtHostRoute.java
@@ -44,7 +44,7 @@
      *
      * @return destination CIDR
      */
-    public IpPrefix getDestination() {
+    public IpPrefix destination() {
         return destination;
     }
 
@@ -53,7 +53,7 @@
      *
      * @return nexthop IP address
      */
-    public IpAddress getNexthop() {
+    public IpAddress nexthop() {
         return nexthop;
     }
 
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtIpPool.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtIpPool.java
index 9b42b61..64874fd 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtIpPool.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtIpPool.java
@@ -44,7 +44,7 @@
      *
      * @return start address of IP pool
      */
-    public IpAddress getStart() {
+    public IpAddress start() {
         return start;
     }
 
@@ -53,7 +53,7 @@
      *
      * @return end address of IP pool
      */
-    public IpAddress getEnd() {
+    public IpAddress end() {
         return end;
     }
 
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
index 5492c9f..4293310 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
@@ -104,7 +104,7 @@
      *
      * @return host routes
      */
-    Set<KubevirtHostRoute> hostRouts();
+    Set<KubevirtHostRoute> hostRoutes();
 
     /**
      * Returns the IP pool.
