diff --git a/common/core.h b/common/core.h
index be32f00..81b79ad 100644
--- a/common/core.h
+++ b/common/core.h
@@ -30,11 +30,13 @@
 
 Status Enable_(int argc, char *argv[]);
 Status ActivateOnu_(uint32_t intf_id, uint32_t onu_id,
-    const char *vendor_id, const char *vendor_specific, uint32_t pir);
+    const char *vendor_id, const char *vendor_specific, uint32_t pir,
+    uint32_t agg_port_id, uint32_t alloc_id);
 Status DeactivateOnu_(uint32_t intf_id, uint32_t onu_id,
     const char *vendor_id, const char *vendor_specific);
 Status DeleteOnu_(uint32_t intf_id, uint32_t onu_id,
-    const char *vendor_id, const char *vendor_specific);
+    const char *vendor_id, const char *vendor_specific,
+    uint32_t agg_port_id, uint32_t alloc_id);
 Status EnablePonIf_(uint32_t intf_id);
 Status DisablePonIf_(uint32_t intf_id);
 Status EnableUplinkIf_(uint32_t intf_id);
@@ -45,7 +47,7 @@
 Status FlowAdd_(uint32_t onu_id,
                 uint32_t flow_id, const std::string flow_type,
                 uint32_t access_intf_id, uint32_t network_intf_id,
-                uint32_t gemport_id, uint32_t priority,
+                uint32_t gemport_id, uint32_t alloc_id, uint32_t priority,
                 const ::openolt::Classifier& classifier,
                 const ::openolt::Action& action);
 Status FlowRemove_(uint32_t flow_id, const std::string flow_type);
diff --git a/common/server.cc b/common/server.cc
index e1759cb..027c24b 100644
--- a/common/server.cc
+++ b/common/server.cc
@@ -68,7 +68,8 @@
             request->onu_id(),
             ((request->serial_number()).vendor_id()).c_str(),
             ((request->serial_number()).vendor_specific()).c_str(),
-            request->pir());
+            request->pir(), request->agg_port_id(),
+            request->sched_id());
     }
 
     Status DeactivateOnu(
@@ -90,7 +91,8 @@
             request->intf_id(),
             request->onu_id(),
             ((request->serial_number()).vendor_id()).c_str(),
-            ((request->serial_number()).vendor_specific()).c_str());
+            ((request->serial_number()).vendor_specific()).c_str(),
+            request->agg_port_id(), request->sched_id());
     }
 
     Status OmciMsgOut(
@@ -133,6 +135,7 @@
             request->access_intf_id(),
             request->network_intf_id(),
             request->gemport_id(),
+            request->alloc_id(),
             request->priority(),
             request->classifier(),
             request->action());
diff --git a/protos/openolt.proto b/protos/openolt.proto
index 00509f6..d02b64f 100644
--- a/protos/openolt.proto
+++ b/protos/openolt.proto
@@ -204,6 +204,8 @@
     fixed32 onu_id = 2;
     SerialNumber serial_number = 3;
     fixed32 pir = 4;   // peak information rate assigned to onu
+    fixed32 agg_port_id = 5;
+    fixed32 sched_id = 6;
 }
 
 message OmciMsg {
@@ -264,6 +266,7 @@
     string flow_type = 4;	// upstream, downstream, broadcast, multicast
     fixed32 network_intf_id = 5;
     fixed32 gemport_id = 6;
+    fixed32 alloc_id = 10;
     Classifier classifier = 7;
     Action action = 8;
     fixed32 priority = 9;
diff --git a/src/core.cc b/src/core.cc
index 2ae596d..458c93e 100644
--- a/src/core.cc
+++ b/src/core.cc
@@ -40,8 +40,8 @@
 
 State state;
 
-static Status SchedAdd_(int intf_id, int onu_id, int agg_port_id, int pir);
-static Status SchedRemove_(int intf_id, int onu_id, int agg_port_id);
+static Status SchedAdd_(int intf_id, int onu_id, int agg_port_id, int sched_id, int pir);
+static Status SchedRemove_(int intf_id, int onu_id, int agg_port_id, int sched_id);
 
 static inline int mk_sched_id(int intf_id, int onu_id) {
     return 1023 + intf_id * 112 + onu_id;
@@ -208,7 +208,8 @@
 }
 
 Status ActivateOnu_(uint32_t intf_id, uint32_t onu_id,
-    const char *vendor_id, const char *vendor_specific, uint32_t pir) {
+    const char *vendor_id, const char *vendor_specific, uint32_t pir,
+    uint32_t agg_port_id, uint32_t sched_id) {
 
     bcmbal_subscriber_terminal_cfg sub_term_obj = {};
     bcmbal_subscriber_terminal_key subs_terminal_key;
@@ -246,7 +247,11 @@
         return bcm_to_grpc_err(err, "Failed to enable ONU");
     }
 
-    return SchedAdd_(intf_id, onu_id, mk_agg_port_id(intf_id, onu_id), pir);
+    if (agg_port_id != 0) {
+        return SchedAdd_(intf_id, onu_id, agg_port_id, sched_id, pir);
+    } else {
+        return SchedAdd_(intf_id, onu_id, mk_agg_port_id(intf_id, onu_id), sched_id, pir);
+    }
 
     //return Status::OK;
 }
