anchor.diff:  -type object_generator_fun() :: fun(() -> binary()).
   -type object_processor_fun() :: fun((binary()) -> term()).
   
  --record(migration_worker, { %% Supervisor module that knows how to start workers
  -                            supervisor :: atom(),
  -                            %% fun that retrieves identifier for next
  +-record(migration_worker, { %% fun that retrieves identifier for next
                               %% object to run through worker
                               next_object_generator :: object_generator_fun(),
                               %% Processor function for generic workers
  
positive.code:             %% Stop and wait for workers to end.
              {next_state, halting, State#state {objects_remaining = 0}, 0};
          [Object] ->
              start_worker(SupMod, Object, State);
          Object ->
              start_worker(SupMod, Object, State)
      end.
  
  working({start, _, _, _, _}, _From, State) ->
      {reply, {error, busy_now}, halting, State}.
  
  
  start_worker(SupMod, Object, #state{live_worker_count = LW,
                                       objects_remaining = OR,
                                       acct_info = AcctInfo,
                                       worker = #migration_worker{supervisor = SupMod,
                                                                  processor_fun = Fun,
                                                                  callback_module = Mod}} = State) ->
      InitialState = call_if_exported(Mod,migration_start_worker_args,[Object, AcctInfo, Fun],  fun default_worker_args/3),
      case apply(Mod:supervisor(), start_worker, [Mod | InitialState]) of
  
negative.code: -export([ ping/0,
            start_link/0,
            migrate/2,
            migrate/3,
            migrate_next/0,
            migrate_next/1,
            migrate_user_password_storage/2,
            status/0,
            halt_actions/0,
  