resort
Add dynamic factory method and builder pattern