Rework internals and add more scaling functions