diff --git a/server/reload.go b/server/reload.go
index <HASH>..<HASH> 100644
--- a/server/reload.go
+++ b/server/reload.go
@@ -1106,8 +1106,17 @@ func (s *Server) reloadAuthorization() {
 	for _, route := range s.routes {
 		routes = append(routes, route)
 	}
+	var resetCh chan struct{}
+	if s.sys != nil {
+		// can't hold the lock as go routine reading it may be waiting for lock as well
+		resetCh = s.sys.resetCh
+	}
 	s.mu.Unlock()
 
+	if resetCh != nil {
+		resetCh <- struct{}{}
+	}
+
 	// Close clients that have moved accounts
 	for _, client := range cclients {
 		client.closeConnection(ClientClosed)
diff --git a/server/server.go b/server/server.go
index <HASH>..<HASH> 100644
--- a/server/server.go
+++ b/server/server.go
@@ -515,8 +515,6 @@ func (s *Server) configureAccounts() error {
 			s.mu.Unlock()
 			// acquires server lock separately
 			s.addSystemAccountExports(acc)
-			// can't hold the lock as go routine reading it may be waiting for lock as well
-			s.sys.resetCh <- struct{}{}
 			s.mu.Lock()
 		}
 		if err != nil {
Move reset of internal client to after the account sublist was moved.

This does not avoid the race condition, but makes it less likely to
trigger in unit tests.