added a lot of features, too many to remember