diff --git a/Text/ProtocolBuffers/ProtoCompile.hs b/Text/ProtocolBuffers/ProtoCompile.hs
--- a/Text/ProtocolBuffers/ProtoCompile.hs
+++ b/Text/ProtocolBuffers/ProtoCompile.hs
@@ -5,7 +5,6 @@
 import Control.Monad.State(State, execState, modify)
 import qualified Data.ByteString.Lazy.Char8 as LC (hGetContents, hPut, pack, unpack)
 import Data.Foldable (toList)
-import Data.List(break)
 import qualified Data.Sequence as Seq (fromList,singleton)
 import Data.Sequence ((|>))
 import Data.Version(showVersion)
@@ -25,7 +24,7 @@
 
 import qualified Text.DescriptorProtos.FileDescriptorProto as D(FileDescriptorProto)
 import qualified Text.DescriptorProtos.FileDescriptorProto as D.FileDescriptorProto(FileDescriptorProto(..))
-import qualified Text.DescriptorProtos.FileDescriptorSet   as D(FileDescriptorSet)
+-- import qualified Text.DescriptorProtos.FileDescriptorSet   as D(FileDescriptorSet)
 import qualified Text.DescriptorProtos.FileDescriptorSet   as D.FileDescriptorSet(FileDescriptorSet(..))
 
 import Text.ProtocolBuffers.ProtoCompile.BreakRecursion(makeResult)
diff --git a/Text/ProtocolBuffers/ProtoCompile/MakeReflections.hs b/Text/ProtocolBuffers/ProtoCompile/MakeReflections.hs
--- a/Text/ProtocolBuffers/ProtoCompile/MakeReflections.hs
+++ b/Text/ProtocolBuffers/ProtoCompile/MakeReflections.hs
@@ -27,9 +27,9 @@
 import qualified Text.DescriptorProtos.EnumValueDescriptorProto       as D.EnumValueDescriptorProto(EnumValueDescriptorProto(..))
 import qualified Text.DescriptorProtos.FieldDescriptorProto           as D(FieldDescriptorProto) 
 import qualified Text.DescriptorProtos.FieldDescriptorProto           as D.FieldDescriptorProto(FieldDescriptorProto(..)) 
-import qualified Text.DescriptorProtos.FieldDescriptorProto.Label     as D.FieldDescriptorProto(Label)
+-- import qualified Text.DescriptorProtos.FieldDescriptorProto.Label     as D.FieldDescriptorProto(Label)
 import           Text.DescriptorProtos.FieldDescriptorProto.Label     as D.FieldDescriptorProto.Label(Label(..))
-import qualified Text.DescriptorProtos.FieldDescriptorProto.Type      as D.FieldDescriptorProto(Type)
+-- import qualified Text.DescriptorProtos.FieldDescriptorProto.Type      as D.FieldDescriptorProto(Type)
 import           Text.DescriptorProtos.FieldDescriptorProto.Type      as D.FieldDescriptorProto.Type(Type(..))
 import qualified Text.DescriptorProtos.FieldOptions                   as D(FieldOptions(FieldOptions))
 import qualified Text.DescriptorProtos.FieldOptions                   as D.FieldOptions(FieldOptions(..))
diff --git a/Text/ProtocolBuffers/ProtoCompile/Parser.hs b/Text/ProtocolBuffers/ProtoCompile/Parser.hs
--- a/Text/ProtocolBuffers/ProtoCompile/Parser.hs
+++ b/Text/ProtocolBuffers/ProtoCompile/Parser.hs
@@ -10,49 +10,48 @@
 
 import qualified Text.DescriptorProtos.DescriptorProto                as D(DescriptorProto)
 import qualified Text.DescriptorProtos.DescriptorProto                as D.DescriptorProto(DescriptorProto(..))
