provide different base implementations