Vaillant ecoTEC Pro / ecoTEC Plus Fault codes & diagnostics

41 fault codes with plain-English explanations, severity ratings, DIY guidance, and repair cost estimates.

CombiSystem Natural GasLPG 24-38 kW 2017 onwards
GC Numbers 18-044-0118-044-0218-044-0318-044-0418-044-0541-044-5041-044-5147-044-5147-044-8247-044-83

The ecoTEC Pro / ecoTEC Plus range comes in 3 types

Pick the one you have. The fault codes, GC numbers and manual differ by type.

Download the Vaillant ecoTEC Pro / ecoTEC Plus manual The official installation & service manual (PDF) — the exact document these fault codes were verified against. PDF

The fault code is already on your display

Note it down before pressing reset — resetting clears the code immediately. How to read fault codes →

Severity at a glance

Each cell = one fault code. Hover to identify.
1 Emergency 33 High 3 Medium 4 Low

Which version do you have?

The GC number on your boiler's data badge identifies the exact appliance and production years, as recorded in the UK Product Characteristics Database.

GC number Appliance (register name) Produced
47-044-82 ecoTEC plus 835 VUW 306/5-5 (H-GB) R6 2017–present
47-044-83 ecoTEC plus 825 VUW 196/5-5 (H-GB) R6 2017–present

All 41 documented codes

Tap any card for details

F.0

Your boiler has lost the signal from the sensor that monitors the temperature of the water flowing out to your radiators, causing it to stop heating to prevent damage.

High Engineer only £120-220

Parts commonly replaced

  • Flow NTC sensor
  • Wiring harness

Related codes

F.1

Your boiler has lost the signal from a sensor that monitors the temperature of the water returning to the unit, causing it to stop working to protect itself.

High Engineer only £120-220

Parts commonly replaced

  • Return NTC sensor
  • Wiring harness

Related codes

F.10

Your boiler has detected an electrical fault with the internal sensor that monitors the temperature of the water leaving the unit, causing it to shut down for safety.

High Engineer only £100-£180

Parts commonly replaced

  • Flow NTC Thermistor
  • Wiring harness
  • Main PCB

Related codes

F.11

Your boiler has stopped working because a sensor that monitors the temperature of the water returning to the unit has developed an electrical fault.

High Engineer only £90-160

Parts commonly replaced

  • Return NTC thermistor (sensor)
  • Wiring harness
  • Main PCB

Related codes

F.13

Your boiler is having trouble reading the temperature of your hot water cylinder because a sensor connection is faulty or shorted.

Medium Engineer only £120-200

Parts commonly replaced

  • Hot water cylinder sensor
  • Wiring harness

Related codes

F.20

Your boiler has shut down because it has detected it is getting too hot, usually caused by a lack of water flow or a blockage in the system.

High DIY-safe £100-£350

What to check first

  1. Check if your radiator valves are open
  2. Check the boiler pressure gauge and top up if it is below 1.0 bar
  3. Press the reset button (flame symbol) to see if the fault clears

Parts commonly replaced

  • Overheat Thermostat
  • NTC Temperature Sensor
  • Circulation Pump

Related codes

F.22

Your boiler has stopped working because the water pressure inside the system has dropped too low to operate safely.

High DIY-safe £0-160

What to check first

  1. Locate the filling loop valves underneath your boiler
  2. Slowly open both valves to let water into the system
  3. Close both valves tightly once the pressure gauge reaches 1.5 bar

Parts commonly replaced

  • Filling loop
  • Pressure sensor
  • Expansion vessel

Related codes

F.23

Your boiler has switched itself off because the water temperature inside it is rising much faster than the water temperature being sent to your radiators, usually due to a circulation blockage.

High DIY-safe £100-£350

What to check first

  1. Check that all radiator valves (TRVs) are turned to the highest setting
  2. Ensure the boiler pressure is between 1.0 and 1.5 bar on the digital display
  3. Check if any valves underneath the boiler have been accidentally closed

Parts commonly replaced

  • Pump
  • Flow and Return Thermistors
  • Main Heat Exchanger (Cleaning/Descaling)

Related codes

F.24

Your boiler has shut down because it is heating up much faster than it should, which usually means the water isn't moving through the system properly.

High DIY-safe £150-£450

