diff --git a/lib/generic/map.c b/lib/generic/map.c
index 683db284658a8f0e090fe0cccf4546c0c8507132..86c2b19aa4deb26b662c9a7f0a3495309e895a92 100644
--- a/lib/generic/map.c
+++ b/lib/generic/map.c
@@ -53,12 +53,12 @@ static inline cb_node_t *ref_get_internal(uint8_t *p)
 }
 
 /* Standard memory allocation functions */
-static void *malloc_std(size_t size, void *baton) {
+static void *malloc_std(void *baton, size_t size) {
 	(void)baton; /* Prevent compiler warnings */
 	return malloc(size);
 }
 
-static void free_std(void *ptr, void *baton) {
+static void free_std(void *baton, void *ptr) {
 	(void)baton; /* Prevent compiler warnings */
 	free(ptr);
 }
@@ -71,9 +71,9 @@ static void cbt_traverse_delete(map_t *map, void *top)
 		cb_node_t *q = ref_get_internal(p);
 		cbt_traverse_delete(map, q->child[0]);
 		cbt_traverse_delete(map, q->child[1]);
-		map->free(q, map->baton);
+		map->free(map->baton, q);
 	} else {
-		map->free(p, map->baton);
+		map->free(map->baton, p);
 	}
 }
 
@@ -103,7 +103,7 @@ static int cbt_traverse_prefixed(void *top,
 
 static cb_data_t *cbt_make_data(map_t *map, const uint8_t *str, size_t len, void *value)
 {
-	cb_data_t *x = map->malloc(sizeof(cb_data_t) + len, map->baton);
+	cb_data_t *x = map->malloc(map->baton, sizeof(cb_data_t) + len);
 	if (x != NULL) {
 		x->value = value;
 		memcpy(x->key, str, len);
@@ -215,14 +215,14 @@ different_byte_found:
 	c = data->key[newbyte];
 	newdirection = (1 + (newotherbits | c)) >> 8;
 
-	newnode = map->malloc(sizeof(cb_node_t), map->baton);
+	newnode = map->malloc(map->baton, sizeof(cb_node_t));
 	if (newnode == NULL) {
 		return ENOMEM;
 	}
 
 	x = (uint8_t *)cbt_make_data(map, ubytes, ulen + 1, value);
 	if (x == NULL) {
-		map->free(newnode, map->baton);
+		map->free(map->baton, newnode);
 		return ENOMEM;
 	}
 
@@ -293,7 +293,7 @@ int map_del(map_t *map, const char *str)
 	if (strcmp(str, (const char *)data->key) != 0) {
 		return 1;
 	}
-	map->free(p, map->baton);
+	map->free(map->baton, p);
 
 	if (!whereq) {
 		map->root = NULL;
@@ -301,7 +301,7 @@ int map_del(map_t *map, const char *str)
 	}
 
 	*whereq = q->child[1 - direction];
-	map->free(q, map->baton);
+	map->free(map->baton, q);
 	return 0;
 }
 
diff --git a/lib/generic/map.h b/lib/generic/map.h
index 25258d198f34c4a38b8656ed1828b4cba1a41386..96ce01714709a8b9b783d80f9e6a73d2a944ef39 100644
--- a/lib/generic/map.h
+++ b/lib/generic/map.h
@@ -58,8 +58,8 @@ extern "C" {
 /*! Main data structure */
 typedef struct {
 	void *root;
-	void *(*malloc)(size_t size, void *baton);
-	void (*free)(void *ptr, void *baton);
+	void *(*malloc)(void *baton, size_t size);
+	void (*free)(void *baton, void *ptr);
 	void *baton; /*! Passed to malloc() and free() */
 } map_t;