diff --git a/modules/io/src/mol/pdb_reader.cc b/modules/io/src/mol/pdb_reader.cc
index ec0dbaccb37e140bd8227659455beee97f516ad3..fa0357bedd93f340e62e393803b5c19af8ff2a78 100644
--- a/modules/io/src/mol/pdb_reader.cc
+++ b/modules/io/src/mol/pdb_reader.cc
@@ -105,14 +105,15 @@ bool PDBReader::HasNext()
   // a HELIX/SHEET entry implies a next model.
   while (std::getline(in_, curr_line_) && ++line_num_) {
      StringRef curr_line(curr_line_.c_str(), curr_line_.length());
-     if (IEquals(curr_line.substr(0, 6), StringRef("ATOM  ", 6)) ||
+     if (curr_line.size()>5 && 
+         (IEquals(curr_line.substr(0, 6), StringRef("ATOM  ", 6)) ||
          (!(flags_ & PDB::NO_HETATMS) &&
           IEquals(curr_line.substr(0, 6),StringRef("HETATM ", 6))) ||
           IEquals(curr_line.substr(0, 6),StringRef("ANISOU ", 6)) ||
          IEquals(curr_line.substr(0, 6), StringRef("SHEET ", 6)) ||
-         IEquals(curr_line.substr(0, 6), StringRef("HELIX ", 6))) {
+         IEquals(curr_line.substr(0, 6), StringRef("HELIX ", 6)))) {
        return true;
-     } else if (IEquals(curr_line.substr(0, 3), StringRef("END", 3))) {
+     } else if (IEquals(curr_line.rtrim(), StringRef("END", 3))) {
        hard_end_=true;
        return false;
      }
@@ -153,7 +154,7 @@ void PDBReader::Import(mol::EntityHandle& ent,
         if (curr_line.size()<3) {
           continue;
         }
-        if (IEquals(curr_line.substr(0, 3), StringRef("END", 3))) {
+        if (IEquals(curr_line.rtrim(), StringRef("END", 3))) {
           hard_end_=true;
           go_on=false;
           break;
diff --git a/modules/io/src/mol/pdb_writer.cc b/modules/io/src/mol/pdb_writer.cc
index 9251f42b227ae6d8667724689f0b3a68d8dc81bd..8e461a56e95da8aa00b28ed6ef44b1be660b3745 100644
--- a/modules/io/src/mol/pdb_writer.cc
+++ b/modules/io/src/mol/pdb_writer.cc
@@ -207,7 +207,7 @@ void PDBWriter::Write(const mol::AtomHandleList& atoms)
   
 PDBWriter::~PDBWriter()
 {
-  outstream_ << "END";
+  outstream_ << "END   ";
 }
 
 }}