diff --git a/protos/openolt.proto b/protos/openolt.proto
index e13cc83..1140748 100644
--- a/protos/openolt.proto
+++ b/protos/openolt.proto
@@ -25,6 +25,20 @@
         };
     }
 
+    rpc DeactivateOnu(Onu) returns (Empty) {
+        option (google.api.http) = {
+          post: "/v1/DisableOnu"
+          body: "*"
+        };
+    }
+
+    rpc DeleteOnu(Onu) returns (Empty) {
+        option (google.api.http) = {
+          post: "/v1/DeleteOnu"
+          body: "*"
+        };
+    }
+
     rpc OmciMsgOut(OmciMsg) returns (Empty) {
         option (google.api.http) = {
           post: "/v1/OmciMsgOut"
diff --git a/src/core.cc b/src/core.cc
index 6a605e4..9cf9365 100644
--- a/src/core.cc
+++ b/src/core.cc
@@ -136,6 +136,65 @@
     //return Status::OK;
 }
 
+Status DeactivateOnu_(uint32_t intf_id, uint32_t onu_id,
+    const char *vendor_id, const char *vendor_specific) {
+
+    SchedRemove_(intf_id, onu_id, mk_agg_port_id(onu_id));
+
+    bcmbal_subscriber_terminal_cfg sub_term_obj = {};
+    bcmbal_subscriber_terminal_key subs_terminal_key;
+
+    std::cout << "Deactivating ONU " << onu_id << " on PON " << intf_id << std::endl;
+    std::cout << "Vendor Id " << vendor_id
+              << "Vendor Specific Id " << vendor_specific
+              << std::endl;
+
+    subs_terminal_key.sub_term_id = onu_id;
+    subs_terminal_key.intf_id = intf_id;
+    BCMBAL_CFG_INIT(&sub_term_obj, subscriber_terminal, subs_terminal_key);
+
+    BCMBAL_CFG_PROP_SET(&sub_term_obj, subscriber_terminal, admin_state, BCMBAL_STATE_DOWN);
+
+    if (bcmbal_cfg_set(DEFAULT_ATERM_ID, &(sub_term_obj.hdr))) {
+        std::cout << "ERROR: Failed to deactivate ONU: " << std::endl;
+        return Status(grpc::StatusCode::INTERNAL, "Failed to deactivate ONU");
+    }
+
+    return Status::OK;
+}
+
+Status DeleteOnu_(uint32_t intf_id, uint32_t onu_id,
+    const char *vendor_id, const char *vendor_specific) {
+    bcmos_errno err = BCM_ERR_OK;
+    bcmbal_subscriber_terminal_cfg cfg;
+    bcmbal_subscriber_terminal_key key = { };
+
+    std::cout << "Processing subscriber terminal cfg clear for sub_term_id = "
+              << onu_id << " and intf_id = " << intf_id << std::endl;
+
+    key.sub_term_id = onu_id ;
+    key.intf_id = intf_id ;
+
+    if (0 == key.sub_term_id)
+    {
+            std::cout << "Invalid Key to handle subscriber terminal clear subscriber_terminal_id = "
+                      << onu_id << " Interface ID = " << intf_id << std::endl;
+            return Status(grpc::StatusCode::INTERNAL, "Failed to delete ONU");
+    }
+
+    BCMBAL_CFG_INIT(&cfg, subscriber_terminal, key);
+
+    err = bcmbal_cfg_clear(DEFAULT_ATERM_ID, &cfg.hdr);
+    if (err != BCM_ERR_OK)
+    {
+       std::cout << "Failed to clear information for BAL subscriber_terminal_id = "
+                << onu_id << " Interface ID = " << intf_id << std::endl;
+        return Status(grpc::StatusCode::INTERNAL, "Failed to delete ONU");
+    }
+
+    return Status::OK;;
+}
+
 #define MAX_CHAR_LENGTH  20
 #define MAX_OMCI_MSG_LENGTH 44
 Status OmciMsgOut_(uint32_t intf_id, uint32_t onu_id, const std::string pkt) {
@@ -481,3 +540,30 @@
     return Status::OK;
     //return 0;
 }
+
+Status SchedRemove_(int intf_id, int onu_id, int agg_port_id) {
+    bcmbal_tm_sched_cfg cfg;
+    bcmbal_tm_sched_key key = { };
+    bcmbal_tm_sched_type sched_type;
+
+    key.id = mk_sched_id(onu_id);
+    key.dir = BCMBAL_TM_SCHED_DIR_US;
+
+    BCMBAL_CFG_INIT(&cfg, tm_sched, key);
+
+    if (bcmbal_cfg_clear(DEFAULT_ATERM_ID, &(cfg.hdr))) {
+      std::cout << "ERROR: Failed to remove upstream DBA sched"
+                << " id:" << key.id
+                << " intf_id:" << intf_id
+                << " onu_id:" << onu_id << std::endl;
+      return Status(grpc::StatusCode::INTERNAL, "Failed to remove upstream DBA sched");
+    }
+
+    std::cout << "remove upstream DBA sched"
+              << " id:" << key.id
+              << " intf_id:" << intf_id
+              << " onu_id:" << onu_id << std::endl;
+
+    return Status::OK;
+    //return 0;
+}
diff --git a/src/core.h b/src/core.h
index eae6e79..d718caf 100644
--- a/src/core.h
+++ b/src/core.h
@@ -25,6 +25,10 @@
 Status Enable_();
 Status ActivateOnu_(uint32_t intf_id, uint32_t onu_id,
     const char *vendor_id, const char *vendor_specific);
+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);
 Status EnablePonIf_(uint32_t intf_id);
 Status DisablePonIf_(uint32_t intf_id);
 Status OmciMsgOut_(uint32_t intf_id, uint32_t onu_id, const std::string pkt);
@@ -38,6 +42,7 @@
                 const ::openolt::Action& action);
 
 static Status SchedAdd_(int intf_id, int onu_id, int agg_port_id);
+static Status SchedRemove_(int intf_id, int onu_id, int agg_port_id);
 
 static inline int mk_sched_id(int onu_id) {
     return 1023 + onu_id;
diff --git a/src/server.cc b/src/server.cc
index 6b1609c..980124c 100644
--- a/src/server.cc
+++ b/src/server.cc
@@ -56,6 +56,28 @@
             ((request->serial_number()).vendor_specific()).c_str());
     }
 
+    Status DeactivateOnu(
+            ServerContext* context,
+            const openolt::Onu* request,
+            openolt::Empty* response) override {
+        return DeactivateOnu_(
+            request->intf_id(),
+            request->onu_id(),
+            ((request->serial_number()).vendor_id()).c_str(),
+            ((request->serial_number()).vendor_specific()).c_str());
+    }
+
+    Status DeleteOnu(
+            ServerContext* context,
+            const openolt::Onu* request,
+            openolt::Empty* response) override {
+        return DeleteOnu_(
+            request->intf_id(),
+            request->onu_id(),
+            ((request->serial_number()).vendor_id()).c_str(),
+            ((request->serial_number()).vendor_specific()).c_str());
+    }
+
     Status OmciMsgOut(
             ServerContext* context,
             const openolt::OmciMsg* request,
