intermediate revision
intermediate revision
final revision, with one bug