diff --git a/src/utilities/convert/dates2M.m b/src/utilities/convert/dates2M.m
index 91ce7f3e4f882e039d0a4b529b21373179dcd64c..15bf188ef9a2ca2cfe10156dcde19d3755442311 100644
--- a/src/utilities/convert/dates2M.m
+++ b/src/utilities/convert/dates2M.m
@@ -1,4 +1,4 @@
-function m = dates2M(d)
+function m = dates2M(d) % --*-- Unitary tests --*--
 
 % INPUTS
 % - d   [dates]    daily frequency object with n elements.
@@ -6,7 +6,7 @@ function m = dates2M(d)
 % OUTPUTS
 % - m   [dates]    monthly frequency object with n elements (with repetitions).
 
-% Copyright © 2020 Dynare Team
+% Copyright © 2021 Dynare Team
 %
 % This code is free software: you can redistribute it and/or modify
 % it under the terms of the GNU General Public License as published by
@@ -30,4 +30,47 @@ else
     error('Cannot convert to higher frequency.')
 end
 
-m = dates(12, time(:,1:2));
\ No newline at end of file
+m = dates(12, time(:,1:2));
+
+return
+
+%@test:1
+try
+    m = dates2M(dates('1938-11-22'));
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = isequal(m, dates('1938M11'));
+end
+
+T = all(t);
+%@eof:1
+
+%@test:2
+try
+    m = dates2M(dates('1938M11'));
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = isequal(m, dates('1938M11'));
+end
+
+T = all(t);
+%@eof:2
+
+%@test:3
+try
+    m = dates2M(dates('1938Q4'));
+    t(1) = false;
+catch
+    t(1) = true;
+end
+
+T = all(t);
+%@eof:3
\ No newline at end of file
diff --git a/src/utilities/convert/dates2Q.m b/src/utilities/convert/dates2Q.m
index 7414cccd4e5d36dc6c70927e140ccf2a138940ba..bab7b0e1e9a05c1d40387b22cbfcbbed3259d949 100644
--- a/src/utilities/convert/dates2Q.m
+++ b/src/utilities/convert/dates2Q.m
@@ -1,4 +1,4 @@
-function m = dates2Q(d)
+function m = dates2Q(d)  % --*-- Unitary tests --*--
 
 % INPUTS
 % - d   [dates]    daily frequency object with n elements.
@@ -24,7 +24,9 @@ function m = dates2Q(d)
 if d.freq==365
     time = datevec(d.time(:,1));
 elseif d.freq==12
-    time = d.time;
+    y = floor((d.time-1)/d.freq);
+    s = d.time-y*d.freq;
+    time = [y, s];
 elseif d.freq==4
     m = d;
     return
@@ -42,4 +44,62 @@ time(isq2,2) = 2;
 time(isq3,2) = 3;
 time(isq4,2) = 4;
 
-m = dates(4, time(:,1:2));
\ No newline at end of file
+m = dates(4, time(:,1:2));
+
+return
+
+%@test:1
+try
+    m = dates2Q(dates('1938-11-22'));
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = isequal(m, dates('1938Q4'));
+end
+
+T = all(t);
+%@eof:1
+
+%@test:2
+try
+    m = dates2Q(dates('1938M11'));
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = isequal(m, dates('1938Q4'));
+end
+
+T = all(t);
+%@eof:2
+
+%@test:3
+try
+    m = dates2Q(dates('1938Q4'));
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = isequal(m, dates('1938Q4'));
+end
+
+T = all(t);
+%@eof:3
+
+%@test:4
+try
+    m = dates2Q(dates('1938S2'));
+    t(1) = false;
+catch
+    t(1) = true;
+end
+
+T = all(t);
+%@eof:4
\ No newline at end of file
diff --git a/src/utilities/convert/dates2S.m b/src/utilities/convert/dates2S.m
new file mode 100644
index 0000000000000000000000000000000000000000..c91a6bb158b132c654fd6fd03c386ec8d487807e
--- /dev/null
+++ b/src/utilities/convert/dates2S.m
@@ -0,0 +1,47 @@
+function m = dates2S(d)
+
+% INPUTS
+% - d   [dates]    daily frequency object with n elements.
+%
+% OUTPUTS
+% - q   [dates]    bi-annual frequency object with n elements (with repetitions).
+
+% Copyright © 2021 Dynare Team
+%
+% This code is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% Dynare dates submodule is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
+
+if d.freq==365
+    time = datevec(d.time(:,1));
+elseif d.freq==12
+    time = d.time;
+elseif d.freq==4
+    time = d.time;
+elseif d.freq==2
+    m = d;
+    return
+else
+    error('Cannot convert to higher frequency.')
+end
+
+isq1 = arrayfun( @(m) ismember(m, [1, 2, 3]), time(:,2));
+isq2 = arrayfun( @(m) ismember(m, [4, 5, 6]), time(:,2));
+isq3 = arrayfun( @(m) ismember(m, [7, 8, 9]), time(:,2));
+isq4 = arrayfun( @(m) ismember(m, [10, 11, 12]), time(:,2));
+
+time(isq1,2) = 1;
+time(isq2,2) = 2;
+time(isq3,2) = 3;
+time(isq4,2) = 4;
+
+m = dates(4, time(:,1:2));
\ No newline at end of file
diff --git a/src/utilities/convert/dates2Y.m b/src/utilities/convert/dates2Y.m
index 848b1117ef173c5f3e6699f044e8ebb1f028e15f..0f9ac68f1b3512a3f375e679336b0dd9e4658788 100644
--- a/src/utilities/convert/dates2Y.m
+++ b/src/utilities/convert/dates2Y.m
@@ -23,8 +23,8 @@ function y = dates2Y(d)
 
 if d.freq==365
     time = datevec(d.time(:,1));
-elseif d.freq==12 || d.freq==4
-    time = d.time;
+elseif ismember(d.freq, [2,4,12])
+    time = floor((d.time-1)/d.freq);
 elseif d.freq==1
     y = d;
     return
@@ -32,4 +32,66 @@ else
     error('Unknown frequency.')
 end
 
-y = dates(1, time(:,1));
\ No newline at end of file
+y = dates(1, time(:,1));
+
+return
+
+%@test:1
+try
+    m = dates2Y(dates('1938-11-22'));
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = isequal(m, dates('1938Y'));
+end
+
+T = all(t);
+%@eof:1
+
+%@test:2
+try
+    m = dates2Y(dates('1938M11'));
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = isequal(m, dates('1938Y'));
+end
+
+T = all(t);
+%@eof:2
+
+%@test:3
+try
+    m = dates2Y(dates('1938S2'));
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = isequal(m, dates('1938Y'));
+end
+
+T = all(t);
+%@eof:3
+
+%@test:4
+try
+    m = dates2Q(dates('1938Y'));
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = isequal(m, dates('1938Y'));
+end
+
+T = all(t);
+%@eof:4
\ No newline at end of file