Added more functionality with proper constructors