@@ -277,7 +282,8 @@
 }
 
 Status DeleteOnu_(uint32_t intf_id, uint32_t onu_id,
-    const char *vendor_id, const char *vendor_specific) {
+    const char *vendor_id, const char *vendor_specific,
+    uint32_t agg_port_id, uint32_t sched_id) {
 
     // Need to deactivate before removing it (BAL rules)
 
@@ -287,7 +293,11 @@
     // Without sleep the race condition is lost by ~ 20 ms
     std::this_thread::sleep_for(std::chrono::milliseconds(100));
 
-    SchedRemove_(intf_id, onu_id, mk_agg_port_id(intf_id, onu_id));
+    if (agg_port_id != 0) {
+        SchedRemove_(intf_id, onu_id, agg_port_id, sched_id);
+    } else {
+        SchedRemove_(intf_id, onu_id, mk_agg_port_id(intf_id, onu_id), sched_id);
+    }
 
     bcmos_errno err = BCM_ERR_OK;
     bcmbal_subscriber_terminal_cfg cfg;
@@ -424,7 +434,8 @@
 Status FlowAdd_(uint32_t onu_id,
                 uint32_t flow_id, const std::string flow_type,
                 uint32_t access_intf_id, uint32_t network_intf_id,
-                uint32_t gemport_id, uint32_t priority_value,
+                uint32_t gemport_id, uint32_t sched_id,
+                uint32_t priority_value,
                 const ::openolt::Classifier& classifier,
                 const ::openolt::Action& action) {
     bcmos_errno err;
@@ -608,7 +619,11 @@
 
     {
         bcmbal_tm_sched_id val;
+        if (sched_id != 0) {
+            val = sched_id;
+        } else {
         val = (bcmbal_tm_sched_id) mk_sched_id(access_intf_id, onu_id);
+        }
         BCMBAL_CFG_PROP_SET(&cfg, flow, dba_tm_sched_id, val);
     }
 
@@ -660,7 +675,7 @@
     return Status::OK;
 }
 
-Status SchedAdd_(int intf_id, int onu_id, int agg_port_id, int pir) {
+Status SchedAdd_(int intf_id, int onu_id, int agg_port_id, int sched_id, int pir) {
 
     bcmos_errno err;
 
@@ -733,7 +748,11 @@
     bcmbal_tm_sched_key key = { };
     bcmbal_tm_sched_type sched_type;
 
+    if (sched_id != 0) {
+        key.id = sched_id;
+    } else {
     key.id = mk_sched_id(intf_id, onu_id);
+    }
     key.dir = BCMBAL_TM_SCHED_DIR_US;
 
     BCMBAL_CFG_INIT(&cfg, tm_sched, key);
@@ -768,7 +787,7 @@
     return Status::OK;
 }
 
-Status SchedRemove_(int intf_id, int onu_id, int agg_port_id) {
+Status SchedRemove_(int intf_id, int onu_id, int agg_port_id, int sched_id) {
 
     bcmos_errno err;
 
@@ -777,7 +796,11 @@
     bcmbal_tm_sched_cfg tm_cfg_us;
     bcmbal_tm_sched_key tm_key_us = { };
 
+    if (sched_id != 0) {
+        tm_key_us.id = sched_id;
+    } else {
     tm_key_us.id = mk_sched_id(intf_id, onu_id);
+    }
     tm_key_us.dir = BCMBAL_TM_SCHED_DIR_US;
 
     BCMBAL_CFG_INIT(&tm_cfg_us, tm_sched, tm_key_us);
