Made Emit extensible, and replaced all functors with static member functions to avoid unnecessary object creation