diff --git a/Source/cmDependsJavaParserHelper.cxx b/Source/cmDependsJavaParserHelper.cxx
index bd3ee4d531e3c482348671792e48fc04f8f1c11f..238e7a149a610021d7826afba658ab772909eb73 100644
--- a/Source/cmDependsJavaParserHelper.cxx
+++ b/Source/cmDependsJavaParserHelper.cxx
@@ -35,7 +35,7 @@ cmDependsJavaParserHelper::~cmDependsJavaParserHelper()
 }
 
 void cmDependsJavaParserHelper::CurrentClass::AddFileNamesForPrinting(
-  std::vector<std::string>* files, const char* prefix, const char* sep)
+  std::vector<std::string>* files, const char* prefix, const char* sep) const
 {
   std::string rname = "";
   if (prefix) {
@@ -44,8 +44,8 @@ void cmDependsJavaParserHelper::CurrentClass::AddFileNamesForPrinting(
   }
   rname += this->Name;
   files->push_back(rname);
-  std::vector<CurrentClass>::iterator it;
-  for (it = this->NestedClasses->begin(); it != this->NestedClasses->end();
+  std::vector<CurrentClass>::const_iterator it;
+  for (it = this->NestedClasses.begin(); it != this->NestedClasses.end();
        ++it) {
     it->AddFileNamesForPrinting(files, rname.c_str(), sep);
   }
@@ -191,25 +191,19 @@ void cmDependsJavaParserHelper::StartClass(const char* cls)
 
 void cmDependsJavaParserHelper::EndClass()
 {
-  CurrentClass* parent = 0;
-  CurrentClass* current = 0;
-  if (!this->ClassStack.empty()) {
-    current = &(*(this->ClassStack.end() - 1));
-    if (this->ClassStack.size() > 1) {
-      parent = &(*(this->ClassStack.end() - 2));
-    }
-  }
-  if (current == 0) {
+  if (this->ClassStack.empty()) {
     std::cerr << "Error when parsing. Current class is null" << std::endl;
     abort();
   }
-  if (parent == 0) {
+  if (this->ClassStack.size() <= 1) {
     std::cerr << "Error when parsing. Parent class is null" << std::endl;
     abort();
   }
+  CurrentClass& current = this->ClassStack.back();
+  CurrentClass& parent = this->ClassStack[this->ClassStack.size() - 2];
   this->CurrentDepth--;
-  parent->NestedClasses->push_back(*current);
-  this->ClassStack.erase(this->ClassStack.end() - 1, this->ClassStack.end());
+  parent.NestedClasses.push_back(current);
+  this->ClassStack.pop_back();
 }
 
 void cmDependsJavaParserHelper::PrintClasses()
@@ -228,10 +222,10 @@ void cmDependsJavaParserHelper::PrintClasses()
 std::vector<std::string> cmDependsJavaParserHelper::GetFilesProduced()
 {
   std::vector<std::string> files;
-  CurrentClass* toplevel = &(*(this->ClassStack.begin()));
-  std::vector<CurrentClass>::iterator it;
-  for (it = toplevel->NestedClasses->begin();
-       it != toplevel->NestedClasses->end(); ++it) {
+  CurrentClass const& toplevel = this->ClassStack.front();
+  std::vector<CurrentClass>::const_iterator it;
+  for (it = toplevel.NestedClasses.begin(); it != toplevel.NestedClasses.end();
+       ++it) {
     it->AddFileNamesForPrinting(&files, 0, "$");
   }
   return files;
@@ -309,11 +303,10 @@ int cmDependsJavaParserHelper::LexInput(char* buf, int maxlen)
     if (buf[0] == '\n') {
       this->CurrentLine++;
     }
-    return (1);
-  } else {
-    buf[0] = '\n';
-    return (0);
+    return 1;
   }
+  buf[0] = '\n';
+  return 0;
 }
 void cmDependsJavaParserHelper::Error(const char* str)
 {
diff --git a/Source/cmDependsJavaParserHelper.h b/Source/cmDependsJavaParserHelper.h
index a13d023b8c6e9bd367bcd5a163766d8f80a24479..6ff024563a5f80678945c8f6cf0a72e9f315869c 100644
--- a/Source/cmDependsJavaParserHelper.h
+++ b/Source/cmDependsJavaParserHelper.h
@@ -48,7 +48,7 @@ public:
 
   // For yacc
   void AddClassFound(const char* sclass);
-  void PrepareElement(ParserType* opt);
+  void PrepareElement(ParserType* me);
   void DeallocateParserType(char** pt);
   void CheckEmpty(int line, int cnt, ParserType* pt);
   void StartClass(const char* cls);
@@ -69,20 +69,9 @@ private:
   {
   public:
     std::string Name;
-    std::vector<CurrentClass>* NestedClasses;
-    CurrentClass() { this->NestedClasses = new std::vector<CurrentClass>; }
-    ~CurrentClass() { delete this->NestedClasses; }
-    CurrentClass& operator=(CurrentClass const& c)
-    {
-      this->NestedClasses->clear();
-      this->Name = c.Name;
-      std::copy(c.NestedClasses->begin(), c.NestedClasses->end(),
-                std::back_inserter(*this->NestedClasses));
-      return *this;
-    }
-    CurrentClass(CurrentClass const& c) { (*this) = c; }
+    std::vector<CurrentClass> NestedClasses;
     void AddFileNamesForPrinting(std::vector<std::string>* files,
-                                 const char* prefix, const char* sep);
+                                 const char* prefix, const char* sep) const;
   };
   std::string CurrentPackage;
   std::string::size_type InputBufferPos;