diff --git a/metropolis/node/core/cluster/BUILD.bazel b/metropolis/node/core/cluster/BUILD.bazel
index a3e2593..948b9ae 100644
--- a/metropolis/node/core/cluster/BUILD.bazel
+++ b/metropolis/node/core/cluster/BUILD.bazel
@@ -17,6 +17,7 @@
         "//metropolis/node/core/localstorage:go_default_library",
         "//metropolis/node/core/network:go_default_library",
         "//metropolis/pkg/event:go_default_library",
+        "//metropolis/pkg/event/memory:go_default_library",
         "//metropolis/pkg/pki:go_default_library",
         "//metropolis/pkg/supervisor:go_default_library",
         "//metropolis/proto/api:go_default_library",
diff --git a/metropolis/node/core/cluster/manager.go b/metropolis/node/core/cluster/manager.go
index 874d3ae..eede40f 100644
--- a/metropolis/node/core/cluster/manager.go
+++ b/metropolis/node/core/cluster/manager.go
@@ -30,6 +30,7 @@
 	"source.monogon.dev/metropolis/node/core/localstorage"
 	"source.monogon.dev/metropolis/node/core/network"
 	"source.monogon.dev/metropolis/pkg/event"
+	"source.monogon.dev/metropolis/pkg/event/memory"
 	"source.monogon.dev/metropolis/pkg/supervisor"
 	apb "source.monogon.dev/metropolis/proto/api"
 	ppb "source.monogon.dev/metropolis/proto/private"
@@ -132,7 +133,7 @@
 type Manager struct {
 	storageRoot    *localstorage.Root
 	networkService *network.Service
-	status         event.MemoryValue
+	status         memory.Value
 
 	state
 
diff --git a/metropolis/node/core/network/BUILD.bazel b/metropolis/node/core/network/BUILD.bazel
index 10378c1..489f1d4 100644
--- a/metropolis/node/core/network/BUILD.bazel
+++ b/metropolis/node/core/network/BUILD.bazel
@@ -10,6 +10,7 @@
         "//metropolis/node/core/network/dhcp4c/callback:go_default_library",
         "//metropolis/node/core/network/dns:go_default_library",
         "//metropolis/pkg/event:go_default_library",
+        "//metropolis/pkg/event/memory:go_default_library",
         "//metropolis/pkg/supervisor:go_default_library",
         "@com_github_google_nftables//:go_default_library",
         "@com_github_google_nftables//expr:go_default_library",
diff --git a/metropolis/node/core/network/main.go b/metropolis/node/core/network/main.go
index 9284b30..49ace2e 100644
--- a/metropolis/node/core/network/main.go
+++ b/metropolis/node/core/network/main.go
@@ -33,6 +33,7 @@
 	dhcpcb "source.monogon.dev/metropolis/node/core/network/dhcp4c/callback"
 	"source.monogon.dev/metropolis/node/core/network/dns"
 	"source.monogon.dev/metropolis/pkg/event"
+	"source.monogon.dev/metropolis/pkg/event/memory"
 	"source.monogon.dev/metropolis/pkg/supervisor"
 )
 
@@ -53,7 +54,7 @@
 	natTable            *nftables.Table
 	natPostroutingChain *nftables.Chain
 
