* it's own schedule but uses less threads.</p>
* TODO: trace down all events that cause a state change so we don't have to poll
*/
private void startTimer() {
TaskEngine taskEngine = TaskEngine.getInstance();
taskEngine.schedule(new TimerTask() {
@Override
public void run() {
workgroupLock.readLock().lock();
try {
for (Workgroup group : workgroups.values()) {