diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index cf0642a..0ec8839 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -1709,6 +1709,7 @@
         self.replacement_prefix = None
         self.name_mapping = {}
         self.reverse_name_mapping = {}
+        self.canonical_base = Names(fdesc.package.split('.'))
 
         if self.mangle_names == nanopb_pb2.M_STRIP_PACKAGE:
             self.strip_prefix = "." + fdesc.package
@@ -1747,7 +1748,7 @@
                     (self.mangle_names, self.reverse_name_mapping[str(new_name)], names, new_name))
 
             self.name_mapping[str(names)] = new_name
-            self.reverse_name_mapping[str(new_name)] = names
+            self.reverse_name_mapping[str(new_name)] = self.canonical_base + names
 
         return self.name_mapping[str(names)]
 
@@ -1769,6 +1770,9 @@
 
         return typename
 
+    def unmangle(self, names):
+        return self.reverse_name_mapping.get(str(names), names)
+
 class ProtoFile:
     def __init__(self, fdesc, file_options):
         '''Takes a FileDescriptorProto and parses it.'''
@@ -1839,10 +1843,12 @@
     def add_dependency(self, other):
         for enum in other.enums:
             self.dependencies[str(enum.names)] = enum
+            self.dependencies[str(other.manglenames.unmangle(enum.names))] = enum
             enum.protofile = other
 
         for msg in other.messages:
             self.dependencies[str(msg.name)] = msg
+            self.dependencies[str(other.manglenames.unmangle(msg.name))] = msg
             msg.protofile = other
 
         # Fix field default values where enum short names are used.
@@ -2044,6 +2050,15 @@
                       yield '#define %s_msgid %d\n' % (msg.name, msg.msgid)
               yield '\n'
 
+        if self.manglenames.mangle_names != nanopb_pb2.M_NONE:
+            pairs = [x for x in self.manglenames.reverse_name_mapping.items() if str(x[0]) != str(x[1])]
+            if pairs:
+                modename = nanopb_pb2.TypenameMangling.Name(self.manglenames.mangle_names)
+                yield '/* Mapping from canonical names for the mangle_names=%s option */\n' % modename
+                for shortname, longname in pairs:
+                    yield '#define %s %s\n' % (longname, shortname)
+                yield '\n'
+
         yield '#ifdef __cplusplus\n'
         yield '} /* extern "C" */\n'
         yield '#endif\n'
diff --git a/tests/regression/issue_783/SConscript b/tests/regression/issue_783/SConscript
new file mode 100644
index 0000000..4088be5
--- /dev/null
+++ b/tests/regression/issue_783/SConscript
@@ -0,0 +1,13 @@
+# Regression test for issue #783:
+# Could not find enum type when using mangle_names:M_STRIP_PACKAGE
+# when using multiple packages.
+
+Import('env')
+
+incpath = env.Clone()
+incpath.Append(CPPPATH="$BUILD/regression/issue_783")
+incpath.NanopbProto(['folder_A/file_A', 'folder_A/file_A.options'])
+incpath.NanopbProto(['folder_B/file_B'])
+
+incpath.Object('folder_A/file_A.pb.c')
+incpath.Object('folder_B/file_B.pb.c')
diff --git a/tests/regression/issue_783/folder_A/file_A.options b/tests/regression/issue_783/folder_A/file_A.options
new file mode 100644
index 0000000..d9b4e41
--- /dev/null
+++ b/tests/regression/issue_783/folder_A/file_A.options
@@ -0,0 +1 @@
+* mangle_names:M_STRIP_PACKAGE
diff --git a/tests/regression/issue_783/folder_A/file_A.proto b/tests/regression/issue_783/folder_A/file_A.proto
new file mode 100644
index 0000000..f9d8fcd
--- /dev/null
+++ b/tests/regression/issue_783/folder_A/file_A.proto
@@ -0,0 +1,7 @@
+syntax = "proto2";
+package folder_A;
+enum my_enum {
+    ENUM_0 = 0;
+    ENUM_1 = 1;
+    ENUM_2 = 2;
+}
diff --git a/tests/regression/issue_783/folder_B/file_B.proto b/tests/regression/issue_783/folder_B/file_B.proto
new file mode 100644
index 0000000..efb2ca3
--- /dev/null
+++ b/tests/regression/issue_783/folder_B/file_B.proto
@@ -0,0 +1,6 @@
+syntax = "proto2";
+package folder_B;
+import "folder_A/file_A.proto";
+message dummy  {
+    required folder_A.my_enum value  = 1;
+}
