Updated with major improvements