completely rewrited