A programmable temperature control system for a pool or spa, comprising: a user interface (58, 60, 80) for allowing a user to specify a desired temperature for a pool or spa and a desired time by which the pool or spa is to be heated to the desired temperature; characterised in that the temperature control system further comprises: an actuator interface (30a-30c) for controlling a plurality of heat sources (28a-28c); means (56, 74) for receiving energy cost information; and a processor in electrical communication with the user interface (58, 60, 80), the actuator interface (30a-30c), and the means (56, 74) for receiving energy cost information, the processor executing a stored temperature control program for: estimating for each of the plurality of heat sources (28a-28c) an amount of time required by each heat source to heat the pool or spa to the desired temperature; automatically selecting an optimal heat source from the plurality of heat sources (28a-28c) based upon received energy cost information, for heating the pool or spa to the desired temperature by the desired time; and actuating the optimal heat source using the actuator interface (30a-30c). a user interface (58, 60, 80) for allowing a user to specify a desired temperature for a pool or spa and a desired time by which the pool or spa is to be heated to the desired temperature; characterised in that the temperature control system further comprises: an actuator interface (30a-30c) for controlling a plurality of heat sources (28a-28c); means (56, 74) for receiving energy cost information; and a processor in electrical communication with the user interface (58, 60, 80), the actuator interface (30a-30c), and the means (56, 74) for receiving energy cost information, the processor executing a stored temperature control program for: estimating for each of the plurality of heat sources (28a-28c) an amount of time required by each heat source to heat the pool or spa to the desired temperature; automatically selecting an optimal heat source from the plurality of heat sources (28a-28c) based upon received energy cost information, for heating the pool or spa to the desired temperature by the desired time; and actuating the optimal heat source using the actuator interface (30a-30c). an actuator interface (30a-30c) for controlling a plurality of heat sources (28a-28c); means (56, 74) for receiving energy cost information; and a processor in electrical communication with the user interface (58, 60, 80), the actuator interface (30a-30c), and the means (56, 74) for receiving energy cost information, the processor executing a stored temperature control program for: estimating for each of the plurality of heat sources (28a-28c) an amount of time required by each heat source to heat the pool or spa to the desired temperature; automatically selecting an optimal heat source from the plurality of heat sources (28a-28c) based upon received energy cost information, for heating the pool or spa to the desired temperature by the desired time; and actuating the optimal heat source using the actuator interface (30a-30c). estimating for each of the plurality of heat sources (28a-28c) an amount of time required by each heat source to heat the pool or spa to the desired temperature; automatically selecting an optimal heat source from the plurality of heat sources (28a-28c) based upon received energy cost information, for heating the pool or spa to the desired temperature by the desired time; and actuating the optimal heat source using the actuator interface (30a-30c).