diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7edb27f..b3faaa9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 0.10.1
+
+* Breaking change: Prefix generated Dart proto imports by proto file path instead of by package.
+  Tighten up member name checks for generated enum classes.
+  Requires package:protobuf version 0.10.2 or newer.
+
 ## 0.10.0
 
 * Breaking change: Support for [any](https://developers.google.com/protocol-buffers/docs/proto3#any) messages.
diff --git a/lib/base_type.dart b/lib/base_type.dart
index 743bd86..028543c 100644
--- a/lib/base_type.dart
+++ b/lib/base_type.dart
@@ -37,23 +37,23 @@
   /// (Always the empty string for primitive types.)
   String get package => generator == null ? "" : generator.package;
 
-  /// The Dart expression to use for this type when in a different package.
-  String get prefixed {
-    if (generator == null || generator.packageImportPrefix.isEmpty) {
-      return unprefixed;
-    }
-    return generator.packageImportPrefix + "." + unprefixed;
-  }
+  /// The Dart expression to use for this type when in a different file.
+  String get prefixed => generator == null
+      ? unprefixed
+      : generator.fileImportPrefix + "." + unprefixed;
 
   /// Returns the name to use in generated code for this Dart type.
   ///
   /// Doesn't include the List type for repeated fields.
-  /// [package] is the current package where we are generating code.
-  /// The Dart class might be imported from a different package.
-  String getDartType(String package) =>
-      (package == this.package) ? unprefixed : prefixed;
+  /// [protoFileUri] represents the current proto file where we are generating
+  /// code. The Dart class might be imported from a different proto file.
+  String getDartType(FileGenerator fileGen) =>
+      (fileGen.protoFileUri == generator?.fileGen?.protoFileUri)
+          ? unprefixed
+          : prefixed;
 
-  String getRepeatedDartType(String package) => "List<${getDartType(package)}>";
+  String getRepeatedDartType(FileGenerator fileGen) =>
+      "List<${getDartType(fileGen)}>";
 
   factory BaseType(FieldDescriptorProto field, GenerationContext ctx) {
     String constSuffix;
diff --git a/lib/code_generator.dart b/lib/code_generator.dart
index 46bf0fa..d5080c9 100644
--- a/lib/code_generator.dart
+++ b/lib/code_generator.dart
@@ -5,6 +5,10 @@
 part of protoc;
 
 abstract class ProtobufContainer {
+  // Internal map of proto file URIs to prefix aliases to resolve name conflicts
+  static final importPrefixes = <String, String>{};
+  static var idx = 0;
+
   String get package;
   String get classname;
   String get fullName;
@@ -14,14 +18,17 @@
   /// This exists because names from protoc come like this.
   String get dottedName => '.$fullName';
 
-  String get packageImportPrefix =>
-      _cachedImportPrefix ??= _calculateImportPrefix();
+  String get fileImportPrefix => _getFileImportPrefix();
 
-  String _cachedImportPrefix;
-
-  String _calculateImportPrefix() {
-    final importName = package.replaceAll('.', r'$');
-    return importName.isNotEmpty ? '\$$importName' : '';
+  String _getFileImportPrefix() {
+    String path = fileGen.protoFileUri.toString();
+    if (importPrefixes.containsKey(path)) {
+      return importPrefixes[path];
+    }
+    final alias = '\$$idx';
+    importPrefixes[path] = alias;
+    idx++;
+    return alias;
   }
 
   /// The generator of the .pb.dart file defining this entity.
diff --git a/lib/enum_generator.dart b/lib/enum_generator.dart
index cae2e1f..8bd3022 100644
--- a/lib/enum_generator.dart
+++ b/lib/enum_generator.dart
@@ -22,9 +22,8 @@
   EnumGenerator(EnumDescriptorProto descriptor, ProtobufContainer parent)
       : assert(parent != null),
         _parent = parent,
-        classname = (parent is FileGenerator)
-            ? descriptor.name
-            : '${parent.classname}_${descriptor.name}',
+        classname = messageOrEnumClassName(descriptor.name,
+            parent: parent?.classname ?? ''),
         fullName = parent.fullName == ''
             ? descriptor.name
             : '${parent.fullName}.${descriptor.name}',
@@ -52,10 +51,10 @@
   /// [usage] represents the .pb.dart file where the expression will be used.
   String getJsonConstant(FileGenerator usage) {
     var name = "$classname\$json";
-    if (usage.package == fileGen.package || packageImportPrefix.isEmpty) {
+    if (usage.protoFileUri == fileGen.protoFileUri) {
       return name;
     }
-    return "$packageImportPrefix.$name";
+    return "$fileImportPrefix.$name";
   }
 
   void generate(IndentingWriter out) {
@@ -64,14 +63,17 @@
         '}\n', () {
       // -----------------------------------------------------------------
       // Define enum types.
+      var reservedNames = reservedEnumNames;
       for (EnumValueDescriptorProto val in _canonicalValues) {
-        out.println('static const ${classname} ${val.name} = '
-            "const ${classname}._(${val.number}, '${val.name}');");
+        final name = unusedEnumNames(val.name, reservedNames);
+        out.println('static const ${classname} $name = '
+            "const ${classname}._(${val.number}, '$name');");
       }
       if (!_aliases.isEmpty) {
         out.println();
         for (EnumAlias alias in _aliases) {
-          out.println('static const ${classname} ${alias.value.name} ='
+          final name = unusedEnumNames(alias.value.name, reservedNames);
+          out.println('static const ${classname} $name ='
               ' ${alias.canonicalValue.name};');
         }
       }
@@ -79,8 +81,10 @@
 
       out.println('static const List<${classname}> values ='
           ' const <${classname}> [');
+      reservedNames = reservedEnumNames;
       for (EnumValueDescriptorProto val in _canonicalValues) {
-        out.println('  ${val.name},');
+        final name = unusedEnumNames(val.name, reservedNames);
+        out.println('  $name,');
       }
       out.println('];');
       out.println();
diff --git a/lib/extension_generator.dart b/lib/extension_generator.dart
index 784e255..352e0f4 100644
--- a/lib/extension_generator.dart
+++ b/lib/extension_generator.dart
@@ -76,7 +76,7 @@
 
     String name = _extensionName;
     var type = _field.baseType;
-    var dartType = type.getDartType(package);
+    var dartType = type.getDartType(fileGen);
 
     if (_field.isRepeated) {
       out.print('static final $_protobufImportPrefix.Extension $name = '
@@ -98,12 +98,12 @@
         'new $_protobufImportPrefix.Extension<$dartType>(\'$_extendedFullName\', \'$name\', '
         '${_field.number}, ${_field.typeConstant}');
 
-    String initializer = _field.generateDefaultFunction(package);
+    String initializer = _field.generateDefaultFunction(fileGen);
 
     if (type.isMessage || type.isGroup) {
       out.println(', $initializer, $dartType.create);');
     } else if (type.isEnum) {
-      var dartEnum = type.getDartType(package);
+      var dartEnum = type.getDartType(fileGen);
       String enumParams = '(var v) => $dartEnum.valueOf(v), $dartEnum.values';
       out.println(", $initializer, null, $enumParams);");
     } else if (initializer != null) {
diff --git a/lib/file_generator.dart b/lib/file_generator.dart
index 1e1e5b4..eeecdfb 100644
--- a/lib/file_generator.dart
+++ b/lib/file_generator.dart
@@ -511,7 +511,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 ''');
   }
 
@@ -522,8 +522,8 @@
     Uri resolvedImport =
         config.resolveImport(target.protoFileUri, protoFileUri, extension);
     out.print("import '$resolvedImport'");
-    if (package != target.package && target.package.isNotEmpty) {
-      out.print(' as ${target.packageImportPrefix}');
+    if (protoFileUri != target.protoFileUri) {
+      out.print(' as ${target.fileImportPrefix}');
     }
     out.println(';');
   }
diff --git a/lib/grpc_generator.dart b/lib/grpc_generator.dart
index 80b1c62..00aaad9 100644
--- a/lib/grpc_generator.dart
+++ b/lib/grpc_generator.dart
@@ -96,12 +96,11 @@
       // TODO(jakobr): Throw more actionable error.
       throw 'FAILURE: Unknown type reference (${fqname}) for ${location}';
     }
-    if (fileGen.package == mg.fileGen.package || mg.fileGen.package == '') {
-      // It's either the same file, or another file with the same package.
-      // (In the second case, we import it without using "as".)
+    if (fileGen.protoFileUri == mg.fileGen.protoFileUri) {
+      // If it's the same file, we import it without using "as".
       return mg.classname;
     }
-    return mg.packageImportPrefix + '.' + mg.classname;
+    return mg.fileImportPrefix + '.' + mg.classname;
   }
 
   void generate(IndentingWriter out) {
diff --git a/lib/message_generator.dart b/lib/message_generator.dart
index 0f08f25..6341982 100644
--- a/lib/message_generator.dart
+++ b/lib/message_generator.dart
@@ -64,7 +64,8 @@
       Map<String, PbMixin> declaredMixins, PbMixin defaultMixin)
       : _descriptor = descriptor,
         _parent = parent,
-        classname = messageClassName(descriptor, parent: parent.classname),
+        classname = messageOrEnumClassName(descriptor.name,
+            parent: parent?.classname ?? ''),
         assert(parent != null),
         fullName = parent.fullName == ''
             ? descriptor.name
@@ -101,10 +102,10 @@
   /// [usage] represents the .pb.dart file where the expression will be used.
   String getJsonConstant(FileGenerator usage) {
     var name = "$classname\$json";
-    if (usage.package == fileGen.package || packageImportPrefix.isEmpty) {
+    if (usage.protoFileUri == fileGen.protoFileUri) {
       return name;
     }
-    return "$packageImportPrefix.$name";
+    return "$fileImportPrefix.$name";
   }
 
   /// Adds all mixins used in this message and any submessages.
@@ -233,7 +234,7 @@
           ';', () {
         for (ProtobufField field in _fieldList) {
           var dartFieldName = field.memberNames.fieldName;
-          out.println(field.generateBuilderInfoCall(package, dartFieldName));
+          out.println(field.generateBuilderInfoCall(fileGen, dartFieldName));
         }
 
         if (_descriptor.extensionRange.length > 0) {
@@ -375,7 +376,7 @@
 
   void generateFieldAccessorsMutators(
       ProtobufField field, IndentingWriter out) {
-    var fieldTypeString = field.getDartType(package);
+    var fieldTypeString = field.getDartType(fileGen);
     var defaultExpr = field.getDefaultExpr();
     var names = field.memberNames;
 
diff --git a/lib/names.dart b/lib/names.dart
index d472beb..905036a 100644
--- a/lib/names.dart
+++ b/lib/names.dart
@@ -45,7 +45,7 @@
   var existingNames = new Set<String>()
     ..addAll(_dartReservedWords)
     ..addAll(GeneratedMessage_reservedNames)
-    ..addAll(_generatedNames);
+    ..addAll(_generatedMessageNames);
   return _unusedMemberNames(descriptor, null, existingNames).fieldName;
 }
 
@@ -53,7 +53,7 @@
 String extensionClassName(FileDescriptorProto descriptor) {
   var taken = new Set<String>();
   for (var messageType in descriptor.messageType) {
-    taken.add(messageClassName(messageType));
+    taken.add(messageOrEnumClassName(messageType.name));
   }
   for (var enumType in descriptor.enumType) {
     taken.add(enumType.name);
@@ -94,17 +94,19 @@
   String toString() => "$message";
 }
 
-/// Chooses the name of the Dart class to generate for a protobuf message.
+/// Chooses the name of the Dart class to generate for a proto message or enum.
 ///
-/// For a nested message, [parent] should be provided
+/// For a nested message or enum, [parent] should be provided
 /// with the name of the Dart class for the immediate parent.
-String messageClassName(DescriptorProto descriptor, {String parent: ''}) {
-  var name = descriptor.name;
+String messageOrEnumClassName(String descriptorName, {String parent: ''}) {
+  var name = descriptorName;
   if (parent != '') {
-    name = '${parent}_${descriptor.name}';
+    name = '${parent}_${descriptorName}';
   }
   if (name == 'Function') {
     name = 'Function_'; // Avoid reserved word.
+  } else if (name == 'List') {
+    name = 'List_';
   } else if (name.startsWith('Function_')) {
     // Avoid any further name conflicts due to 'Function' rename (unlikely).
     name = name + '_';
@@ -112,6 +114,26 @@
   return name;
 }
 
+/// Returns the set of names reserved by the ProtobufEnum class and its
+/// generated subclasses.
+Set<String> get reservedEnumNames => new Set<String>()
+  ..addAll(ProtobufEnum_reservedNames)
+  ..addAll(_protobufEnumNames);
+
+/// Chooses the ProtobufEnum names for each value.
+///
+/// Since the values all have the same type as the containing enum class, it
+/// does not require all the same checks as for message member names. Still,
+/// it needs to be checked against a list of reserved names to avoid collisions.
+String unusedEnumNames(String name, Set<String> existingNames) {
+  final suffix = '_';
+  while (existingNames.contains(name)) {
+    name += suffix;
+  }
+  existingNames.add(name);
+  return name;
+}
+
 /// Chooses the GeneratedMessage member names for each field.
 ///
 /// Additional names to avoid can be supplied using [reserved].
@@ -141,7 +163,7 @@
   var existingNames = new Set<String>()
     ..addAll(_dartReservedWords)
     ..addAll(GeneratedMessage_reservedNames)
-    ..addAll(_generatedNames)
+    ..addAll(_generatedMessageNames)
     ..addAll(reserved);
 
   var memberNames = <String, MemberNames>{};
@@ -335,10 +357,25 @@
   'with'
 ];
 
-// List of names used in the generated class itself.
-const List<String> _generatedNames = const [
+// List of names used in the generated message classes.
+//
+// This is in addition to GeneratedMessage_reservedNames, which are names from
+// the base GeneratedMessage class determined by reflection.
+const _generatedMessageNames = const <String>[
   'create',
   'createRepeated',
   'getDefault',
+  'List',
+  checkItem
+];
+
+// List of names used in the generated enum classes.
+//
+// This is in addition to ProtobufEnum_reservedNames, which are names from the
+// base ProtobufEnum class determined by reflection.
+const _protobufEnumNames = const <String>[
+  'List',
+  'valueOf',
+  'values',
   checkItem
 ];
diff --git a/lib/protobuf_field.dart b/lib/protobuf_field.dart
index 615c547..cfbdbd1 100644
--- a/lib/protobuf_field.dart
+++ b/lib/protobuf_field.dart
@@ -75,10 +75,10 @@
   /// Returns the expression to use for the Dart type.
   ///
   /// This will be a List for repeated types.
-  /// [package] is the package where we are generating code.
-  String getDartType(String package) {
-    if (isRepeated) return baseType.getRepeatedDartType(package);
-    return baseType.getDartType(package);
+  /// [fileGen] represents the .proto file where we are generating code.
+  String getDartType(FileGenerator fileGen) {
+    if (isRepeated) return baseType.getRepeatedDartType(fileGen);
+    return baseType.getDartType(fileGen);
   }
 
   /// Returns the tag number of the underlying proto field.
@@ -101,10 +101,10 @@
 
   /// Returns Dart code adding this field to a BuilderInfo object.
   /// The call will start with ".." and a method name.
-  /// [package] is the package where the code will be evaluated.
-  String generateBuilderInfoCall(String package, String dartFieldName) {
+  /// [fileGen] represents the .proto file where the code will be evaluated.
+  String generateBuilderInfoCall(FileGenerator fileGen, String dartFieldName) {
     String quotedName = "'$dartFieldName'";
-    String type = baseType.getDartType(package);
+    String type = baseType.getDartType(fileGen);
 
     if (isRepeated) {
       if (baseType.isMessage || baseType.isGroup) {
@@ -120,7 +120,7 @@
       }
     }
 
-    String makeDefault = generateDefaultFunction(package);
+    String makeDefault = generateDefaultFunction(fileGen);
     if (baseType.isEnum) {
       String enumParams = '$type.valueOf, $type.values';
       return '..e<$type>('
@@ -185,14 +185,14 @@
 
   /// Returns a function expression that returns the field's default value.
   ///
-  /// [package] is the package where the expression will be evaluated.
-  /// Returns null if this field doesn't have an initializer.
-  String generateDefaultFunction(String package) {
+  /// [fileGen] represents the .proto file where the expression will be
+  /// evaluated.
+  String generateDefaultFunction(FileGenerator fileGen) {
     if (isRepeated) {
       return '() => new $_protobufImportPrefix.PbList()';
     }
-
-    bool samePackage = package == baseType.package;
+    bool sameProtoFile =
+        fileGen.protoFileUri == baseType.generator?.fileGen?.protoFileUri;
 
     switch (descriptor.type) {
       case FieldDescriptorProto_Type.TYPE_BOOL:
@@ -246,10 +246,10 @@
         return '() => <int>[$byteList]';
       case FieldDescriptorProto_Type.TYPE_GROUP:
       case FieldDescriptorProto_Type.TYPE_MESSAGE:
-        if (samePackage) return '${baseType.unprefixed}.getDefault';
+        if (sameProtoFile) return '${baseType.unprefixed}.getDefault';
         return "${baseType.prefixed}.getDefault";
       case FieldDescriptorProto_Type.TYPE_ENUM:
-        var className = samePackage ? baseType.unprefixed : baseType.prefixed;
+        var className = sameProtoFile ? baseType.unprefixed : baseType.prefixed;
         EnumGenerator gen = baseType.generator;
         if (descriptor.hasDefaultValue() && !descriptor.defaultValue.isEmpty) {
           return '$className.${descriptor.defaultValue}';
diff --git a/lib/service_generator.dart b/lib/service_generator.dart
index 22c7f6d..a001403 100644
--- a/lib/service_generator.dart
+++ b/lib/service_generator.dart
@@ -113,12 +113,11 @@
       var location = _undefinedDeps[fqname];
       throw 'FAILURE: Unknown type reference (${fqname}) for ${location}';
     }
-    if (fileGen.package == mg.fileGen.package || mg.fileGen.package == "") {
-      // It's either the same file, or another file with the same package.
-      // (In the second case, we import it without using "as".)
+    if (fileGen.protoFileUri == mg.fileGen.protoFileUri) {
+      // If it's the same file, we import it without using "as".
       return mg.classname;
     }
-    return mg.packageImportPrefix + "." + mg.classname;
+    return mg.fileImportPrefix + "." + mg.classname;
   }
 
   List<MethodDescriptorProto> get _methodDescriptors => _descriptor.method;
diff --git a/lib/src/dart_options.pb.dart b/lib/src/dart_options.pb.dart
index 286a731..0f20e07 100644
--- a/lib/src/dart_options.pb.dart
+++ b/lib/src/dart_options.pb.dart
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/lib/src/descriptor.pb.dart b/lib/src/descriptor.pb.dart
index e0c91c6..0be6201 100644
--- a/lib/src/descriptor.pb.dart
+++ b/lib/src/descriptor.pb.dart
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/lib/src/descriptor.pbenum.dart b/lib/src/descriptor.pbenum.dart
index 2d51b2b..00b0491 100644
--- a/lib/src/descriptor.pbenum.dart
+++ b/lib/src/descriptor.pbenum.dart
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore_for_file: UNDEFINED_SHOWN_NAME,UNUSED_SHOWN_NAME
 import 'dart:core' show int, dynamic, String, List, Map;
diff --git a/lib/src/plugin.pb.dart b/lib/src/plugin.pb.dart
index 826fd25..7a8ea75 100644
--- a/lib/src/plugin.pb.dart
+++ b/lib/src/plugin.pb.dart
@@ -1,14 +1,14 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
 
 import 'package:protobuf/protobuf.dart' as $pb;
 
-import 'descriptor.pb.dart' as $google$protobuf;
+import 'descriptor.pb.dart' as $0;
 
 class Version extends $pb.GeneratedMessage {
   static final $pb.BuilderInfo _i = new $pb.BuilderInfo('Version',
@@ -78,12 +78,8 @@
     ..aOS(2, 'parameter')
     ..a<Version>(3, 'compilerVersion', $pb.PbFieldType.OM, Version.getDefault,
         Version.create)
-    ..pp<$google$protobuf.FileDescriptorProto>(
-        15,
-        'protoFile',
-        $pb.PbFieldType.PM,
-        $google$protobuf.FileDescriptorProto.$checkItem,
-        $google$protobuf.FileDescriptorProto.create);
+    ..pp<$0.FileDescriptorProto>(15, 'protoFile', $pb.PbFieldType.PM,
+        $0.FileDescriptorProto.$checkItem, $0.FileDescriptorProto.create);
 
   CodeGeneratorRequest() : super();
   CodeGeneratorRequest.fromBuffer(List<int> i,
@@ -125,7 +121,7 @@
   bool hasCompilerVersion() => $_has(2);
   void clearCompilerVersion() => clearField(3);
 
-  List<$google$protobuf.FileDescriptorProto> get protoFile => $_getList(3);
+  List<$0.FileDescriptorProto> get protoFile => $_getList(3);
 }
 
 class CodeGeneratorResponse_File extends $pb.GeneratedMessage {
diff --git a/pubspec.yaml b/pubspec.yaml
index b3e942a..85cc31a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: protoc_plugin
-version: 0.10.0
+version: 0.10.1
 author: Dart Team <misc@dartlang.org>
 description: Protoc compiler plugin to generate Dart code
 homepage: https://github.com/dart-lang/dart-protoc-plugin
@@ -8,7 +8,7 @@
 dependencies:
   fixnum: ^0.10.5
   path: ^1.0.0
-  protobuf: ^0.10.1
+  protobuf: ^0.10.2
   dart_style: ^1.0.6
 dev_dependencies:
   test: ^1.3.0
diff --git a/test/client_generator_test.dart b/test/client_generator_test.dart
index 17682be..e0adfa4 100644
--- a/test/client_generator_test.dart
+++ b/test/client_generator_test.dart
@@ -15,11 +15,13 @@
 void main() {
   test('testClientGenerator', () {
     var options = new GenerationOptions();
-    var fd = buildFileDescriptor("testpkg", ["SomeRequest", "SomeReply"]);
+    var fd = buildFileDescriptor(
+        "testpkg", "testpkg.proto", ["SomeRequest", "SomeReply"]);
     fd.service.add(buildServiceDescriptor());
     var fg = new FileGenerator(fd, options);
 
-    var fd2 = buildFileDescriptor("foo.bar", ["EmptyMessage", "AnotherReply"]);
+    var fd2 = buildFileDescriptor(
+        "foo.bar", "foobar.proto", ["EmptyMessage", "AnotherReply"]);
     var fg2 = new FileGenerator(fd2, options);
 
     link(new GenerationOptions(), [fg, fg2]);
diff --git a/test/goldens/client b/test/goldens/client
index 52fa215..31dee56 100644
--- a/test/goldens/client
+++ b/test/goldens/client
@@ -6,9 +6,9 @@
     var emptyResponse = new SomeReply();
     return _client.invoke<SomeReply>(ctx, 'Test', 'AMethod', request, emptyResponse);
   }
-  Future<$foo$bar.AnotherReply> anotherMethod($pb.ClientContext ctx, $foo$bar.EmptyMessage request) {
-    var emptyResponse = new $foo$bar.AnotherReply();
-    return _client.invoke<$foo$bar.AnotherReply>(ctx, 'Test', 'AnotherMethod', request, emptyResponse);
+  Future<$0.AnotherReply> anotherMethod($pb.ClientContext ctx, $0.EmptyMessage request) {
+    var emptyResponse = new $0.AnotherReply();
+    return _client.invoke<$0.AnotherReply>(ctx, 'Test', 'AnotherMethod', request, emptyResponse);
   }
 }
 
diff --git a/test/goldens/grpc_service.pb b/test/goldens/grpc_service.pb
index 6bca039..84d08bb 100644
--- a/test/goldens/grpc_service.pb
+++ b/test/goldens/grpc_service.pb
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/test/goldens/grpc_service.pbgrpc b/test/goldens/grpc_service.pbgrpc
index d996771..3877a3c 100644
--- a/test/goldens/grpc_service.pbgrpc
+++ b/test/goldens/grpc_service.pbgrpc
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 import 'dart:async';
 
diff --git a/test/goldens/header_in_package.pb b/test/goldens/header_in_package.pb
index a04916a..e77372f 100644
--- a/test/goldens/header_in_package.pb
+++ b/test/goldens/header_in_package.pb
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/test/goldens/header_with_fixnum.pb b/test/goldens/header_with_fixnum.pb
index 788d114..dbb4437 100644
--- a/test/goldens/header_with_fixnum.pb
+++ b/test/goldens/header_with_fixnum.pb
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/test/goldens/imports.pb b/test/goldens/imports.pb
index 31f37c1..cc0b0f1 100644
--- a/test/goldens/imports.pb
+++ b/test/goldens/imports.pb
@@ -1,21 +1,21 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
 
 import 'package:protobuf/protobuf.dart' as $pb;
 
-import 'package1.pb.dart' as $p1;
-import 'package2.pb.dart' as $p2;
+import 'package1.pb.dart' as $0;
+import 'package2.pb.dart' as $1;
 
 class M extends $pb.GeneratedMessage {
   static final $pb.BuilderInfo _i = new $pb.BuilderInfo('M')
     ..a<M>(1, 'm', $pb.PbFieldType.OM, M.getDefault, M.create)
-    ..a<$p1.M>(2, 'm1', $pb.PbFieldType.OM, $p1.M.getDefault, $p1.M.create)
-    ..a<$p2.M>(3, 'm2', $pb.PbFieldType.OM, $p2.M.getDefault, $p2.M.create)
+    ..a<$0.M>(2, 'm1', $pb.PbFieldType.OM, $0.M.getDefault, $0.M.create)
+    ..a<$1.M>(3, 'm2', $pb.PbFieldType.OM, $1.M.getDefault, $1.M.create)
     ..hasRequiredFields = false
   ;
 
@@ -38,13 +38,13 @@
   bool hasM() => $_has(0);
   void clearM() => clearField(1);
 
-  $p1.M get m1 => $_getN(1);
-  set m1($p1.M v) { setField(2, v); }
+  $0.M get m1 => $_getN(1);
+  set m1($0.M v) { setField(2, v); }
   bool hasM1() => $_has(1);
   void clearM1() => clearField(2);
 
-  $p2.M get m2 => $_getN(2);
-  set m2($p2.M v) { setField(3, v); }
+  $1.M get m2 => $_getN(2);
+  set m2($1.M v) { setField(3, v); }
   bool hasM2() => $_has(2);
   void clearM2() => clearField(3);
 }
diff --git a/test/goldens/imports.pbjson b/test/goldens/imports.pbjson
index 325f725..5792ad6 100644
--- a/test/goldens/imports.pbjson
+++ b/test/goldens/imports.pbjson
@@ -1,5 +1,5 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
diff --git a/test/goldens/oneMessage.pb b/test/goldens/oneMessage.pb
index f952864..32aac30 100644
--- a/test/goldens/oneMessage.pb
+++ b/test/goldens/oneMessage.pb
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/test/goldens/oneMessage.pbjson b/test/goldens/oneMessage.pbjson
index dcc2fea..6491be2 100644
--- a/test/goldens/oneMessage.pbjson
+++ b/test/goldens/oneMessage.pbjson
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 const PhoneNumber$json = const {
   '1': 'PhoneNumber',
diff --git a/test/goldens/service.pb b/test/goldens/service.pb
index 72a7084..c2a72c5 100644
--- a/test/goldens/service.pb
+++ b/test/goldens/service.pb
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 import 'dart:async';
 // ignore: UNUSED_SHOWN_NAME
diff --git a/test/goldens/service.pbserver b/test/goldens/service.pbserver
index 92953f8..9e67e8a 100644
--- a/test/goldens/service.pbserver
+++ b/test/goldens/service.pbserver
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 import 'dart:async';
 
diff --git a/test/goldens/serviceGenerator b/test/goldens/serviceGenerator
index affe065..c6a5ac7 100644
--- a/test/goldens/serviceGenerator
+++ b/test/goldens/serviceGenerator
@@ -1,11 +1,11 @@
 abstract class TestServiceBase extends GeneratedService {
   Future<SomeReply> aMethod(ServerContext ctx, SomeRequest request);
-  Future<$foo$bar.AnotherReply> anotherMethod(ServerContext ctx, $foo$bar.EmptyMessage request);
+  Future<$0.AnotherReply> anotherMethod(ServerContext ctx, $0.EmptyMessage request);
 
   GeneratedMessage createRequest(String method) {
     switch (method) {
       case 'AMethod': return new SomeRequest();
-      case 'AnotherMethod': return new $foo$bar.EmptyMessage();
+      case 'AnotherMethod': return new $0.EmptyMessage();
       default: throw new ArgumentError('Unknown method: $method');
     }
   }
diff --git a/test/goldens/topLevelEnum.pb b/test/goldens/topLevelEnum.pb
index da45d78..c69577f 100644
--- a/test/goldens/topLevelEnum.pb
+++ b/test/goldens/topLevelEnum.pb
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/test/goldens/topLevelEnum.pbenum b/test/goldens/topLevelEnum.pbenum
index b60f0e4..2559b05 100644
--- a/test/goldens/topLevelEnum.pbenum
+++ b/test/goldens/topLevelEnum.pbenum
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 // ignore_for_file: UNDEFINED_SHOWN_NAME,UNUSED_SHOWN_NAME
 import 'dart:core' show int, dynamic, String, List, Map;
diff --git a/test/goldens/topLevelEnum.pbjson b/test/goldens/topLevelEnum.pbjson
index 5a3b7f1..dfda97d 100644
--- a/test/goldens/topLevelEnum.pbjson
+++ b/test/goldens/topLevelEnum.pbjson
@@ -1,7 +1,7 @@
 ///
 //  Generated code. Do not modify.
 ///
-// ignore_for_file: non_constant_identifier_names,library_prefixes
+// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
 
 const PhoneType$json = const {
   '1': 'PhoneType',
diff --git a/test/service_generator_test.dart b/test/service_generator_test.dart
index d2ba2ce..3c4ef2a 100644
--- a/test/service_generator_test.dart
+++ b/test/service_generator_test.dart
@@ -15,11 +15,13 @@
 void main() {
   test('testServiceGenerator', () {
     var options = new GenerationOptions();
-    var fd = buildFileDescriptor("testpkg", ["SomeRequest", "SomeReply"]);
+    var fd = buildFileDescriptor(
+        "testpkg", "testpkg.proto", ["SomeRequest", "SomeReply"]);
     fd.service.add(buildServiceDescriptor());
     var fg = new FileGenerator(fd, options);
 
-    var fd2 = buildFileDescriptor("foo.bar", ["EmptyMessage", "AnotherReply"]);
+    var fd2 = buildFileDescriptor(
+        "foo.bar", "foobar.proto", ["EmptyMessage", "AnotherReply"]);
     var fg2 = new FileGenerator(fd2, options);
 
     link(new GenerationOptions(), [fg, fg2]);
diff --git a/test/service_util.dart b/test/service_util.dart
index ca16c28..0f8ffec 100644
--- a/test/service_util.dart
+++ b/test/service_util.dart
@@ -22,10 +22,11 @@
   return sd;
 }
 
-FileDescriptorProto buildFileDescriptor(String package, List<String> messages) {
+FileDescriptorProto buildFileDescriptor(
+    String package, String fileUri, List<String> messages) {
   var fd = new FileDescriptorProto()
     ..package = package
-    ..name = 'test';
+    ..name = fileUri;
   for (var name in messages) {
     var md = new DescriptorProto()..name = name;
 
