Had trouble, commiting earlier, but here is a version of near completed code. Does not have javadoc yet, nor does it have good comments.  Almost final version