feature:abstract initial implementation