diff --git a/src/lib-sieve/sieve-result.c b/src/lib-sieve/sieve-result.c
index db59ec8ec18ce52b4cead44b87106928bc097d4e..ef57538222ab8ea0543f743cc84056a74b15b2ed 100644
--- a/src/lib-sieve/sieve-result.c
+++ b/src/lib-sieve/sieve-result.c
@@ -641,7 +641,10 @@ int sieve_result_execute
 			rac->success = act->start(act, &result->action_env, rac->context, 
 				&rac->tr_context);
 			success = success && rac->success;
-		} 
+		} else {
+			rac->tr_context = rac->context;
+		}
+ 
 		rac = rac->next;	
 	}
 	
@@ -655,8 +658,6 @@ int sieve_result_execute
 		const struct sieve_action *act = rac->action;
 		struct sieve_result_side_effect *rsef;
 		const struct sieve_side_effect *sef;
-		void *context = rac->tr_context == NULL ? 
-				rac->context : rac->tr_context;
 		
 		/* Execute pre-execute event of side effects */
 		rsef = rac->seffects != NULL ? rac->seffects->first_effect : NULL;
@@ -664,7 +665,7 @@ int sieve_result_execute
 			sef = rsef->seffect;
 			if ( sef->pre_execute != NULL ) 
 				success = success & sef->pre_execute
-					(sef, act, &result->action_env, &rsef->context, context);
+					(sef, act, &result->action_env, &rsef->context, rac->tr_context);
 			rsef = rsef->next;
 		}
 	
@@ -680,7 +681,7 @@ int sieve_result_execute
 			sef = rsef->seffect;
 			if ( sef->post_execute != NULL ) 
 				success = success && sef->post_execute
-					(sef, act, &result->action_env, rsef->context, context);
+					(sef, act, &result->action_env, rsef->context, rac->tr_context);
 			rsef = rsef->next;
 		}
 		 
@@ -697,8 +698,6 @@ int sieve_result_execute
 		const struct sieve_action *act = rac->action;
 		struct sieve_result_side_effect *rsef;
 		const struct sieve_side_effect *sef;
-		void *context = rac->tr_context == NULL ? 
-				rac->context : rac->tr_context;
 		
 		if ( success ) {
 			bool keep = TRUE;
@@ -713,7 +712,7 @@ int sieve_result_execute
 				sef = rsef->seffect;
 				if ( sef->post_commit != NULL ) 
 					sef->post_commit
-						(sef, act, &result->action_env, rsef->context, context, 
+						(sef, act, &result->action_env, rsef->context, rac->tr_context, 
 							&keep);
 				rsef = rsef->next;
 			}
@@ -729,7 +728,7 @@ int sieve_result_execute
 				sef = rsef->seffect;
 				if ( sef->rollback != NULL ) 
 					sef->rollback
-						(sef, act, &result->action_env, rsef->context, context, 
+						(sef, act, &result->action_env, rsef->context, rac->tr_context, 
 						rac->success);
 				rsef = rsef->next;
 			}