   @spec fork(pid | atom, root :: atom | boolean) :: ITC.t
   def fork(server), do: fork(server, false)
 
-  defcall fork(root), state: State[clock: clock, children: c] = state do
+  defcall fork(root), state: State[clock: clock] = state do
+    state = ensure_children(state)
+
     {new_clock, channel_clock} = ITC.fork(clock)
     {:ok, channel} = :supervisor.start_child(Genomu.Sup.Channels, [root, self, channel_clock])
     Process.monitor(channel)
-    :ets.insert(c, [{channel, channel_clock},
-                    {channel_clock, channel}])
+    :ets.insert(state.children,
+                [{channel, channel_clock},
+                 {channel_clock, channel}])
     state = state.clock(new_clock)
     {:reply, {:ok, channel}, state}
   end

    state.clock(clock).memoize(key)
  end

end
  end

  def init({root, parent, clock}) do
    {:ok, State.new(root: root, parent: parent, clock: clock)}
  end

  @spec clock(pid | atom) :: ITC.t
