 
 {defaults, required} = misc
 
-is_fatal = (err) ->
-    return typeof(err) == 'string' and err.slice(0,5) == 'FATAL'
+cb_fatal = (err, cb) ->
+    if not cb?
+        return
+    if typeof(err) == 'string' and err.slice(0,5) == 'FATAL'
+        # throw in an arbitrary pause to wait for proper connection or
+        # give the backend time to breath
+        setTimeout((->cb(err)), 5000 + Math.random()*5000)
+    else
+        # cb as usual
+        cb(err)
 
 # We represent synchronized tables by an immutable.js mapping from the primary
 # key to the object.  Since PostgresQL primary keys can be compound (more than

    _connect: (cb) =>
        dbg = @dbg("connect")
        dbg()
        if @_fatal
            cb?('fatal')
            return
        if @_state == 'closed'
            cb?('closed')
            return

                # 2. Now actually do the changefeed query.
                @_reconnect(cb)
        ], (err) =>
            cb_fatal(err, cb)
        )

    _reconnect: (cb) =>
        dbg = @dbg("_run")
        if @_state == 'closed'
            dbg("closed so don't do anything ever again")
            cb?()
