updated with the last non-linear attempts