Refactored smoothing into subclasses instead of delegates