diff --git a/include/XmlConfig.h b/include/XmlConfig.h
deleted file mode 100644
index 6f12c3b13b01908173683c3ba52d815d51ff823a..0000000000000000000000000000000000000000
--- a/include/XmlConfig.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/***************************************************************************
-    begin                : Tue May 20 2014
-    copyright            : (C) 2014 Andrea Zoli
-    email                : zoli@iasfbo.inaf.it
- ***************************************************************************/
-
-/***************************************************************************
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- ***************************************************************************/
-
-#ifndef PACKETLIB_XMLCONFIG_H
-#define PACKETLIB_XMLCONFIG_H
-
-#include <string>
-#include <fstream>
-#include <map>
-#include "pugixml.h"
-
-namespace PacketLib
-{
-
-class XmlConfig
-{
-
-	const static std::string _fixed32[];
-	const static std::string _fixed64[];
-
-	std::map<pugi::xml_node, int> _physicalIndex;
-
-	void _cachePhysicalIndexes(pugi::xml_node node);
-	void _writeFields(pugi::xml_node parent, std::fstream& fs);
-
-	void _writeRBlock(pugi::xml_node rblock, std::fstream& fs, pugi::xml_document& doc);
-
-public:
-
-	std::string convert(const std::string& filename);
-};
-
-}
-
-#endif
diff --git a/src/ConfigurationFile.cpp b/src/ConfigurationFile.cpp
index 07e21ff44f19a4ef208925111f151133102a1481..692db654cbfe68fb9a2f496c3f19e69d2e2452ff 100644
--- a/src/ConfigurationFile.cpp
+++ b/src/ConfigurationFile.cpp
@@ -18,7 +18,6 @@
 
 #include "ConfigurationFile.h"
 #include "InputTextFile.h"
-#include "XmlConfig.h"
 #include <unistd.h>
 #include <string>
 #include <algorithm>
@@ -44,20 +43,6 @@ bool ConfigurationFile::open(char** parameters) throw(PacketExceptionIO*)
     bool ret;
     currentpwd = getcwd(NULL, 512L);
 
-	if(std::string(parameters[0]).find(".xml") != std::string::npos)
-	{
-		std::string confdir(parameters[0]);
-		confdir.erase(std::find(confdir.rbegin(), confdir.rend(), '/').base(), confdir.end());
-		chdir(confdir.c_str());
-		XmlConfig config;
-		std::string streamfile = confdir + config.convert(parameters[0]);
-		int size = streamfile.size();
-		parameters[0] = new char[size+1];
-		memcpy(parameters[0], streamfile.c_str(), size);
-		parameters[0][size] = 0;
-		chdir(currentpwd);
-	}
-	
 	ret = InputTextFile::open(parameters);
     if(!closed)
         fchdir();
