- better way to allocate singleton