Huge rework, implemented kams suggestions