Factored out Heater

compiles, not tested