diff --git a/src/common_io.c b/src/common_io.c
index 0b6130e3de486b054cce22bc4939b611f0d9fa39..8cc25a44093024629c7d8c3faf66646e9c161d2d 100644
--- a/src/common_io.c
+++ b/src/common_io.c
@@ -327,11 +327,11 @@ void writeUnitSystem(hid_t h_file, struct UnitSystem* us)
   if(h_grpunit < 0)
     error("Error while creating Unit System group");
 
-  writeAttribute_d(h_grpunit, "Unit mass in cgs", getBaseUnit(us, UNIT_MASS));
-  writeAttribute_d(h_grpunit, "Unit length in cgs", getBaseUnit(us, UNIT_LENGTH));
-  writeAttribute_d(h_grpunit, "Unit time in cgs", getBaseUnit(us, UNIT_TIME));
-  writeAttribute_d(h_grpunit, "Unit current in cgs", getBaseUnit(us, UNIT_CURRENT));
-  writeAttribute_d(h_grpunit, "Unit temperature in cgs", getBaseUnit(us, UNIT_TEMPERATURE));  
+  writeAttribute_d(h_grpunit, "Unit mass in cgs (U_M)", getBaseUnit(us, UNIT_MASS));
+  writeAttribute_d(h_grpunit, "Unit length in cgs (U_L)", getBaseUnit(us, UNIT_LENGTH));
+  writeAttribute_d(h_grpunit, "Unit time in cgs (U_t)", getBaseUnit(us, UNIT_TIME));
+  writeAttribute_d(h_grpunit, "Unit current in cgs (U_I)", getBaseUnit(us, UNIT_CURRENT));
+  writeAttribute_d(h_grpunit, "Unit temperature in cgs (U_T)", getBaseUnit(us, UNIT_TEMPERATURE));  
 
   H5Gclose(h_grpunit);
 }
