default factory implemented