switched to using Executors instead of Runnables