New version: add interface and ternar operator