   // and also test that the fully-open state is reached in a bounded number of ticks ie bounded time.
   static const int maxFullTravelMins = 25;
 //  DEBUG_SERIAL_PRINTLN_FLASHSTRING("open...");
-  ModelledRadValveInputState is0(0);
-  is0.targetTempC = OTV0P2BASE::randRNG8NextBoolean() ? FROST : WARM;
-  ModelledRadValveState rs0;
+  OTRadValve::ModelledRadValveInputState is0(0);
+  is0.targetTempC = OTV0P2BASE::randRNG8NextBoolean() ? 5 : 25;
+  OTRadValve::ModelledRadValveState rs0;
   const uint8_t valvePCOpenInitial0 = OTV0P2BASE::randRNG8() % 100;
   volatile uint8_t valvePCOpen = valvePCOpenInitial0;
   for(int i = maxFullTravelMins; --i >= 0; ) // Must fully open in reasonable time.

  AssertIsEqual(0, valvePCOpen);
  AssertIsEqual(valvePCOpenInitial1, rs1.cumulativeMovementPC);
  AssertIsTrue(hitLinger == lookForLinger);
  if(lookForLinger) { AssertIsTrue(lingerMins >= min(is1.minPCOpen, DEFAULT_MAX_RUN_ON_TIME_M)); }
  // Filtering should not have been engaged and velocity should be zero (temperature is flat).
  for(int i = ModelledRadValveState::filterLength; --i >= 0; ) { AssertIsEqual(100<<4, rs1.prevRawTempC16[i]); }
  AssertIsEqual(100<<4, rs1.getSmoothedRecent());
//  AssertIsEqual(0, rs1.getVelocityC16PerTick());
  AssertIsTrue(!rs1.isFiltering);

          {
          // Below the half way mark the valve should always be opened (from off), soft setback or not.
          is3.refTempC16 = (is3.targetTempC << 4) + 0x4;
          OTRadValve::ModelledRadValveState rs3c;
          valvePCOpen = 0;
          rs3c.tick(valvePCOpen, is3);
          AssertIsTrue(valvePCOpen > 0);
          // Above the half way mark the valve should only be opened without soft setback.
          is3.refTempC16 = (is3.targetTempC << 4) + 0xc;
          OTRadValve::ModelledRadValveState rs3d;
          valvePCOpen = 0;
          rs3d.tick(valvePCOpen, is3);
#if 1 /* TODO-453: drift down soft by default */
