Index: XIOS/branchs/xios-1.0/src/duration.cpp
===================================================================
--- XIOS/branchs/xios-1.0/src/duration.cpp	(revision 611)
+++ XIOS/branchs/xios-1.0/src/duration.cpp	(revision 612)
@@ -27,16 +27,5 @@
       StdOStream & operator<<(StdOStream & out, const CDuration & duration)
       {
-         StdOStringStream sout;
-         bool testValue = true;
-         if(duration.year   != 0.0) { testValue = false; sout << duration.year   << "y "; }
-         if(duration.month  != 0.0) { testValue = false; sout << duration.month  << "mo "; }
-         if(duration.day    != 0.0) { testValue = false; sout << duration.day    << "d "; }
-         if(duration.hour   != 0.0) { testValue = false; sout << duration.hour   << "h "; }
-         if(duration.minute != 0.0) { testValue = false; sout << duration.minute << "mi "; }
-         if(duration.second != 0.0) { testValue = false; sout << duration.second << "s "; }
-         if(duration.timestep != 0.0 || testValue)       { sout << duration.timestep << "ts "; }
-
-         // << suppression de l'espace en fin de chaÃ®ne.
-         out << (sout.str().substr(0, sout.str().size()-1));
+         out << duration.toString();
          return out;
       }
@@ -145,7 +134,39 @@
       StdString CDuration::toString(void) const
       {
-         const  CDuration & own = *this;
-         StdOStringStream oss; oss << own;
-         return oss.str();
+         StdOStringStream sout;
+         bool forceOutput = true;
+
+         if (year   != 0.0) { forceOutput = false; sout << year   << "y "; }
+         if (month  != 0.0) { forceOutput = false; sout << month  << "mo "; }
+         if (day    != 0.0) { forceOutput = false; sout << day    << "d "; }
+         if (hour   != 0.0) { forceOutput = false; sout << hour   << "h "; }
+         if (minute != 0.0) { forceOutput = false; sout << minute << "mi "; }
+         if (second != 0.0) { forceOutput = false; sout << second << "s "; }
+         if (timestep != 0.0 || forceOutput)     { sout << timestep << "ts "; }
+
+         // Remove the trailing space
+         StdString strOut = sout.str();
+         return strOut.erase(strOut.size() - 1);
+      }
+
+      StdString CDuration::toStringUDUnits(void) const
+      {
+         if (timestep != 0.0)
+           ERROR("StdString CDuration::toStringUDUnits(void) const",
+                 "Impossible to convert a duration to string using UDUnits when a timestep is set.");
+
+         StdOStringStream sout;
+         bool forceOutput = true;
+
+         if (year   != 0.0) { forceOutput = false; sout << year   << " yr "; }
+         if (month  != 0.0) { forceOutput = false; sout << month  << " month "; }
+         if (day    != 0.0) { forceOutput = false; sout << day    << " d "; }
+         if (hour   != 0.0) { forceOutput = false; sout << hour   << " h "; }
+         if (minute != 0.0) { forceOutput = false; sout << minute << " min "; }
+         if (second != 0.0 || forceOutput)       { sout << second << " s "; }
+
+         // Remove the trailing space
+         StdString strOut = sout.str();
+         return strOut.erase(strOut.size() - 1);
       }
 
Index: XIOS/branchs/xios-1.0/src/duration.hpp
===================================================================
--- XIOS/branchs/xios-1.0/src/duration.hpp	(revision 611)
+++ XIOS/branchs/xios-1.0/src/duration.hpp	(revision 612)
@@ -31,4 +31,5 @@
             /// Autres ///
             StdString toString(void) const;
+            StdString toStringUDUnits(void) const;
 
          public: /* static */
Index: XIOS/branchs/xios-1.0/src/output/nc4_data_output.cpp
===================================================================
--- XIOS/branchs/xios-1.0/src/output/nc4_data_output.cpp	(revision 611)
+++ XIOS/branchs/xios-1.0/src/output/nc4_data_output.cpp	(revision 612)
@@ -794,13 +794,20 @@
            if (wtime)
            {
-              CDuration duration ;
-
-              duration=CDuration::FromString(field->freq_op) ;
-              duration.solveTimeStep(*(context->calendar));
-              SuperClassWriter::addAttribute("interval_operation", duration.toString(), &fieldid);
-
-              duration=CDuration::FromString(field->getRelFile()->output_freq) ;
-              duration.solveTimeStep(*(context->calendar));
-              SuperClassWriter::addAttribute("interval_write", duration.toString(), &fieldid);
+              CDuration duration = CDuration::FromString(field->freq_op);
+              duration.solveTimeStep(*context->calendar);
+              StdString freqOpStr = duration.toStringUDUnits();
+              SuperClassWriter::addAttribute("interval_operation", freqOpStr, &fieldid);
+
+              duration = CDuration::FromString(field->getRelFile()->output_freq);
+              duration.solveTimeStep(*context->calendar);
+              SuperClassWriter::addAttribute("interval_write", duration.toStringUDUnits(), &fieldid);
+
+              StdString cellMethods = coodinates.front() + ": ";
+              if (field->operation.getValue() == "instant") cellMethods += "point";
+              else if (field->operation.getValue() == "average") cellMethods += "mean";
+              else if (field->operation.getValue() == "accumulate") cellMethods += "sum";
+              else cellMethods += field->operation;
+              cellMethods += " (interval: " + freqOpStr + ")";
+              SuperClassWriter::addAttribute("cell_methods", cellMethods, &fieldid);
            }
 
