diff --git a/event/adapter/gokit/gokit.go b/event/adapter/gokit/gokit.go
index c442ed6..e532266 100644
--- a/event/adapter/gokit/gokit.go
+++ b/event/adapter/gokit/gokit.go
@@ -11,7 +11,6 @@
 
 	"github.com/go-kit/kit/log"
 	"golang.org/x/exp/event"
-	"golang.org/x/exp/event/keys"
 )
 
 type logger struct {
@@ -45,10 +44,10 @@
 		if key == "msg" || key == "message" {
 			msg = fmt.Sprint(value)
 		} else {
-			ev.Labels = append(ev.Labels, keys.Value(key).Of(value))
+			ev.Labels = append(ev.Labels, event.Value(key, value))
 		}
 	}
-	ev.Message = msg
+	ev.Labels = append(ev.Labels, event.String("msg", msg))
 	ev.Deliver()
 	return nil
 }
diff --git a/event/adapter/gokit/gokit_test.go b/event/adapter/gokit/gokit_test.go
index 9c84590..dedf75b 100644
--- a/event/adapter/gokit/gokit_test.go
+++ b/event/adapter/gokit/gokit_test.go
@@ -13,7 +13,6 @@
 	"golang.org/x/exp/event"
 	"golang.org/x/exp/event/adapter/gokit"
 	"golang.org/x/exp/event/eventtest"
-	"golang.org/x/exp/event/keys"
 )
 
 func Test(t *testing.T) {
@@ -21,14 +20,14 @@
 	ctx, h := eventtest.NewCapture()
 	log.Log(ctx, "msg", "mess", "level", 1, "name", "n/m", "traceID", 17, "resource", "R")
 	want := []event.Event{{
-		At:      eventtest.InitialTime,
-		Kind:    event.LogKind,
-		Message: "mess",
+		At:   eventtest.InitialTime,
+		Kind: event.LogKind,
 		Labels: []event.Label{
-			keys.Value("level").Of(1),
-			keys.Value("name").Of("n/m"),
-			keys.Value("traceID").Of(17),
-			keys.Value("resource").Of("R"),
+			event.Value("level", 1),
+			event.Value("name", "n/m"),
+			event.Value("traceID", 17),
+			event.Value("resource", "R"),
+			event.String("msg", "mess"),
 		},
 	}}
 	if diff := cmp.Diff(want, h.Got, eventtest.CmpOption()); diff != "" {
diff --git a/event/adapter/logfmt/logfmt.go b/event/adapter/logfmt/logfmt.go
index 451d2de..2ca6e38 100644
--- a/event/adapter/logfmt/logfmt.go
+++ b/event/adapter/logfmt/logfmt.go
@@ -69,22 +69,10 @@
 		p.Label(w, event.Uint64("trace", ev.TraceID))
 	}
 
-	if ev.Message != "" {
-		p.Label(w, event.String("msg", ev.Message))
-	}
-
-	if ev.Name != "" {
-		p.Label(w, event.String("name", ev.Name))
-	}
-
 	if ev.Kind == event.EndKind {
 		p.Label(w, event.Value("end", nil))
 	}
 
-	if ev.Error != nil {
-		p.Label(w, event.Value("err", ev.Error))
-	}
-
 	io.WriteString(w, "\n")
 }
 
