diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index 0db9230a2cb55cf33aacd09fa8afba883951daaf..405a6798fa329b527dc79282fd47c1da2cc35584 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -652,7 +652,7 @@ WARN_LOGFILE           =
 # directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
-INPUT                  = @top_srcdir@/include @top_srcdir@/src
+INPUT                  = @top_srcdir@/include @top_srcdir@/src @top_srcdir@/doc
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -903,7 +903,7 @@ HTML_FOOTER            =
 # HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
 # tag will in the future become obsolete.
 
-HTML_STYLESHEET        =
+HTML_STYLESHEET        = 
 
 # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
 # user-defined cascading style sheet that is included after the standard
@@ -913,7 +913,7 @@ HTML_STYLESHEET        =
 # robust against future updates. Doxygen will copy the style sheet file to
 # the output directory.
 
-HTML_EXTRA_STYLESHEET  =
+HTML_EXTRA_STYLESHEET  = libmtime.css
 
 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
 # other source files which should be copied to the HTML output directory. Note
@@ -1321,7 +1321,7 @@ EXTRA_PACKAGES         =
 # the first chapter. If it is left blank doxygen will generate a
 # standard header. Notice: only use this tag if you know what you are doing!
 
-LATEX_HEADER           = ComptesRendus.tex
+LATEX_HEADER           = libmtime.tex
 
 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
 # the generated latex document. The footer should contain everything after
diff --git a/doc/examples/example.f90 b/doc/examples/example.f90
index 80c283485003c26d365240c6b2eb5c39140eee03..017d6f1a06a611f19c8cd0ae56c221111e7e3ba9 100644
--- a/doc/examples/example.f90
+++ b/doc/examples/example.f90
@@ -28,7 +28,7 @@ module mo_event_manager
   type(datetime), pointer :: model_reference_date => null()
 
   logical :: linitialized = .false.
-!! [example_event_manager]
+
 contains
 
   subroutine initEventManager(referenceDate)
