made this thing more abstact by reading all info from solver