diff --git a/api/src/main/java/org/opencord/sadis/BandwidthProfileInformation.java b/api/src/main/java/org/opencord/sadis/BandwidthProfileInformation.java
index ccdf3fa..0ad0ad4 100644
--- a/api/src/main/java/org/opencord/sadis/BandwidthProfileInformation.java
+++ b/api/src/main/java/org/opencord/sadis/BandwidthProfileInformation.java
@@ -20,10 +20,16 @@
 import java.util.Objects;
 
 /**
- * Represents bandwidth profile details such as PIR, CIR, AIR values.
+ * Represents bandwidth profile details such as PIR, CIR, GIR values.
  */
 public class BandwidthProfileInformation extends BaseInformation {
 
+    @JsonProperty(value = "pir")
+    long peakInformationRate;
+
+    @JsonProperty(value = "pbs")
+    Long peakBurstSize;
+
     @JsonProperty(value = "cir")
     long committedInformationRate;
 
@@ -36,12 +42,33 @@
     @JsonProperty(value = "ebs")
     Long exceededBurstSize;
 
+    // Deprecated in VOLTHA 2.8 (sadis 5.4.0)
+    // Will be removed in 2.9, use GIR instead
     @JsonProperty(value = "air")
     long assuredInformationRate;
 
-    //note that: the burst size of assured bandwidth will be always 0
+    @JsonProperty(value = "gir")
+    long guaranteedInformationRate;
+
+    //note that: the burst size of guaranteed bandwidth will be always 0
     //the rate information must be in Kbps and burst must be in Kbits
 
+    public final long peakInformationRate() {
+        return this.peakInformationRate;
+    }
+
+    public final void setPeakInformationRate(final long peakInformationRate) {
+        this.peakInformationRate = peakInformationRate;
+    }
+
+    public final Long peakBurstSize() {
+        return this.peakBurstSize;
+    }
+
+    public final void setPeakBurstSize(final Long peakBurstSize) {
+        this.peakBurstSize = peakBurstSize;
+    }
+
     public final long committedInformationRate() {
         return this.committedInformationRate;
     }
@@ -74,14 +101,26 @@
         this.exceededBurstSize = exceededBurstSize;
     }
 
+    // Deprecated in VOLTHA 2.8 (sadis 5.4.0)
+    // Will be removed in 2.9, use guaranteedInformationRate instead.
     public final long assuredInformationRate() {
         return this.assuredInformationRate;
     }
 
+    // Deprecated in VOLTHA 2.8 (sadis 5.4.0)
+    // Will be removed in 2.9, use guaranteedInformationRate instead.
     public final void setAssuredInformationRate(final long assuredInformationRate) {
         this.assuredInformationRate = assuredInformationRate;
     }
 
+    public final long guaranteedInformationRate() {
+        return this.guaranteedInformationRate;
+    }
+
+    public final void setGuaranteedInformationRate(final long guaranteedInformationRate) {
+        this.guaranteedInformationRate = guaranteedInformationRate;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {
@@ -91,9 +130,12 @@
             return false;
         }
         BandwidthProfileInformation that = (BandwidthProfileInformation) o;
-        return committedInformationRate == that.committedInformationRate &&
+        return peakInformationRate == that.peakInformationRate &&
+                committedInformationRate == that.committedInformationRate &&
                 exceededInformationRate == that.exceededInformationRate &&
                 assuredInformationRate == that.assuredInformationRate &&
+                guaranteedInformationRate == that.guaranteedInformationRate &&
+                Objects.equals(peakBurstSize, that.peakBurstSize) &&
                 Objects.equals(committedBurstSize, that.committedBurstSize) &&
                 Objects.equals(exceededBurstSize, that.exceededBurstSize);
     }
@@ -101,19 +143,22 @@
     @Override
     public int hashCode() {
 
-        return Objects.hash(committedInformationRate, committedBurstSize, exceededInformationRate, exceededBurstSize,
-                assuredInformationRate);
+        return Objects.hash(peakInformationRate, peakBurstSize, committedInformationRate, committedBurstSize,
+                exceededInformationRate, exceededBurstSize, assuredInformationRate, guaranteedInformationRate);
     }
 
     @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder("BandwidthProfileInformation{");
         sb.append("id=").append(id);
+        sb.append(", peakInformationRate=").append(peakInformationRate);
+        sb.append(", peakBurstSize=").append(peakBurstSize);
         sb.append(", committedInformationRate=").append(committedInformationRate);
         sb.append(", committedBurstSize=").append(committedBurstSize);
         sb.append(", exceededInformationRate=").append(exceededInformationRate);
         sb.append(", exceededBurstSize=").append(exceededBurstSize);
         sb.append(", assuredInformationRate=").append(assuredInformationRate);
+        sb.append(", guaranteedInformationRate=").append(guaranteedInformationRate);
         sb.append('}');
         return sb.toString();
     }