What to check first

  1. Check that your boiler pressure is between 1.0 and 1.5 bar on the digital display
  2. Ensure all radiator valves are fully open to allow water to flow
  3. Press the reset button (flame symbol with a cross) to see if the fault clears

Parts commonly replaced

  • Circulating Pump
  • Temperature Sensors (NTC Thermistors)
  • Main Heat Exchanger (Flushing)

Related codes

F.25

Your boiler has detected a loose or broken electrical connection inside its main combustion chamber, meaning it cannot safely turn on the burner.

High Engineer only £150-300

Parts commonly replaced

  • Wiring harness
  • Combustion sensor
  • Gas valve assembly

Related codes

Showing 11–20 of 41
F.27

Your boiler has sensed a flame inside when there shouldn't be one, so it has shut down as a safety precaution.

High Engineer only £120-350

Parts commonly replaced

  • Ionisation electrode
  • Ignition lead
  • Gas valve
  • Printed Circuit Board (PCB)

Related codes

F.28

Your boiler has failed to ignite and has locked itself out for safety, meaning you currently have no heating or hot water.

High DIY-safe £100-£350

What to check first

  1. Check if your home has gas by testing another gas appliance like a hob.
  2. Ensure your gas meter has credit and the isolation valve is open.
  3. Wait 5 minutes and then press the 'Reset' button (indicated by a flame with a cross through it).

Parts commonly replaced

  • Ignition Electrode
  • Gas Valve
  • Spark Lead
  • PCB

Related codes

F.29

Your boiler was working but has suddenly turned off because the flame has gone out and it cannot manage to relight itself.

High DIY-safe £100-£350

What to check first

  1. Check if other gas appliances, like a hob, are still working to ensure your gas supply hasn't been interrupted.
  2. If it is freezing outside, check the condensate pipe (the plastic pipe leading outside) for ice and defrost it with warm water.
  3. Press the reset button (a flame symbol with a cross through it) for five seconds to see if the boiler restarts.

Parts commonly replaced

  • Ignition Electrode
  • Gas Valve
  • Flame Sensing Electrode
  • PCB

Related codes

F.32

Your boiler has stopped working because the internal fan that safely removes exhaust gases is either stuck or not communicating correctly with the system.

High Engineer only £250-£450

Parts commonly replaced

  • Fan assembly
  • Printed Circuit Board (PCB)
  • Wiring harness
F.49

Your boiler has lost communication between its internal computer and parts like the thermostat due to an electrical connection issue.

High Engineer only £100-£250

Parts commonly replaced

  • eBUS wiring
  • Digital thermostat
  • Main PCB (Printed Circuit Board)

Related codes

F.61

Your boiler is struggling to talk to the gas valve, which means it cannot safely control the fuel needed to create heat.

High Engineer only £180-£450

Parts commonly replaced

  • Gas Valve
  • Main PCB
  • Wiring Loom

Related codes

F.62

Your boiler has detected that the gas flame is not turning off when it should, which is preventing the system from running safely.

Emergency Engineer only £180-450

Parts commonly replaced

  • Gas valve
  • Printed Circuit Board (PCB)
  • Electrode

Related codes

F.63

Your boiler's computer memory has suffered a technical glitch, meaning it can no longer remember its own settings and cannot operate.

High Engineer only £280-450

Parts commonly replaced

  • Main Printed Circuit Board (PCB)

Related codes

F.64

Your boiler has detected a communication problem between its internal sensors or a fault in its main control board, causing the system to shut down for safety.

High Engineer only £150-450

Parts commonly replaced

  • Flow or Return NTC Thermistor
  • Printed Circuit Board (PCB)
  • Wiring Harness

Related codes

F.65

Your boiler's internal control board is getting too hot, usually because it is located too close to a heat source or there is a fault with the electronics.

High Engineer only £180-450

Parts commonly replaced

  • Printed Circuit Board (PCB)
  • Electronic Control Box

Related codes

Showing 21–30 of 41
F.67

Your boiler's internal computer is receiving a confusing signal regarding the flame, preventing the system from starting for safety reasons.

High Engineer only £250-£450

Parts commonly replaced

  • Printed Circuit Board (PCB)
  • Ignition Electrode
  • Wiring Harness

Related codes

F.70

Your boiler's computer and internal display screen are no longer communicating correctly because they haven't been configured to recognize each other.

