Fully rewritten