diff --git a/lib/Makefile.am b/lib/Makefile.am
index 57e859d..32998a8 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -13,7 +13,7 @@
 	sockunion.c prefix.c thread.c if.c memory.c buffer.c table.c hash.c \
 	filter.c routemap.c distribute.c stream.c str.c log.c plist.c \
 	zclient.c sockopt.c smux.c agentx.c snmp.c md5.c if_rmap.c keychain.c privs.c \
-	sigevent.c pqueue.c jhash.c memtypes.c workqueue.c vrf.c
+	sigevent.c pqueue.c jhash.c memtypes.c workqueue.c vrf.c event_counter.c
 
 BUILT_SOURCES = memtypes.h route_types.h gitversion.h
 
@@ -28,7 +28,7 @@
 	str.h stream.h table.h thread.h vector.h version.h vty.h zebra.h \
 	plist.h zclient.h sockopt.h smux.h md5.h if_rmap.h keychain.h \
 	privs.h sigevent.h pqueue.h jhash.h zassert.h memtypes.h \
-	workqueue.h route_types.h libospf.h vrf.h fifo.h
+	workqueue.h route_types.h libospf.h vrf.h fifo.h event_counter.h
 
 noinst_HEADERS = \
 	plist_int.h
diff --git a/lib/event_counter.c b/lib/event_counter.c
new file mode 100644
index 0000000..e94aa4c
--- /dev/null
+++ b/lib/event_counter.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2016 Christian Franke
+ *
+ * This file is part of Quagga.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, you can use, redistribute and/or modify it under the
+ * following terms:
+ *
+ * Quagga 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, or (at your option) any
+ * later version.
+ *
+ * Quagga 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 Quagga; see the file COPYING.  If not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include <zebra.h>
+
+#include "event_counter.h"
+
+void
+event_counter_inc (struct event_counter *counter)
+{
+  counter->count++;
+  counter->last = time (NULL);
+}
+
+const char *
+event_counter_format (const struct event_counter *counter)
+{
+  struct tm last_change_store;
+  struct tm *last_change;
+  char timebuf[sizeof ("Thu, 01 Jan 1970 00:00:00 +0000")];
+  static char rv[20 + sizeof ("  last: ") + sizeof (timebuf)];
+
+  last_change = localtime_r (&counter->last, &last_change_store);
+  if (!last_change || strftime (timebuf, sizeof (timebuf),
+                                "%a, %d %b %Y %T %z", last_change) == 0)
+    {
+      strncpy (timebuf, "???", sizeof (timebuf));
+    }
+
+  snprintf (rv, sizeof (rv), "%5llu  last: %s", counter->count,
+            counter->last ? timebuf : "(never)");
+  return rv;
+}
diff --git a/lib/event_counter.h b/lib/event_counter.h
new file mode 100644
index 0000000..f40c6cd
--- /dev/null
+++ b/lib/event_counter.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2016 Christian Franke
+ *
+ * This file is part of Quagga.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, you can use, redistribute and/or modify it under the
+ * following terms:
+ *
+ * Quagga 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, or (at your option) any
+ * later version.
+ *
+ * Quagga 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 Quagga; see the file COPYING.  If not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef _ZEBRA_EVENT_COUNTER_H
+#define _ZEBRA_EVENT_COUNTER_H
+
+struct event_counter
+{
+  unsigned long long count;
+  time_t last;
+};
+
+void event_counter_inc (struct event_counter *counter);
+const char *event_counter_format (const struct event_counter *counter);
+
+#endif
