anchor.diff:                {disable_fast_receive, true},
                 {membership_strategy, partisan_full_membership_strategy}],
   
  -    %% Initialize a cluster.
  -    Nodes = ?SUPPORT:start(prop_partisan,
  -                           Config,
  -                           [{partisan_peer_service_manager, ?MANAGER},
  -                           {num_nodes, ?TEST_NUM_NODES},
  -                           {cluster_nodes, ?CLUSTER_NODES}]),
  -
  -    lager:info("~p: ~p started nodes: ~p", [?MODULE, Self, Nodes]),
  +    debug("running nodes: ~p~n", [nodes()]),
  +    RunningNodes = nodes(),
  +
  +    %% Get the running nodes that epmd things are running.
  +    EpmdOutput = os:cmd("epmd -names"),
  +
  +    %% Cluster and start options.
  +    Options = [{partisan_peer_service_manager, ?MANAGER}, 
  +                {num_nodes, ?TEST_NUM_NODES}, 
  +                {cluster_nodes, ?CLUSTER_NODES}],
  +
  +    Nodes = case RunningNodes =/= [] andalso not restart_nodes() of 
  +        false ->
  +            debug("starting instances, restart_nodes => ~p", [restart_nodes()]),
  +
  +            %% If there are running nodes and we don't want to restart them.
  +            case RunningNodes of 
  +                [] ->
  +                    debug("starting nodes for initial run.", []);
  +                _ ->
  +                    ok
  +            end,
  +
  +            %% Nuke epmd first.
  +            % [] = os:cmd("pkill -9 epmd"),
  +
  +            %% Initialize a cluster.
  +            Nodes1 = ?SUPPORT:start(prop_partisan, Config, Options),
  +
  +            %% Create an ets table for test configuration.
  +            ?MODULE = ets:new(?MODULE, [named_table]),
  +
  +            %% Insert all nodes into group for all nodes.
  +            true = ets:insert(?MODULE, {nodes, Nodes1}),
  +
  +            %% Insert name to node mappings for lookup.
  +            %% Caveat, because sometimes we won't know ahead of time what FQDN the node will
  +            %% come online with when using partisan.
  +            lists:foreach(fun({Name, Node}) ->
  +                true = ets:insert(?MODULE, {Name, Node})
  +            end, Nodes1),
  +
  +            debug("~p started nodes: ~p, restart_nodes: ~p, running_nodes; ~p", [Self, Nodes1, restart_nodes(), RunningNodes]),
  +
  +            Nodes1;
  +        true ->
  +            debug("not starting instances, restart_nodes => ~p, running_nodes; ~p", [restart_nodes(), RunningNodes]),
  +
  +            %% Get nodes.
  +            [{nodes, Nodes1}] = ets:lookup(prop_partisan, nodes),
  +
  +            %% Restart Partisan.
  +            lists:foreach(fun({ShortName, _}) ->
  +                ok = rpc:call(?NAME(ShortName), application, stop, [partisan]),
  +                {ok, _} = rpc:call(?NAME(ShortName), application, ensure_all_started, [partisan])
  +            end, Nodes1),
  +
  +            debug("Reclustering nodes.", []),
  +            lists:foreach(fun(Node) -> ?SUPPORT:cluster(Node, Nodes1, Options, Config) end, Nodes1),
  +
  +            debug("~p reusing nodes: ~p", [Self, Nodes1]),
  +
  +            Nodes1
  +    end,
  +
  +    debug("before start, epmd though the following: ~p~n", [EpmdOutput]),
   
       %% Deterministically seed the random number generator.
       partisan_config:seed(),
  
positive.code:         default ->
              ?FORALL(Cmds, commands(?MODULE), 
                  begin
                      start_nodes(),
                      node_begin_case(),
                      {History, State, Result} = run_commands(?MODULE, Cmds), 
                      node_end_case(),
  
negative.code:         single_success ->
              ?FORALL(Cmds, single_success_commands(?MODULE), 
                  begin
                      start_or_reload_nodes(),
                      node_begin_case(),
                      {History, State, Result} = run_commands(?MODULE, Cmds), 
                      node_end_case(),
  