added shared factory