High Engineer only £80-£350

Parts commonly replaced

  • Printed Circuit Board (PCB)
  • User Interface (UI) Display

Related codes

F.71

Your boiler has detected that a temperature sensor has stuck on a single reading, meaning it cannot accurately tell how hot the water is to safely heat your home.

High Engineer only £90-160

Parts commonly replaced

  • Flow NTC Temperature Sensor
  • Sensor Wiring Harness

Related codes

F.72

Your boiler has detected that the temperature readings between two sensors don't match up, which prevents it from heating your water safely.

High Engineer only £90-180

Parts commonly replaced

  • Flow NTC sensor
  • Return NTC sensor
  • Sensor wiring harness

Related codes

F.73

Your boiler is unable to accurately measure the water pressure because the internal sensor is sending an incorrect or missing signal.

High Engineer only £140-£250

Parts commonly replaced

  • Water Pressure Sensor
  • Sensor Wiring Harness

Related codes

F.74

Your boiler has detected a problem with the sensor that monitors water pressure, meaning it cannot accurately tell if there is enough water in the system to run safely.

High Engineer only £140-£220

Parts commonly replaced

  • Water pressure sensor
  • Wiring harness

Related codes

F.75

Your boiler is unable to tell if its pump is running correctly, which means it has stopped working for your safety.

High DIY-safe £120-280

What to check first

  1. Check the pressure gauge and ensure it is between 1.0 and 1.5 bar
  2. If the pressure is too low, use the filling loop to top it up
  3. Press the 'Reset' button (flame symbol with a cross) once the pressure is correct

Parts commonly replaced

  • Water pressure sensor
  • Circulation pump
  • Expansion vessel (recharge or replace)

Related codes

F.76

Your boiler has shut down because a safety sensor has detected that the main heat exchanger is getting too hot.

High Engineer only £180-600

Parts commonly replaced

  • Overheat Safety Thermal Fuse
  • Primary Heat Exchanger
  • Main PCB

Related codes

F.77

Your boiler has detected an issue with the drainage system that removes leftover liquid from the exhaust pipe or a fault with the safety flap inside the flue.

High Engineer only £120-280

Parts commonly replaced

  • Condensate pump
  • Flue non-return flap
  • Wiring harness

Related codes

F.78

Your boiler is struggling to communicate with an external control box used for managing your hot water or heating zones, preventing it from functioning correctly.

High Engineer only £120-250

Parts commonly replaced

  • VR65 Wiring Centre
  • eBUS cable
  • Main PCB

Related codes

Showing 31–40 of 41
S.20

Your boiler is simply letting you know that the 'warm start' feature is active, which keeps a small amount of water pre-heated so you get hot water at your taps more quickly.

Low Engineer only
S.21

Your boiler is struggling to start the fan when you turn on your hot water taps, meaning the system cannot safely clear exhaust gases to begin heating.

High Engineer only £180-450

Parts commonly replaced

  • Fan Assembly
  • Printed Circuit Board (PCB)
  • Wiring Harness

Related codes

S.22

Your boiler has detected that hot water is being called for, but it believes the pump is running when it shouldn't be or there is a circulation issue preventing proper operation.

High Engineer only £180-450

Parts commonly replaced

  • Internal Pump
  • Main PCB
  • Flow Sensor

Related codes

S.23

Your boiler is having trouble lighting the flame when you turn on your hot water taps.

High Engineer only £120-£350

Parts commonly replaced

  • Ignition electrode
  • Flame sensor
  • Gas valve
  • Spark lead

Related codes

S.24

Your boiler is struggling to keep the flame lit while trying to heat your tap water, which usually means the system is cutting out during use.

High Engineer only £120-£350

Parts commonly replaced

  • Gas valve
  • Ignition lead
  • Electrode
  • Burner gasket

Related codes

S.25

Your boiler is temporarily cooling itself down after finishing a cycle for hot water.

Low DIY-safe £0-80

What to check first

  1. Check that at least one radiator or bypass valve is open to allow heat to dissipate
  2. Wait for the code to disappear naturally as the boiler settles
  3. Ensure there is enough water pressure shown on the digital display (1.0 to 1.5 bar)

Parts commonly replaced

  • None (Normal operation)
  • Pump (if code persists)
  • Diverter Valve

Related codes

S.34

