diff --git a/agent/src/core_api_handler.cc b/agent/src/core_api_handler.cc
index 14d3386..0e195d9 100644
--- a/agent/src/core_api_handler.cc
+++ b/agent/src/core_api_handler.cc
@@ -2075,7 +2075,7 @@
     */
     if (aes_enabled && (access_intf_id >= 0) && (gemport_id >= GEM_PORT_ID_START) && (key.flow_type == BCMOLT_FLOW_TYPE_DOWNSTREAM)) {
         OPENOLT_LOG(INFO, openolt_log_id, "Setting encryption on pon = %d gem_port = %d through flow_id = %d\n", access_intf_id, gemport_id, flow_id);
-        enable_encryption_for_gem_port(access_intf_id, gemport_id);
+        enable_encryption_for_gem_port(access_intf_id, gemport_id, board_technology);
     } else {
         OPENOLT_LOG(WARNING, openolt_log_id, "Flow config for flow_id = %d is not suitable for setting downstream encryption on pon = %d gem_port = %d. No action taken.\n", flow_id, access_intf_id, gemport_id);
     }
@@ -2764,7 +2764,7 @@
     }
 
     if (direction == upstream || direction == downstream) {
-        Status st = install_gem_port(access_intf_id, onu_id, uni_id, gemport_id);
+        Status st = install_gem_port(access_intf_id, onu_id, uni_id, gemport_id, board_technology);
         if (st.error_code() != grpc::StatusCode::ALREADY_EXISTS && st.error_code() != grpc::StatusCode::OK) {
             OPENOLT_LOG(ERROR, openolt_log_id, "failed to created gemport=%d, access_intf=%d, onu_id=%d\n", gemport_id, access_intf_id, onu_id);
             return BCM_ERR_INTERNAL;
@@ -2847,7 +2847,7 @@
     // upstream/downstream queue (see CreateQueue function) and it makes sense to delete them when remove the queues.
     // For multicast case we do not manage the install/remove of gem port in agent application. It is managed by BAL.
     if (direction == upstream || direction == downstream) {
-        Status st = remove_gem_port(access_intf_id, onu_id, uni_id, gemport_id);
+        Status st = remove_gem_port(access_intf_id, onu_id, uni_id, gemport_id, board_technology);
         if (st.error_code() != grpc::StatusCode::OK) {
             OPENOLT_LOG(ERROR, openolt_log_id, "failed to remove gemport=%d, access_intf=%d, onu_id=%d\n", gemport_id, access_intf_id, onu_id);
             return BCM_ERR_INTERNAL;
diff --git a/agent/src/core_utils.cc b/agent/src/core_utils.cc
index 6c027d5..c2f3016 100644
--- a/agent/src/core_utils.cc
+++ b/agent/src/core_utils.cc
@@ -953,7 +953,7 @@
     return err;
 }
 
-Status install_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id) {
+Status install_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id, std::string board_technology) {
     gemport_status_map_key_tuple gem_status_key(intf_id, onu_id, uni_id, gemport_id);
 
     bcmos_fastlock_lock(&data_lock);
@@ -1008,10 +1008,12 @@
     }
 
 #ifndef SCALE_AND_PERF
-    err = wait_for_gem_action(intf_id, gemport_id, GEM_OBJECT_CREATE);
-    if (err) {
-        OPENOLT_LOG(ERROR, openolt_log_id, "failed to install gem_port = %d err = %s\n", gemport_id, bcmos_strerror(err));
-        return bcm_to_grpc_err(err, "Access_Control set ITU PON Gem port failed");
+    if (board_technology == "GPON") {
+        err = wait_for_gem_action(intf_id, gemport_id, GEM_OBJECT_CREATE);
+        if (err) {
+            OPENOLT_LOG(ERROR, openolt_log_id, "failed to install gem_port = %d err = %s\n", gemport_id, bcmos_strerror(err));
+            return bcm_to_grpc_err(err, "Access_Control set ITU PON Gem port failed");
+        }
     }
 #endif
 
@@ -1024,7 +1026,7 @@
     return Status::OK;
 }
 
-Status remove_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id) {
+Status remove_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id, std::string board_technology) {
     gemport_status_map_key_tuple gem_status_key(intf_id, onu_id, uni_id, gemport_id);
 
     bcmos_fastlock_lock(&data_lock);
@@ -1053,31 +1055,33 @@
         return bcm_to_grpc_err(err, "Access_Control clear ITU PON Gem port failed");
     }
 
-    err = get_pon_interface_status((bcmolt_interface)intf_id, &state, &los_status);
-    if (err == BCM_ERR_OK) {
-        if (state == BCMOLT_INTERFACE_STATE_ACTIVE_WORKING && los_status == BCMOLT_STATUS_OFF) {
+    if (board_technology == "GPON") {
+        err = get_pon_interface_status((bcmolt_interface)intf_id, &state, &los_status);
+        if (err == BCM_ERR_OK) {
+            if (state == BCMOLT_INTERFACE_STATE_ACTIVE_WORKING && los_status == BCMOLT_STATUS_OFF) {
 #ifndef SCALE_AND_PERF
-            OPENOLT_LOG(INFO, openolt_log_id, "PON interface: %d is enabled and LoS status is OFF, waiting for gem cfg clear response\n",
-                intf_id);
-            err = wait_for_gem_action(intf_id, gemport_id, GEM_OBJECT_DELETE);
-            if (err) {
-                OPENOLT_LOG(ERROR, openolt_log_id, "failed to remove gem_port = %d err = %s\n", gemport_id, bcmos_strerror(err));
-                return bcm_to_grpc_err(err, "Access_Control clear ITU PON Gem port failed");
-            }
+                OPENOLT_LOG(INFO, openolt_log_id, "PON interface: %d is enabled and LoS status is OFF, waiting for gem cfg clear response\n",
+                    intf_id);
+                err = wait_for_gem_action(intf_id, gemport_id, GEM_OBJECT_DELETE);
+                if (err) {
+                    OPENOLT_LOG(ERROR, openolt_log_id, "failed to remove gem_port = %d err = %s\n", gemport_id, bcmos_strerror(err));
+                    return bcm_to_grpc_err(err, "Access_Control clear ITU PON Gem port failed");
+                }
 #endif
+            }
+            else if (state == BCMOLT_INTERFACE_STATE_ACTIVE_WORKING && los_status == BCMOLT_STATUS_ON) {
+                OPENOLT_LOG(INFO, openolt_log_id, "PON interface: %d is enabled but LoS status is ON, not waiting for gem cfg clear response\n",
+                    intf_id);
+            }
+            else if (state == BCMOLT_INTERFACE_STATE_INACTIVE) {
+                OPENOLT_LOG(INFO, openolt_log_id, "PON interface: %d is disabled, not waiting for gem cfg clear response\n",
+                    intf_id);
+            }
+        } else {
+            OPENOLT_LOG(ERROR, openolt_log_id, "Failed to fetch PON interface status, intf_id = %d, err = %s\n",
+                intf_id, bcmos_strerror(err));
+            return bcm_to_grpc_err(err, "Access_Control clear ITU PON Gem port failed");
         }
-        else if (state == BCMOLT_INTERFACE_STATE_ACTIVE_WORKING && los_status == BCMOLT_STATUS_ON) {
-            OPENOLT_LOG(INFO, openolt_log_id, "PON interface: %d is enabled but LoS status is ON, not waiting for gem cfg clear response\n",
-                intf_id);
-        }
-        else if (state == BCMOLT_INTERFACE_STATE_INACTIVE) {
-            OPENOLT_LOG(INFO, openolt_log_id, "PON interface: %d is disabled, not waiting for gem cfg clear response\n",
-                intf_id);
-        }
-    } else {
-        OPENOLT_LOG(ERROR, openolt_log_id, "Failed to fetch PON interface status, intf_id = %d, err = %s\n",
-            intf_id, bcmos_strerror(err));
-        return bcm_to_grpc_err(err, "Access_Control clear ITU PON Gem port failed");
     }
 
     OPENOLT_LOG(INFO, openolt_log_id, "gem port removed successfully = %d\n", gemport_id);
@@ -1092,7 +1096,7 @@
     return Status::OK;
 }
 
-Status enable_encryption_for_gem_port(int32_t intf_id, int32_t gemport_id) {
+Status enable_encryption_for_gem_port(int32_t intf_id, int32_t gemport_id, std::string board_technology) {
     bcmos_errno err;
     bcmolt_itupon_gem_cfg cfg;
     bcmolt_itupon_gem_key key = {
@@ -1114,10 +1118,12 @@
     }
 
 #ifndef SCALE_AND_PERF
-    err = wait_for_gem_action(intf_id, gemport_id, GEM_OBJECT_ENCRYPT);
-    if (err) {
-        OPENOLT_LOG(ERROR, openolt_log_id, "failed to enable gemport encryption, gem_port = %d err = %s\n", gemport_id, bcmos_strerror(err));
-        return bcm_to_grpc_err(err, "Access_Control ITU PON Gem port encryption failed");
+    if (board_technology == "GPON") {
+        err = wait_for_gem_action(intf_id, gemport_id, GEM_OBJECT_ENCRYPT);
+        if (err) {
+            OPENOLT_LOG(ERROR, openolt_log_id, "failed to enable gemport encryption, gem_port = %d err = %s\n", gemport_id, bcmos_strerror(err));
+            return bcm_to_grpc_err(err, "Access_Control ITU PON Gem port encryption failed");
+        }
     }
 #endif
 
diff --git a/agent/src/core_utils.h b/agent/src/core_utils.h
index a7a2295..e9ad817 100644
--- a/agent/src/core_utils.h
+++ b/agent/src/core_utils.h
@@ -93,9 +93,9 @@
 unsigned NumNniIf_();
 unsigned NumPonIf_();
 bcmos_errno get_nni_interface_status(bcmolt_interface id, bcmolt_interface_state *state);
-Status install_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id);
-Status remove_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id);
-Status enable_encryption_for_gem_port(int32_t intf_id, int32_t gemport_id);
+Status install_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id, std::string board_technology);
+Status remove_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id, std::string board_technology);
+Status enable_encryption_for_gem_port(int32_t intf_id, int32_t gemport_id, std::string board_technology);
 Status update_acl_interface(int32_t intf_id, bcmolt_interface_type intf_type, uint32_t access_control_id,
                 bcmolt_members_update_command acl_cmd);
 Status install_acl(const acl_classifier_key acl_key);
