more generalized. better ui