                 # 2. Now actually do the changefeed query.
                 @_reconnect(cb)
         ], (err) =>
-            if is_fatal(err)
-                # This happens, e.g., when a user is no longer a collaborator on a project, or they are signed out
-                # but still have a bunch of tabs open.  It avoids a huge amount of back and forth traffic between
-                # the client and server.   WORRY: when they sign in, things will not just start working again...
-                # but for now we need to defend ourselves.
-                dbg("FATAL error -- #{err}")
-                @_set_fatal(err)
-                cb?("fatal")
-            else
-                cb?()
+            cb_fatal(err, cb)
         )
 
     _reconnect: (cb) =>
         dbg = @dbg("_run")
-        if @_fatal
-            cb?('fatal')
-            return
         if @_state == 'closed'
             dbg("closed so don't do anything ever again")
             cb?()

        if @_state == 'closed'
            cb?("closed")
            return
        if @_fatal
            cb?()
            return

        if @_state != 'connected'
            cb?("not connected")    # do not change this error message; it is assumed elsewhere.
            return

                if @_state == 'closed'
                    # already closed so ignore anything else.
                    cb?('closed')
                    cb = undefined
                    return

