anchor.diff:  
      spawn(fun() ->
               f18A:reset(F18A),
  -            f18A:step (F18A,wait),
  -            f18A:stop (F18A,wait),
  +            f18A:go   (F18A,wait),
               M ! { n001,stopped }
            end),
            
  -   wait({n000,stopped}),
  -   wait({n001,stopped}),
  -
  -   Trace = trace:stop(),
  -
  -   ?assertEqual(ok,verify:compare(?WRITE,trace:extract(Trace,n001),noprint)).
  -
  -read_stop_test() ->
  -   log:info(?TAG,"-- READ STOP TEST"),
  +   check(waitall([{n000,stopped},{n001,stopped}]),
  +         [ { ?WRITE,n001 }
  +         ]).
  +
  +write_step_test() ->
  +   M = setup("-- WRITE TEST/STEP"),
  +   util:unregister(n000),
  +   util:unregister(n001),
  +
  +   F18A = f18A:create(n001,n000,[{write,678}]),
  +   
  +   register(n000,spawn(fun() ->
  +                          wait({ n001,write,678 }),
  +                          n001 ! { n000,read,ok },
  +                          M ! { n000,stopped }
  +                       end)),
  +
  +   spawn(fun() ->
  +            f18A:reset(F18A),
  +            f18A:step (F18A,wait),
  +            f18A:step (F18A,wait),
  +            M ! { n001,stopped }
  +         end),
  +         
  +   check(waitall([{n000,stopped},{n001,stopped}]),
  +         [ { ?WRITE,n001 }
  +         ]).
  +
  +read_stop_go_test() ->
  +   setup("-- READ STOP TEST/GO"),
  +   F18A = f18A:create(n001,n000,[nop,read,nop,nop,nop]),
  +   f18A:reset(F18A),
  +   f18A:go   (F18A),
  +   f18A:stop (F18A,wait),
  +
  +   check(waitall([]),
  +         [ { ?READ_STOP,n001 }
  +         ]).
  +
  +read_stop_step_test() ->
  +   log:info(?TAG,"-- READ STOP TEST/STEP"),
      trace:stop (),
      trace:start(),
      F18A = f18A:create(n001,n000,[nop,read,nop,nop,nop]),
  
positive.code:                           M    ! { n000,stopped }
                         end)),
     
     wait({n000,stopped}),
     wait({n001,stopped}),
  
     Trace = trace:stop(),
  
     ?assertEqual(ok,verify:compare(?READ,trace:extract(Trace,n001),noprint)).
  
  write_test() ->
     log:info   (?TAG,"-- WRITE TEST"),
     util:unregister(n000),
     util:unregister(n001),
     trace:stop (),
     trace:start(),
  
     M    = self(),
     F18A = f18A:create(n001,n000,[{write,678}]),
     
     register(n000,spawn(fun() ->
  
negative.code:    f18A:step (F18A),
     f18A:stop (F18A,wait),
  
     check(waitall([]),
           [ { ?WRITE_STOP,n001 }
           ]).
  
  readwrite_go_test() ->
     M = setup("-- READ-WRITE TEST/GO"),
  
     spawn(fun() ->
        F18A = f18A:create(n001,n002,[read,nop,nop,nop]),
        f18A:reset(F18A),
        f18A:go   (F18A,wait),
        M ! { n001,stopped }
        end),
  
     spawn(fun() ->
        F18A = f18A:create(n002,n001,[nop,nop,{write,135},nop]),
        f18A:reset(F18A),
        f18A:go   (F18A,wait),
        M ! { n002,stopped }
        end),
        
     check(waitall([{n001,stopped},{n002,stopped}]),
           [ { ?READWRITE1,n001 },
             { ?READWRITE2,n002 }
           ]).
  
  readwrite_step_test() ->
     M = setup("-- READ-WRITE TEST/STEP"),
  
     spawn(fun() ->
        F18A = f18A:create(n001,n002,[read,nop,nop,nop]),
        f18A:reset(F18A),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        M ! { n001,stopped }
        end),
  
     spawn(fun() ->
        F18A = f18A:create(n002,n001,[nop,nop,{write,135},nop]),
        f18A:reset(F18A),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        M ! { n002,stopped }
        end),
        
     check(waitall([{n001,stopped},{n002,stopped}]),
           [ { ?READWRITE1,n001 },
             { ?READWRITE2,n002 }
           ]).
  
  writeread_go_test() ->
     M = setup("-- WRITE-READ TEST/GO"),
  
     spawn(fun() ->
        F18A = f18A:create(n001,n002,[nop,nop,read,nop]),
        f18A:reset(F18A),
        f18A:go   (F18A,wait),
        M ! { n001,stopped } 
        end),
  
     spawn(fun() ->
        F18A = f18A:create(n002,n001,[{write,135},nop,nop,nop]),
        f18A:reset(F18A),
        f18A:go   (F18A,wait),
        M ! { n002,stopped } 
        end),
        
     check(waitall([{n001,stopped},{n002,stopped}]),
          [ { ?WRITEREAD1,n001 },
            { ?WRITEREAD2,n002 }
          ]).
  
  writeread_step_test() ->
     M = setup("-- WRITE-READ TEST/STEP"),
  
     spawn(fun() ->
        F18A = f18A:create(n001,n002,[nop,nop,read,nop]),
        f18A:reset(F18A),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        M ! { n001,stopped } 
        end),
  
     spawn(fun() ->
        F18A = f18A:create(n002,n001,[{write,135},nop,nop,nop]),
        f18A:reset(F18A),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        f18A:step (F18A,wait),
        M ! { n002,stopped } 
        end),
        
     check(waitall([{n001,stopped},{n002,stopped}]),
          [ { ?WRITEREAD1,n001 }, 
            { ?WRITEREAD2,n002 } 
          ]).
  
  %% UTILILITY FUNCTIONS
  
  setup(TestName) ->
     log:info(?TAG,TestName),
     trace:stop (),
     trace:start(),
     self().
  
  check(_Trace,[]) ->
     ok;
  
  check(Trace,[{Expected,ID}|T]) ->
     ?assertEqual(ok,verify:compare(Expected,trace:extract(Trace,ID),noprint)),
     check(Trace,T).
  
  waitall([]) ->
     trace:stop();
  
  waitall([H|T]) ->
     wait(H),
     waitall(T).
  
  wait(X) ->
     receive 
  