diff --git a/include/Field.h b/include/Field.h
index 79b4ef8199684497b8f61fb137baaacfb1df052f..82c10d3a9f7d62bf94445d754025f16f9463864f 100644
--- a/include/Field.h
+++ b/include/Field.h
@@ -20,14 +20,13 @@
 
 #include "PacketLibDefinition.h"
 #include <string>
+#include <map>
 
 namespace PacketLib
 {
 	
 enum LogicalFieldDataType { UNKNOWN, UINT1, UINT2, UINT3, UINT4, UINT5, UINT6, UINT7, UINT8, UINT9, UINT10, UINT11, UINT12, UINT13, UINT14, UINT15, UINT16, INT16, UINT24, INT24, UINT32, INT32, UINT64, INT64, FLOAT, DOUBLE, BYTEARRAY };
 
-
-
 class FieldType
 {
 
@@ -45,7 +44,7 @@ public:
     /// Name of the field.
 	std::string name;
 	
-	/// Logical type - NOT USED FOR NOW
+	/// Logical type
 	enum LogicalFieldDataType type;
 };
 
@@ -57,7 +56,7 @@ class Field
 public:
 
     /// Constructor of class.
-    Field(std::string name, std::string dimension, std::string predefinedValue, int progressiv);
+	Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count);
 
     /// Destructor of class.
     ~Field();
@@ -102,16 +101,11 @@ public:
 	
 	void print();
 	
-	/// Get a description of the type (e.g. int32, 16, etc) and the number of bits of each single field
-	///\param type (input) the type read from configuration file
-	///\param outtype (output) the type as enum
-	///\param outtypenfields (output) the number of physical fields equivalent to this logical field
-	///\param outputfieldsbitsize (output) the number of bits of each single field
-	static void getType(char* type, enum LogicalFieldDataType &outtype, int &outtypenfields, int &outputfieldsbitsize);
-
-
 protected:
 
+	static std::map<std::string, LogicalFieldDataType> typeStringToEnum;
+	static std::map<std::string, LogicalFieldDataType> makeMap();
+
     /// Index of packet in the list of packet.
     int progressiv;
 
diff --git a/src/Field.cpp b/src/Field.cpp
index ed9bffc3c6e6baec2d08d78913d6056883054292..ad9af9385e6c89515225436b0120ab4381d3f9cb 100644
--- a/src/Field.cpp
+++ b/src/Field.cpp
@@ -23,7 +23,45 @@ using namespace PacketLib;
 
 static FieldType** filedTypeList = 0;
 