diff --git a/event/adapter/logfmt/logfmt_test.go b/event/adapter/logfmt/logfmt_test.go
index 1be397d..45379ce 100644
--- a/event/adapter/logfmt/logfmt_test.go
+++ b/event/adapter/logfmt/logfmt_test.go
@@ -5,7 +5,6 @@
 package logfmt_test
 
 import (
-	"errors"
 	"strings"
 	"testing"
 	"time"
@@ -40,22 +39,14 @@
 		event:  event.Event{Namespace: "golang.org/x/exp/event"},
 		expect: `in="golang.org/x/exp/event"`,
 	}, {
-		name:   "name",
-		event:  event.Event{Name: "named"},
-		expect: `name=named`,
-	}, {
 		name:   "at",
 		event:  event.Event{At: at},
 		expect: `time="2020/03/05 14:27:48"`,
 	}, {
 		name:   "message",
-		event:  event.Event{Message: "a message"},
+		event:  event.Event{Labels: []event.Label{event.String("msg", "a message")}},
 		expect: `msg="a message"`,
 	}, {
-		name:   "error",
-		event:  event.Event{Error: errors.New("an error")},
-		expect: `err="an error"`,
-	}, {
 		name:   "end",
 		event:  event.Event{Kind: event.EndKind},
 		expect: `end`,
@@ -123,15 +114,15 @@
 		expect: `"name with space"=text`,
 	}, {
 		name:   "quoting quote",
-		event:  event.Event{Message: `with"middle`},
+		event:  event.Event{Labels: []event.Label{event.String("msg", `with"middle`)}},
 		expect: `msg="with\"middle"`,
 	}, {
 		name:   "quoting newline",
-		event:  event.Event{Message: "with\nmiddle"},
+		event:  event.Event{Labels: []event.Label{event.String("msg", "with\nmiddle")}},
 		expect: `msg="with\nmiddle"`,
 	}, {
 		name:   "quoting slash",
-		event:  event.Event{Message: `with\middle`},
+		event:  event.Event{Labels: []event.Label{event.String("msg", `with\middle`)}},
 		expect: `msg="with\\middle"`,
 	}, {
 		name: "quoting bytes",
@@ -184,7 +175,7 @@
 		printer: logfmt.Printer{SuppressNamespace: true},
 		event: event.Event{
 			Namespace: "golang.org/x/exp/event",
-			Message:   "some text",
+			Labels:    []event.Label{event.String("msg", "some text")},
 		},
 		before: `in="golang.org/x/exp/event" msg="some text"`,
 		after:  `msg="some text"`,
diff --git a/event/adapter/logr/logr.go b/event/adapter/logr/logr.go
index 23bf172..6877591 100644
--- a/event/adapter/logr/logr.go
+++ b/event/adapter/logr/logr.go
@@ -10,7 +10,6 @@
 
 	"github.com/go-logr/logr"
 	"golang.org/x/exp/event"
-	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/severity"
 )
 
@@ -87,7 +86,7 @@
 func (l *logger) Error(err error, msg string, keysAndValues ...interface{}) {
 	ev := event.New(l.ctx, event.LogKind)
 	if ev != nil {
-		ev.Labels = append(ev.Labels, keys.Value("error").Of(err))
+		ev.Labels = append(ev.Labels, event.Value("error", err))
 		l.log(ev, msg, keysAndValues)
 	}
 }
@@ -98,8 +97,10 @@
 	for i := 0; i < len(keysAndValues); i += 2 {
 		ev.Labels = append(ev.Labels, newLabel(keysAndValues[i], keysAndValues[i+1]))
 	}
-	ev.Name = l.name
-	ev.Message = msg
+	ev.Labels = append(ev.Labels,
+		event.String("name", l.name),
+		event.String("msg", msg),
+	)
 	ev.Deliver()
 }
 
@@ -118,7 +119,7 @@
 }
 
 func newLabel(key, value interface{}) event.Label {
-	return keys.Value(key.(string)).Of(value)
+	return event.Value(key.(string), value)
 }
 
 func convertVerbosity(v int) severity.Level {
diff --git a/event/adapter/logr/logr_test.go b/event/adapter/logr/logr_test.go
index 6417755..0582ba3 100644
--- a/event/adapter/logr/logr_test.go
+++ b/event/adapter/logr/logr_test.go
@@ -13,7 +13,6 @@
 	"golang.org/x/exp/event"
 	elogr "golang.org/x/exp/event/adapter/logr"
 	"golang.org/x/exp/event/eventtest"
-	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/severity"
 )
 
