Have you tried flushing the heater core and the cooling system? I would recommend disconnecting the heater hoses and with a garden hose, force water through both directions. See if that helps. Also, is the engine running at a normal operating temp? One last thing, with the engine hot and the heater on, are both heater core hoses getting hot?