diff --git a/pkg/front_end/test/fasta/tool_git_test.dart b/pkg/front_end/test/fasta/tool_git_test.dart
index 6e4b231..092e026 100644
--- a/pkg/front_end/test/fasta/tool_git_test.dart
+++ b/pkg/front_end/test/fasta/tool_git_test.dart
@@ -114,7 +114,7 @@
     "dump-ir": {
       "exitCode": 2,
       "stdout": "",
-      "stderr": "Usage: dump-ir dillfile [output]\n",
+      "stderr": "Usage: dump-ir dillFile [output]\n",
     },
   };
 
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 2fe783e..5226583 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -28,6 +28,7 @@
 affecting
 afterwards
 agree
+agreeing
 ahe
 ai
 aiki
@@ -174,6 +175,7 @@
 char
 charcode
 chars
+checkout
 checkpoint
 chloestefantsova
 chunks
@@ -492,6 +494,7 @@
 futureor
 g
 gardening
+gb
 gen
 generation
 getable
@@ -560,6 +563,7 @@
 ideographic
 idn
 ids
+idx
 iff
 il
 imitate
@@ -652,6 +656,7 @@
 jvm
 k
 kallentu
+kb
 kernel's
 kill
 klass
@@ -766,6 +771,7 @@
 nameless
 namer
 natively
+nativewrappers
 nbsp
 nc
 ncs
@@ -836,6 +842,7 @@
 overlooked
 overshadowed
 oversight
+overview
 overwrite
 overwriting
 ownership
@@ -1178,6 +1185,7 @@
 starter
 stated
 statics
+stats
 stderr
 stdin
 stdio
@@ -1452,6 +1460,7 @@
 xdc
 xdfff
 xef
+xff
 xi
 xj
 xk
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index bfdd6c6..3300b99 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -196,7 +196,6 @@
 differentiate
 dijkstra
 dijkstras
-dillfile
 dinteractive
 dirname
 disagree
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 9b60daf..81a46c2 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -319,7 +319,8 @@
       "pattern": [
         "_fe_analyzer_shared/lib/.*\\.dart$",
         "front_end/lib/.*\\.dart$",
-        "kernel/lib/.*\\.dart$"
+        "kernel/lib/.*\\.dart$",
+        "kernel/bin/.*\\.dart$"
       ],
       "exclude": [
         "kernel/lib/vm/.*\\.dart$",
diff --git a/pkg/front_end/tool/fasta b/pkg/front_end/tool/fasta
index 29d5544..1a3d971 100755
--- a/pkg/front_end/tool/fasta
+++ b/pkg/front_end/tool/fasta
@@ -46,7 +46,7 @@
       set -- "$@" /dev/fd/1
     fi
     if [ "$#" != "3" ]; then
-      stop "Usage: $1 dillfile [output]"
+      stop "Usage: $1 dillFile [output]"
     fi
     ;;
   testing)
diff --git a/pkg/front_end/tool/fasta.dart b/pkg/front_end/tool/fasta.dart
index 3e02026..14f8503 100644
--- a/pkg/front_end/tool/fasta.dart
+++ b/pkg/front_end/tool/fasta.dart
@@ -63,7 +63,7 @@
     case 'dump-ir':
       script = '${kernelBin}/dump.dart';
       if (remainingArguments.isEmpty || remainingArguments.length > 2) {
-        stop("Usage: $command dillfile [output]");
+        stop("Usage: $command dillFile [output]");
       }
       break;
     case 'testing':
