added features, needs formatting