diff --git a/api/src/main/java/org/opencord/sadis/UniTagInformation.java b/api/src/main/java/org/opencord/sadis/UniTagInformation.java
index 12bbaae..0e5c438 100644
--- a/api/src/main/java/org/opencord/sadis/UniTagInformation.java
+++ b/api/src/main/java/org/opencord/sadis/UniTagInformation.java
@@ -76,6 +76,9 @@
     @JsonProperty(value = "isIgmpRequired")
     private boolean isIgmpRequired;
 
+    @JsonProperty(value = "isPppoeRequired")
+    private boolean isPppoeRequired;
+
     public UniTagInformation() {
 
     }
@@ -90,7 +93,7 @@
                               final String downstreamOltBandwidthProfile,
                               final String serviceName, final boolean enableMacLearning,
                               final String configuredMacAddress, final boolean isDhcpRequired,
-                              final boolean isIgmpRequired) {
+                              final boolean isIgmpRequired, final boolean isPppoeRequired) {
         this.uniTagMatch = uniTagMatch;
         this.ponCTag = ponCTag;
         this.ponSTag = ponSTag;
@@ -108,6 +111,7 @@
         this.configuredMacAddress = configuredMacAddress;
         this.isDhcpRequired = isDhcpRequired;
         this.isIgmpRequired = isIgmpRequired;
+        this.isPppoeRequired = isPppoeRequired;
     }
     //CHECKSTYLE:ON
 
@@ -179,6 +183,10 @@
         return isIgmpRequired;
     }
 
+    public final boolean getIsPppoeRequired() {
+        return isPppoeRequired;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {
@@ -226,6 +234,9 @@
         if (isIgmpRequired != that.isIgmpRequired) {
             return false;
         }
+        if (isPppoeRequired != that.isPppoeRequired) {
+            return false;
+        }
         if (upstreamBandwidthProfile != null ? !upstreamBandwidthProfile.equals(that.upstreamBandwidthProfile) :
                 that.upstreamBandwidthProfile != null) {
             return false;
@@ -266,6 +277,7 @@
         result = 31 * result + (configuredMacAddress != null ? configuredMacAddress.hashCode() : 0);
         result = 31 * result + (isDhcpRequired ? 1 : 0);
         result = 31 * result + (isIgmpRequired ? 1 : 0);
+        result = 31 * result + (isPppoeRequired ? 1 : 0);
         return result;
     }
 
@@ -289,6 +301,7 @@
         sb.append(", configuredMacAddress='").append(configuredMacAddress).append('\'');
         sb.append(", isDhcpRequired=").append(isDhcpRequired);
         sb.append(", isIgmpRequired=").append(isIgmpRequired);
+        sb.append(", isPppoeRequired=").append(isPppoeRequired);
         sb.append('}');
         return sb.toString();
     }
@@ -312,6 +325,7 @@
         private String configuredMacAddress;
         private boolean isDhcpRequired;
         private boolean isIgmpRequired;
+        private boolean isPppoeRequired;
 
         public final Builder setUniTagMatch(final VlanId uniTagMatch) {
             this.uniTagMatch = uniTagMatch;
@@ -398,14 +412,19 @@
             return this;
         }
 
+        public final Builder setIsPppoeRequired(final boolean isPppoeRequired) {
+            this.isPppoeRequired = isPppoeRequired;
+            return this;
+        }
+
         public final UniTagInformation build() {
             return new UniTagInformation(this.uniTagMatch, this.ponCTag,
                     this.ponSTag, this.usPonCTagPriority, this.usPonSTagPriority,
                     this.dsPonCTagPriority, this.dsPonSTagPriority, this.technologyProfileId,
                     this.upstreamBandwidthProfile, this.downstreamBandwidthProfile,
                     this.upstreamOltBandwidthProfile, this.downstreamOltBandwidthProfile,
-                    this.serviceName, this.enableMacLearning,
-                    this.configuredMacAddress, this.isDhcpRequired, this.isIgmpRequired);
+                    this.serviceName, this.enableMacLearning, this.configuredMacAddress,
+                    this.isDhcpRequired, this.isIgmpRequired, this.isPppoeRequired);
         }
     }
 }