Your boiler has paused operation because it believes the internal temperature is so low that the pipes are at risk of freezing.

High DIY-safe £90-180

What to check first

  1. Check that the room thermostat and radiator valves are turned up
  2. Ensure the boiler's power supply is constant and has not been switched off
  3. If the condensate pipe is outside, check if it is frozen and gently thaw it with warm water
  4. Wait 15-30 minutes for the boiler to warm up naturally before resetting

Parts commonly replaced

  • NTC Temperature Sensor
  • Condensate Trace Heater
  • PCB

Related codes

S.42

Your boiler has temporarily paused because a safety flap in the flue system is not providing the correct signal to allow the burner to start.

Medium Engineer only £120-250

Parts commonly replaced

  • Flue non-return flap
  • Flue gas sensor
  • Wiring harness

Related codes

S.53

Your boiler is pausing temporarily because it is struggling to circulate water quickly enough to keep the system cool.

Medium DIY-safe £100-350

What to check first

  1. Check that the boiler pressure is between 1.0 and 1.5 bar on the display
  2. Ensure all radiator valves (TRVs) are fully open to allow water flow
  3. Check that the blue isolation valves underneath the boiler are in the 'open' position

Parts commonly replaced

  • Central heating pump
  • Main heat exchanger (flushing/cleaning)
  • Pressure sensor

Related codes

Showing 41–41 of 41
S.54

Your boiler has temporarily paused operation because it detected a sudden rise in temperature and is waiting for the system to cool down or balance itself.

Low DIY-safe £0-120

What to check first

  1. Ensure all radiator valves (TRVs) are fully open to allow water to flow.
  2. Check that the boiler pressure is between 1.0 and 1.5 bar on the digital display.
  3. Check for any trapped air by bleeding your radiators.

Parts commonly replaced

  • External bypass valve
  • Central heating pump
  • Temperature sensors (NTC thermistors)

Related codes

87 operating states & engineer diagnostics

Not faults — these are normal operating states. Tap to expand.

