the final version for completeness