diff --git a/app/src/main/java/org/opencord/sadis/impl/SubscriberAndDeviceInformationConfig.java b/app/src/main/java/org/opencord/sadis/impl/SubscriberAndDeviceInformationConfig.java
index 958d8d7..5923204 100644
--- a/app/src/main/java/org/opencord/sadis/impl/SubscriberAndDeviceInformationConfig.java
+++ b/app/src/main/java/org/opencord/sadis/impl/SubscriberAndDeviceInformationConfig.java
@@ -78,6 +78,7 @@
  *                  "configuredDacAddress"          : string,
  *                  "isDhcpRequired"                : string,
  *                  "isIgmpRequired"                : string,
+ *                  "isPppoeRequired"                : string,
  *                  "serviceName"                   : string
  *                 }
  *              ]
@@ -108,6 +109,7 @@
     private static final String SERVICE_NAME = "serviceName";
     private static final String IS_DHCP_REQ = "isDhcpRequired";
     private static final String IS_IGMP_REQ = "isIgmpRequired";
+    private static final String IS_PPPOE_REQ = "isPppoeRequired";
     private static final String MAC_ADDRESS = "configuredMacAddress";
 
     public List<SubscriberAndDeviceInformation> getEntries() {
@@ -190,6 +192,7 @@
                         node.get(SERVICE_NAME).asText())
                 .setIsDhcpRequired(node.get(IS_DHCP_REQ) != null && node.get(IS_DHCP_REQ).asBoolean())
                 .setIsIgmpRequired(node.get(IS_IGMP_REQ) != null && node.get(IS_IGMP_REQ).asBoolean())
+                .setIsPppoeRequired(node.get(IS_PPPOE_REQ) != null && node.get(IS_PPPOE_REQ).asBoolean())
                 .setConfiguredMacAddress(node.get(MAC_ADDRESS) == null ? MacAddress.NONE.toString() :
                         node.get(MAC_ADDRESS).asText())
                 .build();
diff --git a/app/src/main/java/org/opencord/sadis/impl/UniTagInformationCodec.java b/app/src/main/java/org/opencord/sadis/impl/UniTagInformationCodec.java
index 9afbdcc..09060bb 100644
--- a/app/src/main/java/org/opencord/sadis/impl/UniTagInformationCodec.java
+++ b/app/src/main/java/org/opencord/sadis/impl/UniTagInformationCodec.java
@@ -45,6 +45,7 @@
     private static final String MAC = "configuredMacAddress";
     private static final String DHCP_REQ = "isDhcpRequired";
     private static final String IGMP_REQ = "isIgmpRequired";
+    private static final String PPPOE_REQ = "isPppoeRequired";
     private static final int NO_PCP = -1;
     private static final int NO_TP = -1;
     private static final String EMPTY_BP = "";
@@ -53,6 +54,7 @@
     private static final String EMPTY_MAC = "";
     private static final boolean DEFAULT_DHCP_REQ = false;
     private static final boolean DEFAULT_IGMP_REQ = false;
+    private static final boolean DEFAULT_PPPOE_REQ = false;
 
     @Override
     public ObjectNode encode(UniTagInformation entry, CodecContext context) {
@@ -73,7 +75,8 @@
                 .put(MAC_LEARN, entry.getEnableMacLearning())
                 .put(MAC, entry.getConfiguredMacAddress())
                 .put(DHCP_REQ, entry.getIsDhcpRequired())
-                .put(IGMP_REQ, entry.getIsIgmpRequired());
+                .put(IGMP_REQ, entry.getIsIgmpRequired())
+                .put(PPPOE_REQ, entry.getIsPppoeRequired());
     }
 
     @Override
@@ -117,7 +120,9 @@
                 .setIsDhcpRequired(json.get(DHCP_REQ) == null ? DEFAULT_DHCP_REQ :
                         json.get(DHCP_REQ).asBoolean())
                 .setIsIgmpRequired(json.get(IGMP_REQ) == null ? DEFAULT_IGMP_REQ :
-                        json.get(IGMP_REQ).asBoolean());
+                        json.get(IGMP_REQ).asBoolean())
+                .setIsPppoeRequired(json.get(PPPOE_REQ) == null ? DEFAULT_PPPOE_REQ :
+                        json.get(PPPOE_REQ).asBoolean());
         log.info("Codec UniTagInformation Codec builder returning {}", tagInfoBuilder.build());
         return tagInfoBuilder.build();
     }