-import qualified Text.DescriptorProtos.DescriptorProto.ExtensionRange as D(ExtensionRange)
+-- import qualified Text.DescriptorProtos.DescriptorProto.ExtensionRange as D(ExtensionRange)
 import qualified Text.DescriptorProtos.DescriptorProto.ExtensionRange as D.ExtensionRange(ExtensionRange(..))
 import qualified Text.DescriptorProtos.EnumDescriptorProto            as D(EnumDescriptorProto)
 import qualified Text.DescriptorProtos.EnumDescriptorProto            as D.EnumDescriptorProto(EnumDescriptorProto(..))
-import qualified Text.DescriptorProtos.EnumOptions                    as D(EnumOptions)
+-- import qualified Text.DescriptorProtos.EnumOptions                    as D(EnumOptions)
 import qualified Text.DescriptorProtos.EnumOptions                    as D.EnumOptions(EnumOptions(..))
 import qualified Text.DescriptorProtos.EnumValueDescriptorProto       as D(EnumValueDescriptorProto)
 import qualified Text.DescriptorProtos.EnumValueDescriptorProto       as D.EnumValueDescriptorProto(EnumValueDescriptorProto(..))
-import qualified Text.DescriptorProtos.EnumValueOptions               as D(EnumValueOptions)
+-- import qualified Text.DescriptorProtos.EnumValueOptions               as D(EnumValueOptions)
 import qualified Text.DescriptorProtos.EnumValueOptions               as D.EnumValueOptions(EnumValueOptions(..))
 import qualified Text.DescriptorProtos.FieldDescriptorProto           as D(FieldDescriptorProto)
 import qualified Text.DescriptorProtos.FieldDescriptorProto           as D.FieldDescriptorProto(FieldDescriptorProto(..))
 import           Text.DescriptorProtos.FieldDescriptorProto.Label
-import qualified Text.DescriptorProtos.FieldDescriptorProto.Type      as D.FieldDescriptorProto(Type)
+-- import qualified Text.DescriptorProtos.FieldDescriptorProto.Type      as D.FieldDescriptorProto(Type)
 import           Text.DescriptorProtos.FieldDescriptorProto.Type         (Type(..))
-import qualified Text.DescriptorProtos.FieldOptions                   as D(FieldOptions)
+-- import qualified Text.DescriptorProtos.FieldOptions                   as D(FieldOptions)
 import qualified Text.DescriptorProtos.FieldOptions                   as D.FieldOptions(FieldOptions(..))
 import qualified Text.DescriptorProtos.FileDescriptorProto            as D(FileDescriptorProto)
 import qualified Text.DescriptorProtos.FileDescriptorProto            as D.FileDescriptorProto(FileDescriptorProto(..))
-import qualified Text.DescriptorProtos.FileOptions                    as D(FileOptions)
+-- import qualified Text.DescriptorProtos.FileOptions                    as D(FileOptions)
 import qualified Text.DescriptorProtos.FileOptions                    as D.FileOptions(FileOptions(..))
-import qualified Text.DescriptorProtos.MessageOptions                 as D(MessageOptions)
+-- import qualified Text.DescriptorProtos.MessageOptions                 as D(MessageOptions)
 import qualified Text.DescriptorProtos.MessageOptions                 as D.MessageOptions(MessageOptions(..))
 import qualified Text.DescriptorProtos.MethodDescriptorProto          as D(MethodDescriptorProto)
 import qualified Text.DescriptorProtos.MethodDescriptorProto          as D.MethodDescriptorProto(MethodDescriptorProto(..))
-import qualified Text.DescriptorProtos.MethodOptions                  as D(MethodOptions)
+-- import qualified Text.DescriptorProtos.MethodOptions                  as D(MethodOptions)
 import qualified Text.DescriptorProtos.MethodOptions                  as D.MethodOptions(MethodOptions(..))
 import qualified Text.DescriptorProtos.ServiceDescriptorProto         as D(ServiceDescriptorProto)
 import qualified Text.DescriptorProtos.ServiceDescriptorProto         as D.ServiceDescriptorProto(ServiceDescriptorProto(..))
