Working version, but need lots of polish.