add gear factory with initialize