after this commit will try to improve factory usable code