diff --git a/src/pattern.c b/src/pattern.c
index 5c83a5c..faf23ef 100644
--- a/src/pattern.c
+++ b/src/pattern.c
@@ -80,37 +80,37 @@
 };
 
 void (*pat_delete_fcts[PAT_MATCH_NUM])(struct pattern_expr *, struct pat_ref_elt *) = {
-	[PAT_MATCH_FOUND] = pat_del_list_val,
-	[PAT_MATCH_BOOL]  = pat_del_list_val,
-	[PAT_MATCH_INT]   = pat_del_list_val,
+	[PAT_MATCH_FOUND] = pat_del_list_gen,
+	[PAT_MATCH_BOOL]  = pat_del_list_gen,
+	[PAT_MATCH_INT]   = pat_del_list_gen,
 	[PAT_MATCH_IP]    = pat_del_tree_ip,
-	[PAT_MATCH_BIN]   = pat_del_list_ptr,
-	[PAT_MATCH_LEN]   = pat_del_list_val,
+	[PAT_MATCH_BIN]   = pat_del_list_gen,
+	[PAT_MATCH_LEN]   = pat_del_list_gen,
 	[PAT_MATCH_STR]   = pat_del_tree_str,
 	[PAT_MATCH_BEG]   = pat_del_tree_str,
-	[PAT_MATCH_SUB]   = pat_del_list_ptr,
-	[PAT_MATCH_DIR]   = pat_del_list_ptr,
-	[PAT_MATCH_DOM]   = pat_del_list_ptr,
-	[PAT_MATCH_END]   = pat_del_list_ptr,
-	[PAT_MATCH_REG]   = pat_del_list_reg,
-	[PAT_MATCH_REGM]  = pat_del_list_reg,
+	[PAT_MATCH_SUB]   = pat_del_list_gen,
+	[PAT_MATCH_DIR]   = pat_del_list_gen,
+	[PAT_MATCH_DOM]   = pat_del_list_gen,
+	[PAT_MATCH_END]   = pat_del_list_gen,
+	[PAT_MATCH_REG]   = pat_del_list_gen,
+	[PAT_MATCH_REGM]  = pat_del_list_gen,
 };
 
 void (*pat_prune_fcts[PAT_MATCH_NUM])(struct pattern_expr *) = {
-	[PAT_MATCH_FOUND] = pat_prune_val,
-	[PAT_MATCH_BOOL]  = pat_prune_val,
-	[PAT_MATCH_INT]   = pat_prune_val,
-	[PAT_MATCH_IP]    = pat_prune_val,
-	[PAT_MATCH_BIN]   = pat_prune_ptr,
-	[PAT_MATCH_LEN]   = pat_prune_val,
-	[PAT_MATCH_STR]   = pat_prune_ptr,
-	[PAT_MATCH_BEG]   = pat_prune_ptr,
-	[PAT_MATCH_SUB]   = pat_prune_ptr,
-	[PAT_MATCH_DIR]   = pat_prune_ptr,
-	[PAT_MATCH_DOM]   = pat_prune_ptr,
-	[PAT_MATCH_END]   = pat_prune_ptr,
-	[PAT_MATCH_REG]   = pat_prune_reg,
-	[PAT_MATCH_REGM]  = pat_prune_reg,
+	[PAT_MATCH_FOUND] = pat_prune_gen,
+	[PAT_MATCH_BOOL]  = pat_prune_gen,
+	[PAT_MATCH_INT]   = pat_prune_gen,
+	[PAT_MATCH_IP]    = pat_prune_gen,
+	[PAT_MATCH_BIN]   = pat_prune_gen,
+	[PAT_MATCH_LEN]   = pat_prune_gen,
+	[PAT_MATCH_STR]   = pat_prune_gen,
+	[PAT_MATCH_BEG]   = pat_prune_gen,
+	[PAT_MATCH_SUB]   = pat_prune_gen,
+	[PAT_MATCH_DIR]   = pat_prune_gen,
+	[PAT_MATCH_DOM]   = pat_prune_gen,
+	[PAT_MATCH_END]   = pat_prune_gen,
+	[PAT_MATCH_REG]   = pat_prune_gen,
+	[PAT_MATCH_REGM]  = pat_prune_gen,
 };
 
 struct pattern *(*pat_match_fcts[PAT_MATCH_NUM])(struct sample *, struct pattern_expr *, int) = {
@@ -1088,12 +1088,16 @@
 	}
 }
 
-void pat_prune_val(struct pattern_expr *expr)
+void pat_prune_gen(struct pattern_expr *expr)
 {
 	struct pattern_list *pat, *tmp;
 
 	list_for_each_entry_safe(pat, tmp, &expr->patterns, list) {
 		LIST_DEL(&pat->list);
+		if (pat->pat.sflags & PAT_SF_REGFREE)
+			regex_free(pat->pat.ptr.ptr);
+		else
+			free(pat->pat.ptr.ptr);
 		free(pat->pat.data);
 		free(pat);
 	}
@@ -1104,40 +1108,6 @@
 	expr->ref->revision = rdtsc();
 }
 
