diff --git a/dev/flags/flags.c b/dev/flags/flags.c
index ede3510..a8eb81b 100644
--- a/dev/flags/flags.c
+++ b/dev/flags/flags.c
@@ -66,61 +66,14 @@
 
 void show_sd_flags(unsigned int f)
 {
-	printf("sd->flags   = ");
-	if (!f) {
-		printf("0\n");
-		return;
-	}
-
-	SHOW_FLAG(f, SE_FL_APPLET_NEED_CONN);
-	SHOW_FLAG(f, SE_FL_HAVE_NO_DATA);
-	SHOW_FLAG(f, SE_FL_WONT_CONSUME);
-	SHOW_FLAG(f, SE_FL_WAIT_DATA);
-	SHOW_FLAG(f, SE_FL_KILL_CONN);
-	SHOW_FLAG(f, SE_FL_WAIT_FOR_HS);
-	SHOW_FLAG(f, SE_FL_WANT_ROOM);
-	SHOW_FLAG(f, SE_FL_RCV_MORE);
-	SHOW_FLAG(f, SE_FL_MAY_SPLICE);
-	SHOW_FLAG(f, SE_FL_ERR_PENDING);
-	SHOW_FLAG(f, SE_FL_ERROR);
-	SHOW_FLAG(f, SE_FL_EOS);
-	SHOW_FLAG(f, SE_FL_EOI);
-	SHOW_FLAG(f, SE_FL_WEBSOCKET);
-	SHOW_FLAG(f, SE_FL_NOT_FIRST);
-	SHOW_FLAG(f, SE_FL_SHWS);
-	SHOW_FLAG(f, SE_FL_SHWN);
-	SHOW_FLAG(f, SE_FL_SHRR);
-	SHOW_FLAG(f, SE_FL_SHRD);
-	SHOW_FLAG(f, SE_FL_ORPHAN);
-	SHOW_FLAG(f, SE_FL_DETACHED);
-	SHOW_FLAG(f, SE_FL_T_APPLET);
-	SHOW_FLAG(f, SE_FL_T_MUX);
-
-	if (f) {
-		printf("EXTRA(0x%08x)", f);
-	}
-	putchar('\n');
+	se_show_flags(tmpbuf, sizeof(tmpbuf), " | ", f);
+	printf("sd->flags = %s\n", tmpbuf);
 }
+
 void show_sc_flags(unsigned int f)
 {
-	printf("sc->flags   = ");
-	if (!f) {
-		printf("0\n");
-		return;
-	}
-	SHOW_FLAG(f, SC_FL_NEED_ROOM);
-	SHOW_FLAG(f, SC_FL_NEED_BUFF);
-	SHOW_FLAG(f, SC_FL_WONT_READ);
-	SHOW_FLAG(f, SC_FL_INDEP_STR);
-	SHOW_FLAG(f, SC_FL_DONT_WAKE);
-	SHOW_FLAG(f, SC_FL_NOHALF);
-	SHOW_FLAG(f, SC_FL_NOLINGER);
-	SHOW_FLAG(f, SC_FL_ISBACK);
-
-	if (f) {
-		printf("EXTRA(0x%08x)", f);
-	}
-	putchar('\n');
+	sc_show_flags(tmpbuf, sizeof(tmpbuf), " | ", f);
+	printf("sc->flags = %s\n", tmpbuf);
 }
 
 void show_strm_et(unsigned int f)
diff --git a/include/haproxy/stconn-t.h b/include/haproxy/stconn-t.h
index 89f1009..61996f8 100644
--- a/include/haproxy/stconn-t.h
+++ b/include/haproxy/stconn-t.h
@@ -24,8 +24,11 @@
 
 #include <haproxy/obj_type-t.h>
 #include <haproxy/connection-t.h>
+#include <haproxy/show_flags-t.h>
 
-/* Stream Endpoint Flags */
+/* Stream Endpoint Flags.
+ * Please also update the se_show_flags() function below in case of changes.
+ */
 enum se_flags {
 	SE_FL_NONE       = 0x00000000, /* For initialization purposes */
 
@@ -81,7 +84,32 @@
 	SE_FL_APPLET_NEED_CONN = 0x40000000,  /* applet is waiting for the other side to (fail to) connect */
 };
 
-/* stconn flags */
+/* This function is used to report flags in debugging tools. Please reflect
+ * below any single-bit flag addition above in the same order via the
+ * __APPEND_FLAG macro. The new end of the buffer is returned.
+ */
+static forceinline char *se_show_flags(char *buf, size_t len, const char *delim, uint flg)
+{
+#define _(f, ...) __APPEND_FLAG(buf, len, delim, flg, f, #f, __VA_ARGS__)
+	/* prologue */
+	_(0);
+	/* flags */
+	_(SE_FL_T_MUX, _(SE_FL_T_APPLET, _(SE_FL_DETACHED, _(SE_FL_ORPHAN,
+	_(SE_FL_SHRD, _(SE_FL_SHRR, _(SE_FL_SHWN, _(SE_FL_SHWS,
+	_(SE_FL_NOT_FIRST, _(SE_FL_WEBSOCKET, _(SE_FL_EOI, _(SE_FL_EOS,
+	_(SE_FL_ERROR, _(SE_FL_ERR_PENDING, _(SE_FL_MAY_SPLICE,
+	_(SE_FL_RCV_MORE, _(SE_FL_WANT_ROOM, _(SE_FL_WAIT_FOR_HS,
+	_(SE_FL_KILL_CONN, _(SE_FL_WAIT_DATA, _(SE_FL_WONT_CONSUME,
+	_(SE_FL_HAVE_NO_DATA, _(SE_FL_APPLET_NEED_CONN)))))))))))))))))))))));
+	/* epilogue */
+	_(~0U);
+	return buf;
+#undef _
+}
+
+/* stconn flags.
+ * Please also update the sc_show_flags() function below in case of changes.
+ */
 enum sc_flags {
 	SC_FL_NONE          = 0x00000000,  /* Just for initialization purposes */
 	SC_FL_ISBACK        = 0x00000001,  /* Set for SC on back-side */
@@ -99,6 +127,25 @@
 	SC_FL_NEED_ROOM     = 0x00000200,  /* SC needs more room in the rx buffer to store incoming data */
 };
 
+/* This function is used to report flags in debugging tools. Please reflect
+ * below any single-bit flag addition above in the same order via the
+ * __APPEND_FLAG macro. The new end of the buffer is returned.
+ */
+static forceinline char *sc_show_flags(char *buf, size_t len, const char *delim, uint flg)
+{
+#define _(f, ...) __APPEND_FLAG(buf, len, delim, flg, f, #f, __VA_ARGS__)
+	/* prologue */
+	_(0);
+	/* flags */
+	_(SC_FL_ISBACK, _(SC_FL_NOLINGER, _(SC_FL_NOHALF,
+	_(SC_FL_DONT_WAKE, _(SC_FL_INDEP_STR, _(SC_FL_WONT_READ,
+	_(SC_FL_NEED_BUFF, _(SC_FL_NEED_ROOM))))))));
+	/* epilogue */
+	_(~0U);
+	return buf;
+#undef _
+}
+
 /* A conn stream must have its own errors independently of the buffer's, so that
  * applications can rely on what the buffer reports while the conn stream is
  * performing some retries (eg: connection error). Some states are transient and
