Follow Swing best practices about segregating the UI thread from the main thread
Merge remote-tracking branch 'upstream/master'
Adjust to upstream changes