starting on better threading model