added optimization methods