diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c
index 07922ca..873607b 100644
--- a/usr/iscsiadm.c
+++ b/usr/iscsiadm.c
@@ -260,6 +260,19 @@ session_logout(int rid, node_rec_t *rec)
 }
 
 static int
+session_active(int rid)
+{
+	iscsiadm_req_t req;
+	iscsiadm_rsp_t rsp;
+
+	memset(&req, 0, sizeof(req));
+	req.command = MGMT_IPC_SESSION_ACTIVE;
+	req.u.session.rid = rid;
+
+	return do_iscsid(&ipc_fd, &req, &rsp);
+}
+
+static int
 config_init(void)
 {
 	int rc;
@@ -726,6 +739,12 @@ main(int argc, char **argv)
 					goto out;
 				}
 			} else if (op == OP_DELETE) {
+				rc = session_active(rid);
+				if (rc > 0 && rc != MGMT_IPC_ERR_NOT_FOUND) {
+					iscsid_handle_error(rc);
+					rc = -1;
+					goto out;
+				}
 				if (idbm_delete_node(db, &rec)) {
 					log_error("can not delete record");
 					rc = -1;
diff --git a/usr/mgmt_ipc.c b/usr/mgmt_ipc.c
index d1f1eaf..4682b34 100644
--- a/usr/mgmt_ipc.c
+++ b/usr/mgmt_ipc.c
@@ -123,6 +123,27 @@ mgmt_ipc_session_login(struct mgmt_ipc_d
 }
 
 static mgmt_ipc_err_e
+mgmt_ipc_session_active(queue_task_t *qtask, int rid)
+{
+	iscsi_session_t *session;
+	struct qelem *item;
+	int i;
+
+	for (i = 0; i < num_providers; i++) {
+		item = provider[i].sessions.q_forw;
+		while (item != &provider[i].sessions) {
+			session = (iscsi_session_t *)item;
+			if (session->nrec.id == rid)
+				return MGMT_IPC_ERR_ACTIVE;
+			
+			item = item->q_forw;
+		}
+	}
+
+	return MGMT_IPC_ERR_NOT_FOUND;
+}
+
+static mgmt_ipc_err_e
 mgmt_ipc_session_activelist(queue_task_t *qtask, iscsiadm_rsp_t *rsp)
 {
 	iscsi_session_t *session;
@@ -383,6 +404,9 @@ mgmt_ipc_handle(struct mgmt_ipc_db *dbt,
 		rsp.err = mgmt_ipc_session_sync(dbt, qtask, req.u.session.rid,
 						req.u.session.sid);
 		break;
+	case MGMT_IPC_SESSION_ACTIVE:
+		rsp.err = mgmt_ipc_session_active(qtask, req.u.session.rid);
+		break;
 	case MGMT_IPC_SESSION_ACTIVELIST:
 		rsp.err = mgmt_ipc_session_activelist(qtask, &rsp);
 		immrsp = 1;
diff --git a/usr/mgmt_ipc.h b/usr/mgmt_ipc.h
index be12070..9564ed5 100644
--- a/usr/mgmt_ipc.h
+++ b/usr/mgmt_ipc.h
@@ -42,6 +42,7 @@ typedef enum mgmt_ipc_err {
 	MGMT_IPC_ERR_ACCESS		= 13,
 	MGMT_IPC_ERR_TRANS_CAPS		= 14,
 	MGMT_IPC_ERR_EXISTS		= 15,
+	MGMT_IPC_ERR_ACTIVE		= 16,
 } mgmt_ipc_err_e;
 
 typedef enum iscsiadm_cmd {
@@ -58,6 +59,7 @@ typedef enum iscsiadm_cmd {
 	MGMT_IPC_CONFIG_FILE		= 10,
 	MGMT_IPC_IMMEDIATE_STOP		= 11,
 	MGMT_IPC_SESSION_SYNC		= 12,
+	MGMT_IPC_SESSION_ACTIVE		= 13,
 } iscsiadm_cmd_e;
 
 /* IPC Request */
diff --git a/usr/util.c b/usr/util.c
index a4c0b5a..ba63850 100644
--- a/usr/util.c
+++ b/usr/util.c
@@ -194,6 +194,7 @@ void iscsid_handle_error(int err)
 		/* 13 */ "daemon access denied",
 		/* 14 */ "iSCSI transport capability failure",
 		/* 15 */ "already exists",
+		/* 16 */ "session still active",
 	};
 	log_error("initiator reported error (%d - %s)", err, err_msgs[err]);
 }
