anchor.diff:      {reply, {ok, WorkerPid}, State#state{worker_pids = NewChildren}};
   
   handle_call({checkin, WorkerPid}, _From, #state{num_of_children = NumOfChildren,
  -                                                num_overflow = NumOverflow,
  +                                                worker_mod  = WorkerMod,
                                                   worker_pids = Children} = State) ->
       case length(Children) >= NumOfChildren of
           true ->
  -            {reply, ok, State#state{num_overflow = NumOverflow + 1}};
  +            % send stop
  +            % actual stop process will happend at handle_info with DOWN
  +            WorkerMod:stop(WorkerPid);
           false ->
  -            NewChildren = [WorkerPid|Children],
  -            {reply, ok, State#state{worker_pids = NewChildren}}
  -    end;
  +            void
  +    end,
  +    NewChildren = [WorkerPid|Children],
  +    {reply, ok, State#state{worker_pids = NewChildren}};
   
   handle_call(status, _From, #state{num_of_children = NumOfChildren,
                                     max_overflow = MaxOverflow,
  
positive.code: 
  %% @doc gen_server callback - Module:handle_info(Info, State) -> Result
  %%
  handle_info({'DOWN', MonitorRef, _Type, Pid, _Info}, #state{worker_mod  = WorkerMod,
                                                              worker_args = WorkerArgs,
                                                              worker_pids = ChildPids} = State) ->
      true = erlang:demonitor(MonitorRef),
  
      ChildPids1 = lists:delete(Pid, ChildPids),
      ChildPids2 = case start_child(WorkerMod, WorkerArgs) of
                       {ok, ChildPid} ->
                           [ChildPid|ChildPids1];
                       _ ->
                           ChildPids1
                   end,
      {noreply, State#state{worker_pids = ChildPids2}};
  
  handle_info(_Info, State) ->
      {noreply, State}.
  
negative.code: %% @doc gen_server callback - Module:handle_cast(Request, State) -> Result
  %%
  handle_cast({checkin_async, WorkerPid}, #state{num_of_children = NumOfChildren,
                                                 worker_mod  = WorkerMod,
                                                 worker_pids = Children} = State) ->
      case length(Children) >= NumOfChildren of
          true ->
              % send stop
              % actual stop process will happend at handle_info with DOWN
              WorkerMod:stop(WorkerPid);
          false ->
              void
      end,
      NewChildren = [WorkerPid|Children],
      {noreply, State#state{worker_pids = NewChildren}};
  
  handle_cast(_, State) ->
      {noreply, State}.
  