Index: libmapi/IStoreFolder.c
===================================================================
--- libmapi/IStoreFolder.c	(revision 1322)
+++ libmapi/IStoreFolder.c	(working copy)
@@ -121,6 +121,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Set object session and handle */
 	mapi_object_set_session(obj_message, session);
 	mapi_object_set_handle(obj_message, mapi_response->handles[1]);
Index: libmapi/conf/mparse.pl
===================================================================
--- libmapi/conf/mparse.pl	(revision 1322)
+++ libmapi/conf/mparse.pl	(working copy)
@@ -532,6 +532,12 @@
     mparse "	return (e);			\\";
     mparse "} while (0);";
     mparse "";
+    mparse "#define OPENCHANGE_CHECK_NOTIFICATION(s,r)		\\";
+    mparse "do {						\\";
+    mparse "	if (s->notify_ctx)				\\";
+    mparse "		ProcessNotification(s->notify_ctx, r);	\\";
+    mparse "} while (0);";
+    mparse "";
     mparse "/* Status macros for MAPI */";
     mparse "typedef unsigned long	SCODE;";
     mparse "";
Index: libmapi/IStream.c
===================================================================
--- libmapi/IStream.c	(revision 1322)
+++ libmapi/IStream.c	(working copy)
@@ -117,6 +117,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Set object session and handle */
 	mapi_object_set_session(obj_stream, session);
 	mapi_object_set_handle(obj_stream, mapi_response->handles[1]);
