add abstract implementation for syntax sugar