diff --git a/src/flt_spoe.c b/src/flt_spoe.c
index d5539c9..67fe403 100644
--- a/src/flt_spoe.c
+++ b/src/flt_spoe.c
@@ -2412,8 +2412,7 @@
 /* Process SPOE actions for a specific event. It returns 1 on success. If an
  * error occurred, 0 is returned. */
 static int
-spoe_process_actions(struct stream *s, struct spoe_context *ctx,
-		     enum spoe_event ev, int dir)
+spoe_process_actions(struct stream *s, struct spoe_context *ctx, int dir)
 {
 	char *p, *end;
 	int   ret;
@@ -2452,7 +2451,7 @@
  * Functions that process SPOE events
  **************************************************************************/
 static inline int
-spoe_start_event_processing(struct spoe_context *ctx, int dir)
+spoe_start_processing(struct spoe_context *ctx, int dir)
 {
 	/* If a process is already started for this SPOE context, retry
 	 * later. */
@@ -2468,7 +2467,7 @@
 }
 
 static inline void
-spoe_stop_event_processing(struct spoe_context *ctx)
+spoe_stop_processing(struct spoe_context *ctx)
 {
 	struct spoe_appctx *sa = ctx->frag_ctx.spoe_appctx;
 
@@ -2499,38 +2498,27 @@
 	}
 }
 
-/* Process a SPOE event. First, this functions will process messages attached to
- * this event and send them to an agent in a NOTIFY frame. Then, it will wait a
- * ACK frame to process corresponding actions. During all the processing, it
- * returns 0 and it returns 1 when the processing is finished. If an error
- * occurred, -1 is returned. */
+/* Process a list of SPOE messages. First, this functions will process messages
+ *  and send them to an agent in a NOTIFY frame. Then, it will wait a ACK frame
+ *  to process corresponding actions. During all the processing, it returns 0
+ *  and it returns 1 when the processing is finished. If an error occurred, -1
+ *  is returned. */
 static int
-spoe_process_event(struct stream *s, struct spoe_context *ctx,
-		   enum spoe_event ev)
+spoe_process_messages(struct stream *s, struct spoe_context *ctx,
+		      struct list *messages, int dir, int type)
 {
 	struct spoe_config *conf = FLT_CONF(ctx->filter);
 	struct spoe_agent  *agent = conf->agent;
-	int                 dir, ret = 1;
-
-	SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
-		    " - ctx-state=%s - event=%s\n",
-		    (int)now.tv_sec, (int)now.tv_usec,
-		    agent->id, __FUNCTION__, s, spoe_ctx_state_str[ctx->state],
-		    spoe_event_str[ev]);
-
-	dir = ((ev < SPOE_EV_ON_SERVER_SESS) ? SMP_OPT_DIR_REQ : SMP_OPT_DIR_RES);
-
-	if (LIST_ISEMPTY(&(ctx->events[ev])))
-		goto out;
+	int                 ret = 1;
 
 	if (ctx->state == SPOE_CTX_ST_ERROR)
 		goto error;
 
 	if (tick_is_expired(ctx->process_exp, now_ms) && ctx->state != SPOE_CTX_ST_DONE) {
 		SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
-			    " - failed to process event '%s': timeout\n",
+			    " - failed to process messages: timeout\n",
 			    (int)now.tv_sec, (int)now.tv_usec,
-			    agent->id, __FUNCTION__, s, spoe_event_str[ev]);
+			    agent->id, __FUNCTION__, s);
 		ctx->status_code = SPOE_CTX_ERR_TOUT;
 		goto error;
 	}
@@ -2539,9 +2527,9 @@
 		if (agent->eps_max > 0) {
 			if (!freq_ctr_remain(&agent->err_per_sec, agent->eps_max, 0)) {
 				SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
-					    " - skip event '%s': max EPS reached\n",
+					    " - skip processing of messages: max EPS reached\n",
 					    (int)now.tv_sec, (int)now.tv_usec,
-					    agent->id, __FUNCTION__, s, spoe_event_str[ev]);
+					    agent->id, __FUNCTION__, s);
 				goto skip;
 			}
 		}
