diff --git a/modules/mol/mm/src/AMBER03.dat b/modules/mol/mm/src/AMBER03.dat
index 69e7d22171f447229ce354d731773876fcba7bd4..7d32c451a64af301bc928da08cc117823e82d12b 100644
Binary files a/modules/mol/mm/src/AMBER03.dat and b/modules/mol/mm/src/AMBER03.dat differ
diff --git a/modules/mol/mm/src/CHARMM27.dat b/modules/mol/mm/src/CHARMM27.dat
index 9a9459fb0c9882ff4db05a70560389124a73f2e6..e9bcaaef38b2fdbf2a862d9cf95116608946450c 100644
Binary files a/modules/mol/mm/src/CHARMM27.dat and b/modules/mol/mm/src/CHARMM27.dat differ
diff --git a/modules/mol/mm/src/ff_reader.cc b/modules/mol/mm/src/ff_reader.cc
index dd14426c8f13145fdf66ee32e07c5d89130e18ce..54d09bd205a2b9b4ccbe7f7879c9689d53fd1fdc 100644
--- a/modules/mol/mm/src/ff_reader.cc
+++ b/modules/mol/mm/src/ff_reader.cc
@@ -304,7 +304,6 @@ std::vector<std::vector<String> > MMPreprocessor::ReadFile(const String& filenam
     throw ost::io::IOException(ss.str());
   }
 
-  std::vector<String> file_content;
   std::vector<std::vector<String> > split_file_content;
   String string_line;
   ost::StringRef stringref_line;
@@ -313,28 +312,24 @@ std::vector<std::vector<String> > MMPreprocessor::ReadFile(const String& filenam
 
   while(file.good()){
     std::getline(file,string_line);
-    file_content.push_back(string_line);
-  }
-
-  //splitting the stuff up. Everything in a line coming after an element starting
-  //with a colon or exclamation mark, is neglected. (wont neglect anything of: 
-  //ab! c, but will neglect the second item of: ab !c)
-  for(std::vector<String>::iterator i = file_content.begin(); 
-      i!=file_content.end(); ++i){
-    stringref_line = ost::StringRef(i->c_str(),i->length());
-    data = stringref_line.split();
-    if(data.empty()) continue;
-    fill_data.clear();
-    for(std::vector<ost::StringRef>::iterator j = data.begin();
-        j!=data.end(); ++j){
-      //if(*(j->begin()) == ';' || *(j->begin()) == '*'){
-      if(*(j->begin()) == ';' || *(j->begin()) == '!'){
-        break;
+    stringref_line = ost::StringRef(string_line.c_str(), string_line.length());
+    stringref_line = stringref_line.trim();
+    if(stringref_line.size() != 0 && stringref_line[0] != ';') {
+      // Everything after ; is considered to be comment, so we
+      // already filter that out
+      data = stringref_line.split(';');
+      if(!data.empty()){
+        // lets split the remaining stuff
+        data = data[0].split();
+        fill_data.clear();
+        for(std::vector<ost::StringRef>::iterator it = data.begin();
+            it!=data.end(); ++it){
+          fill_data.push_back(it->str());
+        } 
+
+        split_file_content.push_back(fill_data);
       }
-     fill_data.push_back(j->str());
-    } 
-    if(fill_data.empty()) continue;
-    split_file_content.push_back(fill_data);
+    }
   }
 
   //handling linebreaks ("\")
diff --git a/modules/mol/mm/tests/AMBER03.dat b/modules/mol/mm/tests/AMBER03.dat
index 69e7d22171f447229ce354d731773876fcba7bd4..7d32c451a64af301bc928da08cc117823e82d12b 100644
Binary files a/modules/mol/mm/tests/AMBER03.dat and b/modules/mol/mm/tests/AMBER03.dat differ
diff --git a/modules/mol/mm/tests/CHARMM27.dat b/modules/mol/mm/tests/CHARMM27.dat
index 9a9459fb0c9882ff4db05a70560389124a73f2e6..e9bcaaef38b2fdbf2a862d9cf95116608946450c 100644
Binary files a/modules/mol/mm/tests/CHARMM27.dat and b/modules/mol/mm/tests/CHARMM27.dat differ