implement basic features without delegating functions