           {
           is3.refTempC16 = (is3.targetTempC + offset) << 4;
           // Where adjusted reference temperature is (well) below target, valve should be driven on.
-          ModelledRadValveState rs3a;
+          OTRadValve::ModelledRadValveState rs3a;
           valvePCOpen = 0;
           rs3a.tick(valvePCOpen, is3);
 //DEBUG_SERIAL_PRINT('@');

  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);



// Test for general sanity of computation of desired valve position.
// In particular test the logic in ModelledRadValveState for extreme positions.
static void testMRVSExtremes()
  {
  Serial.println("MRVSExtremes");
  // Test that if the real temperature is zero
  // and the initial valve position is anything less than 100%
  // that after one tick (with mainly defaults)
