diff --git a/modules/io/src/mol/star_parser.cc b/modules/io/src/mol/star_parser.cc
index 4da41b237b9c72f5bcedd64f0c34c7ac82430f23..596230d8320978e23e63b30bb590b22987160851 100644
--- a/modules/io/src/mol/star_parser.cc
+++ b/modules/io/src/mol/star_parser.cc
@@ -344,7 +344,7 @@ void StarParser::ParseLoop()
           } else {
             tmp_values.push_back(tline.str());
             const char* d=tmp_values.back().c_str();
-            for (size_t i=std::max(before-1, 0); i<columns.size(); ++i) {
+            for (size_t i=before; i<columns.size(); ++i) {
               columns[i]=StringRef(d+(columns[i].begin()-tline.begin()), 
                                    columns[i].size());
             }
diff --git a/modules/io/tests/test_star_parser.cc b/modules/io/tests/test_star_parser.cc
index dd56aaa4cd5df3976339443bc6ae38015bd8bcb5..d9a100dfa40ec1a32168cdefe13734e8d6a35194 100644
--- a/modules/io/tests/test_star_parser.cc
+++ b/modules/io/tests/test_star_parser.cc
@@ -117,6 +117,46 @@ public:
   bool visit_two;
 };
 
+class HardLoopTestParser : public StarParser {
+public:
+  HardLoopTestParser(std::istream& stream): StarParser(stream), cur_char_('A')
+  { }
+  
+  virtual bool OnBeginLoop(const StarLoopDesc& header)
+  {
+    return true;
+  }  
+
+  virtual void OnDataRow(const StarLoopDesc& header, 
+                         const std::vector<StringRef>& columns) 
+  {
+    BOOST_CHECK_EQUAL(columns[0][0], cur_char_);
+    BOOST_CHECK_EQUAL(columns[0].size(), 1);
+    ++cur_char_;
+    BOOST_CHECK_EQUAL(columns[1][0], cur_char_);
+    BOOST_CHECK_EQUAL(columns[1].size(), 1);
+    ++cur_char_;
+    BOOST_CHECK_EQUAL(columns[2][0], cur_char_);
+    BOOST_CHECK_EQUAL(columns[2].size(), 1);    
+    ++cur_char_;
+    BOOST_CHECK_EQUAL(columns[3][0], cur_char_);
+    BOOST_CHECK_EQUAL(columns[3].size(), 1);    
+    ++cur_char_;
+    BOOST_CHECK_EQUAL(columns[4][0], cur_char_);
+    BOOST_CHECK_EQUAL(columns[4].size(), 1);    
+    ++cur_char_;
+    BOOST_CHECK_EQUAL(columns[5][0], cur_char_);
+    BOOST_CHECK_EQUAL(columns[5].size(), 1);
+    ++cur_char_;
+  }
+  
+  virtual void OnEndLoop()
+  {
+    BOOST_CHECK_EQUAL(cur_char_, 'S');
+  }
+  char cur_char_;
+};
+
 class ItemsAsRowTestParser : public StarParser {
 public:
   ItemsAsRowTestParser(std::istream& stream): StarParser(stream, true),
@@ -282,6 +322,13 @@ BOOST_AUTO_TEST_CASE(star_multi)
   BOOST_CHECK(star_p.visit_one);
   BOOST_CHECK(star_p.visit_two);
 }
+
+BOOST_AUTO_TEST_CASE(star_multiline_loop)
+{
+  std::ifstream s("testfiles/multiline-loop.cif");
+  HardLoopTestParser star_p(s);
+  star_p.Parse();
+}
   
 BOOST_AUTO_TEST_CASE(star_loop)
 {
diff --git a/modules/io/tests/testfiles/multiline-loop.cif b/modules/io/tests/testfiles/multiline-loop.cif
new file mode 100644
index 0000000000000000000000000000000000000000..64ab7829bb71bb313447c11b92f2a6cbdef7f82d
--- /dev/null
+++ b/modules/io/tests/testfiles/multiline-loop.cif
@@ -0,0 +1,23 @@
+data_multiline_loop
+loop_
+_a.u
+_a.v
+_a.w
+_a.x
+_a.y
+_a.z
+A B C 
+D 
+E F
+G 
+H
+I 
+J 
+K 
+L
+M 
+N 
+O 
+P 
+Q 
+R
\ No newline at end of file