First commit. Final version directly.