diff --git a/src/epics/seq/standalone_edcu.cc b/src/epics/seq/standalone_edcu.cc
index 3d7e93466c23366d405690e129b1bb720b65d199..2bd61524e439a33725b0c5b294faf6bd1534ac5e 100644
--- a/src/epics/seq/standalone_edcu.cc
+++ b/src/epics/seq/standalone_edcu.cc
@@ -576,11 +576,23 @@ connectCallback( struct connection_handler_args args )
 {
     // **************************************************************************
     int* channel_status = (int*)ca_puser( args.chid );
-    *channel_status = args.op == CA_OP_CONN_UP ? 0 : 0xbad;
-    if ( args.op == CA_OP_CONN_UP )
-        daqd_edcu1.con_chans++;
-    else
-        daqd_edcu1.con_chans--;
+    int  new_status = ( args.op == CA_OP_CONN_UP ? 0 : 0xbad );
+    /* In practice we have seen multiple disconnect events in a row w/o a
+     * connect event. So only update when there is a change.  Otherwise this
+     * code cannot count well.
+     */
+    if ( *channel_status != new_status )
+    {
+        *channel_status = new_status;
+        if ( args.op == CA_OP_CONN_UP )
+        {
+            daqd_edcu1.con_chans++;
+        }
+        else
+        {
+            daqd_edcu1.con_chans--;
+        }
+    }
     daqd_edcu1.con_events++;
 }