diff --git a/go/src/v.io/x/mojo/transcoder/internal/internal.vdl.go b/go/src/v.io/x/mojo/transcoder/internal/internal.vdl.go
index 8cb994e..ddd5194 100644
--- a/go/src/v.io/x/mojo/transcoder/internal/internal.vdl.go
+++ b/go/src/v.io/x/mojo/transcoder/internal/internal.vdl.go
@@ -156,7 +156,7 @@
 		target, err := &t.zipTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.AddressInfo", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *AddressInfoTarget) FinishField(_, _ vdl.Target) error {
@@ -177,7 +177,7 @@
 		t.Value.Zip = ""
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.AddressInfo", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *AddressInfoTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -611,7 +611,7 @@
 		target, err := &t.ratingTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.EquifaxCreditReport", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *EquifaxCreditReportTarget) FinishField(_, _ vdl.Target) error {
@@ -623,7 +623,7 @@
 		t.Value.Rating = byte(0)
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.EquifaxCreditReport", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *EquifaxCreditReportTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -760,7 +760,7 @@
 		target, err := &t.ratingTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.ExperianCreditReport", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *ExperianCreditReportTarget) FinishField(_, _ vdl.Target) error {
@@ -772,7 +772,7 @@
 		t.Value.Rating = ExperianRatingGood
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.ExperianCreditReport", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *ExperianCreditReportTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -894,7 +894,7 @@
 		target, err := &t.ratingTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.TransUnionCreditReport", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *TransUnionCreditReportTarget) FinishField(_, _ vdl.Target) error {
@@ -906,7 +906,7 @@
 		t.Value.Rating = int16(0)
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.TransUnionCreditReport", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *TransUnionCreditReportTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -1368,7 +1368,7 @@
 		target, err := &t.reportTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.CreditReport", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *CreditReportTarget) FinishField(_, _ vdl.Target) error {
@@ -1383,7 +1383,7 @@
 		t.Value.Report = AgencyReport(AgencyReportEquifaxReport{})
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.CreditReport", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *CreditReportTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -1629,7 +1629,7 @@
 		target, err := &t.creditTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.Customer", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *CustomerTarget) FinishField(_, _ vdl.Target) error {
@@ -1655,7 +1655,7 @@
 		}
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/internal.Customer", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *CustomerTarget) FinishFields(_ vdl.FieldsTarget) error {
diff --git a/go/src/v.io/x/mojo/transcoder/testtypes/testtypes.vdl.go b/go/src/v.io/x/mojo/transcoder/testtypes/testtypes.vdl.go
index 36ea9df..6dd60fa 100644
--- a/go/src/v.io/x/mojo/transcoder/testtypes/testtypes.vdl.go
+++ b/go/src/v.io/x/mojo/transcoder/testtypes/testtypes.vdl.go
@@ -1301,7 +1301,7 @@
 		target, err := &t.podUnionTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.PodUnionWrapper", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *PodUnionWrapperTarget) FinishField(_, _ vdl.Target) error {
@@ -1313,7 +1313,7 @@
 		t.Value.PodUnion = PodUnion(PodUnionFInt8{})
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.PodUnionWrapper", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *PodUnionWrapperTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -1440,7 +1440,7 @@
 		target, err := &t.fInt8Target, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.DummyStruct", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *DummyStructTarget) FinishField(_, _ vdl.Target) error {
@@ -1452,7 +1452,7 @@
 		t.Value.FInt8 = int8(0)
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.DummyStruct", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *DummyStructTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -2117,15 +2117,11 @@
 		}
 	} else {
 		enc.SetNextStartValueIsOptional()
-		if err := enc.StartValue(vdl.TypeOf((*DummyStruct)(nil)).Elem()); err != nil {
-			return err
-		}
+
 		if err := x.Value.VDLWrite(enc); err != nil {
 			return err
 		}
-		if err := enc.FinishValue(); err != nil {
-			return err
-		}
+
 	}
 	if err := enc.NextField(""); err != nil {
 		return err
@@ -2172,9 +2168,6 @@
 	if err := enc.NextField("FPodUnion"); err != nil {
 		return err
 	}
-	if err := x.Value.VDLWrite(enc); err != nil {
-		return err
-	}
 	switch {
 	case x.Value == nil:
 		// Write the zero value of the union type.
@@ -2516,7 +2509,7 @@
 		target, err := &t.objectUnionTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.ObjectUnionWrapper", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *ObjectUnionWrapperTarget) FinishField(_, _ vdl.Target) error {
@@ -2528,7 +2521,7 @@
 		t.Value.ObjectUnion = ObjectUnion(ObjectUnionFInt8{})
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.ObjectUnionWrapper", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *ObjectUnionWrapperTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -2730,7 +2723,7 @@
 		target, err := &t.heightTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.Rect", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *RectTarget) FinishField(_, _ vdl.Target) error {
@@ -2751,7 +2744,7 @@
 		t.Value.Height = int32(0)
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.Rect", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *RectTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -3111,7 +3104,7 @@
 		target, err := &t.fInt16Target, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.MultiVersionStruct", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *MultiVersionStructTarget) FinishField(_, _ vdl.Target) error {
@@ -3138,7 +3131,7 @@
 		t.Value.FInt16 = int16(0)
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.MultiVersionStruct", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *MultiVersionStructTarget) FinishFields(_ vdl.FieldsTarget) error {
@@ -3443,7 +3436,7 @@
 		target, err := &t.fStringTarget, error(nil)
 		return nil, target, err
 	default:
-		return nil, nil, fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.MultiVersionStructV3", name)
+		return nil, nil, vdl.ErrFieldNoExist
 	}
 }
 func (t *MultiVersionStructV3Target) FinishField(_, _ vdl.Target) error {
@@ -3461,7 +3454,7 @@
 		t.Value.FString = ""
 		return nil
 	default:
-		return fmt.Errorf("field %s not in struct src/v.io/x/mojo/transcoder/testtypes.MultiVersionStructV3", name)
+		return vdl.ErrFieldNoExist
 	}
 }
 func (t *MultiVersionStructV3Target) FinishFields(_ vdl.FieldsTarget) error {
diff --git a/go/src/v.io/x/mojo/transcoder/type.go b/go/src/v.io/x/mojo/transcoder/type.go
index de7f522..298347a 100644
--- a/go/src/v.io/x/mojo/transcoder/type.go
+++ b/go/src/v.io/x/mojo/transcoder/type.go
@@ -343,9 +343,8 @@
 	enumValues := make([]mojom_types.EnumValue, t.NumEnumLabel())
 	for i := 0; i < t.NumEnumLabel(); i++ {
 		enumValues[i] = mojom_types.EnumValue{
-			DeclData:    &mojom_types.DeclarationData{ShortName: strPtr(t.EnumLabel(i))},
-			IntValue:    int32(i),
-			EnumTypeKey: mojomTypeKey(t),
+			DeclData: &mojom_types.DeclarationData{ShortName: strPtr(t.EnumLabel(i))},
+			IntValue: int32(i),
 		}
 	}
 	_, name := vdl.SplitIdent(t.Name())
