diff --git a/src/vty/stats_vty.c b/src/vty/stats_vty.c
index a73fafb..a4e4fce 100644
--- a/src/vty/stats_vty.c
+++ b/src/vty/stats_vty.c
@@ -1,5 +1,5 @@
 /*
- * (C) 2009-2010 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2009-2022 by Harald Welte <laforge@gnumonks.org>
  * (C) 2009-2014 by Holger Hans Peter Freyther
  * (C) 2015      by sysmocom - s.f.m.c. GmbH
  * All Rights Reserved
@@ -39,6 +39,7 @@
 #define CFG_REPORTER_STR "Configure a stats reporter\n"
 
 #define SHOW_STATS_STR "Show statistical values\n"
+#define SKIP_ZERO_STR "Skip items with total count zero\n"
 
 #define STATS_STR "Stats related commands\n"
 
@@ -418,25 +419,32 @@
 
 DEFUN(show_stats,
       show_stats_cmd,
-      "show stats",
-      SHOW_STR SHOW_STATS_STR)
+      "show stats [skip-zero]",
+      SHOW_STR SHOW_STATS_STR SKIP_ZERO_STR)
 {
-	vty_out_statistics_full(vty, "");
+	bool skip_zero = false;
+	if (argc > 0)
+		skip_zero = true;
+
+	vty_out_statistics_full2(vty, "", skip_zero);
 
 	return CMD_SUCCESS;
 }
 
 DEFUN(show_stats_level,
       show_stats_level_cmd,
-      "show stats level (global|peer|subscriber)",
+      "show stats level (global|peer|subscriber) [skip-zero]",
       SHOW_STR SHOW_STATS_STR
       "Set the maximum group level\n"
       "Show global groups only\n"
       "Show global and network peer related groups\n"
-      "Show global, peer, and subscriber groups\n")
+      "Show global, peer, and subscriber groups\n" SKIP_ZERO_STR)
 {
 	int level = get_string_value(stats_class_strs, argv[0]);
-	vty_out_statistics_partial(vty, "", level);
+	bool skip_zero = false;
+	if (argc > 1)
+		skip_zero = true;
+	vty_out_statistics_partial2(vty, "", level, skip_zero);
 
 	return CMD_SUCCESS;
 }
@@ -599,23 +607,32 @@
 	return CMD_SUCCESS;
 }
 
+struct rctr_vty_ctx {
+	struct vty *vty;
+	bool skip_zero;
+};
+
 static int rate_ctr_group_handler(struct rate_ctr_group *ctrg, void *sctx_)
 {
-	struct vty *vty = sctx_;
+	struct rctr_vty_ctx *sctx = sctx_;
+	struct vty *vty = sctx->vty;
 	vty_out(vty, "%s %u", ctrg->desc->group_description, ctrg->idx);
 	if (ctrg->name != NULL)
 		vty_out(vty, " (%s)", ctrg->name);
 	vty_out(vty, ":%s", VTY_NEWLINE);
-	vty_out_rate_ctr_group_fmt(vty, "%25n: %10c (%S/s %M/m %H/h %D/d) %d", ctrg);
+	vty_out_rate_ctr_group_fmt2(vty, "%25n: %10c (%S/s %M/m %H/h %D/d) %d", ctrg, sctx->skip_zero);
 	return 0;
 }
 
 DEFUN(show_rate_counters,
       show_rate_counters_cmd,
-      "show rate-counters",
-      SHOW_STR "Show all rate counters\n")
+      "show rate-counters [skip-zero]",
+      SHOW_STR "Show all rate counters\n" SKIP_ZERO_STR)
 {
-	rate_ctr_for_each_group(rate_ctr_group_handler, vty);
+	struct rctr_vty_ctx rctx = { .vty = vty, .skip_zero = false };
+	if (argc > 0)
+		rctx.skip_zero = true;
+	rate_ctr_for_each_group(rate_ctr_group_handler, &rctx);
 	return CMD_SUCCESS;
 }
 
diff --git a/src/vty/utils.c b/src/vty/utils.c
index 696a519..a651515 100644
--- a/src/vty/utils.c
+++ b/src/vty/utils.c
@@ -21,6 +21,7 @@
  */
 
 #include <stdint.h>