@@ -23,14 +22,14 @@
 	log = log.WithName("m")
 	log.Info("mess", "traceID", 17, "resource", "R")
 	want := []event.Event{{
-		At:      eventtest.InitialTime,
-		Kind:    event.LogKind,
-		Message: "mess",
-		Name:    "n/m",
+		At:   eventtest.InitialTime,
+		Kind: event.LogKind,
 		Labels: []event.Label{
 			severity.Debug.Label(),
-			keys.Value("traceID").Of(17),
-			keys.Value("resource").Of("R"),
+			event.Value("traceID", 17),
+			event.Value("resource", "R"),
+			event.String("name", "n/m"),
+			event.String("msg", "mess"),
 		},
 	}}
 	if diff := cmp.Diff(want, th.Got, eventtest.CmpOption()); diff != "" {
diff --git a/event/adapter/logrus/logrus.go b/event/adapter/logrus/logrus.go
index af41ce4..beef9d4 100644
--- a/event/adapter/logrus/logrus.go
+++ b/event/adapter/logrus/logrus.go
@@ -21,7 +21,6 @@
 
 	"github.com/sirupsen/logrus"
 	"golang.org/x/exp/event"
-	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/severity"
 )
 
@@ -53,9 +52,9 @@
 	ev.At = e.Time
 	ev.Labels = append(ev.Labels, convertLevel(e.Level).Label())
 	for k, v := range e.Data {
-		ev.Labels = append(ev.Labels, keys.Value(k).Of(v))
+		ev.Labels = append(ev.Labels, event.Value(k, v))
 	}
-	ev.Message = e.Message
+	ev.Labels = append(ev.Labels, event.String("msg", e.Message))
 	ev.Deliver()
 	return nil, nil
 }
diff --git a/event/adapter/logrus/logrus_test.go b/event/adapter/logrus/logrus_test.go
index 8b1f98a..4915361 100644
--- a/event/adapter/logrus/logrus_test.go
+++ b/event/adapter/logrus/logrus_test.go
@@ -16,7 +16,6 @@
 	"golang.org/x/exp/event"
 	elogrus "golang.org/x/exp/event/adapter/logrus"
 	"golang.org/x/exp/event/eventtest"
-	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/severity"
 )
 
@@ -29,12 +28,12 @@
 	log.WithContext(ctx).WithField("traceID", 17).WithField("resource", "R").Info("mess")
 
 	want := []event.Event{{
-		Kind:    event.LogKind,
-		Message: "mess",
+		Kind: event.LogKind,
 		Labels: []event.Label{
 			severity.Info.Label(),
-			keys.Value("traceID").Of(17),
-			keys.Value("resource").Of("R"),
+			event.Value("traceID", 17),
+			event.Value("resource", "R"),
+			event.String("msg", "mess"),
 		},
 	}}
 	// logrus fields are stored in a map, so we have to sort to overcome map
diff --git a/event/adapter/zap/zap.go b/event/adapter/zap/zap.go
index e73e45d..013a987 100644
--- a/event/adapter/zap/zap.go
+++ b/event/adapter/zap/zap.go
@@ -22,7 +22,6 @@
 	"go.uber.org/zap"
 	"go.uber.org/zap/zapcore"
 	"golang.org/x/exp/event"
-	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/severity"
 )
 
@@ -61,18 +60,18 @@
 	ev.At = e.Time
 	ev.Labels = append(ev.Labels, c.labels...)
 	ev.Labels = append(ev.Labels, convertLevel(e.Level).Label())
-	ev.Name = e.LoggerName
+	ev.Labels = append(ev.Labels, event.String("name", e.LoggerName))
 	// TODO: add these additional labels more efficiently.
 	if e.Stack != "" {
-		ev.Labels = append(ev.Labels, keys.String("stack").Of(e.Stack))
+		ev.Labels = append(ev.Labels, event.String("stack", e.Stack))
 	}
 	if e.Caller.Defined {
-		ev.Labels = append(ev.Labels, keys.String("caller").Of(e.Caller.String()))
+		ev.Labels = append(ev.Labels, event.String("caller", e.Caller.String()))
 	}
 	for _, f := range fs {
 		ev.Labels = append(ev.Labels, newLabel(f))
 	}
-	ev.Message = e.Message
+	ev.Labels = append(ev.Labels, event.String("msg", e.Message))
 	ev.Deliver()
 	return nil
 }
@@ -88,39 +87,38 @@
 	case zapcore.ArrayMarshalerType, zapcore.ObjectMarshalerType, zapcore.BinaryType, zapcore.ByteStringType,
 		zapcore.Complex128Type, zapcore.Complex64Type, zapcore.TimeFullType, zapcore.ReflectType,
 		zapcore.ErrorType:
