abstract stuff fixed and looks like it's working