More functional with super simple interface