-import qualified Text.DescriptorProtos.ServiceOptions                 as D(ServiceOptions)
+-- import qualified Text.DescriptorProtos.ServiceOptions                 as D(ServiceOptions)
 import qualified Text.DescriptorProtos.ServiceOptions                 as D.ServiceOptions(ServiceOptions(..))
 import qualified Text.DescriptorProtos.UninterpretedOption            as D(UninterpretedOption)
 import qualified Text.DescriptorProtos.UninterpretedOption            as D.UninterpretedOption(UninterpretedOption(..))
-import qualified Text.DescriptorProtos.UninterpretedOption.NamePart   as D(NamePart)
+-- import qualified Text.DescriptorProtos.UninterpretedOption.NamePart   as D(NamePart)
 import qualified Text.DescriptorProtos.UninterpretedOption.NamePart   as D.NamePart(NamePart(..))
 
 import Text.ProtocolBuffers.Basic
 import Text.ProtocolBuffers.Identifiers
-import Text.ProtocolBuffers.Header(ByteString,Int32,Int64,Word32,Word64
-                                  ,ReflectEnum(reflectEnumInfo),enumName)
+import Text.ProtocolBuffers.Header(ReflectEnum(reflectEnumInfo),enumName)
 import Text.ProtocolBuffers.ProtoCompile.Lexer(Lexed(..),alexScanTokens,getLinePos)
 import Text.ProtocolBuffers.ProtoCompile.Instances(parseLabel,parseType)
-import Text.ProtocolBuffers.Reflections()
+-- import Text.ProtocolBuffers.Reflections()
 
 import Control.Monad(when,liftM2,liftM3)
 import qualified Data.ByteString.Lazy.Char8 as LC(notElem,head)
@@ -367,7 +366,7 @@
 
 defaultConstant LABEL_REPEATED _ = pName (U.fromString "default") >> fail "Repeated fields cannot have a default value"
 defaultConstant _ mt = do
-  pName (U.fromString "default")
+  _ <- pName (U.fromString "default")
   maybeDefault <- pChar '=' >> fmap Just (constant mt)
   -- XXX Hack: we lie about Utf8 for the default_value below
   update' (\s -> s { D.FieldDescriptorProto.default_value = fmap Utf8 maybeDefault })
@@ -519,7 +518,7 @@
 rpc = pName (U.fromString "rpc") >> do
   name <- ident1
   input <- between (pChar '(') (pChar ')') ident1
-  pName (U.fromString "returns")
+  _ <- pName (U.fromString "returns")
   output <- between (pChar '(') (pChar ')') ident1
   let m1 = defaultValue { D.MethodDescriptorProto.name=Just name
                         , D.MethodDescriptorProto.input_type=Just input
diff --git a/Text/ProtocolBuffers/ProtoCompile/Resolve.hs b/Text/ProtocolBuffers/ProtoCompile/Resolve.hs
--- a/Text/ProtocolBuffers/ProtoCompile/Resolve.hs
+++ b/Text/ProtocolBuffers/ProtoCompile/Resolve.hs
@@ -3,6 +3,10 @@
 
   what about keys 'extendee' resolution to Message names only? expectM in entityField
 
+  makeTopLevel is the main internal entry point in this module.
+  This is called from loadProto' which has two callers:
+  loadProto and loadCodeGenRequest
+
 -}
 
 -- | This huge module handles the loading and name resolution.  The
@@ -36,19 +40,19 @@
 import qualified Text.DescriptorProtos.UninterpretedOption            as D.UninterpretedOption(UninterpretedOption(..))
 import qualified Text.DescriptorProtos.UninterpretedOption.NamePart   as D(NamePart(NamePart))
 import qualified Text.DescriptorProtos.UninterpretedOption.NamePart   as D.NamePart(NamePart(..))
-import qualified Text.DescriptorProtos.EnumOptions      as D(EnumOptions)
+-- import qualified Text.DescriptorProtos.EnumOptions      as D(EnumOptions)
 import qualified Text.DescriptorProtos.EnumOptions      as D.EnumOptions(EnumOptions(uninterpreted_option))
