refact most of them