+#include <stdbool.h>
 #include <inttypes.h>
 #include <string.h>
 #include <ctype.h>
@@ -44,6 +45,7 @@
 	struct vty *vty;
 	const char *prefix;
 	int max_level;
+	bool skip_zero;
 };
 
 static int rate_ctr_handler(
@@ -53,6 +55,9 @@
 	struct vty_out_context *vctx = vctx_;
 	struct vty *vty = vctx->vty;
 
+	if (vctx->skip_zero && ctr->current == 0)
+		return 0;
+
 	vty_out(vty, " %s%s: %8" PRIu64 " "
 		"(%" PRIu64 "/s %" PRIu64 "/m %" PRIu64 "/h %" PRIu64 "/d)%s",
 		vctx->prefix, desc->description, ctr->current,
@@ -69,17 +74,24 @@
  *  \param[in] vty The VTY to which it should be printed
  *  \param[in] prefix Any additional log prefix ahead of each line
  *  \param[in] ctrg Rate counter group to be printed
+ *  \param[in] skip_zero Skip all zero-valued counters
  */
-void vty_out_rate_ctr_group(struct vty *vty, const char *prefix,
-			    struct rate_ctr_group *ctrg)
+void vty_out_rate_ctr_group2(struct vty *vty, const char *prefix,
+			     struct rate_ctr_group *ctrg, bool skip_zero)
 {
-	struct vty_out_context vctx = {vty, prefix};
+	struct vty_out_context vctx = {vty, prefix, 0, skip_zero};
 
 	vty_out(vty, "%s%s:%s", prefix, ctrg->desc->group_description, VTY_NEWLINE);
 
 	rate_ctr_for_each_counter(ctrg, rate_ctr_handler, &vctx);
 }
 
+void vty_out_rate_ctr_group(struct vty *vty, const char *prefix,
+			   struct rate_ctr_group *ctrg)
+{
+	vty_out_rate_ctr_group2(vty, prefix, ctrg, false);
+}
+
 static char *
 pad_append_str(char *s, const char *a, int minwidth)
 {
@@ -103,7 +115,12 @@
 	struct vty_out_context *vctx = vctx_;
 	struct vty *vty = vctx->vty;
 	const char *fmt = vctx->prefix;
-	char *s = talloc_strdup(vty, "");
+	char *s;
+
+	if (vctx->skip_zero && ctr->current == 0)
+		return 0;
+
+	s = talloc_strdup(vty, "");
 	OSMO_ASSERT(s);
 
 	while (*fmt) {
@@ -205,14 +222,20 @@
  *  \param[in] vty The VTY to which it should be printed
  *  \param[in] ctrg Rate counter group to be printed
  *  \param[in] fmt A format which may contain the above directives.
+ *  \param[in] skip_zero Skip all zero-valued counters
  */
-void vty_out_rate_ctr_group_fmt(struct vty *vty, const char *fmt,
-				struct rate_ctr_group *ctrg)
+void vty_out_rate_ctr_group_fmt2(struct vty *vty, const char *fmt,
+				 struct rate_ctr_group *ctrg, bool skip_zero)
 {
-	struct vty_out_context vctx = {vty, fmt};
+	struct vty_out_context vctx = {vty, fmt, 0, skip_zero};
 	rate_ctr_for_each_counter(ctrg, rate_ctr_handler_fmt, &vctx);
 }
 
+void vty_out_rate_ctr_group_fmt(struct vty *vty, const char *fmt,
+				struct rate_ctr_group *ctrg)
+{
+	vty_out_rate_ctr_group_fmt2(vty, fmt, ctrg, false);
+}
 static int rate_ctr_group_handler(struct rate_ctr_group *ctrg, void *vctx_)
 {
 	struct vty_out_context *vctx = vctx_;
@@ -244,12 +267,14 @@
 	struct vty_out_context *vctx = vctx_;
 	struct vty *vty = vctx->vty;
 	const struct osmo_stat_item_desc *desc = osmo_stat_item_get_desc(item);
+	int32_t value = osmo_stat_item_get_last(item);
 	const char *unit = (desc->unit != OSMO_STAT_ITEM_NO_UNIT) ? desc->unit : "";
 
+	if (vctx->skip_zero && value == 0)
+		return 0;
+
 	vty_out(vty, " %s%s: %8" PRIi32 " %s%s",
-		vctx->prefix, desc->description,
-		osmo_stat_item_get_last(item),
-		unit, VTY_NEWLINE);
+		vctx->prefix, desc->description, value, unit, VTY_NEWLINE);
 
 	return 0;
 }
@@ -258,17 +283,24 @@
  *  \param[in] vty The VTY to which it should be printed
  *  \param[in] prefix Any additional log prefix ahead of each line
  *  \param[in] statg Stat item group to be printed
+ *  \param[in] skip_zero Skip all zero-valued counters
  */
-void vty_out_stat_item_group(struct vty *vty, const char *prefix,
-			     struct osmo_stat_item_group *statg)
+void vty_out_stat_item_group2(struct vty *vty, const char *prefix,
+			      struct osmo_stat_item_group *statg, bool skip_zero)
 {
-	struct vty_out_context vctx = {vty, prefix};
+	struct vty_out_context vctx = {vty, prefix, 0, skip_zero};
 
 	vty_out(vty, "%s%s:%s", prefix, statg->desc->group_description,
 		VTY_NEWLINE);
 	osmo_stat_item_for_each_item(statg, osmo_stat_item_handler, &vctx);
 }
 
+void vty_out_stat_item_group(struct vty *vty, const char *prefix,
+			     struct osmo_stat_item_group *statg)
+{
+	return vty_out_stat_item_group2(vty, prefix, statg, false);
+}
+
 static int osmo_stat_item_group_handler(struct osmo_stat_item_group *statg, void *vctx_)
 {
 	struct vty_out_context *vctx = vctx_;
@@ -298,21 +330,22 @@
 	struct vty_out_context *vctx = vctx_;
 	struct vty *vty = vctx->vty;
 	const char *description = counter->description;
+	unsigned long value = osmo_counter_get(counter);
+
+	if (vctx->skip_zero && value == 0)
+		return 0;
 
 	if (!counter->description)
 		description = counter->name;
 
-	vty_out(vty, " %s%s: %8lu%s",
-		vctx->prefix, description,
-		osmo_counter_get(counter), VTY_NEWLINE);
+	vty_out(vty, " %s%s: %8lu%s", vctx->prefix, description, value, VTY_NEWLINE);
 
 	return 0;
 }
 
-void vty_out_statistics_partial(struct vty *vty, const char *prefix,
-	int max_level)
+void vty_out_statistics_partial2(struct vty *vty, const char *prefix, int max_level, bool skip_zero)
 {
-	struct vty_out_context vctx = {vty, prefix, max_level};
+	struct vty_out_context vctx = {vty, prefix, max_level, skip_zero};
 
 	vty_out(vty, "%sUngrouped counters:%s", prefix, VTY_NEWLINE);
 	osmo_counters_for_each(handle_counter, &vctx);
@@ -320,9 +353,19 @@
 	osmo_stat_item_for_each_group(osmo_stat_item_group_handler, &vctx);
 }
 
+void vty_out_statistics_partial(struct vty *vty, const char *prefix, int max_level)
+{
+	return vty_out_statistics_partial2(vty, prefix, max_level, false);
+}
+
+void vty_out_statistics_full2(struct vty *vty, const char *prefix, bool skip_zero)
+{
+	vty_out_statistics_partial2(vty, prefix, INT_MAX, skip_zero);
+}
+
 void vty_out_statistics_full(struct vty *vty, const char *prefix)
 {
-	vty_out_statistics_partial(vty, prefix, INT_MAX);
+	vty_out_statistics_full2(vty, prefix, false);
 }
 
 /*! Generate a VTY command string from value_string */