diff --git a/src/XmlConfig.cpp b/src/XmlConfig.cpp
deleted file mode 100644
index 4e23fe6c761374ab33e629f0c94cc1915efad638..0000000000000000000000000000000000000000
--- a/src/XmlConfig.cpp
+++ /dev/null
@@ -1,451 +0,0 @@
-/***************************************************************************
-    begin                : Tue May 20 2014
-    copyright            : (C) 2014 Andrea Zoli
-    email                : zoli@iasfbo.inaf.it
- ***************************************************************************/
-
-/***************************************************************************
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- ***************************************************************************/
-
-#include "XmlConfig.h"
-
-#include <iostream>
-#include <cstdlib>
-#include <vector>
-
-namespace PacketLib
-{
-
-using namespace pugi;
-using namespace std;
-
-const std::string XmlConfig::_fixed32[] = { "uint32", "int32", "float" };
-const std::string XmlConfig::_fixed64[] = { "uint64", "int64", "double" };
-
-void XmlConfig::_cachePhysicalIndexes(xml_node node)
-{
-	unsigned int index = 0;
-	for(pugi::xml_node_iterator it=node.begin(); it != node.end(); ++it)
-	{
-		if(string(it->name()).compare("field") != 0)
-			continue;
-
-		_physicalIndex[*it] = index;
-
-		// if 32bits fields
-		string typeStr = it->attribute("type").value();
-		bool found = false;
-		for(unsigned int i=0; i<3; i++)
-		{
-			if(typeStr.compare(_fixed32[i]) == 0)
-			{
-				index+=2;
-				found = true;
-				break;
-			}
-		}
-		if(found)
-			continue;
-
-		// if 64bits fields
-		for(unsigned int i=0; i<3; i++)
-		{
-			if(typeStr.compare(_fixed64[i]) == 0)
-			{
-				index+=4;
-				found = true;
-				break;
-			}
-		}
-		if(found)
-			continue;
-
-		// else (<= 16bits fields)
-		index++;
-	}
-}
-
-void XmlConfig::_writeFields(xml_node parent, fstream& fs)
-{
-	unsigned int index = 0;
-	for(pugi::xml_node_iterator it=parent.begin(); it != parent.end(); ++it)
-	{
-		if(string(it->name()).compare("field") != 0)
-			continue;
-
-		// write 32bits fields
-		fs << "-- field " << index << endl;
-		string name = it->attribute("name").value();
-		fs << name << endl;
-		string typeStr = it->attribute("type").value();
-		bool found = false;
-		for(unsigned int i=0; i<3; i++)
-		{
-			if(typeStr.compare(_fixed32[i]) == 0)
-			{
-				fs << "16" << endl;
-				fs << "none" << endl;
-				index++;
-
-				fs << "-- field " << index << endl;
-				fs << name+"__2" << endl;
-				fs << "16" << endl;
-				fs << "none" << endl;
-				index++;
-
-				found = true;
-				break;
-			}
-		}
-		if(found)
-			continue;
-
-		// write 64bits fields
-		for(unsigned int i=0; i<3; i++)
-		{
-			if(typeStr.compare(_fixed64[i]) == 0)
-			{
-				fs << "16" << endl;
-				fs << "none" << endl;
-
-				fs << "-- field " << index << endl;
-				fs << name+"__2" << endl;
-				fs << "16" << endl;
-				fs << "none" << endl;
-				index++;
-
-				fs << "-- field " << index << endl;
-				fs << name+"__3" << endl;
-				fs << "16" << endl;
-				fs << "none" << endl;
-				index++;
-
-				fs << "-- field " << index << endl;
-				fs << name+"__4" << endl;
-				fs << "16" << endl;
-				fs << "none" << endl;
-				index++;
-
-				found = true;
-				break;
-			}
-		}
-		if(found)
-			continue;
-
-		// write <= 16 bits fields
-		string::size_type spos = typeStr.find_first_of("0123456789");
-		string::size_type epos = typeStr.find_last_of("0123456789");
-		int nbits = atoi(typeStr.substr(spos, epos+1).c_str());
-		fs << nbits << endl;
-
-		xml_attribute constvalue = it->attribute("constvalue");
-		if(!constvalue)
-			fs << "none" << endl;
-		else
-			fs << constvalue.value() << endl;
-		index++;
-	}
-}
-
-void XmlConfig::_writeRBlock(xml_node rblock, fstream& fs, xml_document& doc)
-{
-#ifdef DEBUG
-	if(string(rblock.name()).compare("rblock") == 0)
-		std::cout << "Writing " << rblock.attribute("name").value() << ".rblock .." << endl;
-#endif
-
-	fs << "[RBlock Configuration]" << endl;
-	fs << "-- fixed part present (yes | no)" << endl;
-	if(rblock.child("field"))
-		fs << "yes" << endl;
-	else
-		fs << "no" << endl;
-	fs << "-- variable part present (yes | no). If yes, add [RBlockX] sections." << endl;
-	vector<xml_node> rblocks;
-	for(pugi::xml_node_iterator it=rblock.begin(); it != rblock.end(); ++it)
-		if(string(it->name()).compare("rblock") == 0)
-			rblocks.push_back(*it);
-	if(rblocks.size() > 0)
-	{
-		fs << "yes" << endl;
-		fs << "--number of rblock (if variable part is present)" << endl;
-		fs << rblocks.size() << endl;
-	}
-	else
-		fs << "no" << endl;
-	if(rblock.child("field"))
-	{
-		fs << "[Fixed Part]" << endl;
-		_writeFields(rblock, fs);
-	}
-
-	if(rblocks.size() > 0)
-	{
-		for(unsigned int i=0; i<rblocks.size(); i++)
-		{
-			fs << "[RBlock" << i+1 << "]" << endl;
-			fs << "--type of number of blocks of this variable part: fixed = number of block fixed equals to max number of block (fixed | variable)" << endl;
-			xml_attribute idref = rblocks[i].attribute("idref");
-			if(idref)
-				fs << "variable" << endl;
-			else
-				fs << "fixed" << endl;
-			fs << "--number of blocks for fixed value into variable part, max number of blocks for variable value into variable part" << endl;
-			fs << rblocks[i].attribute("maxnumberofblocks").value() << endl;
-			fs << "-- for variable block, number of level of headers in which is present the field with the number of blocks of the variable part (0: fixed part)" << endl;
-			if(!idref)
-				fs << "0" << endl;
-			else
-			{
-#ifdef DEBUG
-				cout << "rblock name='" << rblocks[i].attribute("name").value() << "' idref='" << rblocks[i].attribute("idref").value() << "' ";
-#endif
-				string query = string("//field[@id=\"")+idref.value()+"\"]";
-				xml_node numberofblocksid = doc.select_nodes(query.c_str())[0].node();
-				xml_node nodetmp = rblocks[i];
-				unsigned int level = 0;
-
-				while(nodetmp.parent() != numberofblocksid.parent())
-				{
-					// if the parent is a packet means that the id is not in the fixed part of the
-					// recursive rblocks nor the sourcedatafield. So test the datafieldheader
-					// and header, otherwise complain.
-					if(string(nodetmp.parent().name()).compare("packet") == 0)
-					{
-						string idparentnodename = numberofblocksid.parent().name();
-						if(idparentnodename.compare("datafieldheader") == 0)
-						{
-							// we have already add 1 level because nodetmp in this case is
-							// the sourcedatafield node
-						}
-						else if(idparentnodename.compare("header") == 0)
-						{
-							// we add just one level for the same reason above
-							level++;
-						}
-						else
-						{
-							cerr << "Error on id association. Id '" << idref.value() << "' doesn't exists. ";
-							cerr << "idref defined by rblock '" << rblocks[i].attribute("name").value() << "'." << endl;
-							exit(0);
-						}
-
-						break;
-					}
-					level++;
-					nodetmp = nodetmp.parent();
-				}
-#ifdef DEBUG
-				cout << "levels=" << level << endl;
-#endif
-				fs << level << endl;
-				fs << "-- for variable block, index of field of the header which rappresent the number of events (the number of blocks) of the packet" << endl;
-				fs << _physicalIndex[numberofblocksid] << endl;
-				fs << "-- for variable block, value to sum to get the real number of events (blocks)" << endl;
-				xml_attribute offset = numberofblocksid.attribute("numberofblocksoffset");
-				if(offset)
-					fs << offset.value() << endl;
-				else
-					fs << "0" << endl;
-			}
-			string rblockFilename=rblocks[i].attribute("name").value();
-			rblockFilename+=".rblock";
-			fs << rblockFilename << endl;
-
-			fstream rfs;
-			rfs.open(rblockFilename.c_str(), ios_base::out);
-			_writeRBlock(rblocks[i], rfs, doc);
-			rfs.close();
-		}
-	}
-}
-
-std::string XmlConfig::convert(const std::string& filename)
-{
-    xml_document doc;
-
-    if (!doc.load_file(filename.c_str()))
-    {
-        cerr << "Cannot load " << filename << endl;
-        return "";
-    }
-
-	// cache all the field physical indexes
-	xpath_node_set fieldParents = doc.select_nodes("//*[field]");
-	for(xpath_node_set::const_iterator it = fieldParents.begin(); it != fieldParents.end(); ++it)
-		_cachePhysicalIndexes(it->node());
-
-	xml_node stream = doc.child("stream");
-	string streamFilename = string(stream.attribute("name").value()) + ".stream";
-
-	xml_node header = stream.child("header");
-	string headerFilename = string(header.attribute("name").value()) + ".header";
-
-	/// Write header file
-	fstream hfs;
-	hfs.open(headerFilename.c_str(), ios_base::out);
-#ifdef DEBUG
-    cout << "Writing " << headerFilename << " .." << endl;
-#endif
-	hfs << "-- name of header" << endl;
-	hfs << header.attribute("description").value() << endl;
-	hfs << "-- number of field with dimension of packet (or first field if dim of packet is stored in a 32 bit field)" << endl;
-	string query = string("//field[@id=\"")+header.attribute("idref").value()+"\"]";
-	xml_node packetLength = header.select_nodes(query.c_str())[0].node();
-	hfs << _physicalIndex[packetLength] << endl;
-	hfs << "-- 16 or 32 bit size dimension of the packet lenght" << endl;
-	string typeStr = packetLength.attribute("type").value();
-	string::size_type spos = typeStr.find_first_of("0123456789");
-	string::size_type epos = typeStr.find_last_of("0123456789");
-	int nbits = atoi(typeStr.substr(spos, epos+1).c_str());
-	hfs << nbits << endl;
-	hfs << "[Field]" << endl;
-	_writeFields(header, hfs);
-	// query for compression algorithm / compression level
-	xpath_node_set compression_algorithm = header.select_nodes("field[@id=\"packetlib:compression_algorithm\"]");
-	xpath_node_set compression_level = header.select_nodes("field[@id=\"packetlib:compression_level\"]");
-
-	/// Write packet files
-	vector<string> packetFilenames;
-	xml_node packet = stream.child("packet");
-	fstream pfs;
-	while(packet)
-	{
-		string packetFilename = string(packet.attribute("name").value()) + ".packet";
-		packetFilenames.push_back(packetFilename);
-		pfs.close();
-		pfs.open(packetFilename.c_str(), ios_base::out);
-#ifdef DEBUG
-	    cout << "Writing " << packetFilename << " .." << endl;
-#endif
-		pfs << "-- name of packet - " << packet.attribute("description").value() << endl;
-		pfs << packet.attribute("name").value() << endl;
-		pfs << "[PacketHeader]" << endl;
-		pfs << "-- file that contains the description of the header" << endl;
-		pfs << headerFilename << endl;
-		pfs << "[DataFieldHeader]" << endl;
-		xml_node datafieldheader = packet.child("datafieldheader");
-		_writeFields(datafieldheader, pfs);
-		pfs << "[SourceDataField]" << endl;
-		pfs << "-- type of packet: noblock, block, rblock (with recoursive block)" << endl;
-		pfs << "rblock" << endl;
-		xml_node sourcedatafield = packet.child("sourcedatafield");
-		_writeRBlock(sourcedatafield, pfs, doc);
-		pfs << "[Identifiers]" << endl;
-		xpath_node_set packetids = packet.select_nodes("identifiers/identifier");
-		unsigned int counter = 0;
-		for(xpath_node_set::const_iterator it = packetids.begin(); it != packetids.end(); ++it)
-		{
-			pfs << "-- ID" << counter << endl;
-			pfs << "-- field number" << endl;
-			xml_node identifier = it->node();
-			string query = string("//field[@id=\"")+identifier.attribute("idref").value()+"\"]";
-			xml_node fieldid = doc.select_nodes(query.c_str())[0].node();
-			pfs << _physicalIndex[fieldid] << endl;
-			pfs << "-- type (0 header, 1 data field, 2 source data field)" << endl;
-			string parentName = fieldid.parent().name();
-			int index = -1;
-			if(parentName.compare("header") == 0)
-				index = 0;
-			else if(parentName.compare("datafieldheader") == 0)
-				index = 1;
-			else if(parentName.compare("sourcedatafield") == 0)
-				index = 2;
-			pfs << index << endl;
-			pfs << "-- value" << endl;
-			pfs << identifier.attribute("value").value() << endl;
-
-			counter++;
-		}
-		xml_node tail = packet.child("tail");
-		if(tail)
-		{
-			pfs << "[Tail]" << endl;
-			_writeFields(tail, pfs);
-		}
-
-		// if not defined in the header find in datafieldheader
-		int algindex = 0;
-		if(compression_algorithm.empty())
-		{
-			compression_algorithm = datafieldheader.select_nodes("field[@id=\"packetlib:compression_algorithm\"]");
-			algindex = 1;
-		}
-		// and sourcedatafield
-		if(compression_algorithm.empty())
-		{
-			algindex = 2;
-			compression_algorithm = sourcedatafield.select_nodes("@field[id=\"packetlib:compression_algorithm\"]");
-		}
-
-		// if not defined in the header find in datafieldheader
-		int lvlindex = 0;
-		if(compression_level.empty())
-		{
-			compression_level = datafieldheader.select_nodes("field[@id=\"packetlib:compression_level\"]");
-			lvlindex = 1;
-		}
-		// and sourcedatafield
-		if(compression_level.empty())
-		{
-			lvlindex = 2;
-			compression_level = sourcedatafield.select_nodes("@field[id=\"packetlib:compression_level\"]");
-		}
-
-		if(!compression_algorithm.empty() && !compression_level.empty())
-		{
-			pfs << "[Compression]" << endl;
-			pfs << _physicalIndex[compression_algorithm[0].node()] << endl;
-			pfs << algindex << endl;
-			pfs << _physicalIndex[compression_level[0].node()] << endl;
-			pfs << lvlindex << endl;
-		}
-
-		packet=packet.next_sibling();
-	}
-
-	/// Write stream file
-	fstream sfs;
-	sfs.open(streamFilename.c_str(), ios_base::out);
-#ifdef DEBUG
-    cout << "Writing " << streamFilename << " .." << endl;
-#endif
-	sfs << "[Configuration]" << endl;
-	bool prefix = false;
-	sfs << "--prefix" << endl;
-	if(prefix)
-		sfs << "true" << endl;
-	else
-		sfs << "false" << endl;
-	sfs << "--stream format bigendian" << endl;
-	xml_attribute bigendian = stream.attribute("bigendian");
-	if(bigendian.empty())
-		sfs << "false" << endl;
-	else
-		sfs << bigendian.value() << endl;
-	sfs << "--dimension of prefix" << endl;
-	xml_attribute prefixsize = stream.attribute("prefixsize");
-	if(!prefixsize)
-		sfs << "0" << endl;
-	else
-		sfs << prefixsize.value() << endl;
-	sfs << "[Header Format]" << endl;
-	sfs << headerFilename << endl;
-	sfs << "[Packet Format]" << endl;
-	for(unsigned int i=0; i<packetFilenames.size(); i++)
-		sfs << packetFilenames[i] << endl;
-
-#ifdef DEBUG
-	cout << "Conversion complete." << endl;
-#endif
-	return streamFilename;
-}
-
-}