Not sure if this is finished, but it runs.
