diff --git a/IsotropicRemesher.cc b/IsotropicRemesher.cc
index b2d481d11c25c37a10682791c814e19d32beb146..62d01f1052417e70ad32f18b58bacfa1298b5f22 100644
--- a/IsotropicRemesher.cc
+++ b/IsotropicRemesher.cc
@@ -29,11 +29,21 @@ void IsotropicRemesher::Remesh(Embedding* embedding,
                                std::function<void (QString, QString, double, double)> screenshot,
                                bool limitflips,
                                StraighteningType strtype,
-                               CollapsingOrder corder) {
+                               CollapsingOrder corder,
+                               bool dataoutput) {
   debug_hard_stop_ = false;
   using namespace PluginFunctions;
   qDebug() << "Running the Isotropic Remeshing algorithm";
   auto base_mesh = embedding->GetBaseMesh();
+  if (screenshot || dataoutput) {
+    QDir dir(QString(SCREENSHOT_PATH) + "/target" + QString::number(target_length)
+             + "-iterations" + QString::number(iterations));
+    if (!dir.exists()) {
+      dir.mkpath(".");
+    }
+  }
+  QFile output_file(QString(SCREENSHOT_PATH) + "/target" + QString::number(target_length)
+                    + "-iterations" + QString::number(iterations) +  "/data.txt");
 
   const double inf = std::numeric_limits<double>::infinity();
   ACG::Vec3d minCorner = {+inf, +inf, +inf};
@@ -48,12 +58,11 @@ void IsotropicRemesher::Remesh(Embedding* embedding,
   double high = target_length * alpha * scale;
   double low = high * beta / alpha;
 
+  if (dataoutput) {
+    output_file.resize(0);
+    DataOutput(embedding, &output_file, 0.0, 0);
+  }
   if (screenshot) {
-    QDir dir(QString(SCREENSHOT_PATH) + "/target" + QString::number(target_length)
-             + "-iterations" + QString::number(iterations));
-    if (!dir.exists()) {
-      dir.mkpath(".");
-    }
     screenshot(QString("IsoRemesh0_Start"),
                QString(SCREENSHOT_PATH) + "/target" + QString::number(target_length)
                + "-iterations" + QString::number(iterations) ,
@@ -123,8 +132,9 @@ void IsotropicRemesher::Remesh(Embedding* embedding,
     if (debug_hard_stop_) return;
     embedding->CleanUpBaseMesh();
     qDebug() << "Time elapsed: " << swatchlocal->Delta() << "ms.";
+    double iteration_time = swatchit->Delta();
     qDebug() << "Iteration" << i+1 << " finished, time elapsed: "
-             << swatchit->Delta() << "ms.";
+             << iteration_time << "ms.";
     if (screenshot) {
       qDebug() << "Iteration" << i+1 << "Screenshot";
       screenshot(QString("IsoRemeshIt_") + QString::number(i) + QString(".4Straightening"),
@@ -132,6 +142,9 @@ void IsotropicRemesher::Remesh(Embedding* embedding,
                  + "-iterations" + QString::number(iterations) ,
                  0, 0);
     }
+    if (dataoutput) {
+      DataOutput(embedding, &output_file, iteration_time, i+1);
+    }
   }
   qDebug() << "Finished " << iterations << " iterations of Isotropic Remeshing"
               " with target edge length " << target_length * scale;
@@ -1000,3 +1013,75 @@ void IsotropicRemesher::Straightening(Embedding *embedding, StraighteningType st
   }
   }
 }
+
+/*!
+ * \brief IsotropicRemesher::DataOutput
+ * write data about the current iteration into the file
+ * \param embedding
+ * \param file
+ * \param time_elapsed
+ * \param iteration
+ */
+void IsotropicRemesher::DataOutput(Embedding *embedding,
+                                   QFile* file,
+                                   double time_elapsed,
+                                   uint iteration) {
+  if(file->open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {
+    auto meta_mesh = embedding->GetMetaMesh();
+    auto base_mesh = embedding->GetBaseMesh();
+
+    unsigned long baseeuler = base_mesh->n_vertices() - base_mesh->n_edges()
+        + base_mesh->n_faces();
+    unsigned long  metaeuler = meta_mesh->n_vertices() - meta_mesh->n_edges()
+        + meta_mesh->n_faces();
+    double basegenus = (2-baseeuler)/2.0;
+    double metagenus = (2-metaeuler)/2.0;
+    double avgmetaedgelength = 0.0;
+    for (auto meh : meta_mesh->edges()) {
+      avgmetaedgelength += embedding->CalculateEdgeLength(meh);
+    }
+    avgmetaedgelength /= meta_mesh->n_edges();
+    double metaedgelengthdeviation = 0.0;
+    for (auto meh : meta_mesh->edges()) {
+      metaedgelengthdeviation += (avgmetaedgelength-embedding->CalculateEdgeLength(meh))
+          *(avgmetaedgelength-embedding->CalculateEdgeLength(meh));
+    }
+    metaedgelengthdeviation /= meta_mesh->n_edges();
+    double avgvalence = 0.0;
+    double valencedeviation = 0.0;
+    for (auto mvh : meta_mesh->vertices()) {
+      avgvalence += meta_mesh->valence(mvh);
+      valencedeviation += (6-meta_mesh->valence(mvh))*(6-meta_mesh->valence(mvh));
+    }
+    avgvalence /= meta_mesh->n_vertices();
+    valencedeviation /= meta_mesh->n_vertices();
+    /*
+    qDebug() << "Base Mesh- V: " << base_mesh->n_vertices()
+             << "E: " << base_mesh->n_edges()
+             << "F: " << base_mesh->n_faces()
+             << "Eul: " << baseeuler
+             << "Gen: " << basegenus;
+    qDebug() << "Meta Mesh- V: " << meta_mesh->n_vertices()
+             << "E: " << meta_mesh->n_edges()
+             << "F: " << meta_mesh->n_faces()
+             << "Eul: " << metaeuler
+             << "Gen: " << metagenus;
+    qDebug() << "Embedding- Avg. Edge Length: " << avgmetaedgelength
+             << " deviation: " << metaedgelengthdeviation
+             << " avg valence: " << avgvalence
+             << " deviation from 6: " << valencedeviation;
+             */
+
+    QTextStream tstream(file);
+    tstream << "It-" << iteration
+            << "|t-" << time_elapsed
+            << "|bnf-" << base_mesh->n_faces()
+            << "|mnf-" << meta_mesh->n_faces()
+            << "|av-" << avgvalence
+            << "|vsd-" << valencedeviation
+            << "|ael" << avgmetaedgelength
+            << "|elsd-" << metaedgelengthdeviation;
+    tstream << endl;
+    file->close();
+  }
+}
diff --git a/IsotropicRemesher.hh b/IsotropicRemesher.hh
index 2c531f45bfe6374414132f0a4542ae14e2246d12..dc7f0f388ba50e63892a4d5520d9aaf4496f9358 100644
--- a/IsotropicRemesher.hh
+++ b/IsotropicRemesher.hh
@@ -31,7 +31,8 @@ public:
               std::function<void (QString, QString, double, double)> screenshot = {},
               bool limitflips = false,
               StraighteningType strtype = PATCHWISE,
-              CollapsingOrder corder = SPLITWEIGHT);
+              CollapsingOrder corder = SPLITWEIGHT,
+              bool dataoutput = true);
   bool DebugStopStatus() {return debug_hard_stop_;}
 
 private:
@@ -62,6 +63,8 @@ private:
        std::list<OpenMesh::HalfedgeHandle> mih_list);
   void Straightening(Embedding* embedding, StraighteningType strtype = PATCHWISE);
 
+  void DataOutput(Embedding* embedding, QFile* file, double time_elapsed,
+                  uint iteration);
 
   bool debug_hard_stop_ = false;
 };