-void pat_prune_ptr(struct pattern_expr *expr)
-{
-	struct pattern_list *pat, *tmp;
-
-	list_for_each_entry_safe(pat, tmp, &expr->patterns, list) {
-		LIST_DEL(&pat->list);
-		free(pat->pat.ptr.ptr);
-		free(pat->pat.data);
-		free(pat);
-	}
-
-	free_pattern_tree(&expr->pattern_tree);
-	free_pattern_tree(&expr->pattern_tree_2);
-	LIST_INIT(&expr->patterns);
-	expr->ref->revision = rdtsc();
-}
-
-void pat_prune_reg(struct pattern_expr *expr)
-{
-	struct pattern_list *pat, *tmp;
-
-	list_for_each_entry_safe(pat, tmp, &expr->patterns, list) {
-		LIST_DEL(&pat->list);
-		regex_free(pat->pat.ptr.ptr);
-		free(pat->pat.data);
-		free(pat);
-	}
-
-	free_pattern_tree(&expr->pattern_tree);
-	free_pattern_tree(&expr->pattern_tree_2);
-	LIST_INIT(&expr->patterns);
-	expr->ref->revision = rdtsc();
-}
-
 /*
  *
  * The following functions are used for the pattern indexation
@@ -1418,7 +1388,7 @@
 	return 1;
 }
 
-void pat_del_list_val(struct pattern_expr *expr, struct pat_ref_elt *ref)
+void pat_del_list_gen(struct pattern_expr *expr, struct pat_ref_elt *ref)
 {
 	struct pattern_list *pat;
 	struct pattern_list *safe;
@@ -1430,6 +1400,10 @@
 
 		/* Delete and free entry. */
 		LIST_DEL(&pat->list);
+		if (pat->pat.sflags & PAT_SF_REGFREE)
+			regex_free(pat->pat.ptr.reg);
+		else
+			free(pat->pat.ptr.ptr);
 		free(pat->pat.data);
 		free(pat);
 	}
@@ -1459,7 +1433,7 @@
 	}
 
 	/* Browse each node of the list for IPv4 addresses. */
-	pat_del_list_val(expr, ref);
+	pat_del_list_gen(expr, ref);
 
 	/* browse each node of the tree for IPv6 addresses. */
 	for (node = ebmb_first(&expr->pattern_tree_2), next_node = node ? ebmb_next(node) : NULL;
@@ -1480,25 +1454,6 @@
 	expr->ref->revision = rdtsc();
 }
 
-void pat_del_list_ptr(struct pattern_expr *expr, struct pat_ref_elt *ref)
-{
-	struct pattern_list *pat;
-	struct pattern_list *safe;
-
-	list_for_each_entry_safe(pat, safe, &expr->patterns, list) {
-		/* Check equality. */
-		if (pat->pat.ref != ref)
-			continue;
-
-		/* Delete and free entry. */
-		LIST_DEL(&pat->list);
-		free(pat->pat.ptr.ptr);
-		free(pat->pat.data);
-		free(pat);
-	}
-	expr->ref->revision = rdtsc();
-}
-
 void pat_del_tree_str(struct pattern_expr *expr, struct pat_ref_elt *ref)
 {
 	struct ebmb_node *node, *next_node;
@@ -1506,7 +1461,7 @@
 
 	/* If the flag PAT_F_IGNORE_CASE is set, we cannot use trees */
 	if (expr->mflags & PAT_MF_IGNORE_CASE)
-		return pat_del_list_ptr(expr, ref);
+		return pat_del_list_gen(expr, ref);
 
 	/* browse each node of the tree. */
 	for (node = ebmb_first(&expr->pattern_tree), next_node = node ? ebmb_next(node) : NULL;
@@ -1527,25 +1482,6 @@
 	expr->ref->revision = rdtsc();
 }
 
-void pat_del_list_reg(struct pattern_expr *expr, struct pat_ref_elt *ref)
-{
-	struct pattern_list *pat;
-	struct pattern_list *safe;
-
-	list_for_each_entry_safe(pat, safe, &expr->patterns, list) {
-		/* Check equality. */
-		if (pat->pat.ref != ref)
-			continue;
-
-		/* Delete and free entry. */
-		LIST_DEL(&pat->list);
-		regex_free(pat->pat.ptr.ptr);
-		free(pat->pat.data);
-		free(pat);
-	}
-	expr->ref->revision = rdtsc();
-}
-
 void pattern_init_expr(struct pattern_expr *expr)
 {
 	LIST_INIT(&expr->patterns);
