Overview I have a plugin that is getting a prefix, set by any player (custom per-player prefix) from a MySQL database. When the prefix is retrieved, it is then stored into a cache system. The prefix can be edited at anytime, which just refreshes the already-cached prefix. When the player leaves, the cached prefix is stored back into a MySQL database. Now, here's the problem - Server A and Server B: When Server A asks for the prefix of a player from the MySQL database, it retrieves the prefix, then stores it into the cache system. This happens on the AsyncPlayerPreLoginEvent (also tested on PlayerLoginEvent). At any given moment, the player can change the prefix. When a player leaves Server A to go to Server B, Server A starts to put its cache in the MySQL database. This happens on the PlayerQuitEvent. But, Server B starts to get the player's prefix from the MySQL database before Server A's PlayerQuitEvent fully executes, whereby leads Server B to get the old, unchanged version of a player's prefix from the outdated MySQL database. Server A to Server B relationship event order: AsyncPlayerPreLoginEvent (also tested on PlayerLoginEvent) -Any random prefix editing via command- *On leave* Server A's PlayerQuitEvent execution after Server B's full AsyncPlayerPreLoginEvent execution. Finally, the question: What should I do in order to let Server A fully execute its cache-to-database process, then have Server B do its thing? I thought about delaying the cache - which could be the only way, - but I want to try to avoid the possibility of a player sending a message in chat only to be met with disappointment by the realization of their prefix has not yet been updated on Server B. Any suggestions will be gladly appreciated. I have no attachments to my current code design, therefore I am more than willing to destroy each line of code with the hopes of rebuilding something more robust.