First complete (if slightly naive) version.