tons of changes for more user customization