complete rewrite. =>1.4