can this throw? if so, it should be moved to some sort of initialization function