diff --git a/src/parallel_io.c b/src/parallel_io.c
index 43a4203661f9d44b104cc18e327436bde194e5eb..9c5c11dcc0049a03afc8a27e2a1972cd83ad0096 100644
--- a/src/parallel_io.c
+++ b/src/parallel_io.c
@@ -411,8 +411,8 @@ void writeArrayBackEnd(hid_t grp, char* fileName, FILE* xmfFile, char* name, enu
   /* Write unit conversion factors for this data set */
   conversionString( buffer, us, convFactor );
   writeAttribute_d( h_data, "CGS conversion factor", conversionFactor( us, convFactor ) );
-  writeAttribute_d( h_data, "h-scale exponant", hFactor( us, convFactor ) );
-  writeAttribute_d( h_data, "a-scale exponant", aFactor( us, convFactor ) );
+  writeAttribute_f( h_data, "h-scale exponant", hFactor( us, convFactor ) );
+  writeAttribute_f( h_data, "a-scale exponant", aFactor( us, convFactor ) );
   writeAttribute_s( h_data, "Conversion factor", buffer );
     
   /* Free and close everything */
diff --git a/src/serial_io.c b/src/serial_io.c
index 4c38a3e9c52a505b44c0cd581ca90b2108caf997..7daf9aeaa2e1d531d5a910446841f504ff24b151 100644
--- a/src/serial_io.c
+++ b/src/serial_io.c
@@ -348,8 +348,8 @@ void writeArrayBackEnd(hid_t grp, char* fileName, FILE* xmfFile, char* name, enu
   /* Write unit conversion factors for this data set */
   conversionString( buffer, us, convFactor );
   writeAttribute_d( h_data, "CGS conversion factor", conversionFactor( us, convFactor ) );
-  writeAttribute_d( h_data, "h-scale exponant", hFactor( us, convFactor ) );
-  writeAttribute_d( h_data, "a-scale exponant", aFactor( us, convFactor ) );
+  writeAttribute_f( h_data, "h-scale exponant", hFactor( us, convFactor ) );
+  writeAttribute_f( h_data, "a-scale exponant", aFactor( us, convFactor ) );
   writeAttribute_s( h_data, "Conversion factor", buffer );
   
   /* Free and close everything */
diff --git a/src/units.c b/src/units.c
index 541e8c5bd4ea74eb18d5042f7b41a6f2f0e51a1c..0b12483abf5d0eba27cf642258f1e84cece37dd9 100644
--- a/src/units.c
+++ b/src/units.c
@@ -111,73 +111,73 @@ void getBaseUnitExponantsArray(float baseUnitsExp[5], enum UnitConversionFactor
       break;
 
     case UNIT_CONV_MASS: 
-      baseUnitsExp[UNIT_MASS] = 1; break;
+      baseUnitsExp[UNIT_MASS] = 1.f; break;
 
     case UNIT_CONV_LENGTH: 
-      baseUnitsExp[UNIT_LENGTH] = 1; break;
+      baseUnitsExp[UNIT_LENGTH] = 1.f; break;
 
     case UNIT_CONV_TIME: 
-      baseUnitsExp[UNIT_TIME] = 1; break;
+      baseUnitsExp[UNIT_TIME] = 1.f; break;
 
     case UNIT_CONV_FREQUENCY: 
-       baseUnitsExp[UNIT_TIME] = -1;  break;
+       baseUnitsExp[UNIT_TIME] = -1.f;  break;
 
     case UNIT_CONV_DENSITY: 
-      baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_LENGTH] = -3;  break;
+      baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_LENGTH] = -3.f;  break;
 
     case UNIT_CONV_SPEED: 
-      baseUnitsExp[UNIT_LENGTH] = 1; baseUnitsExp[UNIT_TIME] = -1;  break;
+      baseUnitsExp[UNIT_LENGTH] = 1.f; baseUnitsExp[UNIT_TIME] = -1.f;  break;
 
     case UNIT_CONV_ACCELERATION: 
-      baseUnitsExp[UNIT_LENGTH] = 1; baseUnitsExp[UNIT_TIME] = -2;  break;
+      baseUnitsExp[UNIT_LENGTH] = 1.f; baseUnitsExp[UNIT_TIME] = -2.f;  break;
 
     case UNIT_CONV_FORCE: 
-       baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_LENGTH] = 1; baseUnitsExp[UNIT_TIME] = -2;  break;
+       baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_LENGTH] = 1.f; baseUnitsExp[UNIT_TIME] = -2.f;  break;
 
     case UNIT_CONV_ENERGY: 
-       baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_LENGTH] = 2; baseUnitsExp[UNIT_TIME] = -2;  break;
+       baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_LENGTH] = 2.f; baseUnitsExp[UNIT_TIME] = -2.f;  break;
 
     case UNIT_CONV_ENERGY_PER_UNIT_MASS: 
-      baseUnitsExp[UNIT_LENGTH] = 2; baseUnitsExp[UNIT_TIME] = -2;  break;
+      baseUnitsExp[UNIT_LENGTH] = 2.f; baseUnitsExp[UNIT_TIME] = -2.f;  break;
 
     case UNIT_CONV_ENTROPY: 
-      baseUnitsExp[UNIT_MASS] = 1. - const_hydro_gamma; baseUnitsExp[UNIT_LENGTH] = 3.*const_hydro_gamma - 1.; baseUnitsExp[UNIT_TIME] = -2;  break;
+      baseUnitsExp[UNIT_MASS] = 1.f - const_hydro_gamma; baseUnitsExp[UNIT_LENGTH] = 3.f * const_hydro_gamma - 1.f; baseUnitsExp[UNIT_TIME] = -2.f;  break;
 
     case UNIT_CONV_ENTROPY_PER_UNIT_MASS: 
-      baseUnitsExp[UNIT_MASS] = -const_hydro_gamma; baseUnitsExp[UNIT_LENGTH] = 3.*const_hydro_gamma - 1.; baseUnitsExp[UNIT_TIME] = -2;  break;
+      baseUnitsExp[UNIT_MASS] = -const_hydro_gamma; baseUnitsExp[UNIT_LENGTH] = 3.f * const_hydro_gamma - 1.f; baseUnitsExp[UNIT_TIME] = -2.f;  break;
 
     case UNIT_CONV_POWER: 