-	status event.MemoryValue
+	status memory.Value
 }
 
 func New() *Service {
diff --git a/metropolis/pkg/event/BUILD.bazel b/metropolis/pkg/event/BUILD.bazel
index 4e3b33c..0217c8a 100644
--- a/metropolis/pkg/event/BUILD.bazel
+++ b/metropolis/pkg/event/BUILD.bazel
@@ -1,20 +1,8 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
 
 go_library(
     name = "go_default_library",
-    srcs = [
-        "event.go",
-        "memory_value.go",
-    ],
+    srcs = ["event.go"],
     importpath = "source.monogon.dev/metropolis/pkg/event",
     visibility = ["//visibility:public"],
 )
-
-go_test(
-    name = "go_default_test",
-    srcs = [
-        "example_test.go",
-        "memory_value_test.go",
-    ],
-    embed = [":go_default_library"],
-)
diff --git a/metropolis/pkg/event/memory/BUILD.bazel b/metropolis/pkg/event/memory/BUILD.bazel
new file mode 100644
index 0000000..4ba79d2
--- /dev/null
+++ b/metropolis/pkg/event/memory/BUILD.bazel
@@ -0,0 +1,19 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
+
+go_library(
+    name = "go_default_library",
+    srcs = ["memory.go"],
+    importpath = "source.monogon.dev/metropolis/pkg/event/memory",
+    visibility = ["//visibility:public"],
+    deps = ["//metropolis/pkg/event:go_default_library"],
+)
+
+go_test(
+    name = "go_default_test",
+    srcs = [
+        "example_test.go",
+        "memory_test.go",
+    ],
+    embed = [":go_default_library"],
+    deps = ["//metropolis/pkg/event:go_default_library"],
+)
diff --git a/metropolis/pkg/event/example_test.go b/metropolis/pkg/event/memory/example_test.go
similarity index 91%
rename from metropolis/pkg/event/example_test.go
rename to metropolis/pkg/event/memory/example_test.go
index 3cdc661..a119666 100644
--- a/metropolis/pkg/event/example_test.go
+++ b/metropolis/pkg/event/memory/example_test.go
@@ -14,24 +14,26 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package event
+package memory
 
 import (
 	"context"
 	"fmt"
 	"net"
 	"time"
+
+	"source.monogon.dev/metropolis/pkg/event"
 )
 
 // NetworkStatus is example data that will be stored in a Value.
 type NetworkStatus struct {
 	ExternalAddress net.IP
-	DefaultGateway net.IP
+	DefaultGateway  net.IP
 }
 
 // NetworkStatusWatcher is a typesafe wrapper around a Watcher.
 type NetworkStatusWatcher struct {
-	watcher Watcher
+	watcher event.Watcher
 }
 
 // Get wraps Watcher.Get and performs type assertion.
@@ -48,7 +50,7 @@
 // communicating the newest information about a machine's network configuration
 // to consumers/watchers.
 type NetworkService struct {
-	Provider MemoryValue
+	Provider Value
 }
 
 // Watch is a thin wrapper around Value.Watch that returns the typesafe
@@ -66,23 +68,23 @@
 func (s *NetworkService) Run(ctx context.Context) {
 	s.Provider.Set(NetworkStatus{
 		ExternalAddress: nil,
-		DefaultGateway: nil,
+		DefaultGateway:  nil,
 	})
 
 	select {
-	case <-time.After(100*time.Millisecond):
+	case <-time.After(100 * time.Millisecond):
 	case <-ctx.Done():
-			return
+		return
 	}
 
 	fmt.Printf("NS: Got DHCP Lease\n")
 	s.Provider.Set(NetworkStatus{
 		ExternalAddress: net.ParseIP("203.0.113.24"),
-		DefaultGateway: net.ParseIP("203.0.113.1"),
+		DefaultGateway:  net.ParseIP("203.0.113.1"),
 	})
 
 	select {
-	case <-time.After(100*time.Millisecond):
+	case <-time.After(100 * time.Millisecond):
 	case <-ctx.Done():
 		return
 	}
@@ -90,7 +92,7 @@
 	fmt.Printf("NS: DHCP Address changed\n")
 	s.Provider.Set(NetworkStatus{
 		ExternalAddress: net.ParseIP("203.0.113.103"),
-		DefaultGateway: net.ParseIP("203.0.113.1"),
+		DefaultGateway:  net.ParseIP("203.0.113.1"),
 	})
 
 	time.Sleep(100 * time.Millisecond)
@@ -136,4 +138,3 @@
 	// NS: DHCP Address changed
 	// /etc/hosts: foo.example.com is now 203.0.113.103
 }
-
diff --git a/metropolis/pkg/event/memory_value.go b/metropolis/pkg/event/memory/memory.go
similarity index 78%
rename from metropolis/pkg/event/memory_value.go
rename to metropolis/pkg/event/memory/memory.go
index adf412d..1e94a93 100644
--- a/metropolis/pkg/event/memory_value.go
+++ b/metropolis/pkg/event/memory/memory.go
@@ -14,46 +14,49 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package event
+package memory
 
 import (
 	"context"
 	"fmt"
 	"sync"
+
+	"source.monogon.dev/metropolis/pkg/event"
 )
 
 var (
-	// Type assert that *MemoryValue implements Value. We do this artificially, as
+	// Type assert that *Value implements Value. We do this artificially, as
 	// there currently is no code path that needs this to be strictly true. However,
 	// users of this library might want to rely on the Value type instead of
 	// particular Value implementations.
-	_ Value = &MemoryValue{}
+	_ event.Value = &Value{}
 )
 
-// MemoryValue implements a Value stored in memory. It is safe to construct an
-// empty object of this type. However, this must not be copied.
-type MemoryValue struct {
+// Value is a 'memory value', which implements a event.Value stored in memory.
+// It is safe to construct an empty object of this type. However, this must not
+// be copied.
+type Value struct {
 	// mu guards the inner, innerSet and watchers fields.
 	mu sync.RWMutex
-	// inner is the latest data Set on the MemoryValue. It is used to provide
-	// the newest version of the Set data to new Watchers.
+	// inner is the latest data Set on the Value. It is used to provide the
+	// newest version of the Set data to new watchers.
 	inner interface{}
 	// innerSet is true when inner has been Set at least once. It is used to
 	// differentiate between a nil and unset value.
 	innerSet bool
 	// watchers is the list of watchers that should be updated when new data is
-	// Set. It will grow on every .Watch() and shrink any time a Watcher is
+	// Set. It will grow on every .Watch() and shrink any time a watcher is
 	// determined to have been closed.
-	watchers []*MemoryWatcher
+	watchers []*watcher
 
-	// Sync, if set to true, blocks all .Set() calls on the MemoryValue until
-	// all Watchers derived from it actively .Get() the new value. This can be
-	// used to ensure Watchers always receive a full log of all Set() calls.
+	// Sync, if set to true, blocks all .Set() calls on the Value until all
+	// Watchers derived from it actively .Get() the new value. This can be used
+	// to ensure Watchers always receive a full log of all Set() calls.
 	//
 	// This must not be changed after the first .Set/.Watch call.
 	//
 	// This is an experimental API and subject to change. It might be migrated
-	// to per-Watcher settings defined within the main Value/Watcher
+	// to per-Watcher settings defined within the main event.Value/Watcher
 	// interfaces.
 	Sync bool
 }
@@ -61,18 +64,18 @@
 // Set updates the Value to the given data. It is safe to call this from
 // multiple goroutines, including concurrently.
 //
-// For more information about guarantees, see Value.Set.
-func (m *MemoryValue) Set(val interface{}) {
+// For more information about guarantees, see event.Value.Set.
+func (m *Value) Set(val interface{}) {
 	m.mu.Lock()
 	defer m.mu.Unlock()
 
-	// Update the data that is provided on first Get() to Watchers.
+	// Update the data that is provided on first Get() to watchers.
 	m.inner = val
 	m.innerSet = true
 
 	// Go through all watchers, updating them on the new value and filtering out
 	// all closed watchers.
-	newWatchers := make([]*MemoryWatcher, 0, len(m.watchers))
+	newWatchers := make([]*watcher, 0, len(m.watchers))
 	for _, w := range m.watchers {
 		w := w
 		if w.closed() {
@@ -84,15 +87,15 @@
 	m.watchers = newWatchers
 }
 
-// MemoryWatcher implements the Watcher interface for watchers returned by
-// MemoryValue.
-type MemoryWatcher struct {
+// watcher implements the event.Watcher interface for watchers returned by
+// Value.
+type watcher struct {
 	// activeReqC is a channel used to request an active submission channel
 	// from a pending Get function, if any.
 	activeReqC chan chan interface{}
 	// deadletterSubmitC is a channel used to communicate a value that
 	// attempted to be submitted via activeReqC. This will be received by the
-	// deadletter worker of this Watcher and passed on to the next .Get call
+	// deadletter worker of this watcher and passed on to the next .Get call
 	// that occurs.
 	deadletterSubmitC chan interface{}
 
@@ -101,29 +104,29 @@
 	// active. It is implemented as a channel to permit concurrent .Get() calls
 	// to error out instead of blocking.
 	getSem chan struct{}
-	// close is a channel that is closed when this Watcher is itself Closed.
+	// close is a channel that is closed when this watcher is itself Closed.
 	close chan struct{}
 }
 
 // Watch retrieves a Watcher that keeps track on the version of the data
 // contained within the Value that was last seen by a consumer.
 //
-// For more information about guarantees, see Value.Watch.
-func (m *MemoryValue) Watch() Watcher {
-	waiter := &MemoryWatcher{
+// For more information about guarantees, see event.Value.Watch.
+func (m *Value) Watch() event.Watcher {
+	waiter := &watcher{
 		activeReqC:        make(chan chan interface{}),
 		deadletterSubmitC: make(chan interface{}),
 		close:             make(chan struct{}),
 		getSem:            make(chan struct{}, 1),
 	}
 	// Start the deadletter worker as a goroutine. It will be stopped when the
-	// Watcher is Closed() (as signaled by the close channel).
+	// watcher is Closed() (as signaled by the close channel).
 	go waiter.deadletterWorker()
 
-	// Append this watcher to the MemoryValue.
+	// Append this watcher to the Value.
 	m.mu.Lock()
 	m.watchers = append(m.watchers, waiter)
-	// If the MemoryValue already has some value set, communicate that to the
+	// If the Value already has some value set, communicate that to the
 	// first Get call by going through the deadletter worker.
 	if m.innerSet {
 		waiter.deadletterSubmitC <- m.inner
@@ -140,7 +143,7 @@
 // It watches the deadletterSubmitC channel for updated data, and overrides
 // previously received data. Then, when a .Get() begins to pend (and respond to
 // activeReqC receives), the deadletter worker will deliver that value.
-func (m *MemoryWatcher) deadletterWorker() {
+func (m *watcher) deadletterWorker() {
 	// Current value, and flag to mark it as set (vs. nil).
 	var cur interface{}
 	var set bool
@@ -183,7 +186,7 @@
 }
 
 // closed returns whether this watcher has been closed.
-func (m *MemoryWatcher) closed() bool {
+func (m *watcher) closed() bool {
 	select {
 	case _, ok := <-m.close:
 		if !ok {
@@ -194,8 +197,8 @@
 	return false
 }
 
-// update is the high level update-this-watcher function called by MemoryValue.
-func (m *MemoryWatcher) update(sync bool, val interface{}) {
+// update is the high level update-this-watcher function called by Value.
+func (m *watcher) update(sync bool, val interface{}) {
 	// If synchronous delivery was requested, block until a watcher .Gets it.
 	if sync {
 		c := <-m.activeReqC
@@ -221,15 +224,15 @@
 	}
 }
 
-func (m *MemoryWatcher) Close() error {
+func (m *watcher) Close() error {
 	close(m.deadletterSubmitC)
 	close(m.close)
 	return nil
 }
 
-// Get blocks until a Value's data is available. See Watcher.Get for guarantees
-// and more information.
-func (m *MemoryWatcher) Get(ctx context.Context) (interface{}, error) {
+// Get blocks until a Value's data is available. See event.Watcher.Get for
+// guarantees and more information.
+func (m *watcher) Get(ctx context.Context) (interface{}, error) {
 	// Make sure we're the only active .Get call.
 	select {
 	case m.getSem <- struct{}{}:
@@ -277,4 +280,3 @@
 		}
 	}
 }
-
diff --git a/metropolis/pkg/event/memory_value_test.go b/metropolis/pkg/event/memory/memory_test.go
similarity index 94%
rename from metropolis/pkg/event/memory_value_test.go
rename to metropolis/pkg/event/memory/memory_test.go
index 4b0487c..f4feb33 100644
--- a/metropolis/pkg/event/memory_value_test.go
+++ b/metropolis/pkg/event/memory/memory_test.go
@@ -14,7 +14,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package event
+package memory
 
 import (
 	"context"
@@ -25,10 +25,10 @@
 	"time"
 )
 
-// TestAsync exercises the high-level behaviour of a MemoryValue, in which a
+// TestAsync exercises the high-level behaviour of a Value, in which a
 // watcher is able to catch up to the newest Set value.
 func TestAsync(t *testing.T) {
-	p := MemoryValue{}
+	p := Value{}
 	p.Set(0)
 
 	ctx := context.Background()
@@ -59,12 +59,12 @@
 	}
 }
 
-// TestSyncBlocks exercises the MemoryValue's 'Sync' field, which makes all
+// TestSyncBlocks exercises the Value's 'Sync' field, which makes all
 // Set() calls block until all respective watchers .Get() the updated data.
 // This particular test ensures that .Set() calls to a Watcher result in a
 // prefect log of updates being transmitted to a watcher.
 func TestSync(t *testing.T) {
-	p := MemoryValue{
+	p := Value{
 		Sync: true,
 	}
 	values := make(chan int, 100)
@@ -104,12 +104,12 @@
 	}
 }
 
-// TestSyncBlocks exercises the MemoryValue's 'Sync' field, which makes all
+// TestSyncBlocks exercises the Value's 'Sync' field, which makes all
 // Set() calls block until all respective watchers .Get() the updated data.
 // This particular test ensures that .Set() calls actually block when a watcher
 // is unattended.
 func TestSyncBlocks(t *testing.T) {
-	p := MemoryValue{
+	p := Value{
 		Sync: true,
 	}
 	ctx := context.Background()
@@ -175,7 +175,7 @@
 // TestMultipleGets verifies that calling .Get() on a single watcher from two
 // goroutines is prevented by returning an error in exactly one of them.
 func TestMultipleGets(t *testing.T) {
-	p := MemoryValue{}
+	p := Value{}
 	ctx := context.Background()
 
 	w := p.Watch()
@@ -198,13 +198,13 @@
 	}
 }
 
-// TestConcurrency attempts to stress the MemoryValue/MemoryWatcher
+// TestConcurrency attempts to stress the Value/Watcher
 // implementation to design limits (a hundred simultaneous watchers), ensuring
 // that the watchers all settle to the final set value.
 func TestConcurrency(t *testing.T) {
 	ctx := context.Background()
 
-	p := MemoryValue{}
+	p := Value{}
 	p.Set(0)
 
 	// Number of watchers to create.
@@ -274,7 +274,7 @@
 // aborts that particular Get call, but also allows subsequent use of the same
 // watcher.
 func TestCanceling(t *testing.T) {
-	p := MemoryValue{
+	p := Value{
 		Sync: true,
 	}
 
@@ -316,7 +316,7 @@
 func TestSetAfterWatch(t *testing.T) {
 	ctx := context.Background()
 
-	p := MemoryValue{}
+	p := Value{}
 	p.Set(0)
 
 	watcher := p.Watch()
