1) Added api with factory methods
2) Made factories internal visibility