Index: XIOS/branchs/xios-1.0/src/config/file_attribute.conf
===================================================================
--- XIOS/branchs/xios-1.0/src/config/file_attribute.conf	(revision 678)
+++ XIOS/branchs/xios-1.0/src/config/file_attribute.conf	(revision 692)
@@ -13,4 +13,5 @@
 DECLARE_ENUM2(type,one_file,multiple_file)
 DECLARE_ATTRIBUTE(StdString,      par_access)
+DECLARE_ENUM4(time_counter, centered, instant, record, none)
 
 DECLARE_ATTRIBUTE(int,       compression_level)
Index: XIOS/branchs/xios-1.0/src/node/file.cpp
===================================================================
--- XIOS/branchs/xios-1.0/src/node/file.cpp	(revision 678)
+++ XIOS/branchs/xios-1.0/src/node/file.cpp	(revision 692)
@@ -201,6 +201,6 @@
       MPI_Comm_split(server->intraComm,color,server->intraCommRank,&fileComm) ;
       if (allDomainEmpty) MPI_Comm_free(&fileComm) ;
-      //
-      
+
+      if (time_counter.isEmpty()) time_counter.setValue(time_counter_attr::centered);
     }
     
Index: XIOS/branchs/xios-1.0/src/output/nc4_data_output.cpp
===================================================================
--- XIOS/branchs/xios-1.0/src/output/nc4_data_output.cpp	(revision 678)
+++ XIOS/branchs/xios-1.0/src/output/nc4_data_output.cpp	(revision 692)
@@ -1087,7 +1087,7 @@
 
          CArray<double,1> time_data(1) ;
+         CArray<double,1> time_data_bound(2);
          CArray<double,1> time_counter(1) ;
          CArray<double,1> time_counter_bound(2);
-         CArray<double,1> time_data_bound(2);
 
         bool wtime   = !(!field->operation.isEmpty() && (field->foperation->timeType() == func::CFunctor::once));
@@ -1095,18 +1095,37 @@
         if (wtime)
         {
-          time_counter(0)= (Time(*field->last_Write_srv) + Time(*field->lastlast_Write_srv)) / 2;
+          Time lastWrite = *field->last_Write_srv;
+          Time lastLastWrite = *field->lastlast_Write_srv;
+
           if (field->foperation->timeType() == func::CFunctor::instant)
-            time_data(0) = Time(*field->last_Write_srv);
-          else if (field->foperation->timeType() == func::CFunctor::centered) time_data(0) = time_counter(0);
-
-          time_counter_bound(0) = Time(*field->lastlast_Write_srv);
-          time_counter_bound(1) = Time(*field->last_Write_srv);
+            time_data(0) = lastWrite;
+          else if (field->foperation->timeType() == func::CFunctor::centered)
+            time_data(0) = (lastWrite + lastLastWrite) / 2;
+
           if (field->foperation->timeType() == func::CFunctor::instant)
-            time_data_bound(0) = time_data_bound(1) = Time(*field->last_Write_srv);
+            time_data_bound(0) = time_data_bound(1) = lastWrite;
           else if (field->foperation->timeType() == func::CFunctor::centered)
           {
-            time_data_bound(0) = time_counter_bound(0);
-            time_data_bound(1) = time_counter_bound(1);
+            time_data_bound(0) = lastLastWrite;
+            time_data_bound(1) = lastWrite;
           }
+
+          if (field->file->time_counter == CFile::time_counter_attr::instant)
+            time_counter(0) = lastWrite;
+          else if (field->file->time_counter == CFile::time_counter_attr::centered)
+            time_counter(0) = (lastWrite + lastLastWrite) / 2;
+          else if (field->file->time_counter == CFile::time_counter_attr::record)
+            time_counter(0) = field->getNStep() - 1;
+
+
+          if (field->file->time_counter == CFile::time_counter_attr::instant)
+            time_counter_bound(0) = time_counter_bound(1) = lastWrite;
+          else if (field->file->time_counter == CFile::time_counter_attr::centered)
+          {
+            time_counter_bound(0) = lastLastWrite;
+            time_counter_bound(1) = lastWrite;
+          }
+          else if (field->file->time_counter == CFile::time_counter_attr::record)
+            time_counter_bound(0) = time_counter_bound(1) = field->getNStep() - 1;
          }
 
@@ -1140,11 +1159,15 @@
                 case (MULTI_FILE) :
                 {
-                   SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1);
+                   SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep() - 1);
                    if (wtime)
                    {
-                     SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1);
-                     SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1);
-                     SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1);
-                     SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1);
+                     SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep() - 1);
+                     SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep() - 1);
+                     if (field->file->time_counter != CFile::time_counter_attr::none)
+                     {
+                       SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep() - 1);
+                       if (field->file->time_counter != CFile::time_counter_attr::record)
+                         SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1);
+                     }
                    }
                    break ;
