diff --git a/cue/cue.go b/cue/cue.go
index 2e0a031..6f9622f 100644
--- a/cue/cue.go
+++ b/cue/cue.go
@@ -12,6 +12,32 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-// Package cue is a transition package for supporting the cue.Value API.
-// It aims to be plugin compatible with the old API.
+// Package cue is the main API for CUE evaluation.
+//
+// Value is the main type that represents CUE evaluations. Values are created
+// with a cue.Context. Only values created from the same Context can be
+// involved in the same operation.
+//
+// A Context defines the set of active packages, the translations of field
+// names to unique codes, as well as the set of builtins. Use
+//
+//     import "cuelang.org/go/cue/cuecontext"
+//
+//     ctx := cuecontext.New()
+//
+// to obtain a context.
+//
+//
+// Note that the following types are DEPRECATED and their usage should be
+// avoided if possible:
+//
+//    FieldInfo
+//    Instance
+//    Runtime
+//    Struct
+//
+// Many types also have deprecated methods. Code that already uses deprecated
+// methods can keep using them for at least some time. We aim to provide a
+// go or cue fix solution to automatically rewrite code using the new API.
+//
 package cue
diff --git a/cue/types.go b/cue/types.go
index 5edb989..2629a8a 100644
--- a/cue/types.go
+++ b/cue/types.go
@@ -225,6 +225,8 @@
 	isOpt bool
 }
 
+type hiddenIterator = Iterator
+
 type field struct {
 	arc        *adt.Vertex
 	isOptional bool
@@ -252,13 +254,17 @@
 	return i.cur
 }
 
-func (i *Iterator) Feature() adt.Feature {
-	return i.f
+// Selector reports the field label of this iteration.
+func (i *Iterator) Selector() Selector {
+	return featureToSel(i.f, i.idx)
 }
 
 // Label reports the label of the value if i iterates over struct fields and
 // "" otherwise.
-func (i *Iterator) Label() string {
+//
+// Deprecated: use i.Selector().String(). Note that this will give more accurate
+// string representations.
+func (i *hiddenIterator) Label() string {
 	if i.f == 0 {
 		return ""
 	}
@@ -266,7 +272,9 @@
 }
 
 // IsHidden reports if a field is hidden from the data model.
-func (i *Iterator) IsHidden() bool {
+//
+// Deprecated: use i.Selector().PkgPath() != ""
+func (i *hiddenIterator) IsHidden() bool {
 	return i.f.IsHidden()
 }
 
@@ -276,7 +284,9 @@
 }
 
 // IsDefinition reports if a field is a definition.
-func (i *Iterator) IsDefinition() bool {
+//
+// Deprecated: use i.Selector().IsDefinition()
+func (i *hiddenIterator) IsDefinition() bool {
 	return i.f.IsDef()
 }
 
diff --git a/cue/types_test.go b/cue/types_test.go
index dd1c7ae..18d52ae 100644
--- a/cue/types_test.go
+++ b/cue/types_test.go
@@ -691,7 +691,7 @@
 		res:   "{a:1,b:2,c:3,}",
 	}, {
 		value: `{a:1,"_b":2,c:3,_d:4}`,
-		res:   "{a:1,_b:2,c:3,}",
+		res:   `{a:1,"_b":2,c:3,}`,
 	}, {
 		value: `{_a:"a"}`,
 		res:   "{}",
@@ -715,7 +715,7 @@
 
 			buf := []byte{'{'}
 			for iter.Next() {
-				buf = append(buf, iter.Label()...)
+				buf = append(buf, iter.Selector().String()...)
 				buf = append(buf, ':')
 				b, err := iter.Value().MarshalJSON()
 				checkFatal(t, err, tc.err, "Obj.At")
