made the model not depend on itself, you can implement interface instead