fixed threading model, now works much closer to expected