anchor.diff:      gen_server_info(#state{}).
   
   handle_info({'DOWN', MRef, process, _Pid, _Reason}, State) ->
  -    #state{apps=Apps} = State,
  +    #state{apps=Apps, servers=Servers} = State,
       case lists:keyfind(MRef, 2, Apps) of
           {{AppId, Ref}, _} -> 
               {reply, _, State1} = handle_call({stop, AppId, Ref}, none, State),
               {noreply, State1};
           false ->
  -            {noreply, State}
  +            case lists:keytake(MRef, 4, Servers) of
  +                false ->
  +                    {noreply, State};
  +                {value, {Ref, _WebApps, _WebPid, MRef}, Rest} ->
  +                    lager:warning("Web server ~p has failed!", [Ref]),
  +                    {noreply, State#state{servers=Rest}}
  +            end
       end.
   
   
  
positive.code:     case lists:keytake(Ref, 1, Servers) of
          false ->
              {reply, {error, not_found}, State};
          {value, {_, WApps, WPid}, Rest} ->
              Apps1 = case lists:keytake({AppId, Ref}, 1, Apps) of
                  false -> Apps;
                  {value, {_, Mon}, RestApps} -> erlang:demonitor(Mon), RestApps
              end,
              State1 = State#state{apps=Apps1},
              case lists:member(AppId, WApps) of
                  true ->
                      case WApps -- [AppId] of
                          [] ->
                              Reply = do_stop_server(Ref),
                              {reply, Reply, State1#state{servers=Rest}};
                          WApps1 ->
                              Servers1 = [{Ref, WApps1, WPid}|Rest],
                              {reply, ok, State1#state{servers=Servers1}}
                      end;
                  false ->
  
negative.code:             case lists:keytake(Ref, 1, Servers) of
                  false ->
                      case do_start_server(Ref, Disp, Opts) of
                          {ok, WebPid} ->
                              AppMon = erlang:monitor(process, AppPid),
                              Apps1 = [{{AppId, Ref}, AppMon}|Apps],
                              State1 = State#state{apps=Apps1},
                              % We will receive a {webserver_started, _, _} msg
                              {reply, {ok, WebPid}, State1};
                          {error, Error} ->
                              {reply, {error, Error}, State}
                      end;
                  {value, {_, WebApps, WebPid, WebMon}, Rest} ->
                      case lists:member(AppId, WebApps) of
                          true -> 
                              {reply, {error, already_started}, State};
                          false ->
                              Servers1 = [{Ref, [AppId|WebApps], WebPid, WebMon}|Rest],
                              AppMon = erlang:monitor(process, AppPid),
                              Apps1 = [{{AppId, Ref}, AppMon}|Apps],
                              State1 = State#state{servers=Servers1, apps=Apps1},
                              {reply, {ok, WebPid}, State1}
                      end
              end;
          undefined ->
  