Separate the interface and implementation