diff --git a/src/converters/dtsc2ogg.cpp b/src/converters/dtsc2ogg.cpp
new file mode 100644
index 00000000..977365e8
--- /dev/null
+++ b/src/converters/dtsc2ogg.cpp
@@ -0,0 +1,66 @@
+#include<iostream>
+#include<vector>
+#include <stdlib.h>
+#include <mist/timing.h>
+#include <mist/dtsc.h>
+#include <mist/ogg.h>
+#include <mist/theora.h>
+#include <mist/vorbis.h>
+#include <mist/config.h>
+#include <mist/json.h>
+
+namespace Converters{
+  int DTSC2OGG(Util::Config & conf){
+    DTSC::File DTSCFile(conf.getString("filename"));
+    JSON::Value meta = DTSCFile.getMeta();
+    OGG::Page curOggPage;
+    srand (Util::getMS());//randomising with milliseconds from boot
+    std::vector<unsigned int> curSegTable;
+    char* curNewPayload;
+    std::map <long long unsigned int, unsigned int> DTSCID2OGGSerial;
+    //Creating ID headers for theora and vorbis
+    for ( JSON::ObjIter it = meta["tracks"].ObjBegin(); it != meta["tracks"].ObjEnd(); it ++) {
+      curOggPage.clear();
+      curOggPage.setVersion();
+      curOggPage.setHeaderType(2);//headertype 2 = Begin of Stream
+      curOggPage.setGranulePosition(0);
+      DTSCID2OGGSerial[it->second["trackid"].asInt()] = rand() % 0xFFFFFFFE +1; //initialising on a random not 0 number
+      curOggPage.setBitstreamSerialNumber(DTSCID2OGGSerial[it->second["trackid"].asInt()]);
+      curOggPage.setPageSequenceNumber(0);
+      curSegTable.clear();
+      curSegTable.push_back(it->second["IDHeader"].asString().size());
+      curOggPage.setSegmentTable(curSegTable);
+      curOggPage.setPayload((char*)it->second["IDHeader"].asString().c_str(), it->second["IDHeader"].asString().size());
+      curOggPage.calcChecksum();
+      std::cout << std::string(curOggPage.getPage(), curOggPage.getPageSize());
+    }
+    //Creating remaining headers for theora and vorbis
+    for ( JSON::ObjIter it = meta["tracks"].ObjBegin(); it != meta["tracks"].ObjEnd(); it ++) {
+      curOggPage.clear();
+      curOggPage.setVersion();
+      curOggPage.setHeaderType(0);//headertype 0 = normal
+      curOggPage.setGranulePosition(0);
+      curOggPage.setBitstreamSerialNumber(DTSCID2OGGSerial[it->second["trackid"].asInt()]);
+      curOggPage.setPageSequenceNumber(1);
+      curSegTable.clear();
+      curSegTable.push_back(it->second["CommentHeader"].asString().size());
+      curSegTable.push_back(it->second["init"].asString().size());
+      curOggPage.setSegmentTable(curSegTable);
+      std::string fullHeader = it->second["CommentHeader"].asString() + it->second["init"].asString();
+      std::cerr << fullHeader.size() << std::endl;
+      std::cerr << "setPayload: " << curOggPage.setPayload((char*)fullHeader.c_str(), fullHeader.size()) << std::endl;
+      curOggPage.calcChecksum();
+      std::cout << std::string(curOggPage.getPage(), curOggPage.getPageSize());
+    }
+    //for tracks in header
+      //create standard page with comment (empty) en setup header(init)
+    return 0;   
+  }
+}
+
+int main(int argc, char ** argv){
+  Util::Config conf = Util::Config(argv[0], PACKAGE_VERSION);
+  conf.addOption("filename", JSON::fromString("{\"arg_num\":1, \"arg\":\"string\", \"help\":\"Filename of the DTSC file to analyse.\"}"));
+  conf.parseArgs(argc, argv);
+  return Converters::DTSC2OGG(conf);
+}
diff --git a/src/converters/ogg2dtsc.cpp b/src/converters/ogg2dtsc.cpp
index 9aa0c443..d290a009 100644
--- a/src/converters/ogg2dtsc.cpp
+++ b/src/converters/ogg2dtsc.cpp
@@ -79,6 +79,7 @@ namespace Converters{
               DTSCOut.null();//clearing DTSC buffer
               DTSCOut["trackid"] = (long long)trackData[sNum].dtscID;
               long long unsigned int temp = oggPage.getGranulePosition();
+              DTSCOut["granule"] = temp;
               DTSCOut["time"] = (long long)trackData[sNum].lastTime ++;
               DTSCOut["data"] = std::string(oggPage.getFullPayload()+offset, (*it)); //segment content put in JSON
               if (trackData[sNum].codec == THEORA){
@@ -108,6 +109,7 @@ namespace Converters{
                       }
                       case 1: //comment header
                         std::cerr << "Theora comment header found" << std::endl;
+                        DTSCHeader["tracks"][trackData[sNum].name]["CommentHeader"] = std::string(oggPage.getFullPayload()+offset, (*it));
                         break;
                       case 2:{ //setup header, also the point to start writing the header
                         DTSCHeader["tracks"][trackData[sNum].name]["codec"] = "theora";
@@ -132,6 +134,10 @@ namespace Converters{
                           DTSCHeader["tracks"][trackData[sNum].name]["IDHeader"] = std::string(oggPage.getFullPayload()+offset, (*it));
                           break;
                         }
+                        case 3:{
+                          DTSCHeader["tracks"][trackData[sNum].name]["CommentHeader"] = std::string(oggPage.getFullPayload()+offset, (*it));
+                          break;
+                        }
                         case 5:{
                           std::cerr << "Vorbis init header" << std::endl;
                           DTSCHeader["tracks"][trackData[sNum].name]["codec"] = "vorbis";