Lot's of changes, about time I updated this.