diff --git a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPOpenMsg.java b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPOpenMsg.java
index a8c242b..bf5d05f 100644
--- a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPOpenMsg.java
+++ b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPOpenMsg.java
@@ -72,13 +72,6 @@
         BGPOpenMsg build() throws BGPParseException;
 
         /**
-         * Returns hold time of Open Message.
-         *
-         * @return hold time of Open Message
-         */
-        short getHoldTime();
-
-        /**
          * Sets hold time in Open Message and return its builder.
          *
          * @param holdtime hold timer value in open message
@@ -87,13 +80,6 @@
         Builder setHoldTime(short holdtime);
 
         /**
-         * Returns as number of Open Message.
-         *
-         * @return as number of Open Message
-         */
-        short getAsNumber();
-
-        /**
          * Sets AS number in Open Message and return its builder.
          *
          * @param asNumber as number in open message
@@ -102,13 +88,6 @@
         Builder setAsNumber(short asNumber);
 
         /**
-         * Returns BGP Identifier of Open Message.
-         *
-         * @return BGP Identifier of Open Message
-         */
-        int getBgpId();
-
-        /**
          * Sets BGP Identifier in Open Message and return its builder.
          *
          * @param bgpId BGP Identifier in open message
@@ -117,13 +96,6 @@
         Builder setBgpId(int bgpId);
 
         /**
-         * Returns capabilities of Open Message.
-         *
-         * @return capabilities of Open Message
-         */
-        LinkedList<BGPValueType> getCapabilityTlv();
-
-        /**
          * Sets capabilities in Open Message and return its builder.
          *
          * @param capabilityTlv capabilities in open message
diff --git a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BGPOpenMsgVer4.java b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BGPOpenMsgVer4.java
index b50342d..fccbf5f 100644
--- a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BGPOpenMsgVer4.java
+++ b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BGPOpenMsgVer4.java
@@ -311,8 +311,8 @@
 
             if (this.isLargeAsCapabilityTlvSet) {
                 BGPValueType tlv;
-                int iValue = this.getAsNumber();
-                tlv = new FourOctetAsNumCapabilityTlv(iValue);
+                int value = this.asNumber;
+                tlv = new FourOctetAsNumCapabilityTlv(value);
                 this.capabilityTlv.add(tlv);
             }
 
@@ -333,26 +333,6 @@
         }
 
         @Override
-        public short getHoldTime() {
-            return this.holdTime;
-        }
-
-        @Override
-        public short getAsNumber() {
-            return this.asNumber;
-        }
-
-        @Override
-        public int getBgpId() {
-            return this.bgpId;
-        }
-
-        @Override
-        public LinkedList<BGPValueType> getCapabilityTlv() {
-            return this.capabilityTlv;
-        }
-
-        @Override
         public Builder setHoldTime(short holdTime) {
             this.holdTime = holdTime;
             this.isHoldTimeSet = true;