-		return keys.Value(f.Key).Of(f.Interface)
+		return event.Value(f.Key, f.Interface)
 	case zapcore.DurationType:
 		// TODO: avoid this allocation?
-		return keys.Value(f.Key).Of(time.Duration(f.Integer))
+		return event.Value(f.Key, time.Duration(f.Integer))
 	case zapcore.Float64Type:
-		return keys.Float64(f.Key).Of(math.Float64frombits(uint64(f.Integer)))
+		return event.Float64(f.Key, math.Float64frombits(uint64(f.Integer)))
 	case zapcore.Float32Type:
-		return keys.Float32(f.Key).Of(math.Float32frombits(uint32(f.Integer)))
+		return event.Float64(f.Key, float64(math.Float32frombits(uint32(f.Integer))))
 	case zapcore.BoolType:
 		b := false
 		if f.Integer != 0 {
 			b = true
 		}
-		return keys.Bool(f.Key).Of(b)
+		return event.Bool(f.Key, b)
 	case zapcore.Int64Type:
-		return keys.Int64(f.Key).Of(f.Integer)
+		return event.Int64(f.Key, f.Integer)
 	case zapcore.Int32Type:
-		return keys.Int32(f.Key).Of(int32(f.Integer))
+		return event.Int64(f.Key, f.Integer)
 
 		//, zapcore.Int16Type, zapcore.Int8Type,
 		// 		zapcore.Uint64Type, zapcore.Uint32Type, zapcore.Uint16Type, zapcore.Uint8Type, zapcore.UintptrType:
-		//		return (f.Key).Of(uint64(f.Integer))
+		//		return (f.Key,uint64(f.Integer))
 	case zapcore.StringType:
-		return keys.String(f.Key).Of(f.String)
+		return event.String(f.Key, f.String)
 	case zapcore.TimeType:
-		key := keys.Value(f.Key)
 		t := time.Unix(0, f.Integer)
 		if f.Interface != nil {
 			t = t.In(f.Interface.(*time.Location))
 		}
-		return key.Of(t)
+		return event.Value(f.Key, t)
 	case zapcore.StringerType:
-		return keys.String(f.Key).Of(stringerToString(f.Interface))
+		return event.String(f.Key, stringerToString(f.Interface))
 	case zapcore.NamespaceType:
 		// TODO: ???
 		return event.Label{}
diff --git a/event/adapter/zap/zap_test.go b/event/adapter/zap/zap_test.go
index 870fc56..a928bfb 100644
--- a/event/adapter/zap/zap_test.go
+++ b/event/adapter/zap/zap_test.go
@@ -14,7 +14,6 @@
 	"golang.org/x/exp/event"
 	ezap "golang.org/x/exp/event/adapter/zap"
 	"golang.org/x/exp/event/eventtest"
-	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/severity"
 )
 
