diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c
index afc6249..5025d57 100644
--- a/src/gb/gprs_ns.c
+++ b/src/gb/gprs_ns.c
@@ -135,11 +135,11 @@
 	NS_STAT_ALIVE_DELAY,
 };
 
-static const struct stat_item_desc nsvc_stat_description[] = {
+static const struct osmo_stat_item_desc nsvc_stat_description[] = {
 	{ "alive.delay", "ALIVE reponse time        ", "ms", 16, 0 },
 };
 
-static const struct stat_item_group_desc nsvc_statg_desc = {
+static const struct osmo_stat_item_group_desc nsvc_statg_desc = {
 	.group_name_prefix = "ns.nsvc",
 	.group_description = "NSVC Peer Statistics",
 	.num_items = ARRAY_SIZE(nsvc_stat_description),
@@ -238,7 +238,7 @@
 	nsvc->timer.cb = gprs_ns_timer_cb;
 	nsvc->timer.data = nsvc;
 	nsvc->ctrg = rate_ctr_group_alloc(nsvc, &nsvc_ctrg_desc, nsvci);
-	nsvc->statg = stat_item_group_alloc(nsvc, &nsvc_statg_desc, nsvci);
+	nsvc->statg = osmo_stat_item_group_alloc(nsvc, &nsvc_statg_desc, nsvci);
 
 	llist_add(&nsvc->list, &nsi->gprs_nsvcs);
 
@@ -1306,7 +1306,7 @@
 		break;
 	case NS_PDUT_ALIVE_ACK:
 		if ((*nsvc)->timer_mode == NSVC_TIMER_TNS_ALIVE)
-			stat_item_set((*nsvc)->statg->items[NS_STAT_ALIVE_DELAY],
+			osmo_stat_item_set((*nsvc)->statg->items[NS_STAT_ALIVE_DELAY],
 				nsvc_timer_elapsed_ms(*nsvc));
 		/* stop Tns-alive and start Tns-test */
 		nsvc_start_timer(*nsvc, NSVC_TIMER_TNS_TEST);
diff --git a/src/stat_item.c b/src/stat_item.c
index 525a94b..0545ea0 100644
--- a/src/stat_item.c
+++ b/src/stat_item.c
@@ -21,7 +21,7 @@
  *
  */
 
-/*! \addtogroup stat_item
+/*! \addtogroup osmo_stat_item
  *  @{
  */
 
@@ -37,7 +37,7 @@
 #include <osmocom/core/timer.h>
 #include <osmocom/core/stat_item.h>
 
-static LLIST_HEAD(stat_item_groups);
+static LLIST_HEAD(osmo_stat_item_groups);
 static int32_t global_value_id = 0;
 
 static void *tall_stat_item_ctx;
@@ -47,8 +47,8 @@
  *  \param[in] desc Statistics item group description
  *  \param[in] idx Index of new stat item group
  */
-struct stat_item_group *stat_item_group_alloc(void *ctx,
-					    const struct stat_item_group_desc *desc,
+struct osmo_stat_item_group *osmo_stat_item_group_alloc(void *ctx,
+					    const struct osmo_stat_item_group_desc *desc,
 					    unsigned int idx)
 {
 	unsigned int group_size;
@@ -56,10 +56,10 @@
 	unsigned int item_idx;
 	void *items;
 
-	struct stat_item_group *group;
+	struct osmo_stat_item_group *group;
 
-	group_size = sizeof(struct stat_item_group) +
-			desc->num_items * sizeof(struct stat_item *);
+	group_size = sizeof(struct osmo_stat_item_group) +
+			desc->num_items * sizeof(struct osmo_stat_item *);
 
 	if (!ctx)
 		ctx = tall_stat_item_ctx;
@@ -74,8 +74,8 @@
 	/* Get combined size of all items */
 	for (item_idx = 0; item_idx < desc->num_items; item_idx++) {
 		unsigned int size;
-		size = sizeof(struct stat_item) +
-			sizeof(struct stat_item_value) *
+		size = sizeof(struct osmo_stat_item) +
+			sizeof(struct osmo_stat_item_value) *
 			desc->item_desc[item_idx].num_values;
 		/* Align to pointer size */
 		size = (size + sizeof(void *) - 1) & ~(sizeof(void *) - 1);
@@ -94,7 +94,7 @@
 
 	/* Update item pointers */
 	for (item_idx = 0; item_idx < desc->num_items; item_idx++) {
-		struct stat_item *item = (struct stat_item *)
+		struct osmo_stat_item *item = (struct osmo_stat_item *)
 			((uint8_t *)items + (int)group->items[item_idx]);
 		unsigned int i;
 
@@ -109,19 +109,19 @@
 		}
 	}
 
-	llist_add(&group->list, &stat_item_groups);
+	llist_add(&group->list, &osmo_stat_item_groups);
 
 	return group;
 }
 
 /*! \brief Free the memory for the specified group of counters */
-void stat_item_group_free(struct stat_item_group *grp)
+void osmo_stat_item_group_free(struct osmo_stat_item_group *grp)
 {
 	llist_del(&grp->list);
 	talloc_free(grp);
 }
 
-void stat_item_set(struct stat_item *item, int32_t value)
+void osmo_stat_item_set(struct osmo_stat_item *item, int32_t value)
 {
 	item->last_offs += 1;
 	if (item->last_offs >= item->desc->num_values)
@@ -135,11 +135,11 @@
 	item->values[item->last_offs].id    = global_value_id;
 }
 
-int stat_item_get_next(const struct stat_item *item, int32_t *next_idx,
+int osmo_stat_item_get_next(const struct osmo_stat_item *item, int32_t *next_idx,
 	int32_t *value)
 {
-	const struct stat_item_value *next_value;
-	const struct stat_item_value *item_value = NULL;
+	const struct osmo_stat_item_value *next_value;
+	const struct osmo_stat_item_value *item_value = NULL;
 	int idx_delta;
 	int next_offs;
 
@@ -173,7 +173,7 @@
 }
 
 /*! \brief Skip all values of this item and update idx accordingly */
-int stat_item_discard(const struct stat_item *item, int32_t *idx)
+int osmo_stat_item_discard(const struct osmo_stat_item *item, int32_t *idx)
 {
 	int discarded = item->values[item->last_offs].id + 1 - *idx;
 	*idx = item->values[item->last_offs].id + 1;
@@ -182,7 +182,7 @@
 }
 
 /*! \brief Skip all values of all items and update idx accordingly */
-int stat_item_discard_all(int32_t *idx)
+int osmo_stat_item_discard_all(int32_t *idx)
 {
 	int discarded = global_value_id + 1 - *idx;
 	*idx = global_value_id + 1;
@@ -191,7 +191,7 @@
 }
 
 /*! \brief Initialize the stat item module */
-int stat_item_init(void *tall_ctx)
+int osmo_stat_item_init(void *tall_ctx)
 {
 	tall_stat_item_ctx = tall_ctx;
 
@@ -199,12 +199,12 @@
 }
 
 /*! \brief Search for item group based on group name and index */
-struct stat_item_group *stat_item_get_group_by_name_idx(
+struct osmo_stat_item_group *osmo_stat_item_get_group_by_name_idx(
 	const char *name, const unsigned int idx)
 {
-	struct stat_item_group *statg;
+	struct osmo_stat_item_group *statg;
 
-	llist_for_each_entry(statg, &stat_item_groups, list) {
+	llist_for_each_entry(statg, &osmo_stat_item_groups, list) {
 		if (!statg->desc)
 			continue;
 
@@ -216,11 +216,11 @@
 }
 
 /*! \brief Search for item group based on group name */
-const struct stat_item *stat_item_get_by_name(
-	const struct stat_item_group *statg, const char *name)
+const struct osmo_stat_item *osmo_stat_item_get_by_name(
+	const struct osmo_stat_item_group *statg, const char *name)
 {
 	int i;
-	const struct stat_item_desc *item_desc;
+	const struct osmo_stat_item_desc *item_desc;
 
 	if (!statg->desc)
 		return NULL;
@@ -235,14 +235,14 @@
 	return NULL;
 }
 
-int stat_item_for_each_item(struct stat_item_group *statg,
-	stat_item_handler_t handle_item, void *data)
+int osmo_stat_item_for_each_item(struct osmo_stat_item_group *statg,
+	osmo_stat_item_handler_t handle_item, void *data)
 {
 	int rc = 0;
 	int i;
 
 	for (i = 0; i < statg->desc->num_items; i++) {
-		struct stat_item *item = statg->items[i];
+		struct osmo_stat_item *item = statg->items[i];
 		rc = handle_item(statg, item, data);
 		if (rc < 0)
 			return rc;
@@ -251,12 +251,12 @@
 	return rc;
 }
 
-int stat_item_for_each_group(stat_item_group_handler_t handle_group, void *data)
+int osmo_stat_item_for_each_group(osmo_stat_item_group_handler_t handle_group, void *data)
 {
-	struct stat_item_group *statg;
+	struct osmo_stat_item_group *statg;
 	int rc = 0;
 
-	llist_for_each_entry(statg, &stat_item_groups, list) {
+	llist_for_each_entry(statg, &osmo_stat_item_groups, list) {
 		rc = handle_group(statg, data);
 		if (rc < 0)
 			return rc;
diff --git a/src/stats.c b/src/stats.c
index 5027a62..155f8a2 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -46,41 +46,41 @@
 #define STATS_DEFAULT_INTERVAL 5 /* secs */
 #define STATS_DEFAULT_STATSD_BUFLEN 256
 
-static LLIST_HEAD(stats_reporter_list);
-static void *stats_ctx = NULL;
+static LLIST_HEAD(osmo_stats_reporter_list);
+static void *osmo_stats_ctx = NULL;
 static int is_initialised = 0;
 static int32_t current_stat_item_index = 0;
 
-static struct stats_config s_stats_config = {
+static struct osmo_stats_config s_stats_config = {
 	.interval = STATS_DEFAULT_INTERVAL,
 };
-struct stats_config *stats_config = &s_stats_config;
+struct osmo_stats_config *osmo_stats_config = &s_stats_config;
 
-static struct osmo_timer_list stats_timer;
+static struct osmo_timer_list osmo_stats_timer;
 
-static int stats_reporter_statsd_open(struct stats_reporter *srep);
-static int stats_reporter_statsd_close(struct stats_reporter *srep);
-static int stats_reporter_statsd_send_counter(struct stats_reporter *srep,
+static int osmo_stats_reporter_statsd_open(struct osmo_stats_reporter *srep);
+static int osmo_stats_reporter_statsd_close(struct osmo_stats_reporter *srep);
+static int osmo_stats_reporter_statsd_send_counter(struct osmo_stats_reporter *srep,
 	const struct rate_ctr_group *ctrg,
 	const struct rate_ctr_desc *desc,
 	int64_t value, int64_t delta);
-static int stats_reporter_statsd_send_item(struct stats_reporter *srep,
-	const struct stat_item_group *statg,
-	const struct stat_item_desc *desc, int value);
+static int osmo_stats_reporter_statsd_send_item(struct osmo_stats_reporter *srep,
+	const struct osmo_stat_item_group *statg,
+	const struct osmo_stat_item_desc *desc, int value);
 
-static int stats_reporter_log_send_counter(struct stats_reporter *srep,
+static int osmo_stats_reporter_log_send_counter(struct osmo_stats_reporter *srep,
 	const struct rate_ctr_group *ctrg,
 	const struct rate_ctr_desc *desc,
 	int64_t value, int64_t delta);
-static int stats_reporter_log_send_item(struct stats_reporter *srep,
-	const struct stat_item_group *statg,
-	const struct stat_item_desc *desc, int value);
+static int osmo_stats_reporter_log_send_item(struct osmo_stats_reporter *srep,
+	const struct osmo_stat_item_group *statg,
+	const struct osmo_stat_item_desc *desc, int value);
 
-static int stats_reporter_send(struct stats_reporter *srep, const char *data,
+static int osmo_stats_reporter_send(struct osmo_stats_reporter *srep, const char *data,
 	int data_len);
-static int stats_reporter_send_buffer(struct stats_reporter *srep);
+static int osmo_stats_reporter_send_buffer(struct osmo_stats_reporter *srep);
 
-static int update_srep_config(struct stats_reporter *srep)
+static int update_srep_config(struct osmo_stats_reporter *srep)
 {
 	int rc = 0;
 
@@ -106,14 +106,14 @@
 	return rc;
 }
 
-static void stats_timer_cb(void *data)
+static void osmo_stats_timer_cb(void *data)
 {
-	int interval = stats_config->interval;
+	int interval = osmo_stats_config->interval;
 
-	if (!llist_empty(&stats_reporter_list))
-		stats_report();
+	if (!llist_empty(&osmo_stats_reporter_list))
+		osmo_stats_report();
 
-	osmo_timer_schedule(&stats_timer, interval, 0);
+	osmo_timer_schedule(&osmo_stats_timer, interval, 0);
 }
 
 static int start_timer()
@@ -121,49 +121,49 @@
 	if (!is_initialised)
 		return -ESRCH;
 
-	stats_timer.cb = stats_timer_cb;
-	osmo_timer_schedule(&stats_timer, 0, 1);
+	osmo_stats_timer.cb = osmo_stats_timer_cb;
+	osmo_timer_schedule(&osmo_stats_timer, 0, 1);
 
 	return 0;
 }
 
-struct stats_reporter *stats_reporter_alloc(enum stats_reporter_type type,
+struct osmo_stats_reporter *osmo_stats_reporter_alloc(enum osmo_stats_reporter_type type,
 	const char *name)
 {
-	struct stats_reporter *srep;
-	srep = talloc_zero(stats_ctx, struct stats_reporter);
+	struct osmo_stats_reporter *srep;
+	srep = talloc_zero(osmo_stats_ctx, struct osmo_stats_reporter);
 	OSMO_ASSERT(srep);
 	srep->type = type;
 	if (name)
 		srep->name = talloc_strdup(srep, name);
 	srep->fd = -1;
 
-	llist_add(&srep->list, &stats_reporter_list);
+	llist_add(&srep->list, &osmo_stats_reporter_list);
 
 	return srep;
 }
 
-void stats_reporter_free(struct stats_reporter *srep)
+void osmo_stats_reporter_free(struct osmo_stats_reporter *srep)
 {
-	stats_reporter_disable(srep);
+	osmo_stats_reporter_disable(srep);
 	llist_del(&srep->list);
 	talloc_free(srep);
 }
 
-void stats_init(void *ctx)
+void osmo_stats_init(void *ctx)
 {
-	stats_ctx = ctx;
-	stat_item_discard_all(&current_stat_item_index);
+	osmo_stats_ctx = ctx;
+	osmo_stat_item_discard_all(&current_stat_item_index);
 
 	is_initialised = 1;
 	start_timer();
 }
 
-struct stats_reporter *stats_reporter_find(enum stats_reporter_type type,
+struct osmo_stats_reporter *osmo_stats_reporter_find(enum osmo_stats_reporter_type type,
 	const char *name)
 {
-	struct stats_reporter *srep;
-	llist_for_each_entry(srep, &stats_reporter_list, list) {
+	struct osmo_stats_reporter *srep;
+	llist_for_each_entry(srep, &osmo_stats_reporter_list, list) {
 		if (srep->type != type)
 			continue;
 		if (srep->name != name) {
@@ -176,7 +176,7 @@
 	return NULL;
 }
 
-int stats_reporter_set_remote_addr(struct stats_reporter *srep, const char *addr)
+int osmo_stats_reporter_set_remote_addr(struct osmo_stats_reporter *srep, const char *addr)
 {
 	int rc;
 	struct sockaddr_in *sock_addr = (struct sockaddr_in *)&srep->dest_addr;
@@ -201,7 +201,7 @@
 	return update_srep_config(srep);
 }
 
-int stats_reporter_set_remote_port(struct stats_reporter *srep, int port)
+int osmo_stats_reporter_set_remote_port(struct osmo_stats_reporter *srep, int port)
 {
 	struct sockaddr_in *sock_addr = (struct sockaddr_in *)&srep->dest_addr;
 
@@ -214,7 +214,7 @@
 	return update_srep_config(srep);
 }
 
-int stats_reporter_set_local_addr(struct stats_reporter *srep, const char *addr)
+int osmo_stats_reporter_set_local_addr(struct osmo_stats_reporter *srep, const char *addr)
 {
 	int rc;
 	struct sockaddr_in *sock_addr = (struct sockaddr_in *)&srep->bind_addr;
@@ -241,7 +241,7 @@
 	return update_srep_config(srep);
 }
 
-int stats_reporter_set_mtu(struct stats_reporter *srep, int mtu)
+int osmo_stats_reporter_set_mtu(struct osmo_stats_reporter *srep, int mtu)
 {
 	if (!srep->have_net_config)
 		return -ENOTSUP;
@@ -254,19 +254,19 @@
 	return update_srep_config(srep);
 }
 
-int stats_set_interval(int interval)
+int osmo_stats_set_interval(int interval)
 {
 	if (interval <= 0)
 		return -EINVAL;
 
-	stats_config->interval = interval;
+	osmo_stats_config->interval = interval;
 	if (is_initialised)
 		start_timer();
 
 	return 0;
 }
 
-int stats_reporter_set_name_prefix(struct stats_reporter *srep, const char *prefix)
+int osmo_stats_reporter_set_name_prefix(struct osmo_stats_reporter *srep, const char *prefix)
 {
 	talloc_free(srep->name_prefix);
 	srep->name_prefix = prefix ? talloc_strdup(srep, prefix) : NULL;
@@ -274,21 +274,21 @@
 	return update_srep_config(srep);
 }
 
-int stats_reporter_enable(struct stats_reporter *srep)
+int osmo_stats_reporter_enable(struct osmo_stats_reporter *srep)
 {
 	srep->enabled = 1;
 
 	return update_srep_config(srep);
 }
 
-int stats_reporter_disable(struct stats_reporter *srep)
+int osmo_stats_reporter_disable(struct osmo_stats_reporter *srep)
 {
 	srep->enabled = 0;
 
 	return update_srep_config(srep);
 }
 
-static int stats_reporter_send(struct stats_reporter *srep, const char *data,
+static int osmo_stats_reporter_send(struct osmo_stats_reporter *srep, const char *data,
 	int data_len)
 {
 	int rc;
@@ -302,14 +302,14 @@
 	return rc;
 }
 
-static int stats_reporter_send_buffer(struct stats_reporter *srep)
+static int osmo_stats_reporter_send_buffer(struct osmo_stats_reporter *srep)
 {
 	int rc;
 
 	if (!srep->buffer || msgb_length(srep->buffer) == 0)
 		return 0;
 
-	rc = stats_reporter_send(srep,
+	rc = osmo_stats_reporter_send(srep,
 		(const char *)msgb_data(srep->buffer), msgb_length(srep->buffer));
 
 	msgb_trim(srep->buffer, 0);
@@ -319,20 +319,20 @@
 
 /*** log reporter ***/
 
-struct stats_reporter *stats_reporter_create_log(const char *name)
+struct osmo_stats_reporter *osmo_stats_reporter_create_log(const char *name)
 {
-	struct stats_reporter *srep;
-	srep = stats_reporter_alloc(STATS_REPORTER_LOG, name);
+	struct osmo_stats_reporter *srep;
+	srep = osmo_stats_reporter_alloc(OSMO_STATS_REPORTER_LOG, name);
 
 	srep->have_net_config = 0;
 
-	srep->send_counter = stats_reporter_log_send_counter;
-	srep->send_item = stats_reporter_log_send_item;
+	srep->send_counter = osmo_stats_reporter_log_send_counter;
+	srep->send_item = osmo_stats_reporter_log_send_item;
 
 	return srep;
 }
 
-static int stats_reporter_log_send(struct stats_reporter *srep,
+static int osmo_stats_reporter_log_send(struct osmo_stats_reporter *srep,
 	const char *type,
 	const char *name1, int index1, const char *name2, int value,
 	const char *unit)
@@ -347,56 +347,56 @@
 }
 
 
-static int stats_reporter_log_send_counter(struct stats_reporter *srep,
+static int osmo_stats_reporter_log_send_counter(struct osmo_stats_reporter *srep,
 	const struct rate_ctr_group *ctrg,
 	const struct rate_ctr_desc *desc,
 	int64_t value, int64_t delta)
 {
 	if (ctrg)
-		return stats_reporter_log_send(srep, "c",
+		return osmo_stats_reporter_log_send(srep, "c",
 			ctrg->desc->group_name_prefix,
 			ctrg->idx,
 			desc->name, value, NULL);
 	else
-		return stats_reporter_log_send(srep, "c",
+		return osmo_stats_reporter_log_send(srep, "c",
 			NULL, -1,
 			desc->name, value, NULL);
 }
 
-static int stats_reporter_log_send_item(struct stats_reporter *srep,
-	const struct stat_item_group *statg,
-	const struct stat_item_desc *desc, int value)
+static int osmo_stats_reporter_log_send_item(struct osmo_stats_reporter *srep,
+	const struct osmo_stat_item_group *statg,
+	const struct osmo_stat_item_desc *desc, int value)
 {
-	return stats_reporter_log_send(srep, "i",
+	return osmo_stats_reporter_log_send(srep, "i",
 		statg->desc->group_name_prefix, statg->idx,
 		desc->name, value, desc->unit);
 }
 
 /*** statsd reporter ***/
 
-struct stats_reporter *stats_reporter_create_statsd(const char *name)
+struct osmo_stats_reporter *osmo_stats_reporter_create_statsd(const char *name)
 {
-	struct stats_reporter *srep;
-	srep = stats_reporter_alloc(STATS_REPORTER_STATSD, name);
+	struct osmo_stats_reporter *srep;
+	srep = osmo_stats_reporter_alloc(OSMO_STATS_REPORTER_STATSD, name);
 
 	srep->have_net_config = 1;
 
-	srep->open = stats_reporter_statsd_open;
-	srep->close = stats_reporter_statsd_close;
-	srep->send_counter = stats_reporter_statsd_send_counter;
-	srep->send_item = stats_reporter_statsd_send_item;
+	srep->open = osmo_stats_reporter_statsd_open;
+	srep->close = osmo_stats_reporter_statsd_close;
+	srep->send_counter = osmo_stats_reporter_statsd_send_counter;
+	srep->send_item = osmo_stats_reporter_statsd_send_item;
 
 	return srep;
 }
 
-static int stats_reporter_statsd_open(struct stats_reporter *srep)
+static int osmo_stats_reporter_statsd_open(struct osmo_stats_reporter *srep)
 {
 	int sock;
 	int rc;
 	int buffer_size = STATS_DEFAULT_STATSD_BUFLEN;
 
 	if (srep->fd != -1)
-		stats_reporter_statsd_close(srep);
+		osmo_stats_reporter_statsd_close(srep);
 
 	sock = socket(AF_INET, SOCK_DGRAM, 0);
 	if (sock == -1)
@@ -426,13 +426,13 @@
 	return rc;
 }
 
-static int stats_reporter_statsd_close(struct stats_reporter *srep)
+static int osmo_stats_reporter_statsd_close(struct osmo_stats_reporter *srep)
 {
 	int rc;
 	if (srep->fd == -1)
 		return -EBADF;
 
-	stats_reporter_send_buffer(srep);
+	osmo_stats_reporter_send_buffer(srep);
 
 	rc = close(srep->fd);
 	srep->fd = -1;
@@ -441,7 +441,7 @@
 	return rc == -1 ? -errno : 0;
 }
 
-static int stats_reporter_statsd_send(struct stats_reporter *srep,
+static int osmo_stats_reporter_statsd_send(struct osmo_stats_reporter *srep,
 	const char *name1, int index1, const char *name2, int value,
 	const char *unit)
 {
@@ -482,7 +482,7 @@
 		/* Restore original buffer (without trailing LF) */
 		msgb_trim(srep->buffer, old_len);
 		/* Send it */
-		rc = stats_reporter_send_buffer(srep);
+		rc = osmo_stats_reporter_send_buffer(srep);
 
 		/* Try again */
 		buf = (char *)msgb_put(srep->buffer, 0);
@@ -500,39 +500,39 @@
 		msgb_trim(srep->buffer, msgb_length(srep->buffer) + nchars);
 
 	if (!srep->agg_enabled)
-		rc = stats_reporter_send_buffer(srep);
+		rc = osmo_stats_reporter_send_buffer(srep);
 
 	return rc;
 }
 
-static int stats_reporter_statsd_send_counter(struct stats_reporter *srep,
+static int osmo_stats_reporter_statsd_send_counter(struct osmo_stats_reporter *srep,
 	const struct rate_ctr_group *ctrg,
 	const struct rate_ctr_desc *desc,
 	int64_t value, int64_t delta)
 {
 	if (ctrg)
-		return stats_reporter_statsd_send(srep,
+		return osmo_stats_reporter_statsd_send(srep,
 			ctrg->desc->group_name_prefix,
 			ctrg->idx,
 			desc->name, delta, "c");
 	else
-		return stats_reporter_statsd_send(srep,
+		return osmo_stats_reporter_statsd_send(srep,
 			NULL, -1,
 			desc->name, delta, "c");
 }
 
-static int stats_reporter_statsd_send_item(struct stats_reporter *srep,
-	const struct stat_item_group *statg,
-	const struct stat_item_desc *desc, int value)
+static int osmo_stats_reporter_statsd_send_item(struct osmo_stats_reporter *srep,
+	const struct osmo_stat_item_group *statg,
+	const struct osmo_stat_item_desc *desc, int value)
 {
-	return stats_reporter_statsd_send(srep,
+	return osmo_stats_reporter_statsd_send(srep,
 		statg->desc->group_name_prefix, statg->idx,
 		desc->name, value, desc->unit);
 }
 
 /*** generic rate counter support ***/
 
-static int stats_reporter_send_counter(struct stats_reporter *srep,
+static int osmo_stats_reporter_send_counter(struct osmo_stats_reporter *srep,
 	const struct rate_ctr_group *ctrg,
 	const struct rate_ctr_desc *desc,
 	int64_t value, int64_t delta)
@@ -547,18 +547,18 @@
 	struct rate_ctr_group *ctrg, struct rate_ctr *ctr,
 	const struct rate_ctr_desc *desc, void *sctx_)
 {
-	struct stats_reporter *srep;
+	struct osmo_stats_reporter *srep;
 	int rc;
 	int64_t delta = rate_ctr_difference(ctr);
 
 	if (delta == 0)
 		return 0;
 
-	llist_for_each_entry(srep, &stats_reporter_list, list) {
+	llist_for_each_entry(srep, &osmo_stats_reporter_list, list) {
 		if (!srep->running)
 			continue;
 
-		rc = stats_reporter_send_counter(srep, ctrg, desc,
+		rc = osmo_stats_reporter_send_counter(srep, ctrg, desc,
 			ctr->current, delta);
 
 		/* TODO: handle rc (log?, inc counter(!)?) or remove it */
@@ -576,9 +576,9 @@
 
 /*** stat item support ***/
 
-static int stats_reporter_send_item(struct stats_reporter *srep,
-	const struct stat_item_group *statg,
-	const struct stat_item_desc *desc,
+static int osmo_stats_reporter_send_item(struct osmo_stats_reporter *srep,
+	const struct osmo_stat_item_group *statg,
+	const struct osmo_stat_item_desc *desc,
 	int32_t value)
 {
 	if (!srep->send_item)
@@ -587,20 +587,20 @@
 	return srep->send_item(srep, statg, desc, value);
 }
 
-static int stat_item_handler(
-	struct stat_item_group *statg, struct stat_item *item, void *sctx_)
+static int osmo_stat_item_handler(
+	struct osmo_stat_item_group *statg, struct osmo_stat_item *item, void *sctx_)
 {
-	struct stats_reporter *srep;
+	struct osmo_stats_reporter *srep;
 	int rc;
 	int32_t idx = current_stat_item_index;
 	int32_t value;
 
-	while (stat_item_get_next(item, &idx, &value) > 0) {
-		llist_for_each_entry(srep, &stats_reporter_list, list) {
+	while (osmo_stat_item_get_next(item, &idx, &value) > 0) {
+		llist_for_each_entry(srep, &osmo_stats_reporter_list, list) {
 			if (!srep->running)
 				continue;
 
-			rc = stats_reporter_send_item(srep, statg,
+			rc = osmo_stats_reporter_send_item(srep, statg,
 				item->desc, value);
 		}
 	}
@@ -608,10 +608,10 @@
 	return 0;
 }
 
-static int stat_item_group_handler(struct stat_item_group *statg, void *sctx_)
+static int osmo_stat_item_group_handler(struct osmo_stat_item_group *statg, void *sctx_)
 {
-	stat_item_for_each_item(statg, stat_item_handler, sctx_);
-	stat_item_discard_all(&current_stat_item_index);
+	osmo_stat_item_for_each_item(statg, osmo_stat_item_handler, sctx_);
+	osmo_stat_item_discard_all(&current_stat_item_index);
 
 	return 0;
 }
@@ -620,7 +620,7 @@
 
 static int handle_counter(struct osmo_counter *counter, void *sctx_)
 {
-	struct stats_reporter *srep;
+	struct osmo_stats_reporter *srep;
 	int rc;
 	struct rate_ctr_desc desc = {0};
 	/* Fake a rate counter description */
@@ -632,11 +632,11 @@
 	if (delta == 0)
 		return 0;
 
-	llist_for_each_entry(srep, &stats_reporter_list, list) {
+	llist_for_each_entry(srep, &osmo_stats_reporter_list, list) {
 		if (!srep->running)
 			continue;
 
-		rc = stats_reporter_send_counter(srep, NULL, &desc,
+		rc = osmo_stats_reporter_send_counter(srep, NULL, &desc,
 			counter->value, delta);
 
 		/* TODO: handle rc (log?, inc counter(!)?) */
@@ -650,21 +650,21 @@
 
 static void flush_all_reporters()
 {
-	struct stats_reporter *srep;
+	struct osmo_stats_reporter *srep;
 
-	llist_for_each_entry(srep, &stats_reporter_list, list) {
+	llist_for_each_entry(srep, &osmo_stats_reporter_list, list) {
 		if (!srep->running)
 			continue;
 
-		stats_reporter_send_buffer(srep);
+		osmo_stats_reporter_send_buffer(srep);
 	}
 }
 
-int stats_report()
+int osmo_stats_report()
 {
 	osmo_counters_for_each(handle_counter, NULL);
 	rate_ctr_for_each_group(rate_ctr_group_handler, NULL);
-	stat_item_for_each_group(stat_item_group_handler, NULL);
+	osmo_stat_item_for_each_group(osmo_stat_item_group_handler, NULL);
 
 	flush_all_reporters();
 
diff --git a/src/vty/stats_vty.c b/src/vty/stats_vty.c
index 839dc82..f072b1b 100644
--- a/src/vty/stats_vty.c
+++ b/src/vty/stats_vty.c
@@ -45,7 +45,7 @@
 	1
 };
 
-static struct stats_reporter *osmo_stats_vty2srep(struct vty *vty)
+static struct osmo_stats_reporter *osmo_stats_vty2srep(struct vty *vty)
 {
 	if (vty->node == CFG_STATS_NODE)
 		return vty->index;
@@ -54,11 +54,11 @@
 }
 
 static int set_srep_parameter_str(struct vty *vty,
-	int (*fun)(struct stats_reporter *, const char *),
+	int (*fun)(struct osmo_stats_reporter *, const char *),
 	const char *val, const char *param_name)
 {
 	int rc;
-	struct stats_reporter *srep = osmo_stats_vty2srep(vty);
+	struct osmo_stats_reporter *srep = osmo_stats_vty2srep(vty);
 	OSMO_ASSERT(srep);
 
 	rc = fun(srep, val);
@@ -72,12 +72,12 @@
 }
 
 static int set_srep_parameter_int(struct vty *vty,
-	int (*fun)(struct stats_reporter *, int),
+	int (*fun)(struct osmo_stats_reporter *, int),
 	const char *val, const char *param_name)
 {
 	int rc;
 	int int_val;
-	struct stats_reporter *srep = osmo_stats_vty2srep(vty);
+	struct osmo_stats_reporter *srep = osmo_stats_vty2srep(vty);
 	OSMO_ASSERT(srep);
 
 	int_val = atoi(val);
@@ -97,7 +97,7 @@
 	"Set the IP address to which we bind locally\n"
 	"IP Address\n")
 {
-	return set_srep_parameter_str(vty, stats_reporter_set_local_addr,
+	return set_srep_parameter_str(vty, osmo_stats_reporter_set_local_addr,
 		argv[0], "local address");
 }
 
@@ -106,7 +106,7 @@
 	NO_STR
 	"Set the IP address to which we bind locally\n")
 {
-	return set_srep_parameter_str(vty, stats_reporter_set_local_addr,
+	return set_srep_parameter_str(vty, osmo_stats_reporter_set_local_addr,
 		NULL, "local address");
 }
 
@@ -115,7 +115,7 @@
 	"Set the remote IP address to which we connect\n"
 	"IP Address\n")
 {
-	return set_srep_parameter_str(vty, stats_reporter_set_remote_addr,
+	return set_srep_parameter_str(vty, osmo_stats_reporter_set_remote_addr,
 		argv[0], "remote address");
 }
 
@@ -124,7 +124,7 @@
 	"Set the remote port to which we connect\n"
 	"Remote port number\n")
 {
-	return set_srep_parameter_int(vty, stats_reporter_set_remote_port,
+	return set_srep_parameter_int(vty, osmo_stats_reporter_set_remote_port,
 		argv[0], "remote port");
 }
 
@@ -133,7 +133,7 @@
 	"Set the maximum packet size\n"
 	"Size in byte\n")
 {
-	return set_srep_parameter_int(vty, stats_reporter_set_mtu,
+	return set_srep_parameter_int(vty, osmo_stats_reporter_set_mtu,
 		argv[0], "mtu");
 }
 
@@ -141,7 +141,7 @@
 	"no mtu",
 	NO_STR "Set the maximum packet size\n")
 {
-	return set_srep_parameter_int(vty, stats_reporter_set_mtu,
+	return set_srep_parameter_int(vty, osmo_stats_reporter_set_mtu,
 		0, "mtu");
 }
 
@@ -150,7 +150,7 @@
 	"Set the item name prefix\n"
 	"The prefix string\n")
 {
-	return set_srep_parameter_str(vty, stats_reporter_set_name_prefix,
+	return set_srep_parameter_str(vty, osmo_stats_reporter_set_name_prefix,
 		argv[0], "prefix string");
 }
 
@@ -159,7 +159,7 @@
 	NO_STR
 	"Set the item name prefix\n")
 {
-	return set_srep_parameter_str(vty, stats_reporter_set_name_prefix,
+	return set_srep_parameter_str(vty, osmo_stats_reporter_set_name_prefix,
 		"", "prefix string");
 }
 
@@ -168,10 +168,10 @@
 	"Enable the reporter\n")
 {
 	int rc;
-	struct stats_reporter *srep = osmo_stats_vty2srep(vty);
+	struct osmo_stats_reporter *srep = osmo_stats_vty2srep(vty);
 	OSMO_ASSERT(srep);
 
-	rc = stats_reporter_enable(srep);
+	rc = osmo_stats_reporter_enable(srep);
 	if (rc < 0) {
 		vty_out(vty, "%% Unable to enable the reporter: %s%s",
 			strerror(-rc), VTY_NEWLINE);
@@ -186,10 +186,10 @@
 	"Disable the reporter\n")
 {
 	int rc;
-	struct stats_reporter *srep = osmo_stats_vty2srep(vty);
+	struct osmo_stats_reporter *srep = osmo_stats_vty2srep(vty);
 	OSMO_ASSERT(srep);
 
-	rc = stats_reporter_disable(srep);
+	rc = osmo_stats_reporter_disable(srep);
 	if (rc < 0) {
 		vty_out(vty, "%% Unable to disable the reporter: %s%s",
 			strerror(-rc), VTY_NEWLINE);
@@ -203,17 +203,17 @@
 	"stats reporter statsd",
 	CFG_STATS_STR CFG_REPORTER_STR "Report to a STATSD server\n")
 {
-	struct stats_reporter *srep;
+	struct osmo_stats_reporter *srep;
 
-	srep = stats_reporter_find(STATS_REPORTER_STATSD, NULL);
+	srep = osmo_stats_reporter_find(OSMO_STATS_REPORTER_STATSD, NULL);
 	if (!srep) {
-		srep = stats_reporter_create_statsd(NULL);
+		srep = osmo_stats_reporter_create_statsd(NULL);
 		if (!srep) {
 			vty_out(vty, "%% Unable to create statsd reporter%s",
 				VTY_NEWLINE);
 			return CMD_WARNING;
 		}
-		/* TODO: if needed, add stats_add_reporter(srep); */
+		/* TODO: if needed, add osmo_stats_add_reporter(srep); */
 	}
 
 	vty->index = srep;
@@ -229,7 +229,7 @@
 {
 	int rc;
 	int interval = atoi(argv[0]);
-	rc = stats_set_interval(interval);
+	rc = osmo_stats_set_interval(interval);
 	if (rc < 0) {
 		vty_out(vty, "%% Unable to set interval: %s%s",
 			strerror(-rc), VTY_NEWLINE);
@@ -244,16 +244,16 @@
 	"no stats reporter statsd",
 	NO_STR CFG_STATS_STR CFG_REPORTER_STR "Report to a STATSD server\n")
 {
-	struct stats_reporter *srep;
+	struct osmo_stats_reporter *srep;
 
-	srep = stats_reporter_find(STATS_REPORTER_STATSD, NULL);
+	srep = osmo_stats_reporter_find(OSMO_STATS_REPORTER_STATSD, NULL);
 	if (!srep) {
 		vty_out(vty, "%% No statsd logging active%s",
 			VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
-	stats_reporter_free(srep);
+	osmo_stats_reporter_free(srep);
 
 	return CMD_SUCCESS;
 }
@@ -262,17 +262,17 @@
 	"stats reporter log",
 	CFG_STATS_STR CFG_REPORTER_STR "Report to the logger\n")
 {
-	struct stats_reporter *srep;
+	struct osmo_stats_reporter *srep;
 
-	srep = stats_reporter_find(STATS_REPORTER_LOG, NULL);
+	srep = osmo_stats_reporter_find(OSMO_STATS_REPORTER_LOG, NULL);
 	if (!srep) {
-		srep = stats_reporter_create_log(NULL);
+		srep = osmo_stats_reporter_create_log(NULL);
 		if (!srep) {
 			vty_out(vty, "%% Unable to create log reporter%s",
 				VTY_NEWLINE);
 			return CMD_WARNING;
 		}
-		/* TODO: if needed, add stats_add_reporter(srep); */
+		/* TODO: if needed, add osmo_stats_add_reporter(srep); */
 	}
 
 	vty->index = srep;
@@ -285,16 +285,16 @@
 	"no stats reporter log",
 	NO_STR CFG_STATS_STR CFG_REPORTER_STR "Report to the logger\n")
 {
-	struct stats_reporter *srep;
+	struct osmo_stats_reporter *srep;
 
-	srep = stats_reporter_find(STATS_REPORTER_LOG, NULL);
+	srep = osmo_stats_reporter_find(OSMO_STATS_REPORTER_LOG, NULL);
 	if (!srep) {
 		vty_out(vty, "%% No log reporting active%s",
 			VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
-	stats_reporter_free(srep);
+	osmo_stats_reporter_free(srep);
 
 	return CMD_SUCCESS;
 }
@@ -309,16 +309,16 @@
 	return CMD_SUCCESS;
 }
 
-static int config_write_stats_reporter(struct vty *vty, struct stats_reporter *srep)
+static int config_write_stats_reporter(struct vty *vty, struct osmo_stats_reporter *srep)
 {
 	if (srep == NULL)
 		return 0;
 
 	switch (srep->type) {
-	case STATS_REPORTER_STATSD:
+	case OSMO_STATS_REPORTER_STATSD:
 		vty_out(vty, "stats reporter statsd%s", VTY_NEWLINE);
 		break;
-	case STATS_REPORTER_LOG:
+	case OSMO_STATS_REPORTER_LOG:
 		vty_out(vty, "stats reporter log%s", VTY_NEWLINE);
 		break;
 	}
@@ -354,20 +354,20 @@
 
 static int config_write_stats(struct vty *vty)
 {
-	struct stats_reporter *srep;
+	struct osmo_stats_reporter *srep;
 
 	/* TODO: loop through all reporters */
-	srep = stats_reporter_find(STATS_REPORTER_STATSD, NULL);
+	srep = osmo_stats_reporter_find(OSMO_STATS_REPORTER_STATSD, NULL);
 	config_write_stats_reporter(vty, srep);
-	srep = stats_reporter_find(STATS_REPORTER_LOG, NULL);
+	srep = osmo_stats_reporter_find(OSMO_STATS_REPORTER_LOG, NULL);
 	config_write_stats_reporter(vty, srep);
 
-	vty_out(vty, "stats interval %d%s", stats_config->interval, VTY_NEWLINE);
+	vty_out(vty, "stats interval %d%s", osmo_stats_config->interval, VTY_NEWLINE);
 
 	return 1;
 }
 
-void stats_vty_add_cmds()
+void osmo_stats_vty_add_cmds()
 {
 	install_element_ve(&show_stats_cmd);
 
diff --git a/src/vty/utils.c b/src/vty/utils.c
index 474a25e..8df44ae 100644
--- a/src/vty/utils.c
+++ b/src/vty/utils.c
@@ -80,15 +80,15 @@
 	rate_ctr_for_each_counter(ctrg, rate_ctr_handler, &vctx);
 }
 
-static int stat_item_handler(
-	struct stat_item_group *statg, struct stat_item *item, void *vctx_)
+static int osmo_stat_item_handler(
+	struct osmo_stat_item_group *statg, struct osmo_stat_item *item, void *vctx_)
 {
 	struct vty_out_context *vctx = vctx_;
 	struct vty *vty = vctx->vty;
 
 	vty_out(vty, " %s%s: %8" PRIi32 " %s%s",
 		vctx->prefix, item->desc->description,
-		stat_item_get_last(item),
+		osmo_stat_item_get_last(item),
 		item->desc->unit, VTY_NEWLINE);
 
 	return 0;
@@ -100,16 +100,16 @@
  *  \param[in] statg Stat item group to be printed
  */
 void vty_out_stat_item_group(struct vty *vty, const char *prefix,
-			     struct stat_item_group *statg)
+			     struct osmo_stat_item_group *statg)
 {
 	struct vty_out_context vctx = {vty, prefix};
 
 	vty_out(vty, "%s%s:%s", prefix, statg->desc->group_description,
 		VTY_NEWLINE);
-	stat_item_for_each_item(statg, stat_item_handler, &vctx);
+	osmo_stat_item_for_each_item(statg, osmo_stat_item_handler, &vctx);
 }
 
-static int stat_item_group_handler(struct stat_item_group *statg, void *vctx_)
+static int osmo_stat_item_group_handler(struct osmo_stat_item_group *statg, void *vctx_)
 {
 	struct vty_out_context *vctx = vctx_;
 	struct vty *vty = vctx->vty;
@@ -122,7 +122,7 @@
 		vty_out(vty, "%s%s:%s", vctx->prefix,
 			statg->desc->group_description, VTY_NEWLINE);
 
-	stat_item_for_each_item(statg, stat_item_handler, vctx);
+	osmo_stat_item_for_each_item(statg, osmo_stat_item_handler, vctx);
 
 	return 0;
 }
@@ -163,7 +163,7 @@
 	vty_out(vty, "%sUngrouped counters:%s", prefix, VTY_NEWLINE);
 	osmo_counters_for_each(handle_counter, &vctx);
 	rate_ctr_for_each_group(rate_ctr_group_handler, &vctx);
-	stat_item_for_each_group(stat_item_group_handler, &vctx);
+	osmo_stat_item_for_each_group(osmo_stat_item_group_handler, &vctx);
 }
 
 /*! \brief Generate a VTY command string from value_string */
