model moved to its own source file