@@ -209,6 +211,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* copy no more than sz_data into buffer */
 	*ByteRead = mapi_response->mapi_repl->u.mapi_ReadStream.data.length;
 	if (*ByteRead > 0) {
@@ -305,6 +309,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	*WrittenSize = mapi_response->mapi_repl->u.mapi_WriteStream.WrittenSize;
 
 	talloc_free(mapi_response);
@@ -373,6 +379,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -439,6 +447,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	*StreamSize = mapi_response->mapi_repl->u.mapi_GetStreamSize.StreamSize;
 
 	talloc_free(mapi_response);
@@ -530,6 +540,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	*NewPosition = mapi_response->mapi_repl->u.mapi_SeekStream.NewPosition;
 
 	talloc_free(mapi_response);
@@ -603,6 +615,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -697,6 +711,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	*ReadByteCount = mapi_response->mapi_repl->u.mapi_CopyToStream.ReadByteCount;
 	*WrittenByteCount = mapi_response->mapi_repl->u.mapi_CopyToStream.WrittenByteCount;
 
Index: libmapi/IUnknown.c
===================================================================
--- libmapi/IUnknown.c	(revision 1322)
+++ libmapi/IUnknown.c	(working copy)
@@ -145,6 +145,8 @@
 	status = emsmdb_transaction(session->emsmdb->ctx, mapi_request, &mapi_response);
 	OPENCHANGE_RETVAL_IF(!NT_STATUS_IS_OK(status), MAPI_E_CALL_FAILED, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -235,7 +237,9 @@
 	OPENCHANGE_RETVAL_IF(!mapi_response->mapi_repl, MAPI_E_CALL_FAILED, mem_ctx);
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
-	
+
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	long_term_id->DatabaseGuid = mapi_response->mapi_repl->u.mapi_LongTermIdFromId.LongTermId.DatabaseGuid;
 	for (i = 0; i < 6; ++i) {
 		long_term_id->GlobalCounter[i] = mapi_response->mapi_repl->u.mapi_LongTermIdFromId.LongTermId.GlobalCounter[i];
@@ -317,7 +321,9 @@
 	OPENCHANGE_RETVAL_IF(!mapi_response->mapi_repl, MAPI_E_CALL_FAILED, mem_ctx);
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
-	
+
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	*id = mapi_response->mapi_repl->u.mapi_IdFromLongTermId.Id;
 
 	talloc_free(mapi_response);
Index: libmapi/IMsgStore.c
===================================================================
--- libmapi/IMsgStore.c	(revision 1322)
+++ libmapi/IMsgStore.c	(working copy)
@@ -99,6 +99,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);	
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Set object session, id and handle */
 	mapi_object_set_session(obj_folder, session);
 	mapi_object_set_id(obj_folder, id_folder);
@@ -187,6 +189,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	*IsGhosted = mapi_response->mapi_repl->u.mapi_PublicFolderIsGhosted.IsGhosted;
 	
 	talloc_free(mapi_response);
@@ -272,6 +276,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Set object session and handle */
 	mapi_object_set_session(obj_child, session);
 	mapi_object_set_handle(obj_child, mapi_response->handles[1]);
@@ -353,6 +359,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -439,6 +447,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	*id_folder = mapi_response->mapi_repl->u.mapi_GetReceiveFolder.folder_id;
 
 	talloc_free(mapi_response);
@@ -511,6 +521,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	reply = &mapi_response->mapi_repl->u.mapi_GetReceiveFolderTable;
 
 	/* Retrieve the ReceiveFolderTable entries */
@@ -608,6 +620,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve the FolderId parameter */
 	reply = &mapi_response->mapi_repl->u.mapi_GetTransportFolder;
 	*FolderId = reply->FolderId;
@@ -704,6 +718,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve GetOwningServers response */
 	response = mapi_response->mapi_repl->u.mapi_GetOwningServers;
 
@@ -790,6 +806,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve the StoreState */
 	*StoreState = mapi_response->mapi_repl->u.mapi_GetStoreState.StoreState;
 
Index: libmapi/IMAPIFolder.c
===================================================================
--- libmapi/IMAPIFolder.c	(revision 1322)
+++ libmapi/IMAPIFolder.c	(working copy)
@@ -103,6 +103,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* set object session and handle */
 	mapi_object_set_session(obj_message, session);
 	mapi_object_set_handle(obj_message, mapi_response->handles[1]);
@@ -189,6 +191,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -347,6 +351,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	*ulStatus = mapi_response->mapi_repl->u.mapi_SetMessageStatus.ulOldStatus;
 
 	talloc_free(mapi_response);
@@ -447,6 +453,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	*ulOldStatus = mapi_response->mapi_repl->u.mapi_SetMessageStatus.ulOldStatus;
 
 	talloc_free(mapi_response);
@@ -546,6 +554,8 @@
 	OPENCHANGE_RETVAL_IF(!mapi_response->mapi_repl, MAPI_E_CALL_FAILED, mem_ctx);
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
+
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
 	
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
@@ -694,6 +704,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Set object session, handle and id */
 	mapi_object_init(obj_child);
 	mapi_object_set_session(obj_child, session);
@@ -775,6 +787,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -864,6 +878,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	if (PartialCompletion) {
 		*PartialCompletion = mapi_response->mapi_repl->u.mapi_DeleteFolder.PartialCompletion;
 	}
@@ -972,6 +988,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -1082,6 +1100,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 	
@@ -1172,6 +1192,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* TODO: parse response */
 
 	talloc_free(mapi_response);
Index: libmapi/IMessage.c
===================================================================
--- libmapi/IMessage.c	(revision 1322)
+++ libmapi/IMessage.c	(working copy)
@@ -126,6 +126,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Set object session and handle */
 	mapi_object_set_session(obj_attach, session);
 	mapi_object_set_handle(obj_attach, mapi_response->handles[1]);
@@ -204,6 +206,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 	
@@ -283,6 +287,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Set object session and handle */
 	mapi_object_set_session(obj_table, session);
 	mapi_object_set_handle(obj_table, mapi_response->handles[mapi_response->mapi_repl->handle_idx]);
@@ -371,6 +377,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Set object session and handle */
 	mapi_object_set_session(obj_attach, session);
 	mapi_object_set_handle(obj_attach, mapi_response->handles[1]);
@@ -709,6 +717,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -790,6 +800,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve the recipients */
 	reply = &mapi_response->mapi_repl->u.mapi_ReadRecipients;
 	*RowCount = reply->RowCount;
@@ -865,6 +877,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 	
@@ -940,6 +954,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -1028,6 +1044,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 	
@@ -1118,6 +1136,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	/* store the message_id */
 	mapi_object_set_id(obj_message, mapi_response->mapi_repl->u.mapi_SaveChangesMessage.MessageId);
 
@@ -1177,6 +1197,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve reply parameters */
 	reply = &mapi_response->mapi_repl->u.mapi_TransportSend;
 	if (!reply->NoPropertiesReturned) {
@@ -1306,6 +1328,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -1438,6 +1462,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Set object session and handle */
 	mapi_object_set_session(obj_embeddedmsg, session);
 	mapi_object_set_handle(obj_embeddedmsg, mapi_response->handles[1]);
Index: libmapi/IXPLogon.c
===================================================================
--- libmapi/IXPLogon.c	(revision 1322)
+++ libmapi/IXPLogon.c	(working copy)
@@ -93,6 +93,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve Address Types */
 	response = &mapi_response->mapi_repl->u.mapi_AddressTypes;
 	*lpcAdrType = response->cValues;
@@ -163,9 +165,10 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
-
 	return MAPI_E_SUCCESS;
 }
 
@@ -249,6 +252,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
Index: libmapi/IMAPIProp.c
===================================================================
--- libmapi/IMAPIProp.c	(revision 1322)
+++ libmapi/IMAPIProp.c	(working copy)
@@ -135,6 +135,8 @@
 	OPENCHANGE_RETVAL_IF(!mapi_response->mapi_repl, MAPI_E_CALL_FAILED, mem_ctx);
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF((retval && retval != MAPI_W_ERRORS_RETURNED), retval, mem_ctx);
+
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
 	
 	/* Read the SPropValue array from data blob.
 	   fixme: replace the memory context by the object one.
@@ -254,6 +256,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	if (named == true) {
 		mapi_nameid_unmap_SPropValue(nameid, lpProps, PropCount);
 	}
@@ -347,6 +351,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -417,6 +423,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Get the repsonse */
 	proptags->cValues = mapi_response->mapi_repl->u.mapi_GetPropList.count;
 	if (proptags->cValues) {
@@ -506,6 +514,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	reply = &mapi_response->mapi_repl->u.mapi_GetPropsAll;
 	properties->cValues = reply->properties.cValues;
 	properties->lpProps = talloc_steal((TALLOC_CTX *)session, reply->properties.lpProps);
@@ -584,6 +594,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -772,6 +784,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -858,6 +872,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Fill in count */
 	reply = &mapi_response->mapi_repl->u.mapi_GetNamesFromIDs;
 	*count = reply->count;
@@ -979,6 +995,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Fill the SPropTagArray */
 	proptags[0]->cValues = mapi_response->mapi_repl->u.mapi_GetIDsFromNames.count;
 	proptags[0]->aulPropTag = talloc_array((TALLOC_CTX *)proptags[0], uint32_t, proptags[0]->cValues);
@@ -1080,6 +1098,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Fill [out] parameters */
 	reply = &mapi_response->mapi_repl->u.mapi_QueryNamedProperties;
 
@@ -1191,6 +1211,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	if (problemCount) {
 		*problemCount = mapi_response->mapi_repl->u.mapi_CopyProperties.PropertyProblemCount;
 		*problems = talloc_array((TALLOC_CTX *)session[0], struct PropertyProblem, *problemCount);
@@ -1307,6 +1329,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session[0], mapi_response);
+
 	if (problemCount) {
 		*problemCount = mapi_response->mapi_repl->u.mapi_CopyTo.PropertyProblemCount;
 		*problems = talloc_array((TALLOC_CTX *)session[0], struct PropertyProblem, *problemCount);
Index: libmapi/IMAPIContainer.c
===================================================================
--- libmapi/IMAPIContainer.c	(revision 1322)
+++ libmapi/IMAPIContainer.c	(working copy)
@@ -132,6 +132,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* set object session, handle and logon_id */
 	mapi_object_set_session(obj_table, session);
 	mapi_object_set_handle(obj_table, mapi_response->handles[1]);
@@ -256,6 +258,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* set object session, handle and logon_id */
 	mapi_object_set_session(obj_table, session);
 	mapi_object_set_handle(obj_table, mapi_response->handles[1]);
@@ -349,6 +353,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* set object session, handle and logon_id */
 	mapi_object_set_session(obj_table, session);
 	mapi_object_set_handle(obj_table, mapi_response->handles[1]);
@@ -444,6 +450,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* set object session, handle and logon_id */
 	mapi_object_set_session(obj_table, session);
 	mapi_object_set_handle(obj_table, mapi_response->handles[1]);
@@ -542,6 +550,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 	
@@ -660,6 +670,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -747,6 +759,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	reply = &mapi_response->mapi_repl->u.mapi_GetSearchCriteria;
 
 	res = &reply->res;
Index: libmapi/IMAPISession.c
===================================================================
--- libmapi/IMAPISession.c	(revision 1322)
+++ libmapi/IMAPISession.c	(working copy)
@@ -107,6 +107,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* retrieve object session, handle and logon_id */
 	mapi_object_set_session(obj_store, session);
 	mapi_object_set_handle(obj_store, mapi_response->handles[0]);
@@ -270,6 +272,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* set object session, handle and logon_id */
 	mapi_object_set_session(obj_store, session);
 	mapi_object_set_handle(obj_store, mapi_response->handles[0]);
Index: libmapi/IMAPITable.c
===================================================================
--- libmapi/IMAPITable.c	(revision 1322)
+++ libmapi/IMAPITable.c	(working copy)
@@ -101,6 +101,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval && (retval != MAPI_W_ERRORS_RETURNED), retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* recopy property tags into table */
 	/* fixme: obj_table->private_data should be initialized during opening, not here */
 	if (obj_table->private_data == NULL) {
@@ -186,6 +188,8 @@
 	OPENCHANGE_RETVAL_IF(!mapi_response->mapi_repl, MAPI_E_CALL_FAILED, mem_ctx);
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
+
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
 	
 	if (Numerator) {
 		*Numerator = mapi_response->mapi_repl->u.mapi_QueryPosition.Numerator;
@@ -282,6 +286,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* table contains mapitags from previous SetColumns */
 	table = (mapi_object_table_t *)obj_table->private_data;
 	OPENCHANGE_RETVAL_IF(!table, MAPI_E_INVALID_OBJECT, mem_ctx);
@@ -364,6 +370,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* get columns SPropTagArray */
 	table = (mapi_object_table_t *)obj_table->private_data;
 	OPENCHANGE_RETVAL_IF(!table, MAPI_E_INVALID_OBJECT, mem_ctx);
@@ -460,6 +468,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	reply = &mapi_response->mapi_repl->u.mapi_SeekRow;
 	*row = reply->RowsSought;
 
@@ -554,6 +564,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	reply = &mapi_response->mapi_repl->u.mapi_SeekRowBookmark;
 	*row = reply->RowsSought;
 
@@ -648,6 +660,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -719,6 +733,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	reply = &mapi_response->mapi_repl->u.mapi_CreateBookmark;
 
 	mapi_table = (mapi_object_table_t *)obj_table->private_data;
@@ -830,6 +846,8 @@
 			retval = mapi_response->mapi_repl->error_code;
 			OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+			OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 			MAPIFreeBuffer(bookmark->bin.lpb);
 			DLIST_REMOVE(table->bookmark, bookmark);
 
@@ -918,6 +936,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -1046,6 +1066,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	talloc_free(mapi_response);
 	talloc_free(mem_ctx);
 
@@ -1144,6 +1166,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	if (TableStatus) {
 		reply = &mapi_response->mapi_repl->u.mapi_Restrict;
 		*TableStatus = reply->TableStatus;
@@ -1265,6 +1289,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* table contains SPropTagArray from previous SetColumns call */
 	table = (mapi_object_table_t *)obj_table->private_data;
 	OPENCHANGE_RETVAL_IF(!table, MAPI_E_INVALID_OBJECT, mem_ctx);
@@ -1352,6 +1378,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve TableStatus */
 	reply = &mapi_response->mapi_repl->u.mapi_GetStatus;
 	*TableStatus = reply->TableStatus;
@@ -1424,6 +1452,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve TableStatus */
 	reply = &mapi_response->mapi_repl->u.mapi_Abort;
 	*TableStatus = reply->TableStatus;
@@ -1529,6 +1559,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* table contains mapitags from previous SetColumns */
 	table = (mapi_object_table_t *)obj_table->private_data;
 	OPENCHANGE_RETVAL_IF(!table, MAPI_E_INVALID_OBJECT, mem_ctx);
@@ -1625,6 +1657,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve the RowCount */
 	reply = &mapi_response->mapi_repl->u.mapi_CollapseRow;
 	*rowCount = reply->CollapsedRowCount;
@@ -1718,6 +1752,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	/* Retrieve the CollapseState */
 	reply = &mapi_response->mapi_repl->u.mapi_GetCollapseState;
 	CollapseState->cb = reply->CollapseState.cb;
@@ -1808,6 +1844,8 @@
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
 
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
+
 	reply = &mapi_response->mapi_repl->u.mapi_SetCollapseState;
 
 	mapi_table = (mapi_object_table_t *)obj_table->private_data;
Index: libmapi/FXICS.c
===================================================================
--- libmapi/FXICS.c	(revision 1322)
+++ libmapi/FXICS.c	(working copy)
@@ -101,6 +101,8 @@
 	OPENCHANGE_RETVAL_IF(!mapi_response->mapi_repl, MAPI_E_CALL_FAILED, mem_ctx);
 	retval = mapi_response->mapi_repl->error_code;
 	OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
+
+	OPENCHANGE_CHECK_NOTIFICATION(session, mapi_response);
 	
 	/* Retrieve output parameters */
 	reply = &mapi_response->mapi_repl->u.mapi_GetLocalReplicaIds;
