process Pre(&Stored, &Delayed : FailureType, S : BType, &env : Flows) is
   states s0
   from s0 select
      on (Stored != env.I and S = Empty); wait [0,0]; Stored := env.I; $\ldots$
   [] on (S = Full); wait [a,b]; Delayed := Stored; S := Empty; $\ldots$
   end
   
process delay[go : in FailureType](&O : FailureType) is
   states sEmpty, sFull
   var delayed : FailureType := Ok
   from sEmpty go?delayed; to sFull
   from sFull  wait [a,b]; O := delayed; to sEmpty

process front[p,q : out FailureType](&I : FailureType) is
   states s
   var stored : FailureType := Ok
   from s on (I != stored); stored := I; select p!I [] q!I end; loop
   
component Pre_2(&I, &O: FailureType) is
   port go1, go2 : FailureType in [0,0]
   priority go1 > go2
   par * in front[go1,go2](&I) || delay[go1](&O) || delay[go2](&O) end