-      baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_LENGTH] = 2; baseUnitsExp[UNIT_TIME] = -3;  break;
+      baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_LENGTH] = 2.f; baseUnitsExp[UNIT_TIME] = -3.f;  break;
 
     case UNIT_CONV_PRESSURE: 
-      baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_LENGTH] = -1; baseUnitsExp[UNIT_TIME] = -2;  break;
+      baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_LENGTH] = -1.f; baseUnitsExp[UNIT_TIME] = -2.f;  break;
 
     case UNIT_CONV_ELECTRIC_CHARGE:
-      baseUnitsExp[UNIT_TIME] = 1; baseUnitsExp[UNIT_CURRENT] = 1; break;
+      baseUnitsExp[UNIT_TIME] = 1.f; baseUnitsExp[UNIT_CURRENT] = 1.f; break;
 
     case UNIT_CONV_ELECTRIC_VOLTAGE:
-      baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_LENGTH] = 2; baseUnitsExp[UNIT_TIME] = -3; baseUnitsExp[UNIT_CURRENT] = -1; break;
+      baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_LENGTH] = 2.f; baseUnitsExp[UNIT_TIME] = -3.f; baseUnitsExp[UNIT_CURRENT] = -1.f; break;
       
     case UNIT_CONV_ELECTRIC_CAPACITANCE:
-      baseUnitsExp[UNIT_MASS] = -1; baseUnitsExp[UNIT_LENGTH] = -2; baseUnitsExp[UNIT_TIME] = 4; baseUnitsExp[UNIT_CURRENT] = 2; break;
+      baseUnitsExp[UNIT_MASS] = -1.f; baseUnitsExp[UNIT_LENGTH] = -2.f; baseUnitsExp[UNIT_TIME] = 4; baseUnitsExp[UNIT_CURRENT] = 2.f; break;
 
     case UNIT_CONV_ELECTRIC_RESISTANCE:
-      baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_LENGTH] = 2; baseUnitsExp[UNIT_TIME] = -3; baseUnitsExp[UNIT_CURRENT] = -2; break;
+      baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_LENGTH] = 2.f; baseUnitsExp[UNIT_TIME] = -3.f; baseUnitsExp[UNIT_CURRENT] = -2.f; break;
 
     case UNIT_CONV_ELECTRIC_CONDUCTANCE:
-      baseUnitsExp[UNIT_MASS] = -1; baseUnitsExp[UNIT_LENGTH] = -2; baseUnitsExp[UNIT_TIME] = 3; baseUnitsExp[UNIT_CURRENT] = 2; break;
+      baseUnitsExp[UNIT_MASS] = -1.f; baseUnitsExp[UNIT_LENGTH] = -2.f; baseUnitsExp[UNIT_TIME] = 3.f; baseUnitsExp[UNIT_CURRENT] = 2.f; break;
       
     case UNIT_CONV_MAGNETIC_FLUX:
-      baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_LENGTH] = 2; baseUnitsExp[UNIT_TIME] = -2; baseUnitsExp[UNIT_CURRENT] = -1; break;
+      baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_LENGTH] = 2.f; baseUnitsExp[UNIT_TIME] = -2.f; baseUnitsExp[UNIT_CURRENT] = -1.f; break;
       
     case UNIT_CONV_MAGNETIC_FIELD:
-      baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_TIME] = -2; baseUnitsExp[UNIT_CURRENT] = -1; break;
+      baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_TIME] = -2.f; baseUnitsExp[UNIT_CURRENT] = -1.f; break;
 
     case UNIT_CONV_MAGNETIC_INDUCTANCE:
-      baseUnitsExp[UNIT_MASS] = 1; baseUnitsExp[UNIT_LENGTH] = 2; baseUnitsExp[UNIT_TIME] = -2; baseUnitsExp[UNIT_CURRENT] = -2; break;
+      baseUnitsExp[UNIT_MASS] = 1.f; baseUnitsExp[UNIT_LENGTH] = 2.f; baseUnitsExp[UNIT_TIME] = -2.f; baseUnitsExp[UNIT_CURRENT] = -2.f; break;
 
     case UNIT_CONV_TEMPERATURE:
