factory constructors use silent add for better performance