further rewrite