Split into multiple files, added interface