-Field::Field(std::string n, std::string dim, std::string prVal, int count) : progressiv(count)
+std::map<std::string, LogicalFieldDataType> Field::makeMap()
+{
+	std::map<std::string, LogicalFieldDataType> map;
+
+	map[""] = UNKNOWN;
+	map["uint1"] = UINT1;
+	map["uint2"] = UINT2;
+	map["uint3"] = UINT3;
+	map["uint4"] = UINT4;
+	map["uint5"] = UINT5;
+	map["uint6"] = UINT6;
+	map["uint7"] = UINT7;
+	map["uint8"] = UINT8;
+	map["uint9"] = UINT9;
+	map["uint10"] = UINT10;
+	map["uint11"] = UINT11;
+	map["uint12"] = UINT12;
+	map["uint13"] = UINT13;
+	map["uint14"] = UINT14;
+	map["uint15"] = UINT15;
+	map["uint16"] = UINT16;
+	map["int16"] = INT16;
+	map["uint24"] = UINT24;
+	map["int24"] = INT24;
+	map["uint32"] = UINT32;
+	map["int32"] = INT32;
+	map["uint64"] = UINT64;
+	map["int64"] = INT64;
+	map["float"] = FLOAT;
+	map["double"] = DOUBLE;
+	map["bytes"] = BYTEARRAY;
+
+	return map;
+}
+
+std::map<std::string, LogicalFieldDataType> Field::typeStringToEnum = Field::makeMap();
+
+Field::Field(std::string name, std::string typeStr, std::string dim, std::string prVal, int count)
+	: progressiv(count)
 {
     value = 0;
     /// create FieldType list
@@ -38,7 +76,7 @@ Field::Field(std::string n, std::string dim, std::string prVal, int count) : pro
     type = 0;
     while(filedTypeList[i] != 0)
     {
-        if(filedTypeList[i]->name == n)
+        if(filedTypeList[i]->name == name)
         {
             type = filedTypeList[i];
             break;
@@ -50,10 +88,11 @@ Field::Field(std::string n, std::string dim, std::string prVal, int count) : pro
     {
         type = new FieldType;
         filedTypeList[i] = type;
-        type->name = n;
-        type->dimension = atoi(dim.c_str());
+        type->name = name;
+		type->dimension = atoi(dim.c_str());
+		type->type = Field::typeStringToEnum[typeStr];
 #ifdef DEBUG
-		std::cout << "Adding field '" << n << "' at index " << i << ", " << type->dimension << " bits" << std::endl;
+		std::cout << "Adding field '" << name << "' at index " << i << ", " << type->dimension << " bits type " << typeStr << " (" << type->type << ")" << std::endl;
 #endif
 
         if(prVal.compare("none") != 0)
@@ -79,94 +118,3 @@ Field::~Field()
 void Field::print() {
 	cout << progressiv << " " << getName() << " " << size() << endl;
 }
-
-void Field::getType(char* type, enum LogicalFieldDataType &outtype, int &outtypenfields, int &outputfieldsbitsize) {
-	outtype = UNKNOWN;
-	outputfieldsbitsize = 0;
-	outtypenfields = 0;
-	int dim = atoi(type);
-	if(dim == 0) {
-		//>= 16bit
-		outputfieldsbitsize = 16;
-		if(strcmp(type, "int16") == 0) {
-			outtypenfields = 1;
-			outtype = INT16;
-		} else if(strcmp(type, "uint16") == 0) {
-			outtypenfields = 1;
-			outtype = UINT16;
-		} else if(strcmp(type, "int32") == 0) {
-			outtypenfields = 2;
-			outtype = INT32;
-		} else if(strcmp(type, "uint32") == 0) {
-			outtypenfields = 2;
-			outtype = UINT32;
-		} else if(strcmp(type, "float") == 0) {
-			outtypenfields = 2;
-			outtype = FLOAT;
-		} else if(strcmp(type, "int64") == 0) {
-			outtypenfields = 4;
-			outtype = INT64;
-		} else if(strcmp(type, "uint64") == 0) {
-			outtypenfields = 4;
-			outtype = UINT64;
-		} else if(strcmp(type, "double") == 0) {
-			outtypenfields = 4;
-			outtype = DOUBLE;
-		}
-	} else {
-		//<=16 bit (unsigned)
-		outtypenfields = 1;
-		outputfieldsbitsize = dim;
-		switch(dim) {
-			case 1:
-			outtype = UINT1;
-			break;
-			case 2:
-			outtype = UINT2;
-			break;
-			case 3:
-			outtype = UINT3;
-			break;
-			case 4:
-			outtype = UINT4;
-			break;
-			case 5:
-			outtype = UINT5;
-			break;
-			case 6:
-			outtype = UINT6;
-			break;
-			case 7:
-			outtype = UINT7;
-			break;
-			case 8:
-			outtype = UINT8;
-			break;
-			case 9:
-			outtype = UINT9;
-			break;
-			case 10:
-			outtype = UINT10;
-			break;
-			case 11:
-			outtype = UINT11;
-			break;
-			case 12:
-			outtype = UINT12;
-			break;
-			case 13:
-			outtype = UINT13;
-			break;
-			case 14:
-			outtype = UINT14;
-			break;
-			case 15:
-			outtype = UINT15;
-			break;
-			case 16:
-			outtype = UINT16;
-			break;
-		}
-	}
-}
-
diff --git a/src/PartOfPacket.cpp b/src/PartOfPacket.cpp
index 749a48b4ed0f8bba87b04a01058ab5c369925844..df6590073bedfc95f8b5a8f0f598b54256698116 100644
--- a/src/PartOfPacket.cpp
+++ b/src/PartOfPacket.cpp
@@ -143,7 +143,7 @@ void PartOfPacket::loadFields(pugi::xml_node node)
 				name = it->attribute("name").value();
 				dimension = "16";
 				value = "none";
-				Field* f = new Field(name, dimension, value, numberOfFields);
+				Field* f = new Field(name, typeStr, dimension, value, numberOfFields);
 				fieldsDimension += f->size();
 				fields[numberOfFields] = f;
 				numberOfFields++;
@@ -152,7 +152,7 @@ void PartOfPacket::loadFields(pugi::xml_node node)
 				name += "__1";
 				dimension = "16";
 				value = "none";
-				f = new Field(name, dimension, value, numberOfFields);
+				f = new Field(name, typeStr, dimension, value, numberOfFields);
 				fieldsDimension += f->size();
 				fields[numberOfFields] = f;
 				numberOfFields++;
@@ -172,7 +172,7 @@ void PartOfPacket::loadFields(pugi::xml_node node)
 				name = it->attribute("name").value();
 				dimension = "16";
 				value = "none";
-				Field* f = new Field(name, dimension, value, numberOfFields);
+				Field* f = new Field(name, typeStr, dimension, value, numberOfFields);
 				fieldsDimension += f->size();
 				fields[numberOfFields] = f;
 				numberOfFields++;
@@ -181,7 +181,7 @@ void PartOfPacket::loadFields(pugi::xml_node node)
 				name += "__1";
 				dimension = "16";
 				value = "none";
-				f = new Field(name, dimension, value, numberOfFields);
+				f = new Field(name, typeStr, dimension, value, numberOfFields);
 				fieldsDimension += f->size();
 				fields[numberOfFields] = f;
 				numberOfFields++;
@@ -190,7 +190,7 @@ void PartOfPacket::loadFields(pugi::xml_node node)
 				name += "__2";
 				dimension = "16";
 				value = "none";
-				f = new Field(name, dimension, value, numberOfFields);
+				f = new Field(name, typeStr, dimension, value, numberOfFields);
 				fieldsDimension += f->size();
 				fields[numberOfFields] = f;
 				numberOfFields++;
@@ -199,7 +199,7 @@ void PartOfPacket::loadFields(pugi::xml_node node)
 				name += "__3";
 				dimension = "16";
 				value = "none";
-				f = new Field(name, dimension, value, numberOfFields);
+				f = new Field(name, typeStr, dimension, value, numberOfFields);
 				fieldsDimension += f->size();
 				fields[numberOfFields] = f;
 				numberOfFields++;
@@ -221,7 +221,7 @@ void PartOfPacket::loadFields(pugi::xml_node node)
 			value = "none";
 		else
 			value = constvalue.value();
-		Field* f = new Field(name, dimension, value, numberOfFields);
+		Field* f = new Field(name, typeStr, dimension, value, numberOfFields);
 		fieldsDimension += f->size();
 		fields[numberOfFields] = f;
 		numberOfFields++;
@@ -259,7 +259,7 @@ bool PartOfPacket::loadFields(InputText& fp) throw(PacketException*)
 
         dimension = fp.getLine();
         value = fp.getLine();
-        Field* f = new Field(name, dimension, value, numberOfFields);
+        Field* f = new Field(name, "", dimension, value, numberOfFields);
         fieldsDimension += f->size();
         fields[numberOfFields] = f;
         numberOfFields++;
@@ -298,7 +298,7 @@ bool PartOfPacket::loadFields(MemoryBuffer* buffer) throw(PacketException*)
     {
         dimension = buffer->getbuffer();
         value = buffer->getbuffer();
-        Field* f = new Field(name, dimension, value, numberOfFields);
+        Field* f = new Field(name, "", dimension, value, numberOfFields);
         fieldsDimension += f->size();
         fields[numberOfFields] = f;
         numberOfFields++;