d.0 Diagnostic This code is not a fault; it is simply a status message showing that your boiler is currently running at a lower power setting to maintain your chosen temperature efficiently. d.1 Diagnostic Your boiler is simply finishing a normal process where it circulates leftover heat away from the unit after the heating has turned off. d.2 Diagnostic Your boiler is currently in a waiting period to prevent it from switching on and off too frequently, which is a normal protective feature. d.3 Diagnostic Your boiler is currently monitoring the temperature of the water flowing to your taps to ensure it is heating correctly. d.4 Diagnostic This code is simply displaying the current temperature reading of the sensor responsible for your boiler's hot water pre-heat feature, rather than indicating an actual fault. d.5 Diagnostic This is not an error code, but rather a status display showing the current temperature setting the boiler is aiming for to heat your home or water. d.6 Diagnostic This code is not actually an error; it is simply showing you the temperature your boiler is currently set to reach for your hot water. d.7 Diagnostic This code is simply an information display showing the current temperature setting for your boiler's internal hot water storage feature, not a fault with your system. d.8 Diagnostic Your boiler is receiving a signal from your thermostat or heating controls to turn on, which is a normal status message rather than an actual fault. d.9 Diagnostic Your boiler is receiving an unusual signal from an external thermostat or control unit, meaning it is unsure what temperature to set for your heating. d.10 Diagnostic Your boiler is struggling to detect or operate the internal pump that moves hot water around your radiators. d.11 Diagnostic Your boiler is signalling that it is currently controlling or communicating with an external water pump rather than an internal error. d.12 Diagnostic Your boiler is struggling to send hot water to your separate hot water storage tank, meaning you might not have enough hot water for taps or showers. d.13 Diagnostic Your boiler is having trouble communicating with the external pump that helps circulate hot water around your home. d.17 Diagnostic Your boiler is struggling to correctly switch between providing heating for your radiators and heating your hot water. d.18 Diagnostic Your boiler is currently running a background test to check if the water pump is correctly detecting the flow of water returning through your heating system. d.19 Diagnostic Your boiler is simply indicating which speed setting the internal water pump is currently using to move heat around your home. d.20 Diagnostic Your boiler is currently reporting a setting limit for your hot water cylinder temperature, rather than a technical fault. d.22 Diagnostic Your boiler is simply showing that it has received a request to provide hot water to your taps or shower. d.23 Diagnostic Your boiler is currently monitoring or switching between the heating and hot water modes, and this code is simply a status update rather than an error. d.25 Diagnostic Your boiler is receiving a standard signal from your heating controls to prepare hot water, which is a normal part of the system's operation rather than a fault. d.27 Diagnostic Your boiler's internal control system is registering an issue with an external add-on component, such as a heating programmer or pump controller, which is preventing it from communicating correctly. d.28 Diagnostic Your boiler is signalling that an optional add-on device, such as an external pump or controller, is attempting to trigger, but this is an internal status message rather than a breakdown. d.30 Diagnostic Your boiler has detected an issue with the electrical signals controlling the gas supply, meaning it has safely shut itself down to prevent ignition. d.33 Diagnostic Your boiler is struggling to get the internal fan running at the required speed to safely vent gases, causing the unit to stop heating for your protection. d.34 Diagnostic Your boiler is struggling to detect that the internal fan is spinning at the correct speed, which prevents the unit from starting safely. d.35 Diagnostic Your boiler is struggling to switch between heating your radiators and heating your hot water taps, which means you may have no hot water or your radiators may not warm up properly. d.36 Diagnostic Your boiler is displaying a status reading of the water flow rate through your taps, rather than indicating a fault that requires immediate repair. d.40 Diagnostic This code is not actually an error; it is simply showing you the current temperature of the water flowing through your heating system. d.41 Diagnostic Your boiler is simply reporting the current temperature of the water returning to the system, which is a standard status update rather than a warning of a fault. d.44 Diagnostic Your boiler is having difficulty accurately detecting the flame inside, which is preventing it from staying lit reliably. d.47 Diagnostic Your boiler is simply displaying the current temperature reading from the outdoor sensor and is operating normally. d.50 Diagnostic Your boiler is displaying a background technical setting rather than a fault, meaning the system is likely operating normally but is showing you an internal status code. d.51 Diagnostic Your boiler is displaying a diagnostic setting that indicates it is struggling to regulate its internal fan speed correctly, which often points to a mismatch between the boiler's software settings and the physical hardware. d.58 Diagnostic Your boiler is currently working correctly and is simply communicating with your solar thermal system to let it know the water needs a little extra heat. d.60 Diagnostic Your boiler has repeatedly shut itself down as a safety precaution because it detected that the water inside it became significantly hotter than it should have. d.61 Diagnostic Your boiler is displaying a history log showing the number of times it has previously shut itself down due to a fault, rather than indicating a current active problem. d.64 Diagnostic This code is simply an information display showing the average time your boiler takes to ignite, rather than indicating a fault. d.65 Diagnostic Your boiler is struggling to light because the gas is not igniting quickly enough within the safety time limit. d.67 Diagnostic Your boiler is currently in a brief, automatic resting period to prevent it from switching on and off too frequently, and it will resume normal operation shortly. d.68 Diagnostic Your boiler is struggling to start on the first try, which means it may fail to ignite or shut down if it cannot get the burner going. d.69 Diagnostic Your boiler has failed to start up because it could not light the internal flame after trying twice. d.70 Diagnostic Your boiler is currently recalibrating the internal mechanism that switches heat between your radiators and your hot water tap. d.71 Diagnostic Your boiler is simply indicating that the heating temperature dial is currently turned to its maximum setting. d.72 Diagnostic Your boiler is currently running a routine check on the internal water pump after it has finished heating your water. d.73 Diagnostic Your boiler's internal memory has recorded a minor data setting mismatch regarding how it prepares your hot water, but the boiler is still operating normally. d.75 Diagnostic Your boiler is struggling to heat your hot water tank within a reasonable timeframe, meaning it has given up trying to ensure you have hot water. d.76 Diagnostic Your boiler is displaying a status code indicating that its internal settings do not match the specific model version installed, often occurring after a replacement part or control board update. d.77 Diagnostic Your boiler is currently adjusting its energy usage to ensure your hot water storage tank heats up efficiently. d.78 Diagnostic Your boiler has detected that the water inside the hot water storage tank is getting hotter than the safety limit allowed, so it has temporarily paused heating to prevent overheating. d.80 Diagnostic This code is simply an information display showing the total number of hours your boiler has spent actively heating your home, rather than an indication of a fault. d.81 Diagnostic This code is simply an information display showing the total number of hours your boiler has spent heating your hot water, rather than a fault with the appliance. d.82 Diagnostic Your boiler is repeatedly switching its burner on and off over a very short period rather than staying on to heat your home steadily. d.83 Diagnostic Your boiler is struggling to keep a steady temperature while heating your water, causing it to turn off and on repeatedly during use. d.84 Diagnostic Your boiler is simply reminding you that it is due for its annual scheduled service. d.90 Diagnostic Your boiler is simply displaying a status message indicating it is currently communicating with your external thermostat or smart control system, rather than reporting an actual fault. d.91 Diagnostic Your boiler is struggling to receive the automatic time signal from an external outdoor sensor, which is used to set the internal clock. d.93 Diagnostic Your boiler has lost its unique configuration settings, meaning it has 'forgotten' which specific model type it is and how it should operate. d.96 Diagnostic Your boiler is currently performing a factory reset or configuration process and is not experiencing a functional breakdown. d.97 Diagnostic Your boiler is currently showing a diagnostic screen used by engineers to check internal system settings, but this does not indicate an actual mechanical fault. S.0 Status Your boiler is currently in standby mode because it has not received a request for heating or hot water from your thermostat or taps. S.1 Status Your boiler is currently performing a standard internal start-up check, and this is a normal status message rather than a breakdown. S.2 Status Your boiler is simply circulating water through the system, which is a normal part of its routine operation. S.3 Status Your boiler is currently trying to light the flame to start heating your water, and this is a normal part of its startup process. S.4 Status Your boiler is operating normally and has successfully lit the flame to heat your water or radiators. S.5 Status Your boiler is currently going through its normal startup or shutdown process, so there is no need to worry as this is just a routine operation status. S.6 Status Your boiler is currently running its internal fan to clear out any leftover gases before shutting down, which is a normal safety process. S.7 Status Your boiler is simply finishing a standard cooling cycle and is not actually reporting a fault. S.8 Status Your boiler is perfectly fine and is simply taking a short, programmed break to prevent overheating before it starts the heating cycle again. S.10 Status Your boiler has detected that you have turned on a hot water tap and is currently working to provide hot water to your home. S.11 Status Your boiler is trying to heat your water, but the internal fan responsible for safety cannot get started. S.15 Status Your boiler is briefly keeping the internal pump and fan running to clear away excess heat after you have finished using hot water. S.16 Status Your boiler's fan is running for a short period after the burner has turned off to clear any leftover gases safely. S.17 Status Your boiler is currently cooling itself down by running the water pump after a heating cycle, which is a normal part of the system's operation. S.26 Status Your boiler is currently running its internal fan to cool down the system after finishing a cycle, which is a normal part of the shutdown process. S.27 Status Your boiler is currently cooling itself down by circulating water, which is a normal process and not an error. S.28 Status Your boiler is taking a short, programmed break to prevent the burner from starting and stopping too frequently while heating your water. S.30 Status Your boiler is working correctly but is currently in a 'waiting' state because your room thermostat is telling it that the house is already warm enough. S.31 Status Your boiler is currently set to only provide hot water and is ignoring your request for central heating. S.32 Status Your boiler is temporarily pausing because the internal fan is not spinning at the correct speed needed to safely light the burner. S.36 Status Your boiler is currently in standby mode because it is not receiving a signal from your thermostat to turn the heating on. S.41 Status Your boiler has too much water in the system, causing the pressure to rise to a level that is higher than recommended for safe operation. S.52 Status Your boiler has detected that the internal water pressure is too high, which can cause it to stop working to protect the system from damage. S.96 Status Your boiler is currently running a routine internal self-check on its water temperature sensors and has temporarily paused your heating or hot water to complete this process. S.97 Status Your boiler is currently performing a routine internal safety check on its water pressure system, so it is temporarily pausing your heating and hot water. S.98 Status Your boiler is currently performing an internal health check to make sure its temperature sensors are reading correctly before it restarts. S13 Status Your boiler is struggling to light properly when you turn on your hot water taps.

Avoid the next call-out bill

Monthly cover means no unexpected bills when your boiler breaks down.

Approved partner
Domestic Appliance Guard
Unlimited call-outs, 24/7 helpline, no price-hike promise
Get a quote →

Affiliate links. We may earn a commission at no extra cost to you.