implement more features