@@ -24,14 +23,14 @@
 	log = log.Named("n/m")
 	log.Info("mess", zap.Float64("pi", 3.14))
 	want := []event.Event{{
-		Kind:    event.LogKind,
-		Message: "mess",
-		Name:    "n/m",
+		Kind: event.LogKind,
 		Labels: []event.Label{
-			keys.Int64("traceID").Of(17),
-			keys.String("resource").Of("R"),
+			event.Int64("traceID", 17),
+			event.String("resource", "R"),
 			severity.Info.Label(),
-			keys.Float64("pi").Of(3.14),
+			event.String("name", "n/m"),
+			event.Float64("pi", 3.14),
+			event.String("msg", "mess"),
 		},
 	}}
 	if diff := cmp.Diff(want, h.Got, eventtest.CmpOption()); diff != "" {
diff --git a/event/bench_test.go b/event/bench_test.go
index 8cc1206..b3bd0ea 100644
--- a/event/bench_test.go
+++ b/event/bench_test.go
@@ -12,26 +12,18 @@
 	"golang.org/x/exp/event"
 	"golang.org/x/exp/event/adapter/logfmt"
 	"golang.org/x/exp/event/eventtest"
-	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/severity"
 )
 
 var (
-	aValue  = keys.Int(eventtest.A.Name)
-	bValue  = keys.String(eventtest.B.Name)
-	aCount  = keys.Int64("aCount")
-	aStat   = keys.Int("aValue")
-	bCount  = keys.Int64("B")
-	bLength = keys.Int("BLen")
-
 	eventLog = eventtest.Hooks{
 		AStart: func(ctx context.Context, a int) context.Context {
-			severity.Info.Log(ctx, eventtest.A.Msg, aValue.Of(a))
+			severity.Info.Log(ctx, eventtest.A.Msg, event.Int64(eventtest.A.Name, int64(a)))
 			return ctx
 		},
 		AEnd: func(ctx context.Context) {},
 		BStart: func(ctx context.Context, b string) context.Context {
-			severity.Info.Log(ctx, eventtest.B.Msg, bValue.Of(b))
+			severity.Info.Log(ctx, eventtest.B.Msg, event.String(eventtest.B.Name, b))
 			return ctx
 		},
 		BEnd: func(ctx context.Context) {},
@@ -52,14 +44,14 @@
 
 	eventTrace = eventtest.Hooks{
 		AStart: func(ctx context.Context, a int) context.Context {
-			ctx = event.Start(ctx, eventtest.A.Msg, aValue.Of(a))
+			ctx = event.Start(ctx, eventtest.A.Msg, event.Int64(eventtest.A.Name, int64(a)))
 			return ctx
 		},
 		AEnd: func(ctx context.Context) {
 			event.End(ctx)
 		},
 		BStart: func(ctx context.Context, b string) context.Context {
-			ctx = event.Start(ctx, eventtest.B.Msg, bValue.Of(b))
+			ctx = event.Start(ctx, eventtest.B.Msg, event.String(eventtest.B.Name, b))
 			return ctx
 		},
 		BEnd: func(ctx context.Context) {
@@ -69,14 +61,14 @@
 
 	eventMetric = eventtest.Hooks{
 		AStart: func(ctx context.Context, a int) context.Context {
-			gauge.Record(ctx, 1, aStat.Of(a))
-			gauge.Record(ctx, 1, aCount.Of(1))
+			gauge.Record(ctx, 1, event.Int64("aValue", int64(a)))
+			gauge.Record(ctx, 1, event.Int64("aCount", 1))
 			return ctx
 		},
 		AEnd: func(ctx context.Context) {},
 		BStart: func(ctx context.Context, b string) context.Context {
-			gauge.Record(ctx, 1, bLength.Of(len(b)))
-			gauge.Record(ctx, 1, bCount.Of(1))
+			gauge.Record(ctx, 1, event.Int64("BLen", int64(len(b))))
+			gauge.Record(ctx, 1, event.Int64("B", 1))
 			return ctx
 		},
 		BEnd: func(ctx context.Context) {},
diff --git a/event/common.go b/event/common.go
index 34bfc8c..529a79e 100644
--- a/event/common.go
+++ b/event/common.go
@@ -36,7 +36,7 @@
 	ev := New(ctx, LogKind)
 	if ev != nil {
 		ev.Labels = append(ev.Labels, labels...)
-		ev.Message = msg
+		ev.Labels = append(ev.Labels, String("msg", msg))
 		ev.Deliver()
 	}
 }
@@ -44,7 +44,7 @@
 func Logf(ctx context.Context, msg string, args ...interface{}) {
 	ev := New(ctx, LogKind)
 	if ev != nil {
-		ev.Message = fmt.Sprintf(msg, args...)
+		ev.Labels = append(ev.Labels, String("msg", fmt.Sprintf(msg, args...)))
 		ev.Deliver()
 	}
 }
@@ -60,8 +60,8 @@
 func Start(ctx context.Context, name string, labels ...Label) context.Context {
 	ev := New(ctx, StartKind)
 	if ev != nil {
+		ev.Labels = append(ev.Labels, String("name", name))
 		ev.Labels = append(ev.Labels, labels...)
-		ev.Name = name
 		ev.TraceID = atomic.AddUint64(&ev.target.exporter.lastEvent, 1)
 		ev.target.exporter.prepare(ev)
 		ev.ctx = newContext(ev.ctx, ev.target.exporter, ev.TraceID, ev.At)
diff --git a/event/common_test.go b/event/common_test.go
index 852da43..b5383bc 100644
--- a/event/common_test.go
+++ b/event/common_test.go
@@ -11,7 +11,6 @@
 
 	"golang.org/x/exp/event"
 	"golang.org/x/exp/event/eventtest"
-	"golang.org/x/exp/event/keys"
 )
 
 func TestCommon(t *testing.T) {
@@ -36,7 +35,7 @@
 	checkName(t, h, "Metric", "")
 	h.Reset()
 
-	event.Annotate(ctx, keys.String("").Of(""))
+	event.Annotate(ctx, event.String("", ""))
 	checkMessage(t, h, "Annotate", "")
 	checkName(t, h, "Annotate", "")
 	h.Reset()
@@ -60,8 +59,16 @@
 		t.Errorf("Got %d events, expected 1", len(h.Got))
 		return
 	}
-	if h.Got[0].Message != text {
-		t.Errorf("Expected event with Message %q from %s got %q", text, method, h.Got[0].Message)
+	for _, l := range h.Got[0].Labels {
+		if l.Name == "msg" {
+			if l.String() != text {
+				t.Errorf("Expected event with Message %q from %s got %q", text, method, l.String())
+			}
+			return
+		}
+	}
+	if text != "" {
+		t.Errorf("Expected event with Message %q from %s got %q", text, method, "")
 	}
 }
 
@@ -70,7 +77,15 @@
 		t.Errorf("Got %d events, expected 1", len(h.Got))
 		return
 	}
-	if h.Got[0].Name != text {
-		t.Errorf("Expected event with Name %q from %s got %q", text, method, h.Got[0].Name)
+	for _, l := range h.Got[0].Labels {
+		if l.Name == "name" {
+			if l.String() != text {
+				t.Errorf("Expected event with Name %q from %s got %q", text, method, l.String())
+			}
+			return
+		}
+	}
+	if text != "" {
+		t.Errorf("Expected event with Name %q from %s got %q", text, method, "")
 	}
 }
diff --git a/event/event.go b/event/event.go
index b0718ee..7c3aed6 100644
--- a/event/event.go
+++ b/event/event.go
@@ -18,9 +18,6 @@
 	Namespace string    // namespace of event; if empty, set by exporter to import path
 	At        time.Time // time at which the event is delivered to the exporter.
 	Kind      Kind
-	Message   string
-	Name      string
-	Error     error
 	Labels    []Label
 
 	ctx    context.Context
diff --git a/event/event_test.go b/event/event_test.go
index 8c8ba35..8bedc21 100644
--- a/event/event_test.go
+++ b/event/event_test.go
@@ -17,13 +17,12 @@
 	"golang.org/x/exp/event"
 	"golang.org/x/exp/event/adapter/logfmt"
 	"golang.org/x/exp/event/eventtest"
-	"golang.org/x/exp/event/keys"
 )
 
 var (
-	l1      = keys.Int("l1").Of(1)
-	l2      = keys.Int("l2").Of(2)
-	l3      = keys.Int("l3").Of(3)
+	l1      = event.Int64("l1", 1)
+	l2      = event.Int64("l2", 2)
+	l3      = event.Int64("l3", 3)
 	counter = event.NewCounter("hits", "cache hits")
 	gauge   = event.NewFloatGauge("temperature", "CPU board temperature in Celsius")
 	latency = event.NewDuration("latency", "how long it took")
@@ -58,7 +57,7 @@
 			event.End(ctx)
 		},
 		expect: `
-time="2020/03/05 14:27:48" trace=1 name=span
+time="2020/03/05 14:27:48" name=span trace=1
 time="2020/03/05 14:27:49" parent=1 end
 `}, {
 		name: "span nested",
@@ -70,8 +69,8 @@
 			event.Log(child, "message")
 		},
 		expect: `
-time="2020/03/05 14:27:48" trace=1 name=parent
-time="2020/03/05 14:27:49" parent=1 trace=2 name=child
+time="2020/03/05 14:27:48" name=parent trace=1
+time="2020/03/05 14:27:49" parent=1 name=child trace=2
 time="2020/03/05 14:27:50" parent=2 msg=message
 time="2020/03/05 14:27:51" parent=2 end
 time="2020/03/05 14:27:52" parent=1 end
@@ -106,8 +105,8 @@
 			t.With(p).Int("myInt", 6).Message("my event").Send()
 			t.With(p).String("myString", "some string value").Message("string event").Send()
 			*/
-			event.Log(ctx, "my event", keys.Int("myInt").Of(6))
-			event.Log(ctx, "string event", keys.String("myString").Of("some string value"))
+			event.Log(ctx, "my event", event.Int64("myInt", 6))
+			event.Log(ctx, "string event", event.String("myString", "some string value"))
 		},
 		expect: `
 time="2020/03/05 14:27:48" myInt=6 msg="my event"
@@ -126,8 +125,8 @@
 
 func ExampleLog() {
 	ctx := event.WithExporter(context.Background(), event.NewExporter(logfmt.NewHandler(os.Stdout), eventtest.ExporterOptions()))
-	event.Log(ctx, "my event", keys.Int("myInt").Of(6))
-	event.Log(ctx, "error event", keys.String("myString").Of("some string value"))
+	event.Log(ctx, "my event", event.Int64("myInt", 6))
+	event.Log(ctx, "error event", event.String("myString", "some string value"))
 	// Output:
 	// time="2020/03/05 14:27:48" myInt=6 msg="my event"
 	// time="2020/03/05 14:27:49" myString="some string value" msg="error event"
diff --git a/event/otel/trace.go b/event/otel/trace.go
index 06883e6..66a670e 100644
--- a/event/otel/trace.go
+++ b/event/otel/trace.go
@@ -24,8 +24,8 @@
 func (t *TraceHandler) Event(ctx context.Context, ev *event.Event) context.Context {
 	switch ev.Kind {
 	case event.StartKind:
-		opts := labelsToSpanOptions(ev.Labels)
-		octx, span := t.tracer.Start(ctx, ev.Name, opts...)
+		name, opts := labelsToSpanOptions(ev.Labels)
+		octx, span := t.tracer.Start(ctx, name, opts...)
 		return context.WithValue(octx, spanKey{}, span)
 	case event.EndKind:
 		span, ok := ctx.Value(spanKey{}).(trace.Span)
@@ -39,8 +39,9 @@
 	}
 }
 
-func labelsToSpanOptions(ls []event.Label) []trace.SpanOption {
+func labelsToSpanOptions(ls []event.Label) (string, []trace.SpanOption) {
 	var opts []trace.SpanOption
+	var name string
 	for _, l := range ls {
 		switch l.Name {
 		case "link":
@@ -49,7 +50,9 @@
 			opts = append(opts, trace.WithNewRoot())
 		case "spanKind":
 			opts = append(opts, trace.WithSpanKind(l.Interface().(trace.SpanKind)))
+		case "name":
+			name = l.String()
 		}
 	}
-	return opts
+	return name, opts
 }
diff --git a/event/severity/severity.go b/event/severity/severity.go
index 7d30cab..aeae88d 100644
--- a/event/severity/severity.go
+++ b/event/severity/severity.go
@@ -55,7 +55,7 @@
 	if ev != nil {
 		ev.Labels = append(ev.Labels, l.Label())
 		ev.Labels = append(ev.Labels, labels...)
-		ev.Message = msg
+		ev.Labels = append(ev.Labels, event.String("msg", msg))
 		ev.Deliver()
 	}
 }
@@ -64,7 +64,7 @@
 	ev := event.New(ctx, event.LogKind)
 	if ev != nil {
 		ev.Labels = append(ev.Labels, l.Label())
-		ev.Message = fmt.Sprintf(msg, args...)
+		ev.Labels = append(ev.Labels, event.String("msg", fmt.Sprintf(msg, args...)))
 		ev.Deliver()
 	}
 }
diff --git a/jsonrpc2/conn.go b/jsonrpc2/conn.go
index 1b26d3a..f7ddaa1 100644
--- a/jsonrpc2/conn.go
+++ b/jsonrpc2/conn.go
@@ -12,7 +12,6 @@
 	"sync/atomic"
 
 	"golang.org/x/exp/event"
-	"golang.org/x/exp/event/keys"
 	errors "golang.org/x/xerrors"
 )
 
@@ -124,11 +123,11 @@
 	if err != nil {
 		return errors.Errorf("marshaling notify parameters: %v", err)
 	}
-	ctx = event.Start(ctx, method, RPCDirection.Of(Outbound))
-	Started.Record(ctx, 1, Method.Of(method))
+	ctx = event.Start(ctx, method, RPCDirection(Outbound))
+	Started.Record(ctx, 1, Method(method))
 	var errLabel event.Label
 	if err = c.write(ctx, notify); err != nil {
-		errLabel = keys.Value("error").Of(err)
+		errLabel = event.Value("error", err)
 	}
 	Finished.Record(ctx, 1, errLabel)
 	event.End(ctx)
@@ -154,8 +153,8 @@
 	}
 	//TODO: rewrite this using the new target/prototype stuff
 	ctx = event.Start(ctx, method,
-		Method.Of(method), RPCDirection.Of(Outbound), RPCID.Of(fmt.Sprintf("%q", result.id)))
-	Started.Record(ctx, 1, Method.Of(method))
+		Method(method), RPCDirection(Outbound), RPCID(fmt.Sprintf("%q", result.id)))
+	Started.Record(ctx, 1, Method(method))
 	result.ctx = ctx
 	// We have to add ourselves to the pending map before we send, otherwise we
 	// are racing the response.