-      baseUnitsExp[UNIT_TEMPERATURE] = 1;
+      baseUnitsExp[UNIT_TEMPERATURE] = 1.f;
     }
 }
 
@@ -201,7 +201,7 @@ double conversionFactor(struct UnitSystem* us, enum UnitConversionFactor unit)
  * @param us The system of units in use
  * @param unit The unit to convert
  */
-double hFactor(struct UnitSystem* us, enum UnitConversionFactor unit)
+float hFactor(struct UnitSystem* us, enum UnitConversionFactor unit)
 {
   float baseUnitsExp[5] = { 0.f };
 
@@ -217,7 +217,7 @@ double hFactor(struct UnitSystem* us, enum UnitConversionFactor unit)
  * @param us The system of units in use
  * @param unit The unit to convert
  */
-double aFactor(struct UnitSystem* us, enum UnitConversionFactor unit)
+float aFactor(struct UnitSystem* us, enum UnitConversionFactor unit)
 {
   float baseUnitsExp[5] = { 0.f };
 
@@ -265,16 +265,15 @@ double generalConversionFactor(struct UnitSystem* us, float baseUnitsExponants[5
  * @param us The unit system used
  * @param baseUnitsExponants The exponant of each base units required to form the desired quantity. See conversionFactor() for a working example
  */
-double generalhFactor(struct UnitSystem* us, float baseUnitsExponants[5])
+float generalhFactor(struct UnitSystem* us, float baseUnitsExponants[5])
 {
-  float factor_exp = 0;
+  float factor_exp = 0.f;
   
   factor_exp += -baseUnitsExponants[UNIT_MASS];
   factor_exp += -baseUnitsExponants[UNIT_LENGTH];
   factor_exp += -baseUnitsExponants[UNIT_TIME];
   
-
-  return factor_exp;	
+  return factor_exp;
 }
 
 /**
@@ -282,13 +281,13 @@ double generalhFactor(struct UnitSystem* us, float baseUnitsExponants[5])
  * @param us The unit system used
  * @param baseUnitsExponants The exponant of each base units required to form the desired quantity. See conversionFactor() for a working example
  */
-double generalaFactor(struct UnitSystem* us, float baseUnitsExponants[5])
+float generalaFactor(struct UnitSystem* us, float baseUnitsExponants[5])
 {
-  float factor_exp = 0;
+  float factor_exp = 0.f;
   
   factor_exp += baseUnitsExponants[UNIT_LENGTH];
   
-  return factor_exp;	
+  return  factor_exp;
 }
 
 /**
@@ -304,17 +303,34 @@ void generalConversionString(char * buffer, struct UnitSystem* us, float baseUni
   double h_exp = generalhFactor(us, baseUnitsExponants);
   int i;
 
+  /* Check whether we are unitless or not */
+  char isAllNonZero = 1;
+  for(i = 0 ; i < 5 ; ++i )
+    if( baseUnitsExponants[i] != 0.)
+      isAllNonZero = 0;
+
+  if( isAllNonZero )
+    {
+      sprintf(buffer, "[ - ] ");
+      return;
+    }
+
+
   /* Add a-factor */
-  if(a_exp == 1)
-    sprintf(buffer, "h");
+  if(a_exp == 0)
+    sprintf(buffer, " ");
+  else if(a_exp == 1)
+    sprintf(buffer, "a ");
   else  if(remainder(a_exp, 1.) == 0)
     sprintf(buffer, "a^%d ", (int) a_exp);
   else
     sprintf(buffer, "a^%7.4f ", a_exp);
 
   /* Add h-factor */
-  if(h_exp == 1)
-    sprintf(temp, "h");
+  if(h_exp == 0)
+    sprintf(temp, " ");
+  else if(h_exp == 1)
+    sprintf(temp, "h ");
   else if(remainder(h_exp, 1.) == 0)
     sprintf(temp, "h^%d ", (int) h_exp);
   else
@@ -325,7 +341,9 @@ void generalConversionString(char * buffer, struct UnitSystem* us, float baseUni
   for(i = 0 ; i < 5 ; ++i )
     if(baseUnitsExponants[i] != 0)
       {
-	if(baseUnitsExponants[i] == 1.)
+	if(baseUnitsExponants[i] == 0.)
+	  sprintf(temp, " ");
+	else if(baseUnitsExponants[i] == 1.)
 	  sprintf(temp, "%s ", getBaseUnitSymbol(i));
 	else if(remainder(baseUnitsExponants[i], 1.) == 0)
 	  sprintf(temp, "%s^%d ", getBaseUnitSymbol(i), (int)  baseUnitsExponants[i]);
@@ -336,19 +354,23 @@ void generalConversionString(char * buffer, struct UnitSystem* us, float baseUni
 
 
   /* Add CGS units */
-  strncat(buffer, " [", 2);
-
+  strncat(buffer, " [ ", 3);
+  
   for(i = 0 ; i < 5 ; ++i )
-    if(baseUnitsExponants[i] != 0)
-      {
-	if(baseUnitsExponants[i] == 1.)
-	  sprintf(temp, "%s ", getBaseUnitCGSSymbol(i));
-	else if(remainder(baseUnitsExponants[i], 1.) == 0)
-	  sprintf(temp, "%s^%d ", getBaseUnitCGSSymbol(i), (int)  baseUnitsExponants[i]);
-	else
-	  sprintf(temp, "%s^%7.4f ", getBaseUnitCGSSymbol(i), baseUnitsExponants[i]);
-	strncat(buffer, temp, 12);
-      }
-
+    {
+      if(baseUnitsExponants[i] != 0)
+	{
+	  if(baseUnitsExponants[i] == 0.)
+	    continue;
+	  else if(baseUnitsExponants[i] == 1.)
+	    sprintf(temp, "%s ", getBaseUnitCGSSymbol(i));
+	  else if(remainder(baseUnitsExponants[i], 1.) == 0)
+	    sprintf(temp, "%s^%d ", getBaseUnitCGSSymbol(i), (int)  baseUnitsExponants[i]);
+	  else
+	    sprintf(temp, "%s^%7.4f ", getBaseUnitCGSSymbol(i), baseUnitsExponants[i]);
+	  strncat(buffer, temp, 12);
+	}
+    }
+  
   strncat(buffer, "]", 2);
 }
diff --git a/src/units.h b/src/units.h
index 32a39dab306fdf0e8893c411bb0181a5034734f3..d89b7ada3ccae1234aae24463d32dbf14378c40f 100644
--- a/src/units.h
+++ b/src/units.h
@@ -119,25 +119,25 @@ double conversionFactor(struct UnitSystem* us, enum UnitConversionFactor unit);
 /**
  * @brief Returns the h factor for a given unit (expressed in terms of the 5 fundamental units) in the chosen unit system
  */
-double generalhFactor(struct UnitSystem* us, float baseUnitsExponants[5]);
+float generalhFactor(struct UnitSystem* us, float baseUnitsExponants[5]);
 
 
 /**
  * @brief Returns the h factor for a given unit in the chosen unit system
  */
-double hFactor(struct UnitSystem* us, enum UnitConversionFactor unit);
+float hFactor(struct UnitSystem* us, enum UnitConversionFactor unit);
 
 
 /**
  * @brief Returns the scaling factor for a given unit (expressed in terms of the 5 fundamental units) in the chosen unit system
  */
-double generalaFactor(struct UnitSystem* us, float baseUnitsExponants[5]);
+float generalaFactor(struct UnitSystem* us, float baseUnitsExponants[5]);
 
 
 /**
  * @brief Returns the scaling factor for a given unit in the chosen unit system
  */
-double aFactor(struct UnitSystem* us, enum UnitConversionFactor unit);
+float aFactor(struct UnitSystem* us, enum UnitConversionFactor unit);
 
 
 /**