@@ -2551,7 +2539,7 @@
 			s->task->expire  = tick_first((tick_is_expired(s->task->expire, now_ms) ? 0 : s->task->expire),
 						      ctx->process_exp);
 		}
-		ret = spoe_start_event_processing(ctx, dir);
+		ret = spoe_start_processing(ctx, dir);
 		if (!ret)
 			goto out;
 
@@ -2565,7 +2553,7 @@
 	if (ctx->state == SPOE_CTX_ST_ENCODING_MSGS) {
 		if (!spoe_acquire_buffer(&ctx->buffer, &ctx->buffer_wait))
 			goto out;
-		ret = spoe_encode_messages(s, ctx, &(ctx->events[ev]), dir, SPOE_MSGS_BY_EVENT);
+		ret = spoe_encode_messages(s, ctx, messages, dir, type);
 		if (ret < 0)
 			goto error;
 		if (!ret)
@@ -2586,7 +2574,7 @@
 	}
 
 	if (ctx->state == SPOE_CTX_ST_DONE) {
-		spoe_process_actions(s, ctx, ev, dir);
+		spoe_process_actions(s, ctx, dir);
 		ret = 1;
 		ctx->frame_id++;
 		ctx->state = SPOE_CTX_ST_READY;
@@ -2612,13 +2600,12 @@
 			     strlen(agent->var_on_error), &smp);
 	}
 	SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
-		    " - failed to create process event '%s': code=%u\n",
+		    " - failed to process messages: code=%u\n",
 		    (int)now.tv_sec, (int)now.tv_usec, agent->id,
-		    __FUNCTION__, ctx->strm, spoe_event_str[ev],
-		    ctx->status_code);
+		    __FUNCTION__, ctx->strm, ctx->status_code);
 	send_log(ctx->strm->be, LOG_WARNING,
-		 "SPOE: [%s] failed to process event '%s': code=%u\n",
-		 agent->id, spoe_event_str[ev], ctx->status_code);
+		 "SPOE: [%s] failed to process messages: code=%u\n",
+		 agent->id, ctx->status_code);
 
 	ctx->state = ((agent->flags & SPOE_FL_CONT_ON_ERR)
 		      ? SPOE_CTX_ST_READY
@@ -2631,7 +2618,31 @@
 	ret = 1;
 
   end:
-	spoe_stop_event_processing(ctx);
+	spoe_stop_processing(ctx);
+	return ret;
+}
+
+/* Process a SPOE event, ie the list of messages attached to the event <ev>.
+ * See spoe_process_message for details. */
+static int
+spoe_process_event(struct stream *s, struct spoe_context *ctx,
+		   enum spoe_event ev)
+{
+	int dir, ret;
+
+	SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
+		    " - ctx-state=%s - event=%s\n",
+		    (int)now.tv_sec, (int)now.tv_usec,
+		    ((struct spoe_config *)FLT_CONF(ctx->filter))->agent->id,
+		    __FUNCTION__, s, spoe_ctx_state_str[ctx->state],
+		    spoe_event_str[ev]);
+
+	dir = ((ev < SPOE_EV_ON_SERVER_SESS) ? SMP_OPT_DIR_REQ : SMP_OPT_DIR_RES);
+
+	if (LIST_ISEMPTY(&(ctx->events[ev])))
+		return 1;
+
+	ret = spoe_process_messages(s, ctx, &(ctx->events[ev]), dir, SPOE_MSGS_BY_EVENT);
 	return ret;
 }
 
@@ -2715,7 +2726,7 @@
 	if (!ctx)
 		return;
 
-	spoe_stop_event_processing(ctx);
+	spoe_stop_processing(ctx);
 	pool_free2(pool2_spoe_ctx, ctx);
 }
 
