diff --git a/src/castep_castep_reader.cpp b/src/castep_castep_reader.cpp
index b27d0bd7d3869202c10120a3bd861585f0968a6b..f6c38a508d7b4ab72f1f85f7685f08134427719d 100644
--- a/src/castep_castep_reader.cpp
+++ b/src/castep_castep_reader.cpp
@@ -44,6 +44,8 @@ void CastepCastepReader::parse_data() {
   std::string label;
   size_t counter=0;
 
+  bool debug = false;
+
   while (std::getline(stream, line)) {
 
     if (line.find("type of calculation") != std::string::npos) {
@@ -53,6 +55,7 @@ void CastepCastepReader::parse_data() {
       go_run = false;
       restart=false;
       if (line.find(": geometry optimization") != std::string::npos) {
+        if (debug) std::cout << "GO run" << std::endl;
         go_run = true;
       }
       if (line.find(": molecular dynamics") != std::string::npos) {
@@ -63,6 +66,7 @@ void CastepCastepReader::parse_data() {
       restart=true;
     }
     else if (line.find("Unit Cell") != std::string::npos) {
+      if (debug) std::cout << "Unit Cell" << std::endl;
       if (!std::getline(stream, line) || !std::getline(stream, line)) {
         std::cerr << "Warning, file" << filename << " line: " << counter << std::endl;
         std::cerr << "Warning: Unexpected end of data when reading atom information" << std::endl;
@@ -88,6 +92,7 @@ void CastepCastepReader::parse_data() {
 
       if (constant_volume) label.clear();
       constant_volume = false;
+      if (debug) std::cout << s.cell << std::endl;
     }
 
     else if (line.find("Total number of ions in cell") != std::string::npos) {
@@ -109,14 +114,17 @@ void CastepCastepReader::parse_data() {
         std::cerr << "Warning, file" << filename << " line: " << counter << std::endl;
         std::cerr << "Error: Line is too short to extract total number of ions in a cell. Line: " << line << std::endl;
       }
+      if (debug) std::cout << "Number of atoms: " << natoms << std::endl;
     }
 
     else if (line.find("so fixing cell parameters") != std::string::npos) {
+      if (debug) std::cout << "so fixing cell parameters" << std::endl;
       constant_volume=true;
       label = "CASTEP MD, const. volume: true, step: 0";
     }
 
     else if (line.find("Starting MD iteration") != std::string::npos) {
+      if (debug) std::cout << "Starting MD iteration" << std::endl;
       std::istringstream iss(line);
       std::string step;
       iss >> step >> step >> step >> step;
@@ -127,15 +135,23 @@ void CastepCastepReader::parse_data() {
 
 
     else if (constant_volume && line.find("Cell Contents") != std::string::npos) {
+      if (debug) std::cout << "Cell Contents" << std::endl;
       if (restart) {
+        if (debug) std::cout << "Cell Contents restart" << std::endl;
         s.atoms.clear();
       } else {
+        if (debug) std::cout << "Cell Contents no restart" << std::endl;
+        if (debug) std::cout << line << std::endl;
         s = Structure();
         s.cell = stdb.structures.back().cell;   // copy last cell as it is not repeated in castep for const. volume
       }
     }
 
     else if (line.find("Fractional coordinates of atoms") != std::string::npos) {
+      if (debug) std::cout << "Fractional coordinates of atoms" << std::endl;
+      // Ideally st.natoms() should be zero by now. However for constant volum GO this is not the case.
+      // Therfore we need to clear the atoms vector but we keep the st.cell as it is.
+      s.atoms.clear();
       if (!std::getline(stream, line) || !std::getline(stream, line)) {
         std::cerr << "Warning, file" << filename << " line: " << counter << std::endl;
         std::cerr << "Warning: Unexpected end of data when reading atom information" << std::endl;
@@ -161,9 +177,11 @@ void CastepCastepReader::parse_data() {
         s.add_atom(Atom(Element(type),px,py,pz,0,0,0));
         s.atoms[i].position = s.cell * s.atoms[i].position;  // convert to abs
       }
+      if (debug) std::cout << "natoms: " << s.natoms() << std::endl;
     }
 
     else if (line.find("Cartesian components (eV/A)") != std::string::npos) {
+      if (debug) std::cout << "Cartesian components (eV/A)" << std::endl;
       if (s.natoms()!=natoms) continue;
       if (!std::getline(stream, line) || !std::getline(stream, line) || !std::getline(stream, line)) {
         std::cerr << "Warning, file" << filename << " line: " << counter << std::endl;
@@ -192,6 +210,7 @@ void CastepCastepReader::parse_data() {
     }
 
     else if (line.find("Cartesian components (GPa)") != std::string::npos) {
+      if (debug) std::cout << "Cartesian components (GPa)" << std::endl;
       if (!std::getline(stream, line) || !std::getline(stream, line) || !std::getline(stream, line)) {
         std::cerr << "Warning, file" << filename << " line: " << counter << std::endl;
         std::cerr << "Warning: Unexpected end of data when reading stress tensor" << std::endl;
@@ -220,6 +239,7 @@ void CastepCastepReader::parse_data() {
     // enthalpy=  indicates end of iteration for GO
 
     else if (line.find("Final free energy (E-TS)") != std::string::npos) {
+      if (debug) std::cout << "Final free energy (E-TS)" << std::endl;
       std::istringstream iss(line);
       std::string tmp;
       if (!(iss >> tmp >> tmp >> tmp >> tmp >> tmp >> s.energy)) {
@@ -234,6 +254,7 @@ void CastepCastepReader::parse_data() {
     }
 
     else if (line.find("enthalpy=") != std::string::npos) {
+      if (debug) std::cout << "enthalpy=" << std::endl;
       // GO: the last extracted free energy is correct one!
       std::istringstream iss(line);
       std::string step;
@@ -245,6 +266,7 @@ void CastepCastepReader::parse_data() {
     }
 
     else if (line.find("Potential Energy:") != std::string::npos) {
+      if (debug) std::cout << "Potential Energy:" << std::endl;
       std::istringstream iss(line);
       std::string tmp;
       if (!(iss >> tmp >> tmp >> tmp >> s.energy)) {
@@ -253,6 +275,7 @@ void CastepCastepReader::parse_data() {
       }
     }
     else if (line.find("Temperature:") != std::string::npos) {
+      if (debug) std::cout << "Temperature:" << std::endl;
       // MD: end of iteration
       std::istringstream iss(line);
       std::string tmp;