-import qualified Text.DescriptorProtos.EnumValueOptions as D(EnumValueOptions)
+-- import qualified Text.DescriptorProtos.EnumValueOptions as D(EnumValueOptions)
 import qualified Text.DescriptorProtos.EnumValueOptions as D.EnumValueOptions(EnumValueOptions(uninterpreted_option))
 import qualified Text.DescriptorProtos.FieldOptions     as D(FieldOptions(FieldOptions))
 import qualified Text.DescriptorProtos.FieldOptions     as D.FieldOptions(FieldOptions(packed,uninterpreted_option))
-import qualified Text.DescriptorProtos.FileOptions      as D(FileOptions)
+-- import qualified Text.DescriptorProtos.FileOptions      as D(FileOptions)
 import qualified Text.DescriptorProtos.FileOptions      as D.FileOptions(FileOptions(..))
-import qualified Text.DescriptorProtos.MessageOptions   as D(MessageOptions)
+-- import qualified Text.DescriptorProtos.MessageOptions   as D(MessageOptions)
 import qualified Text.DescriptorProtos.MessageOptions   as D.MessageOptions(MessageOptions(uninterpreted_option))
-import qualified Text.DescriptorProtos.MethodOptions    as D(MethodOptions)
+-- import qualified Text.DescriptorProtos.MethodOptions    as D(MethodOptions)
 import qualified Text.DescriptorProtos.MethodOptions    as D.MethodOptions(MethodOptions(uninterpreted_option))
-import qualified Text.DescriptorProtos.ServiceOptions   as D(ServiceOptions)
+-- import qualified Text.DescriptorProtos.ServiceOptions   as D(ServiceOptions)
 import qualified Text.DescriptorProtos.ServiceOptions   as D.ServiceOptions(ServiceOptions(uninterpreted_option))
 
 import qualified Text.Google.Protobuf.Compiler.CodeGeneratorRequest as CGR
@@ -69,10 +73,10 @@
 import Data.Char
 import Data.Ratio
 import Data.Ix(inRange)
