use singleton instead of share