Moved the implementation code to a separate package