diff --git a/doc/libmtime.css b/doc/libmtime.css
new file mode 100644
index 0000000000000000000000000000000000000000..b50e7cfab442f92a8a6c78a618d141bba616035b
--- /dev/null
+++ b/doc/libmtime.css
@@ -0,0 +1,1454 @@
+/* The standard CSS for doxygen 1.8.10 */
+
+body, table, div, p, dl {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+.title {
+	font: 400 14px/28px Roboto,sans-serif;
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid #879ECB;
+	color: #52A59C;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px #676DB6;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #FFDD80;
+	border: 1px solid #52A59C;
+	text-align: center;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #52A59C;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #52A59C;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #9CAFD4;
+	color: #ffffff;
+	border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+	color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+	background-color: #FBFCFD;
+	border: 1px solid #C4CFE5;
+}
+
+div.line {
+	font-family: monospace, fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
+}
+
+div.ah, span.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background-color: white;
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+td.indexkey {
+	background-color: #EBEFF6;
+	font-weight: bold;
+	border: 1px solid #C4CFE5;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+	background-color: #EBEFF6;
+	border: 1px solid #C4CFE5;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+	background: #EBEFF6;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #F9FAFC;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: #4665A2;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+	font-size: 80%;
+	color: #4665A2;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.memnav {
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: bold;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        -moz-border-radius-topleft: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+        -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+	text-shadow: none;
+	color: white;
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #9CAFD4;
+        border-bottom: 1px solid #9CAFD4;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+	padding-top: 3px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: #F7F8FB;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: #3D578C;
+}
+
+.arrow {
+    color: #9CAFD4;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: pointer;
+    font-size: 80%;
+    display: inline-block;
+    width: 16px;
+    height: 22px;
+}
+
+.icon {
+    font-family: Arial, Helvetica;
+    font-weight: bold;
+    font-size: 12px;
+    height: 14px;
+    width: 16px;
+    display: inline-block;
+    background-color: #728DC1;
+    color: white;
+    text-align: center;
+    border-radius: 4px;
+    margin-left: 2px;
+    margin-right: 2px;
+}
+
+.icona {
+    width: 24px;
+    height: 22px;
+    display: inline-block;
+}
+
+.iconfopen {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderopen.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.iconfclosed {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderclosed.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.icondoc {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('doc.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+table.directory {
+    font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: #2A3D61;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 0px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	background-position: 0 -5px;
+	height:30px;
+	line-height:30px;
+	color:#8AA0CC;
+	border:solid 1px #C2CDE4;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+	color: #283A5D;
+	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+	text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+	color:#6884BD;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#364D7C;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: #F9FAFC;
+	margin:  0px;
+	border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+        padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.note
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00D000;
+}
+
+dl.deprecated
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #505050;
+}
+
+dl.todo
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00C0E0;
+}
+
+dl.test
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #3030E0;
+}
+
+dl.bug
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectalign
+{
+        vertical-align: middle;
+}
+
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.diagraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 20px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+        position: absolute;
+        display: none;
+}
+
+#powerTip {
+	cursor: default;
+	white-space: nowrap;
+	background-color: white;
+	border: 1px solid gray;
+	border-radius: 4px 4px 4px 4px;
+	box-shadow: 1px 1px 7px gray;
+	display: none;
+	font-size: smaller;
+	max-width: 80%;
+	opacity: 0.9;
+	padding: 1ex 1em 1em;
+	position: absolute;
+	z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+        color: grey;
+	font-style: italic;
+}
+
+#powerTip div.ttname a {
+        font-weight: bold;
+}
+
+#powerTip div.ttname {
+        font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+        color: #006318;
+}
+
+#powerTip div {
+        margin: 0px;
+        padding: 0px;
+        font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+	content: "";
+	position: absolute;
+	margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	border: solid transparent;
+	content: " ";
+	height: 0;
+	width: 0;
+	position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+	border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+	border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+	top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+	border-top-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+#powerTip.n:before {
+	border-top-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+	left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+	right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+	left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+	border-bottom-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+	border-bottom-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+	left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+	right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+	left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+	left: 100%;
+}
+#powerTip.e:after {
+	border-left-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.e:before {
+	border-left-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+	right: 100%;
+}
+#powerTip.w:after {
+	border-right-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.w:before {
+	border-right-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
diff --git a/include/libmtime.h b/doc/libmtime.dox
similarity index 98%
rename from include/libmtime.h
rename to doc/libmtime.dox
index a31bf4a12448becb591f1382d09a270bed32a40d..af65f5273ddfdba5f31fdc3ca13a79abd031aa3c 100644
--- a/include/libmtime.h
+++ b/doc/libmtime.dox
@@ -1,4 +1,4 @@
-/** @file libmtime.h Documentation header file */
+/** @file libmtime.dox Documentation header file */
 
 /** @mainpage libmtime - A model time management library
  *
diff --git a/doc/ComptesRendus.tex b/doc/libmtime.tex
similarity index 100%
rename from doc/ComptesRendus.tex
rename to doc/libmtime.tex
diff --git a/include/mtime_timedelta.h b/include/mtime_timedelta.h
index 7742bf4de76e8c980465b75af0b01e9a202f486a..2f2c2588d1d9b163d82fef5e694c9d746652a724 100644
--- a/include/mtime_timedelta.h
+++ b/include/mtime_timedelta.h
@@ -49,11 +49,16 @@ struct _timedelta
 };
 
 
-/* Used only for storing division of two time-delta results. */
+/**
+ * @struct _divisionquotienttimespan
+ *
+ * @brief Struct _divisionquotienttimespan is used for storing division of two time-delta results. 
+ */
+
 struct _divisionquotienttimespan
 {
-  int64_t quotient;
-  int64_t remainder_in_ms;
+  int64_t quotient;          ///< Quotient of two timedeltas.
+  int64_t remainder_in_ms;   ///< Remainder in milli seconds of two timedeltas division.
 };
 
 struct _timedelta*
diff --git a/src/libmtime.f90 b/src/libmtime.f90
index 426599052626dc270c376d03cb35699bb8a85a97..cd65243551281e50ab0c597d9a81bf62879fd192 100644
--- a/src/libmtime.f90
+++ b/src/libmtime.f90
@@ -119,7 +119,8 @@ contains
   !>
   !! @brief convert the calendar identifier into a human readable string
   !!
-  !! @param[out]  string      the calendar type verbose
+  !! @param[out]       string      the calendar type verbose
+  !! @param[out]       errno       optional, error message 
   !!
   subroutine calendarToString(string, errno) !TESTED-OK
     character(len=max_calendar_str_len), intent(out) :: string
@@ -160,8 +161,8 @@ module mtime_julianday
   integer, parameter :: max_julianday_str_len = 32   
   !
   type, bind(c) :: julianday
-    integer(c_int64_t) :: day  !> the actual Julian day
-    integer(c_int64_t) :: ms   !> the milisecond on that particular day
+    integer(c_int64_t) :: day  !< the actual Julian day
+    integer(c_int64_t) :: ms   !< the milisecond on that particular day
   end type julianday
   !
   !> @cond DOXYGEN_IGNORE_THIS
@@ -195,6 +196,7 @@ contains
   !!
   !! @param[in] day            the Julian day
   !! @param[in] ms             an integer denoting the actual milli seconds of a day 
+  !! @param[out]       errno       optional, error message 
   !! @return    ret_julianday  a pointer of type(julianday)
   function newJulianday(day, ms, errno) result(ret_julianday) !OK-TESTED.
     type(julianday), pointer :: ret_julianday
@@ -223,6 +225,7 @@ contains
   !!
   !! @param[in]  my_julianday   a pointer to type(julianday). The Julian day to be converted to a string 
   !! @param[out] string         the Julian day verbose
+  !! @param[out]       errno       optional, error message 
   subroutine juliandayToString(my_julianday, string, errno) !OK-TESTED.
     type(julianday), pointer :: my_julianday
     character(len=max_julianday_str_len), intent(out) :: string
@@ -278,6 +281,7 @@ module mtime_date
     module procedure newdatefromconstructandcopy
   end interface newdate
   !
+  !> @cond DOXYGEN_IGNORE_THIS  
   interface
     !
     function my_newdatefromstring(string) result(c_pointer) bind(c, name='newDate')
@@ -326,6 +330,7 @@ module mtime_date
     end function my_datetoposixstring
     !
   end interface
+  !> @endcond DOXYGEN_IGNORE_THIS  
   !
 contains
   !
@@ -333,6 +338,7 @@ contains
   !! @brief construct a new date 
   !!
   !! @param[in] string         an ISO 8601 conforming date string
+  !! @param[out]       errno       optional, error message 
   !! @return    ret_date       a pointer of type(date)
   function newdatefromstring(string,errno) result(ret_date)  !OK-TESTED.
     type(date), pointer :: ret_date
@@ -344,7 +350,14 @@ contains
     if ((.not. c_associated(c_pointer)) .and. present(errno)) errno = 2 * 100 + 1
     call c_f_pointer(c_pointer, ret_date)
   end function newdatefromstring
-  !TODO: Doxy comments.
+  !>
+  !! @brief construct a new date from raw date
+  !!
+  !! @param[in] year           the year
+  !! @param[in] month          the month
+  !! @param[in] day            the day
+  !! @param[out]       errno       optional, error message   
+  !! @return    ret_date       a pointer of type(date)
   function newdatefromraw_yi8(year, month, day, errno) result(ret_date) !OK-TESTED.
     type(date), pointer :: ret_date
     integer(c_int64_t), intent(in) :: year
@@ -356,7 +369,14 @@ contains
     if ((.not. c_associated(c_pointer)) .and. present(errno)) errno = 2 * 100 + 2
     call c_f_pointer(c_pointer, ret_date)
   end function newdatefromraw_yi8
-  !TODO: Doxy comments.
+  !>
+  !! @brief construct a new date from raw date
+  !!
+  !! @param[in] year           the year
+  !! @param[in] month          the month
+  !! @param[in] day            the day
+  !! @param[out]       errno       optional, error message   
+  !! @return    ret_date       a pointer of type(date)
   function newdatefromraw(year, month, day, errno) result(ret_date) !OK-TESTED.
     type(date), pointer :: ret_date
     integer(c_int), intent(in) :: year, month, day
@@ -367,7 +387,12 @@ contains
     if ((.not. c_associated(c_pointer)) .and. present(errno)) errno = 2 * 100 + 3
     call c_f_pointer(c_pointer, ret_date)
   end function newdatefromraw
-  !TODO: Doxy comments..
+  !>
+  !! @brief construct a new date from an existing by construct and copy
+  !!
+  !! @param[in] src            a pointer of type(date)
+  !! @param[out]       errno       optional, error message 
+  !! @return    ret_date       a pointer of type(date)
   function newdatefromconstructandcopy(src, errno) result(dest) !OK-TESTED
     type(date), pointer :: dest
     type(date), pointer :: src
@@ -378,7 +403,7 @@ contains
     if ((.not. c_associated(c_pointer)) .and. present(errno)) errno = 2 * 100 + 4
     call c_f_pointer(c_pointer, dest)
   end function newdatefromconstructandcopy
-  !
+  !>
   !! @brief destructor for a date 
   !!
   !! @param[in] my_date        a pointer of type(date)
@@ -387,7 +412,12 @@ contains
     call my_deallocatedate(c_loc(my_date))
     my_date => null()
   end subroutine deallocateDate
-  !
+  !>
+  !! @brief repace an existing date by a given one
+  !!
+  !! @param[in]  src            a pointer of type(date)
+  !! @param[out] dest           a pointer of type(date)
+  !! @param[out]       errno       optional, error message 
   subroutine replaceDate(dest, src, errno)  !OK-TESTED.
     type(date), target, intent(inout) :: dest
     type(date), target, intent(in) :: src
@@ -398,6 +428,7 @@ contains
     if ((.not. c_associated(dummy_ptr)) .and. present(errno)) errno = 2 * 100 + 6
   end subroutine replaceDate
   !
+  !! @param[out]       errno       optional, error message   
   subroutine dateToString(my_date, string, errno) !OK-TESTED.
     type(date), pointer :: my_date
     character(len=max_date_str_len) :: string
@@ -413,6 +444,7 @@ contains
     string(i:len(string)) = ' '
   end subroutine dateToString
   !
+  !! @param[out]       errno       optional, error message   
   subroutine dateToPosixString(my_date, string, fmtstr, errno) !OK-TESTED.
     type(date), pointer :: my_date
     character(len=max_date_str_len) :: string
@@ -472,6 +504,7 @@ module mtime_time
     module procedure newtimefromconstructandcopy
   end interface newtime
   !
+  !> @cond DOXYGEN_IGNORE_THIS  
   interface
     !
     function my_newtimefromstring(string) result(c_pointer) bind(c, name='newTime')
@@ -519,9 +552,11 @@ module mtime_time
     end function my_timetoposixstring
     !
   end interface
+  !> @endcond DOXYGEN_IGNORE_THIS
   !
 contains
   !
+  !! @param[out]       errno       optional, error message   
   function newtimefromstring(string, errno) result(ret_time) !OK-TESTED.
     type(time), pointer :: ret_time
     character(len=*), intent(in) :: string
@@ -533,6 +568,7 @@ contains
     call c_f_pointer(c_pointer, ret_time)
   end function newtimefromstring
   !
+  !! @param[out]       errno       optional, error message   
   function newtimefromraw(hour, minute, second, ms, errno) result(ret_time) !OK-TESTED.
     type(time), pointer :: ret_time
     integer(c_int), intent(in) :: hour, minute, second, ms
@@ -544,6 +580,7 @@ contains
     call c_f_pointer(c_pointer, ret_time)
   end function newtimefromraw
   !
+  !! @param[out]       errno       optional, error message   
   function newtimefromconstructandcopy(src, errno) result(dest) !OK-TESTED.
     type(time), pointer :: dest
     type(time), pointer :: src
@@ -561,6 +598,7 @@ contains
     my_time => null()
   end subroutine deallocateTime
   !
+  !! @param[out]       errno       optional, error message   
   subroutine replaceTime(dest,src,errno) !OK-TESTED.
     type(time), target, intent(in) :: src
     type(time), target, intent(inout) :: dest
@@ -571,6 +609,7 @@ contains
     if ((.not.c_associated(dummy_ptr)) .and. present(errno)) errno = 3 * 100 + 5
   end subroutine replaceTime
   !
+  !! @param[out]       errno       optional, error message   
   subroutine timeToString(my_time, string, errno) !OK-TESTED.
     type(time), pointer :: my_time
     character(len=max_time_str_len) :: string
@@ -586,6 +625,7 @@ contains
     string(i:len(string)) = ' '
   end subroutine timeToString
   !
+  !! @param[out]       errno       optional, error message   
   subroutine timeToPosixString(my_time, string, fmtstr, errno) !OK-TESTED.
     type(time), pointer :: my_time
     character(len=max_time_str_len) :: string
@@ -701,6 +741,7 @@ module mtime_datetime
     module procedure datetime_ne
   end interface operator (/=)
   !
+  !> @cond DOXYGEN_IGNORE_THIS  
   interface
     !
     function my_newdatetime(string) result(c_pointer) bind(c, name='newDateTime')
@@ -800,9 +841,11 @@ module mtime_datetime
     end function my_getdatetimefromjulianday
     !
   end interface
+  !> @endcond DOXYGEN_IGNORE_THIS
   !
 contains
   !
+  !! @param[out]       errno       optional, error message   
   function newdatetimefromstring(string, errno) result(ret_datetime) !OK-TESTED
     type(datetime), pointer :: ret_datetime
     character(len=*), intent(in) :: string
@@ -814,6 +857,7 @@ contains
     call c_f_pointer(c_pointer, ret_datetime)
   end function newdatetimefromstring
   !
+  !! @param[out]       errno       optional, error message   
   function newdatetimefromraw_yi8(year, month, day, hour, minute, second, ms, errno) result(ret_datetime) !OK-TESTED
     type(datetime), pointer :: ret_datetime
     integer(c_int64_t), intent(in) :: year
@@ -826,6 +870,7 @@ contains
     call c_f_pointer(c_pointer, ret_datetime)
   end function newdatetimefromraw_yi8
   !
+  !! @param[out]       errno       optional, error message   
   function newdatetimefromraw(year, month, day, hour, minute, second, ms, errno) result(ret_datetime) !OK-TESTED
     type(datetime), pointer :: ret_datetime
     integer(c_int), intent(in) :: year, month, day, hour, minute, second, ms
@@ -837,6 +882,7 @@ contains
     call c_f_pointer(c_pointer, ret_datetime)
   end function newdatetimefromraw
   !
+  !! @param[out]       errno       optional, error message   
   function newdatetimefromconstructandcopy(src, errno) result(dest) !OK-TESTED.
     type(datetime), pointer :: dest
     type(datetime), pointer :: src
@@ -887,6 +933,7 @@ contains
     nullify(my_datetime)
   end subroutine deallocateDatetime
   !
+  !! @param[out]       errno       optional, error message   
   subroutine datetimeToString(my_datetime, string, errno) !OK-TESTED
     type(datetime), pointer :: my_datetime
     character(len=max_datetime_str_len) :: string
@@ -902,6 +949,7 @@ contains
     string(i:len(string)) = ' '
   end subroutine datetimeToString
   !
+  !! @param[out]       errno       optional, error message   
   subroutine datetimeToPosixString(my_datetime, string, fmtstr, errno) !OK-TESTED.
     type(datetime), pointer :: my_datetime
     character(len=max_datetime_str_len) :: string
@@ -1004,6 +1052,7 @@ contains
     endif
   end function datetime_ne
   !
+  !! @param[out]       errno       optional, error message   
   function getNoOfDaysInMonthDateTime(dt, errno) !OK-TESTED.
     type(datetime), target :: dt
     integer(c_int) :: getNoOfDaysInMonthDateTime
@@ -1013,6 +1062,7 @@ contains
     if (getNoOfDaysInMonthDateTime == 0 .and. present(errno)) errno = 4 * 100 + 15
   end function getNoOfDaysInMonthDateTime
   !
+  !! @param[out]       errno       optional, error message   
   function getNoOfDaysInYearDateTime(dt, errno) !OK-TESTED.
     type(datetime), target :: dt
     integer(c_int) :: getNoOfDaysInYearDateTime
@@ -1022,6 +1072,7 @@ contains
     if (getNoOfDaysInYearDateTime == 0 .and. present(errno)) errno = 4 * 100 + 16
   end function getNoOfDaysInYearDateTime
   !
+  !! @param[out]       errno       optional, error message   
   function getDayOfYearFromDateTime(dt, errno) !OK-TESTED.
     type(datetime), target :: dt
     integer(c_int) :: getDayOfYearFromDateTime
@@ -1031,6 +1082,7 @@ contains
     if (getDayOfYearFromDateTime == 0 .and. present(errno)) errno = 4 * 100 + 17
   end function getDayOfYearFromDateTime
   !
+  !! @param[out]       errno       optional, error message   
   function getNoOfSecondsElapsedInMonthDateTime(dt, errno) !OK-TESTED.
     type(datetime), target :: dt
     integer(c_int64_t) :: getNoOfSecondsElapsedInMonthDateTime
@@ -1040,6 +1092,7 @@ contains
     if (getNoOfSecondsElapsedInMonthDateTime == -1 .and. present(errno)) errno = 4 * 100 + 18
   end function getNoOfSecondsElapsedInMonthDateTime
   !
+  !! @param[out]       errno       optional, error message   
   function getNoOfSecondsElapsedInDayDateTime(dt, errno) !OK-TESTED.
     type(datetime), target :: dt
     integer(c_int) :: getNoOfSecondsElapsedInDayDateTime
@@ -1049,6 +1102,7 @@ contains
     if (getNoOfSecondsElapsedInDayDateTime == -1 .and. present(errno)) errno = 4 * 100 + 19
   end function getNoOfSecondsElapsedInDayDateTime
   !
+  !! @param[out]       errno       optional, error message   
   subroutine getJulianDayFromDatetime(dt, jd, errno) !OK-TESTED.
     type(datetime), target :: dt
     type(julianday), pointer :: jd
@@ -1059,6 +1113,7 @@ contains
     if ((.not.c_associated(dummy_ptr)) .and. present(errno)) errno = 4 * 100 + 20
   end subroutine getJulianDayFromDatetime
   !
+  !! @param[out]       errno       optional, error message   
   subroutine getDatetimeFromJulianDay(jd, dt, errno)
     type(julianday), target :: jd
     type(datetime), pointer :: dt
@@ -1196,6 +1251,7 @@ module mtime_timedelta
     module procedure getPTStringFromSecondsDouble
   end interface getPTStringFromSeconds
   !
+  !> @cond DOXYGEN_IGNORE_THIS
   interface
     !
     function my_newtimedeltafromstring(string) result(c_pointer) bind(c, name='newTimeDelta')
@@ -1371,9 +1427,11 @@ module mtime_timedelta
     end function my_divideDatetimeDifferenceInSeconds
     !
   end interface
+  !> @endcond DOXYGEN_IGNORE_THIS  
   !
 contains
   !
+  !! @param[out]       errno       optional, error message   
   function newtimedeltafromstring(string, errno) result(ret_timedelta) !OK-TESTED.
     type(timedelta), pointer :: ret_timedelta
     character(len=*), intent(in) :: string
@@ -1389,6 +1447,7 @@ contains
     endif
   end function newtimedeltafromstring
   !
+  !! @param[out]       errno       optional, error message   
   function newtimedeltafromraw(sign, year, month, day, hour, minute, second, ms, errno) result(ret_timedelta) 
     type(timedelta), pointer :: ret_timedelta
     character(len=*), intent(in) :: sign
@@ -1401,6 +1460,7 @@ contains
     call c_f_pointer(c_pointer, ret_timedelta)
   end function newtimedeltafromraw
   !
+  !! @param[out]       errno       optional, error message   
   function newtimedeltafromraw_yi8(sign, year, month, day, hour, minute, second, ms, errno) result(ret_timedelta)
     type(timedelta), pointer :: ret_timedelta
     character(len=*), intent(in) :: sign
@@ -1414,6 +1474,7 @@ contains
     call c_f_pointer(c_pointer, ret_timedelta)
   end function newtimedeltafromraw_yi8
   !
+  !! @param[out]       errno       optional, error message   
   function newtimedeltafromconstructandcopy(src, errno) result(dest) !OK-TESTED.
     type(timedelta), pointer :: dest
     type(timedelta), pointer :: src
@@ -1524,6 +1585,7 @@ contains
   end function getTimeDeltaFromDateTime
   ! 
   !WARNING: TD 0 is error. If you know your TD is 0, ignore the error flag.
+  !! @param[out]       errno       optional, error message   
   function getTotalMilliSecondsTimeDelta(td, dt, errno)  !OK-TESTED.
     integer(c_int64_t) :: getTotalMilliSecondsTimeDelta
     type(timedelta), target, intent(in):: td
@@ -1535,6 +1597,7 @@ contains
   end function getTotalMilliSecondsTimeDelta
   !
   !WARNING: TD 0 is error. If you know your TD is 0, ignore the error flag.
+  !! @param[out]       errno       optional, error message   
   function getTotalSecondsTimeDelta(td, dt, errno) !OK-TESTED.
     integer(c_int64_t) :: getTotalSecondsTimeDelta
     type(timedelta), pointer :: td
@@ -1545,6 +1608,7 @@ contains
     if ((getTotalSecondsTimeDelta == 0) .and. present(errno)) errno = 5 * 100 + 9
   end function getTotalSecondsTimeDelta
   !
+  !! @param[out]       errno       optional, error message     
   subroutine timedeltaToString(my_timedelta, string, errno) !OK-TESTED.
     type(timedelta), pointer :: my_timedelta
     character(len=max_timedelta_str_len) :: string
@@ -1815,6 +1879,7 @@ module mtime_events
     module procedure newEventWithDataTypes
   end interface newEvent
   !
+  !> @cond DOXYGEN_IGNORE_THIS  
   interface
     !
     function my_newevent(name, referenceDate, firstdate, lastDate, interval, offset) result(c_pointer) &
@@ -1948,9 +2013,11 @@ module mtime_events
     end function my_geteventislastinyear
     !
   end interface
+  !> @endcond DOXYGEN_IGNORE_THIS
   !
 contains
   !
+  !! @param[out]       errno       optional, error message     
   function newEventWithString(name, referenceDate, firstdate, lastDate, interval, offset, errno) result(ret_event) !OK-TESTED.
     type(event), pointer :: ret_event
     character(len=*), intent(in)           :: name
@@ -1982,6 +2049,7 @@ contains
     call c_f_pointer(c_pointer, ret_event)
   end function newEventWithString
   !
+  !! @param[out]       errno       optional, error message     
   function newEventWithDataTypes(name, referenceDate, firstdate, lastDate, interval, offset, errno) result(ret_event) !OK-TESTED.
     type(event), pointer :: ret_event
     character(len=*), intent(in) :: name
@@ -2012,6 +2080,7 @@ contains
     my_event => null()
   end subroutine deallocateEvent
   !
+  !! @param[out]       errno       optional, error message     
   subroutine eventToString(my_event, string, errno) !TODO:C code still incomplete.
     type(event), pointer :: my_event
     character(len=max_eventname_str_len) :: string
@@ -2070,6 +2139,7 @@ contains
     ret = my_iseventnextinnextyears(c_loc(my_event))
   end function iseventNextInNextYears
   !
+  !! @param[out]       errno       optional, error message     
   subroutine getTriggerNextEventAtDateTime(my_event,my_currentdatetime,my_datetime, errno)
     type(event), target, intent(in) :: my_event
     type(datetime), target, intent(in) :: my_currentdatetime
@@ -2081,6 +2151,7 @@ contains
     if ((.not.c_associated(dummy_ptr)) .and. present(errno)) errno = 6 * 100 + 8
   end subroutine getTriggerNextEventAtDateTime
   !
+  !! @param[out]       errno       optional, error message     
   subroutine getTriggeredPreviousEventAtDateTime(my_event,my_datetime,errno)
     type(event), target, intent(in) :: my_event
     type(datetime), target :: my_datetime
@@ -2097,6 +2168,7 @@ contains
     ret_evtid = my_event%eventId
   end function getEventId
   !
+  !! @param[out]       errno       optional, error message     
   subroutine getEventName(my_event, string, errno) !OK-TESTED.
     type(event), pointer :: my_event
     character(len=max_eventname_str_len) :: string
@@ -2243,6 +2315,7 @@ module mtime_eventgroups
     type(c_ptr) :: firstEventInGroup
   end type eventgroup
   !
+  !> @cond DOXYGEN_IGNORE_THIS  
   interface
     !
     function my_neweventgroup(name) result(c_pointer) bind(c, name='newEventGroup')
@@ -2278,9 +2351,11 @@ module mtime_eventgroups
     end function my_geteventgroupname
     !
   end interface
+  !> @endcond DOXYGEN_IGNORE_THIS  
   !
 contains
   !
+  !! @param[out]       errno       optional, error message     
   function newEventGroup(name, errno) result(ret_eventgroup) !OK-TESTED.
     type(eventgroup), pointer :: ret_eventgroup 
     character(len=*), intent(in) :: name
@@ -2318,6 +2393,7 @@ contains
     ret_grpid = my_eventgroup%eventGroupId
   end function getEventGroupId
   !
+  !! @param[out]       errno       optional, error message       
   subroutine getEventGroupName(my_eventgroup, string, errno)  !TESTED-OK.
     type(eventgroup), pointer :: my_eventgroup
     character(len=max_groupname_str_len) :: string
@@ -2379,8 +2455,10 @@ module mtime_utilities
   public :: getRepetitions
   public :: max_repetition_str_len
   !
+  !> provides a string length for the maximum handable repetition string length input   
   integer, parameter :: max_repetition_str_len = 132
   !
+  !> @cond DOXYGEN_IGNORE_THIS  
   interface
     !
     function my_getRepetitions(repetitionString) bind(c, name='getRepetitions')
@@ -2400,6 +2478,7 @@ module mtime_utilities
     end subroutine my_splitRepetitionString
     !
   end interface
+  !> @endcond DOXYGEN_IGNORE_THIS  
   !
 contains
   !
@@ -2486,28 +2565,34 @@ module mtime
   !
   public
   !
-  ! integer, parameter :: no_of_sec_in_a_day    = 86400
-  ! integer, parameter :: no_of_sec_in_a_hour   =  3600
-  ! integer, parameter :: no_of_sec_in_a_minute =    60
-  ! !  
-  ! integer, parameter :: no_of_ms_in_a_day     = 86400000
-  ! integer, parameter :: no_of_ms_in_half_day  = 43200000
-  ! integer, parameter :: no_of_ms_in_a_hour    =  3600000
-  ! integer, parameter :: no_of_ms_in_a_minute  =    60000
-  ! integer, parameter :: no_of_ms_in_a_second  =     1000
-  !
-  integer(c_int), bind(c,name='NO_OF_SEC_IN_A_DAY') :: no_of_sec_in_a_day
-  integer(c_int), bind(c,name='NO_OF_SEC_IN_A_HOUR') :: no_of_sec_in_a_hour
-  integer(c_int), bind(c,name='NO_OF_SEC_IN_A_MINUTE') :: no_of_sec_in_a_minute
+#ifdef DOXYGEN_DOCUMENTATION_ONLY
+  integer, parameter :: no_of_sec_in_a_day    =    86400  !!< number of seconds per day, defined in C
+  integer, parameter :: no_of_sec_in_a_hour   =     3600  !!< number of seconds per hour, defined in C
+  integer, parameter :: no_of_sec_in_a_minute =       60  !!< number of seconds per minute, defined in C
   !  
-  integer(c_int), bind(c,name='NO_OF_MS_IN_A_DAY') :: no_of_ms_in_a_day
-  integer(c_int), bind(c,name='NO_OF_MS_IN_HALF_DAY') :: no_of_ms_in_half_day
-  integer(c_int), bind(c,name='NO_OF_MS_IN_A_HOUR') :: no_of_ms_in_a_hour
-  integer(c_int), bind(c,name='NO_OF_MS_IN_A_MINUTE') :: no_of_ms_in_a_minute
-  integer(c_int), bind(c,name='NO_OF_MS_IN_A_SECOND') :: no_of_ms_in_a_second
-  ! 
+  integer, parameter :: no_of_ms_in_a_day     = 86400000  !!< number of milli-seconds per day, defined in C
+  integer, parameter :: no_of_ms_in_half_day  = 43200000  !!< number of milli-seconds per 12 hours, defined in C
+  integer, parameter :: no_of_ms_in_a_hour    =  3600000  !!< number of milli-seconds per hour, defined in C
+  integer, parameter :: no_of_ms_in_a_minute  =    60000  !!< number of milli-seconds per minute, defined in C
+  integer, parameter :: no_of_ms_in_a_second  =     1000  !!< number of milli-seconds per second, defined in C
+#endif
+  !
+  !> @cond DOXYGEN_IGNORE_THIS
+  integer(c_int), bind(c,name='NO_OF_SEC_IN_A_DAY') :: no_of_sec_in_a_day       
+  integer(c_int), bind(c,name='NO_OF_SEC_IN_A_HOUR') :: no_of_sec_in_a_hour     
+  integer(c_int), bind(c,name='NO_OF_SEC_IN_A_MINUTE') :: no_of_sec_in_a_minute 
+  !  
+  integer(c_int), bind(c,name='NO_OF_MS_IN_A_DAY') :: no_of_ms_in_a_day         
+  integer(c_int), bind(c,name='NO_OF_MS_IN_HALF_DAY') :: no_of_ms_in_half_day   
+  integer(c_int), bind(c,name='NO_OF_MS_IN_A_HOUR') :: no_of_ms_in_a_hour      
+  integer(c_int), bind(c,name='NO_OF_MS_IN_A_MINUTE') :: no_of_ms_in_a_minute  
+  integer(c_int), bind(c,name='NO_OF_MS_IN_A_SECOND') :: no_of_ms_in_a_second 
+  !> @endcond DOXYGEN_IGNORE_THIS
+  !
+  !> provides a string length for the maximum error string length  
   integer, parameter :: max_mtime_error_str_len = 132
   !
+  !> @cond DOXYGEN_IGNORE_THIS  
   integer, parameter :: no_error                                        = 0,          &
 
        &                calendar_calendartostring                       = 0*100 +  1, &
@@ -2560,9 +2645,12 @@ module mtime
        
        &                eventgroups_neweventgroup                       = 7*100 +  1, &
        &                eventgroups_geteventgroupname                   = 7*100 +  6
+  !> @endcond DOXYGEN_IGNORE_THIS
   !
 contains
   !
+  !! @param[in]   errno           error message number
+  !! @param[out]  error_message   associated error message         
   subroutine mtime_strerror(errno, error_message)
     integer, intent(in) :: errno
     character(len=*), intent(out) :: error_message