diff --git a/pkg/kernel/bin/compare_hierarchies.dart b/pkg/kernel/bin/compare_hierarchies.dart
index 2097aaa..e6e35ca 100644
--- a/pkg/kernel/bin/compare_hierarchies.dart
+++ b/pkg/kernel/bin/compare_hierarchies.dart
@@ -83,21 +83,22 @@
     for (String className in agreeingClasses) {
       Class c1 = libClass1[className]!;
       Class c2 = libClass2[className]!;
-      Set<Classish> c1Supertypes = createClassishSet(
+      Set<ClassReference> c1Supertypes = createClassReferenceSet(
           ch1.getAllSupertypeClassesForTesting(c1),
           onlyPublic: true,
           ignoresMap: ignoresMap);
-      Set<Classish> c2Supertypes = createClassishSet(
+      Set<ClassReference> c2Supertypes = createClassReferenceSet(
           ch2.getAllSupertypeClassesForTesting(c2),
           onlyPublic: true,
           ignoresMap: ignoresMap);
-      Set<Classish> missing = new Set<Classish>.from(c1Supertypes)
+      Set<ClassReference> missing = new Set<ClassReference>.from(c1Supertypes)
         ..removeAll(c2Supertypes);
       if (missing.isNotEmpty) {
         print("$c1 in $lib1 from (1) has these extra supertypes: "
             "${missing.toList()}");
       }
-      missing = new Set<Classish>.from(c2Supertypes)..removeAll(c1Supertypes);
+      missing = new Set<ClassReference>.from(c2Supertypes)
+        ..removeAll(c1Supertypes);
       if (missing.isNotEmpty) {
         print("$c2 in $lib2 from (2) has these extra supertypes: "
             "${missing.toList()}");
@@ -125,23 +126,23 @@
   return map;
 }
 
-Set<Classish> createClassishSet(List<Class> classes,
+Set<ClassReference> createClassReferenceSet(List<Class> classes,
     {required bool onlyPublic, required Map<Uri, Set<String>> ignoresMap}) {
-  Set<Classish> result = {};
+  Set<ClassReference> result = {};
   for (Class c in classes) {
     if (onlyPublic && c.name.startsWith("_")) continue;
     Set<String>? ignored = ignoresMap[c.enclosingLibrary.importUri];
     if (ignored?.contains(c.name) ?? false) continue;
-    result.add(new Classish(c.name, c.enclosingLibrary.importUri));
+    result.add(new ClassReference(c.name, c.enclosingLibrary.importUri));
   }
   return result;
 }
 
-class Classish {
+class ClassReference {
   final String name;
   final Uri libImportUri;
 
-  const Classish(this.name, this.libImportUri);
+  const ClassReference(this.name, this.libImportUri);
 
   @override
   int get hashCode => name.hashCode * 13 + libImportUri.hashCode * 17;
@@ -149,7 +150,7 @@
   @override
   bool operator ==(Object other) {
     if (identical(this, other)) return true;
-    if (other is! Classish) return false;
+    if (other is! ClassReference) return false;
     if (name != other.name) return false;
     if (libImportUri != other.libImportUri) return false;
     return true;
diff --git a/pkg/kernel/bin/dill_forensic.dart b/pkg/kernel/bin/dill_forensic.dart
index c95d02a..b68b32f 100755
--- a/pkg/kernel/bin/dill_forensic.dart
+++ b/pkg/kernel/bin/dill_forensic.dart
@@ -12,16 +12,16 @@
 
 void main(List<String> args) {
   if (args.length != 1) {
-    throw "Usage: dart <script> <dillfile>";
+    throw "Usage: dart <script> <dillFile>";
   }
   File file = new File(args.single);
   if (!file.existsSync()) {
     throw "Given file doesn't exist.\n"
-        "Usage: dart <script> <dillfile>";
+        "Usage: dart <script> <dillFile>";
   }
   Uint8List bytes = file.readAsBytesSync();
   List<Component> components = splitAndRead(bytes);
-  print("Sucessfully read ${components.length} sub-components.");
+  print("Successfully read ${components.length} sub-components.");
 
   for (int i = 0; i < components.length; i++) {
     Component component = components[i];
@@ -77,7 +77,7 @@
   tagOffsets.add(bytes.length);
 
   // Warning: O(n²) algorithm (though, as the tag is assumed to be rather unique
-  // in normal cases it will probably much better in practise
+  // in normal cases it will probably much better in practice
   // (and n will be low)).
   int fromIndex = 0;
   while (fromIndex < tagOffsets.length - 1) {
