added constraint solver