add factory and sigle access