diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java
index 9159fc6..6b415fb 100644
--- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java
+++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java
@@ -38,8 +38,7 @@
 import org.jf.dexlib2.dexbacked.raw.ClassDefItem;
 import org.jf.dexlib2.dexbacked.raw.TypeIdItem;
 import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory;
-import org.jf.dexlib2.dexbacked.util.FixedSizeSet;
-import org.jf.dexlib2.dexbacked.util.StaticInitialValueIterator;
+import org.jf.dexlib2.dexbacked.util.EncodedArrayItemIterator;
 import org.jf.dexlib2.dexbacked.util.VariableSizeLookaheadIterator;
 import org.jf.dexlib2.iface.ClassDef;
 import org.jf.dexlib2.iface.reference.FieldReference;
@@ -163,8 +162,8 @@
                 public Iterator<DexBackedField> iterator() {
                     final AnnotationsDirectory.AnnotationIterator annotationIterator =
                             annotationsDirectory.getFieldAnnotationIterator();
-                    final StaticInitialValueIterator staticInitialValueIterator =
-                            StaticInitialValueIterator.newOrEmpty(dexFile, staticInitialValuesOffset);
+                    final EncodedArrayItemIterator staticInitialValueIterator =
+                            EncodedArrayItemIterator.newOrEmpty(dexFile, staticInitialValuesOffset);
 
                     return new VariableSizeLookaheadIterator<DexBackedField>(dexFile, fieldsStartOffset) {
                         private int count;
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedField.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedField.java
index 653cdbd..50dd6d2 100644
--- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedField.java
+++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedField.java
@@ -35,7 +35,7 @@
 import org.jf.dexlib2.dexbacked.raw.FieldIdItem;
 import org.jf.dexlib2.dexbacked.reference.DexBackedFieldReference;
 import org.jf.dexlib2.dexbacked.util.AnnotationsDirectory;
-import org.jf.dexlib2.dexbacked.util.StaticInitialValueIterator;
+import org.jf.dexlib2.dexbacked.util.EncodedArrayItemIterator;
 import org.jf.dexlib2.dexbacked.value.DexBackedEncodedValue;
 import org.jf.dexlib2.iface.ClassDef;
 import org.jf.dexlib2.iface.Field;
@@ -62,7 +62,7 @@
     public DexBackedField(@Nonnull DexReader reader,
                           @Nonnull DexBackedClassDef classDef,
                           int previousFieldIndex,
-                          @Nonnull StaticInitialValueIterator staticInitialValueIterator,
+                          @Nonnull EncodedArrayItemIterator staticInitialValueIterator,
                           @Nonnull AnnotationsDirectory.AnnotationIterator annotationIterator) {
         this.dexFile = reader.dexBuf;
         this.classDef = classDef;
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/StaticInitialValueIterator.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/EncodedArrayItemIterator.java
similarity index 85%
rename from dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/StaticInitialValueIterator.java
rename to dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/EncodedArrayItemIterator.java
index f17b938..a57e6fb 100644
--- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/StaticInitialValueIterator.java
+++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/EncodedArrayItemIterator.java
@@ -39,8 +39,8 @@
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-public abstract class StaticInitialValueIterator {
-    public static final StaticInitialValueIterator EMPTY = new StaticInitialValueIterator() {
+public abstract class EncodedArrayItemIterator {
+    public static final EncodedArrayItemIterator EMPTY = new EncodedArrayItemIterator() {
         @Nullable @Override public EncodedValue getNextOrNull() { return null; }
         @Override public void skipNext() {}
         @Override public int getReaderOffset() { return 0; }
@@ -51,19 +51,19 @@
     public abstract int getReaderOffset();
 
     @Nonnull
-    public static StaticInitialValueIterator newOrEmpty(@Nonnull DexBackedDexFile dexFile, int offset) {
+    public static EncodedArrayItemIterator newOrEmpty(@Nonnull DexBackedDexFile dexFile, int offset) {
         if (offset == 0) {
             return EMPTY;
         }
-        return new StaticInitialValueIteratorImpl(dexFile, offset);
+        return new EncodedArrayItemIteratorImpl(dexFile, offset);
     }
 
-    private static class StaticInitialValueIteratorImpl extends StaticInitialValueIterator {
+    private static class EncodedArrayItemIteratorImpl extends EncodedArrayItemIterator {
         @Nonnull private final DexReader reader;
         private final int size;
         private int index = 0;
 
-        public StaticInitialValueIteratorImpl(@Nonnull DexBackedDexFile dexFile, int offset) {
+        public EncodedArrayItemIteratorImpl(@Nonnull DexBackedDexFile dexFile, int offset) {
             this.reader = dexFile.readerAt(offset);
             this.size = reader.readSmallUleb128();
         }
