final version

pretty much fully functioning, might make a few changes later but this
looks good...