diff --git a/tests/Makefile.am b/tests/Makefile.am
index cf0977d..223535f 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -9,7 +9,7 @@
 		 kasumi/kasumi_test logging/logging_test fr/fr_test	\
 		 loggingrb/loggingrb_test strrb/strrb_test              \
 		 vty/vty_test comp128/comp128_test utils/utils_test	\
-		 smscb/gsm0341_test
+		 smscb/gsm0341_test stats/stats_test
 
 if ENABLE_MSGFILE
 check_PROGRAMS += msgfile/msgfile_test
@@ -18,6 +18,9 @@
 utils_utils_test_SOURCES = utils/utils_test.c
 utils_utils_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la
 
+stats_stats_test_SOURCES = stats/stats_test.c
+stats_stats_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la
+
 a5_a5_test_SOURCES = a5/a5_test.c
 a5_a5_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libgsmint.la
 
@@ -120,7 +123,7 @@
              fr/fr_test.ok loggingrb/logging_test.ok			\
              loggingrb/logging_test.err	strrb/strrb_test.ok		\
 	     vty/vty_test.ok comp128/comp128_test.ok			\
-	     utils/utils_test.ok
+	     utils/utils_test.ok stats/stats_test.ok
 
 DISTCLEANFILES = atconfig
 
diff --git a/tests/stats/stats_test.c b/tests/stats/stats_test.c
new file mode 100644
index 0000000..b414385
--- /dev/null
+++ b/tests/stats/stats_test.c
@@ -0,0 +1,198 @@
+/* tests for statistics */
+/*
+ * (C) 2015 Sysmocom s.m.f.c. GmbH
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <osmocom/core/logging.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/core/stat_item.h>
+
+#include <stdio.h>
+
+static void stat_test(void)
+{
+	enum test_items {
+		TEST_A_ITEM,
+		TEST_B_ITEM,
+	};
+
+	static const struct stat_item_desc item_description[] = {
+		{ "item.a", "The A value", "ma", 4, -1 },
+		{ "item.b", "The B value", "kb", 7, -1 },
+	};
+
+	static const struct stat_item_group_desc statg_desc = {
+		.group_name_prefix = "test.one",
+		.group_description = "Test number 1",
+		.num_items = ARRAY_SIZE(item_description),
+		.item_desc = item_description,
+	};
+
+	struct stat_item_group *statg =
+		stat_item_group_alloc(NULL, &statg_desc, 0);
+
+	struct stat_item_group *sgrp2;
+	const struct stat_item *sitem1, *sitem2;
+	int rc;
+	int32_t value;
+	int32_t rd_a = 0;
+	int32_t rd_b = 0;
+	int i;
+
+	OSMO_ASSERT(statg != NULL);
+
+	sgrp2 = stat_item_get_group_by_name_idx("test.one", 0);
+	OSMO_ASSERT(sgrp2 == statg);
+
+	sgrp2 = stat_item_get_group_by_name_idx("test.one", 1);
+	OSMO_ASSERT(sgrp2 == NULL);
+
+	sgrp2 = stat_item_get_group_by_name_idx("test.two", 0);
+	OSMO_ASSERT(sgrp2 == NULL);
+
+	sitem1 = stat_item_get_by_name(statg, "item.c");
+	OSMO_ASSERT(sitem1 == NULL);
+
+	sitem1 = stat_item_get_by_name(statg, "item.a");
+	OSMO_ASSERT(sitem1 != NULL);
+	OSMO_ASSERT(sitem1 == statg->items[TEST_A_ITEM]);
+
+	sitem2 = stat_item_get_by_name(statg, "item.b");
+	OSMO_ASSERT(sitem2 != NULL);
+	OSMO_ASSERT(sitem2 != sitem1);
+	OSMO_ASSERT(sitem2 == statg->items[TEST_B_ITEM]);
+
+	value = stat_item_get_last(statg->items[TEST_A_ITEM]);
+	OSMO_ASSERT(value == -1);
+
+	rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+	OSMO_ASSERT(rc == 0);
+
+	stat_item_set(statg->items[TEST_A_ITEM], 1);
+
+	value = stat_item_get_last(statg->items[TEST_A_ITEM]);
+	OSMO_ASSERT(value == 1);
+
+	rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+	OSMO_ASSERT(rc == 1);
+	OSMO_ASSERT(value == 1);
+
+	rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+	OSMO_ASSERT(rc == 0);
+
+	for (i = 2; i <= 32; i++) {
+		stat_item_set(statg->items[TEST_A_ITEM], i);
+		stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);
+
+		rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+		OSMO_ASSERT(rc == 1);
+		OSMO_ASSERT(value == i);
+
+		rc = stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+		OSMO_ASSERT(rc == 1);
+		OSMO_ASSERT(value == 1000 + i);
+	}
+
+	/* Keep 2 in FIFO */
+	stat_item_set(statg->items[TEST_A_ITEM], 33);
+	stat_item_set(statg->items[TEST_B_ITEM], 1000 + 33);
+
+	for (i = 34; i <= 64; i++) {
+		stat_item_set(statg->items[TEST_A_ITEM], i);
+		stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);
+
+		rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+		OSMO_ASSERT(rc == 1);
+		OSMO_ASSERT(value == i-1);
+
+		rc = stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+		OSMO_ASSERT(rc == 1);
+		OSMO_ASSERT(value == 1000 + i-1);
+	}
+
+	rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+	OSMO_ASSERT(rc == 1);
+	OSMO_ASSERT(value == 64);
+
+	rc = stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+	OSMO_ASSERT(rc == 1);
+	OSMO_ASSERT(value == 1000 + 64);
+
+	/* Overrun FIFOs */
+	for (i = 65; i <= 96; i++) {
+		stat_item_set(statg->items[TEST_A_ITEM], i);
+		stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);
+	}
+
+	rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+	OSMO_ASSERT(rc == 93 - 65 + 1);
+	OSMO_ASSERT(value == 93);
+
+	for (i = 94; i <= 96; i++) {
+		rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+		OSMO_ASSERT(rc == 1);
+		OSMO_ASSERT(value == i);
+	}
+
+	rc = stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+	OSMO_ASSERT(rc == 90 - 65 + 1);
+	OSMO_ASSERT(value == 1000 + 90);
+
+	for (i = 91; i <= 96; i++) {
+		rc = stat_item_get_next(statg->items[TEST_B_ITEM], &rd_b, &value);
+		OSMO_ASSERT(rc == 1);
+		OSMO_ASSERT(value == 1000 + i);
+	}
+
+	/* Test Discard */
+	stat_item_set(statg->items[TEST_A_ITEM], 97);
+	rc = stat_item_discard(statg->items[TEST_A_ITEM], &rd_a);
+	OSMO_ASSERT(rc == 1);
+
+	rc = stat_item_discard(statg->items[TEST_A_ITEM], &rd_a);
+	OSMO_ASSERT(rc == 0);
+
+	rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+	OSMO_ASSERT(rc == 0);
+
+	stat_item_set(statg->items[TEST_A_ITEM], 98);
+	rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+	OSMO_ASSERT(rc == 1);
+	OSMO_ASSERT(value == 98);
+
+	rc = stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
+	OSMO_ASSERT(rc == 0);
+
+	stat_item_group_free(statg);
+
+	sgrp2 = stat_item_get_group_by_name_idx("test.one", 0);
+	OSMO_ASSERT(sgrp2 == NULL);
+}
+
+int main(int argc, char **argv)
+{
+	static const struct log_info log_info = {};
+	log_init(&log_info, NULL);
+
+	stat_item_init(NULL);
+
+	stat_test();
+	return 0;
+}
diff --git a/tests/stats/stats_test.ok b/tests/stats/stats_test.ok
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/stats/stats_test.ok
diff --git a/tests/testsuite.at b/tests/testsuite.at
index fe30363..a542798 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -136,6 +136,12 @@
 AT_CHECK([$abs_top_builddir/tests/utils/utils_test], [0], [expout], [ignore])
 AT_CLEANUP
 
+AT_SETUP([stats])
+AT_KEYWORDS([stats])
+cat $abs_srcdir/stats/stats_test.ok > expout
+AT_CHECK([$abs_top_builddir/tests/stats/stats_test], [0], [expout], [ignore])
+AT_CLEANUP
+
 AT_SETUP([bssgp-fc])
 AT_KEYWORDS([bssgp-fc])
 cat $abs_srcdir/gb/bssgp_fc_tests.ok > expout