@@ -1165,11 +1188,15 @@
                      count[2]=domain->zoom_ni_srv ; count[1]=domain->zoom_nj_srv ; count[0] = axis->zoom_size.getValue();
                    }
-                   SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1,&start,&count );
+                   SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep() - 1, &start, &count);
                    if (wtime)
                    {
-                     SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot );
-                     SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot );
-                     SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1, isRoot );
-                     SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1, isRoot);
+                     SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep() - 1, isRoot);
+                     SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep() - 1, isRoot);
+                     if (field->file->time_counter != CFile::time_counter_attr::none)
+                     {
+                       SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep() - 1, isRoot);
+                       if (field->file->time_counter != CFile::time_counter_attr::record)
+                         SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1, isRoot);
+                     }
                    }
                    break;
@@ -1188,11 +1215,15 @@
                 case (MULTI_FILE) :
                 {
-                  SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1);
+                  SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep() - 1);
                   if (wtime)
                   {
-                    SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1);
-                    SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1);
-                    SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1);
-                    SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1);
+                    SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep() - 1);
+                    SuperClassWriter::writeData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep() - 1);
+                    if (field->file->time_counter != CFile::time_counter_attr::none)
+                    {
+                      SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep() - 1);
+                      if (field->file->time_counter != CFile::time_counter_attr::record)
+                        SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1);
+                    }
                   }
                   break;
@@ -1213,11 +1244,15 @@
                    }
 
-                   SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1,&start,&count);
+                   SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep() - 1, &start, &count);
                    if (wtime)
                    {
-                     SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot);
-                     SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot);
-                     SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep()-1, isRoot);
-                     SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep()-1, isRoot);
+                     SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep() - 1, isRoot);
+                     SuperClassWriter::writeTimeAxisData(time_data_bound, timeAxisBoundId, isCollective, field->getNStep() - 1, isRoot);
+                     if (field->file->time_counter != CFile::time_counter_attr::none)
+                     {
+                       SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep() - 1, isRoot);
+                       if (field->file->time_counter != CFile::time_counter_attr::record)
+                         SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1, isRoot);
+                     }
                    }
                    break;
@@ -1298,28 +1333,37 @@
 
            // Adding time_counter
-           axisid = "time_counter" ;
-           axisBoundId = "time_counter_bounds" ;
-           dims.clear() ;
-           dims.push_back(timeid);
-           if (!SuperClassWriter::varExist(axisid))
+           if (field->file->time_counter != CFile::time_counter_attr::none)
            {
-              SuperClassWriter::addVariable(axisid, NC_DOUBLE, dims);
-              SuperClassWriter::addAttribute("axis", string("T"), &axisid);
-              CDate timeOrigin=cal->getTimeOrigin() ;
-              StdString strTimeOrigin=timeOrigin.toString() ;
-
-              this->writeTimeAxisAttributes
-                 (axisid, cal->getType(),
-                  StdString("seconds since ").append(strTimeOrigin),
-                  strTimeOrigin, axisBoundId);
-           }
-
-           // Adding time_counter_bound dimension
-           if (!SuperClassWriter::varExist(axisBoundId))
-           {
-              dims.clear();
-              dims.push_back(timeid);
-              dims.push_back(timeBoundId);
-              SuperClassWriter::addVariable(axisBoundId, NC_DOUBLE, dims);
+             axisid = "time_counter";
+             axisBoundId = "time_counter_bounds";
+             dims.clear();
+             dims.push_back(timeid);
+             if (!SuperClassWriter::varExist(axisid))
+             {
+                SuperClassWriter::addVariable(axisid, NC_DOUBLE, dims);
+                SuperClassWriter::addAttribute("axis", string("T"), &axisid);
+
+                if (field->file->time_counter != CFile::time_counter_attr::record)
+                {
+                  CDate timeOrigin = cal->getTimeOrigin();
+                  StdString strTimeOrigin = timeOrigin.toString();
+
+                  this->writeTimeAxisAttributes(axisid, cal->getType(),
+                                                StdString("seconds since ").append(strTimeOrigin),
+                                                strTimeOrigin, axisBoundId);
+                }
+             }
+
+             // Adding time_counter_bound dimension
+             if (field->file->time_counter != CFile::time_counter_attr::record)
+             {
+               if (!SuperClassWriter::varExist(axisBoundId))
+               {
+                  dims.clear();
+                  dims.push_back(timeid);
+                  dims.push_back(timeBoundId);
+                  SuperClassWriter::addVariable(axisBoundId, NC_DOUBLE, dims);
+               }
+             }
            }
          }
