Simple, but functionally complete version