* readable,refactered