diff --git a/api/src/main/java/org/opencord/sadis/BandwidthProfileInformation.java b/api/src/main/java/org/opencord/sadis/BandwidthProfileInformation.java
new file mode 100644
index 0000000..94835b9
--- /dev/null
+++ b/api/src/main/java/org/opencord/sadis/BandwidthProfileInformation.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.opencord.sadis;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.Objects;
+
+/**
+ * Represents bandwidth profile details such as PIR, CIR, AIR values.
+ */
+public class BandwidthProfileInformation extends BaseInformation {
+
+    @JsonProperty(value = "cir")
+    long committedInformationRate;
+
+    @JsonProperty(value = "cbs")
+    Long committedBurstSize;
+
+    @JsonProperty(value = "eir")
+    long exceededInformationRate;
+
+    @JsonProperty(value = "ebs")
+    Long exceededBurstSize;
+
+    @JsonProperty(value = "air")
+    long assuredInformationRate;
+
+    //note that: the burst size of assured bandwidth will be always 0
+    //the rate information must be in Kbps and burst must be in Kbits
+
+    protected BandwidthProfileInformation() {
+    }
+
+    public final long committedInformationRate() {
+        return this.committedInformationRate;
+    }
+
+    public final void setCommittedInformationRate(final long committedInformationRate) {
+        this.committedInformationRate = committedInformationRate;
+    }
+
+    public final Long committedBurstSize() {
+        return this.committedBurstSize;
+    }
+
+    public final void setCommittedBurstSize(final Long committedBurstSize) {
+        this.committedBurstSize = committedBurstSize;
+    }
+
+    public final long exceededInformationRate() {
+        return this.exceededInformationRate;
+    }
+
+    public final void setExceededInformationRate(final long exceededInformationRate) {
+        this.exceededInformationRate = exceededInformationRate;
+    }
+
+    public final Long exceededBurstSize() {
+        return this.exceededBurstSize;
+    }
+
+    public final void setExceededBurstSize(final Long exceededBurstSize) {
+        this.exceededBurstSize = exceededBurstSize;
+    }
+
+    public final long assuredInformationRate() {
+        return this.assuredInformationRate;
+    }
+
+    public final void setAssuredInformationRate(final long assuredInformationRate) {
+        this.assuredInformationRate = assuredInformationRate;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        BandwidthProfileInformation that = (BandwidthProfileInformation) o;
+        return committedInformationRate == that.committedInformationRate &&
+                exceededInformationRate == that.exceededInformationRate &&
+                assuredInformationRate == that.assuredInformationRate &&
+                Objects.equals(committedBurstSize, that.committedBurstSize) &&
+                Objects.equals(exceededBurstSize, that.exceededBurstSize);
+    }
+
+    @Override
+    public int hashCode() {
+
+        return Objects.hash(committedInformationRate, committedBurstSize, exceededInformationRate, exceededBurstSize,
+                assuredInformationRate);
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("BandwidthProfileInformation{");
+        sb.append("id=").append(id);
+        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('}');
+        return sb.toString();
+    }
+}
diff --git a/api/src/main/java/org/opencord/sadis/BaseConfig.java b/api/src/main/java/org/opencord/sadis/BaseConfig.java
new file mode 100644
index 0000000..75951f7
--- /dev/null
+++ b/api/src/main/java/org/opencord/sadis/BaseConfig.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.opencord.sadis;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.net.config.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.time.Duration;
+import java.util.List;
+
+public abstract class BaseConfig<T extends BaseInformation> extends Config<ApplicationId> {
+
+    private final Logger log = LoggerFactory.getLogger(this.getClass());
+
+    protected static final String INTEGRATION = "integration";
+    protected static final String CACHE = "cache";
+    protected static final String CACHE_SIZE = "maxsize";
+    protected static final String CACHE_TTL = "ttl";
+    protected static final String URL = "url";
+    protected static final String ENTRIES = "entries";
+    protected static final String DEFAULT_CACHE_TTL = "PT0S";
+    protected static final String ID_SUB_PATTERN = "%s";
+
+    /**
+     * Returns Integration URL.
+     *
+     * @return configured URL or null
+     * @throws MalformedURLException specified URL not valid
+     */
+    public final URL getUrl() throws MalformedURLException {
+        final JsonNode integration = this.object.path(INTEGRATION);
+        if (integration.isMissingNode()) {
+            return null;
+        }
+
+        final JsonNode url = integration.path(URL);
+        if (url.isMissingNode()) {
+            return null;
+        }
+        StringBuilder buf = new StringBuilder(ID_SUB_PATTERN);
+        if (!url.asText().contains(buf)) {
+            log.error("Error in url, missing {}", ID_SUB_PATTERN);
+            return null;
+        }
+        return new URL(url.asText());
+    }
+
+    /**
+     * Returns Cache Maximum Size.
+     *
+     * @return configured cache max size or -1
+     */
+    public final int getCacheMaxSize() {
+        final JsonNode integration = this.object.path(INTEGRATION);
+        if (integration.isMissingNode()) {
+            return -1;
+        }
+
+        final JsonNode cache = integration.path(CACHE);
+        if (cache.isMissingNode()) {
+            return -1;
+        }
+
+        return cache.path(CACHE_SIZE).asInt(-1);
+    }
+
+    public final Duration getCacheTtl() {
+        final JsonNode integration = this.object.path(INTEGRATION);
+        if (integration.isMissingNode()) {
+            return Duration.parse(DEFAULT_CACHE_TTL);
+        }
+
+        final JsonNode cache = integration.path(CACHE);
+        if (cache.isMissingNode()) {
+            return Duration.parse(DEFAULT_CACHE_TTL);
+        }
+
+        return Duration.parse(cache.path(CACHE_TTL).asText(DEFAULT_CACHE_TTL));
+    }
+
+    public abstract List<T> getEntries();
+
+}
diff --git a/api/src/main/java/org/opencord/sadis/BaseInformation.java b/api/src/main/java/org/opencord/sadis/BaseInformation.java
new file mode 100644
index 0000000..d8d8876
--- /dev/null
+++ b/api/src/main/java/org/opencord/sadis/BaseInformation.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.opencord.sadis;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class BaseInformation {
+
+    @JsonProperty(value = "id")
+    String id;
+
+    public final String id() {
+        return this.id;
+    }
+
+    public final void setId(final String id) {
+        this.id = id;
+    }
+}
\ No newline at end of file
diff --git a/api/src/main/java/org/opencord/sadis/SubscriberAndDeviceInformationService.java b/api/src/main/java/org/opencord/sadis/BaseInformationService.java
similarity index 65%
rename from api/src/main/java/org/opencord/sadis/SubscriberAndDeviceInformationService.java
rename to api/src/main/java/org/opencord/sadis/BaseInformationService.java
index be0a42e..9d2896b 100644
--- a/api/src/main/java/org/opencord/sadis/SubscriberAndDeviceInformationService.java
+++ b/api/src/main/java/org/opencord/sadis/BaseInformationService.java
@@ -15,39 +15,35 @@
  */
 package org.opencord.sadis;
 