@@ -194,7 +193,7 @@
 // The response will be unmarshaled from JSON into the result.
 func (a *AsyncCall) Await(ctx context.Context, result interface{}) error {
 	status := "NONE"
-	defer event.End(a.ctx, StatusCode.Of(status))
+	defer event.End(a.ctx, StatusCode(status))
 	var r asyncResult
 	select {
 	case response := <-a.response:
@@ -297,12 +296,12 @@
 			// add a span to the context for this request
 			var idLabel event.Label
 			if msg.IsCall() {
-				idLabel = RPCID.Of(fmt.Sprintf("%q", msg.ID))
+				idLabel = RPCID(fmt.Sprintf("%q", msg.ID))
 			}
 			entry.baseCtx = event.Start(ctx, msg.Method,
-				Method.Of(msg.Method), RPCDirection.Of(Inbound), idLabel)
-			Started.Record(entry.baseCtx, 1, Method.Of(msg.Method))
-			ReceivedBytes.Record(entry.baseCtx, n, Method.Of(msg.Method))
+				Method(msg.Method), RPCDirection(Inbound), idLabel)
+			Started.Record(entry.baseCtx, 1, Method(msg.Method))
+			ReceivedBytes.Record(entry.baseCtx, n, Method(msg.Method))
 			// in theory notifications cannot be cancelled, but we build them a cancel context anyway
 			entry.handleCtx, entry.cancel = context.WithCancel(entry.baseCtx)
 			// if the request is a call, add it to the incoming map so it can be
@@ -415,7 +414,7 @@
 	if err := c.respond(entry, result, rerr); err != nil {
 		// no way to propagate this error
 		//TODO: should we do more than just log it?
-		event.Log(entry.baseCtx, "jsonrpc2 message delivery failed", keys.Value("error").Of(err))
+		event.Log(entry.baseCtx, "jsonrpc2 message delivery failed", event.Value("error", err))
 	}
 }
 
@@ -461,7 +460,7 @@
 		entry.cancel = nil
 	}
 	// mark the entire request processing as done
-	event.End(entry.baseCtx, StatusCode.Of(status))
+	event.End(entry.baseCtx, StatusCode(status))
 	return err
 }
 
diff --git a/jsonrpc2/defs.go b/jsonrpc2/defs.go
index 802a205..80b25c1 100644
--- a/jsonrpc2/defs.go
+++ b/jsonrpc2/defs.go
@@ -6,15 +6,12 @@
 
 import (
 	"golang.org/x/exp/event"
-	"golang.org/x/exp/event/keys"
 )
 
-var (
-	Method       = keys.String("method")
-	RPCID        = keys.String("id")
-	RPCDirection = keys.String("direction")
-	StatusCode   = keys.String("status.code")
-)
+func Method(v string) event.Label       { return event.String("method", v) }
+func RPCID(v string) event.Label        { return event.String("id", v) }
+func RPCDirection(v string) event.Label { return event.String("direction", v) }
+func StatusCode(v string) event.Label   { return event.String("status.code", v) }
 
 var (
 	Started       = event.NewCounter("started", "Count of started RPCs.")
