Alot of changes and features, need to merge.