-/**
- * Subscriber And Device Information Service.
- */
-public interface SubscriberAndDeviceInformationService {
+public interface BaseInformationService<T extends BaseInformation> {
 
     /**
      * Removes all cached entries.
      */
-    public void invalidateAll();
+    void invalidateAll();
 
     /**
-      * Removes the information associated with the given ID.
-      * @param id
-      *           key to information
-      */
-    public void invalidateId(String id);
+     * Removes the information associated with the given ID.
+     *
+     * @param id key to information
+     */
+    void invalidateId(String id);
 
     /**
      * Return the information associated with the given ID.
      *
-     * @param id
-     *            key to information
+     * @param id key to information
      * @return information associated with ID, if available, else null
      */
-    public SubscriberAndDeviceInformation get(String id);
+    T get(String id);
 
     /**
      * Return the information associated with the given ID from the cache.
      *
-     * @param id
-     *            key to information
+     * @param id key to information
      * @return information associated with ID, if available in the cache, else null
      */
-    public SubscriberAndDeviceInformation getfromCache(String id);
+    T getfromCache(String id);
+
 
 }
diff --git a/api/src/main/java/org/opencord/sadis/SadisService.java b/api/src/main/java/org/opencord/sadis/SadisService.java
new file mode 100644
index 0000000..ff98273
--- /dev/null
+++ b/api/src/main/java/org/opencord/sadis/SadisService.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.opencord.sadis;
+
+/**
+ * Subscriber And Device Information Service.
+ */
+public interface SadisService {
+
+
+    /**
+     * Gets the subscriber service.
+     *
+     * @return the service related to the subscribers and access devices
+     */
+    BaseInformationService<SubscriberAndDeviceInformation> getSubscriberInfoService();
+
+    /**
+     * Gets the bandwidth profile service.
+     *
+     * @return the service related to bandwidth profiles
+     */
+    BaseInformationService<BandwidthProfileInformation> getBandwidthProfileService();
+
+}
diff --git a/api/src/main/java/org/opencord/sadis/SubscriberAndDeviceInformation.java b/api/src/main/java/org/opencord/sadis/SubscriberAndDeviceInformation.java
index 6b64ce7..28540a0 100644
--- a/api/src/main/java/org/opencord/sadis/SubscriberAndDeviceInformation.java
+++ b/api/src/main/java/org/opencord/sadis/SubscriberAndDeviceInformation.java
@@ -24,10 +24,8 @@
 /**
  * Represents a unit of information about a subscriber or access device.
  */
-public class SubscriberAndDeviceInformation {
+public class SubscriberAndDeviceInformation extends BaseInformation {
 
-    @JsonProperty(value = "id")
-    String id;
 
     @JsonProperty(value = "sTag")
     VlanId sTag;
@@ -59,17 +57,18 @@
     @JsonProperty(value = "remoteId")
     String remoteId;
 
+    @JsonProperty(value = "technologyProfileId")
+    int technologyProfileId = -1;
+
+    @JsonProperty(value = "upstreamBandwidthProfile")
+    String upstreamBandwidthProfile;
+
+    @JsonProperty(value = "downstreamBandwidthProfile")
+    String downstreamBandwidthProfile;
+
     protected SubscriberAndDeviceInformation() {
     }
 
-    public final String id() {
-        return this.id;
-    }
-
-    public final void setId(final String id) {
-        this.id = id;
-    }
-
     public final VlanId sTag() {
         return this.sTag;
     }
@@ -150,6 +149,30 @@
         this.remoteId = remoteId;
     }
 
+    public final int technologyProfileId() {
+        return this.technologyProfileId;
+    }
+
+    public final void setTechnologyProfileId(final int technologyProfileId) {
+        this.technologyProfileId = technologyProfileId;
+    }
+
+    public final String upstreamBandwidthProfile() {
+        return this.upstreamBandwidthProfile;
+    }
+
+    public final void setUpstreamBandwidthProfile(final String upstreamBandwidthProfile) {
+        this.upstreamBandwidthProfile = upstreamBandwidthProfile;
+    }
+
+    public final String downstreamBandwidthProfile() {
+        return this.downstreamBandwidthProfile;
+    }
+
+    public final void setDownstreamBandwidthProfile(final String downstreamBandwidthProfile) {
+        this.downstreamBandwidthProfile = downstreamBandwidthProfile;
+    }
+
     /*
      * (non-Javadoc)
      *
@@ -170,6 +193,11 @@
         result = prime * result + (this.nasId == null ? 0 : this.nasId.hashCode());
         result = prime + result + (this.circuitId == null ? 0 : this.circuitId.hashCode());
         result = prime + result + (this.remoteId == null ? 0 : this.remoteId.hashCode());
+        result = prime + result + this.technologyProfileId;
+        result = prime + result +
+                (this.upstreamBandwidthProfile == null ? 0 : this.upstreamBandwidthProfile.hashCode());
+        result = prime + result +
+                (this.downstreamBandwidthProfile == null ? 0 : this.downstreamBandwidthProfile.hashCode());
         return result;
     }
 
@@ -259,6 +287,23 @@
         } else if (!this.remoteId.equals(other.remoteId)) {
             return false;
         }
+        if (this.technologyProfileId != other.technologyProfileId) {
+            return false;
+        }
+        if (this.upstreamBandwidthProfile == null) {
+            if (other.upstreamBandwidthProfile != null) {
+                return false;
+            }
+        } else if (!this.upstreamBandwidthProfile.equals(other.upstreamBandwidthProfile)) {
+            return false;
+        }
+        if (this.downstreamBandwidthProfile == null) {
+            if (other.downstreamBandwidthProfile != null) {
+                return false;
+            }
+        } else if (!this.downstreamBandwidthProfile.equals(other.downstreamBandwidthProfile)) {
+            return false;
+        }
         return true;
     }
 
@@ -293,6 +338,12 @@
         buf.append(this.circuitId);
         buf.append(",remoteId:");
         buf.append(this.remoteId);
+        buf.append(",technologyProfileId:");
+        buf.append(this.technologyProfileId);
+        buf.append(",upstreamBandwidthProfile:");
+        buf.append(this.upstreamBandwidthProfile);
+        buf.append(",downstreamBandwidthProfile:");
+        buf.append(this.downstreamBandwidthProfile);
         buf.append(']');
 
         return buf.toString();
