If it was a bad thermostat you would not be getting heat from the heater, but only because it is preventing the engine from coming up to operating temperature. If the engine is coming up to operating temperature within a normal time, the problem is not the thermostat.
Has the coolant been changed recently? I would start by bleeding any air out of the cooling system. Is there a bleeder screw on top of the thermostat housing? If that doesn't work the next step would be to flush the cooling system. If you do that, you can remove the heater core inlet and outlet hoses and hook up a garden hose to the heater outlet. This will allow you to back flush the heater core and check for flow (or blockage).
2001 Bonneville SSEi (retired at 365,000 Kms.)
2014 Jeep Grand Cherokee Overland (yes, I know its not a GM)