improve the functionality!