-import Data.List(foldl',stripPrefix,lookup,isPrefixOf,isSuffixOf)
-import Data.Map(Map, keys)
+import Data.List(foldl',stripPrefix,isPrefixOf,isSuffixOf)
+import Data.Map(Map)
 import Data.Maybe(mapMaybe)
-import Data.Monoid(Monoid(..))
+-- import Data.Monoid()
 import System.Directory
 import qualified System.FilePath as Local(pathSeparator,splitDirectories,joinPath,combine,makeRelative)
 import qualified System.FilePath.Posix as Canon(pathSeparator,splitDirectories,joinPath,takeBaseName)
@@ -476,7 +480,7 @@
   makeOne fdp = do
     -- Create 'template' :: ProtoName using "Text.ProtocolBuffers.Identifiers"
     let rawPackage = getPackage fdp
-    lift (checkDIUtf8 rawPackage) -- guard-like effect
+    _ <- lift (checkDIUtf8 rawPackage) -- guard-like effect
     let packageName = difi (DIName rawPackage)
     rawParent <- getJust "makeNameMap.makeOne: " . msum $
         [ D.FileOptions.java_outer_classname =<< (D.FileDescriptorProto.options fdp)
@@ -569,9 +573,13 @@
 makeTopLevel fdp packageName imports = mdo
   filePath <- getJust "makeTopLevel.filePath" (D.FileDescriptorProto.name fdp)
   let sEnv = SEnv packageName global
-      groupNames = mapMaybe validI . map toString . mapMaybe D.FieldDescriptorProto.type_name
+      -- There should be no TYPE_GROUP in the extension list here, but to be safe:
+      groupNamesRaw = map toString . mapMaybe D.FieldDescriptorProto.type_name
                  . filter (maybe False (TYPE_GROUP ==) . D.FieldDescriptorProto.type') 
                  $ (F.toList . D.FileDescriptorProto.extension $ fdp)
+      groupNamesI = mapMaybe validI groupNamesRaw
+      groupNamesDI = mapMaybe validDI groupNamesRaw  -- These fully qualified names from using hprotoc as a plugin for protoc
+      groupNames = groupNamesI ++ map (last . splitDI) groupNamesDI
       isGroup = (`elem` groupNames)
   global <- runSE sEnv (do
     (bads,children) <- fmap unzip . sequence $
@@ -600,15 +608,21 @@
 
  *** -}
 
+-- Fix this to look at groupNamesDI as well as the original list of groupNamesI.  This fixes a bug
+-- in the plug-in usage because protoc will have already resolved the type_name to a fully qualified
+-- name.
 entityMsg :: (IName String -> Bool) -> D.DescriptorProto -> SE (IName String,Entity)
 entityMsg isGroup dp = annErr ("entityMsg DescriptorProto name is "++show (D.DescriptorProto.name dp)) $ mdo
   (self,names) <- getNames "entityMsg.name" D.DescriptorProto.name dp
   numbers <- fmap Set.fromList . mapM (getJust "entityMsg.field.number" . D.FieldDescriptorProto.number) . F.toList . D.DescriptorProto.field $ dp
   when (Set.size numbers /= Seq.length (D.DescriptorProto.field dp)) $
     throwError $ "entityMsg.field.number: There must be duplicate field numbers for "++show names++"\n "++show numbers
-  let groupNames = mapMaybe validI . map toString . mapMaybe D.FieldDescriptorProto.type_name
-                 . filter (maybe False (TYPE_GROUP ==) . D.FieldDescriptorProto.type') 
-                 $ (F.toList . D.DescriptorProto.field $ dp) ++ (F.toList . D.DescriptorProto.extension $ dp)
+  let groupNamesRaw = map toString . mapMaybe D.FieldDescriptorProto.type_name
+                      . filter (maybe False (TYPE_GROUP ==) . D.FieldDescriptorProto.type') 
+                      $ (F.toList . D.DescriptorProto.field $ dp) ++ (F.toList . D.DescriptorProto.extension $ dp)
+      groupNamesI = mapMaybe validI groupNamesRaw
+      groupNamesDI = mapMaybe validDI groupNamesRaw  -- These fully qualified names from using hprotoc as a plugin for protoc
+      groupNames = groupNamesI ++ map (last . splitDI) groupNamesDI
       isGroup' = (`elem` groupNames)
   entity <- descend names entity $ do
     (bads,children) <- fmap unzip . sequence $
@@ -661,7 +675,7 @@
 
 entityEnumValue :: D.EnumValueDescriptorProto -> SE ()
 entityEnumValue evdp = do -- Merely use getNames to add mangled self to ReMap state
-  getNames "entityEnumValue.name" D.EnumValueDescriptorProto.name evdp
+  _ <- getNames "entityEnumValue.name" D.EnumValueDescriptorProto.name evdp
   return ()
 
 entityService :: D.ServiceDescriptorProto -> SE (IName String,Entity)
@@ -1105,7 +1119,7 @@
             imports <- mapM (fmap getTL . load parents) importList
             let eEnv = makeTopLevel parsed'fdp packageName imports
             global'env <- either (loadFailed file) return eEnv
-            either (loadFailed file) return (top'FDP . getTL $ global'env)
+            _ <- either (loadFailed file) return (top'FDP . getTL $ global'env)
             modify (M.insert file global'env) -- add to memorized results
             return global'env
 
diff --git a/hprotoc.cabal b/hprotoc.cabal
--- a/hprotoc.cabal
+++ b/hprotoc.cabal
@@ -1,5 +1,5 @@
 name:           hprotoc
-version:        1.7.9
+version:        1.8.0
 cabal-version:  >= 1.6
 build-type:     Simple
 license:        BSD3
@@ -25,7 +25,7 @@
   Hs-Source-Dirs:  .,protoc-gen-haskell
   build-tools:     alex
   ghc-options:     -O2 -Wall
-  build-depends:   protocol-buffers == 1.7.9, protocol-buffers-descriptor == 1.7.9
+  build-depends:   protocol-buffers == 1.8.0, protocol-buffers-descriptor == 1.8.0
   build-depends:   binary, utf8-string
   build-depends:   parsec < 3, haskell-src-exts >= 1.7.0,
                    containers,bytestring,array,
