new singleton factory, betterdict first version