diff --git a/src/@dates/eq.m b/src/@dates/eq.m
index 58ef96b7a062047fa3ecc9c05c232762d0cb855a..d83d5da8e2750d0604a665d5576d7e92f67824e5 100644
--- a/src/@dates/eq.m
+++ b/src/@dates/eq.m
@@ -9,7 +9,7 @@ function l = eq(varargin) % --*-- Unitary tests --*--
 % OUTPUTS
 % - l [logical] column vector of max(n,1) elements (zeros or ones).
 
-% Copyright (C) 2013-2015 Dynare Team
+% Copyright © 2013-2020 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
@@ -32,59 +32,92 @@ end
 [o, p] = comparison_arg_checks(varargin{:});
 
 if isequal(o.ndat(), p.ndat())
-    l = logical(transpose(all(transpose(eq(o.time,p.time)))));
+    if o.freq==365
+        l = logical(transpose(all(transpose(eq(o.time(:,1),p.time(:,1))))));
+    else
+        l = logical(transpose(all(transpose(eq(o.time,p.time)))));
+    end
 else
-    l = logical(transpose(all(transpose(bsxfun(@eq,o.time,p.time)))));
+    if o.freq==365
+        l = logical(transpose(all(transpose(bsxfun(@eq,o.time(:,1),p.time(:,1))))));
+    else
+        l = logical(transpose(all(transpose(bsxfun(@eq,o.time,p.time)))));
+    end
 end
 
+return
+
 %@test:1
-%$ % Define some dates objects
-%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ;
-%$ d2 = dates('1960Q1','1960Q2','1960Q3','1960Q4') ;
-%$ d3 = dates('1950Q1','1960Q2','1950Q3','1960Q4') ;
-%$
-%$ % Call the tested routine.
-%$ t1 = d1==d1;
-%$ t2 = d1==d2;
-%$ t3 = d1==d3;
-%$
-%$ % Check the results.
-%$ t(1) = dassert(t1,true(4,1));
-%$ t(2) = dassert(t2,false(4,1));
-%$ t(2) = dassert(t3,[true; false; true; false]);
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ;
+d2 = dates('1960Q1','1960Q2','1960Q3','1960Q4') ;
+d3 = dates('1950Q1','1960Q2','1950Q3','1960Q4') ;
+
+% Call the tested routine.
+try
+    t1 = d1==d1;
+    t2 = d1==d2;
+    t3 = d1==d3;
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+% Check the results.
+if t(1)
+    t(2) = isequal(t1, true(4,1));
+    t(3) = isequal(t2, false(4,1));
+    t(4) = isequal(t3, [true; false; true; false]);
+end
+T = all(t);
 %@eof:1
 
 %@test:2
-%$ % Define some dates objects
-%$ d1 = dates('1950Q1') ;
-%$ d2 = dates('1960Q1') ;
-%$ d3 = dates('1960Q1') ;
-%$
-%$ % Call the tested routine.
-%$ t1 = d1==d1;
-%$ t2 = d1==d2;
-%$ t3 = d1==d3;
-%$
-%$ % Check the results.
-%$ t(1) = dassert(t1,true);
-%$ t(2) = dassert(t2,false);
-%$ t(2) = dassert(t3,false);
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('1950Q1') ;
+d2 = dates('1960Q1') ;
+d3 = dates('1960Q1') ;
+
+% Call the tested routine.
+try
+    t1 = d1==d1;
+    t2 = d1==d2;
+    t3 = d1==d3;
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+% Check the results.
+if t(1)
+    t(2) = t1;
+    t(3) = ~t2;
+    t(4) = ~t3;
+end
+
+T = all(t);
 %@eof:2
 
 %@test:3
-%$ % Define some dates objects
-%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ;
-%$ d2 = dates('1950Q2') ;
-%$ d3 = dates('1970Q1') ;
-%$
-%$ % Call the tested routine.
-%$ t1 = d1==d2;
-%$ t2 = d1==d3;
-%$
-%$ % Check the results.
-%$ t(1) = dassert(t1,[false; true; false; false]);
-%$ t(2) = dassert(t2,false(4,1));
-%$ T = all(t);
-%@eof:3
+% Define some dates objects
+d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ;
+d2 = dates('1950Q2') ;
+d3 = dates('1970Q1') ;
+
+% Call the tested routine.
+try
+    t1 = d1==d2;
+    t2 = d1==d3;
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+% Check the results.
+if t(1)
+    t(2) = isequal(t1, [false; true; false; false]);
+    t(3) = isequal(t2, false(4,1));
+end
+
+T = all(t);
+%@eof:3
\ No newline at end of file
diff --git a/src/@dates/minus.m b/src/@dates/minus.m
index 20f21a45a23a8e6a72723b454324aade125a9ab5..822479d2bdf8f597723d07582aaa64c56c0a616b 100644
--- a/src/@dates/minus.m
+++ b/src/@dates/minus.m
@@ -7,7 +7,7 @@ function q = minus(o,p) % --*-- Unitary tests --*--
 %
 % INPUTS
 % - o [dates]
-% - p [dates or integer]
+% - p [dates,integer]
 %
 % OUTPUTS
 % - q [dates]
@@ -18,7 +18,7 @@ function q = minus(o,p) % --*-- Unitary tests --*--
 %    p periods backward.
 % 3. If o is not a dates object, an error is returned.
 
-% Copyright (C) 2013-2017 Dynare Team
+% Copyright © 2013-2020 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
@@ -54,7 +54,11 @@ if isa(o,'dates') && isa(p,'dates')
     q = zeros(u.length(),1);
     id = find(~(u==v));
     if ~isempty(id)
-        q(id) = u.time(id,2)-v.time(id,2) + (u.time(id,1)-v.time(id,1))*v.freq;
+        if o.freq==365
+            q(id) = u.time(id,1)-v.time(id,1);
+        else
+            q(id) = u.time(id,2)-v.time(id,2) + (u.time(id,1)-v.time(id,1))*v.freq;
+        end
     end
 elseif isa(o,'dates') && ~isa(p,'dates')
     if (isvector(p) && isequal(length(p),o.ndat()) && all(isint(p))) || (isscalar(p) && isint(p)) || (isequal(o.length(),1) && isvector(p) && all(isint(p)))
@@ -68,102 +72,140 @@ else
     error('dates:minus:ArgCheck','You should read the manual.')
 end
 
+return
+
 %@test:1
-%$ % Define some dates objects
-%$ d1 = dates('1950Q1','1950Q2','1960Q1');
-%$ d2 = dates('1950Q3','1950Q4','1960Q1');
-%$ d3 = dates('2000Q1');
-%$ d4 = dates('2002Q2');
-%$ % Call the tested routine.
-%$ try
-%$   e1 = d2-d1;
-%$   e2 = d4-d3;
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(e1,[2; 2; 0]);
-%$   t(3) = dassert(e2,9);
-%$ end
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('1950Q1','1950Q2','1960Q1');
+d2 = dates('1950Q3','1950Q4','1960Q1');
+d3 = dates('2000Q1');
+d4 = dates('2002Q2');
+% Call the tested routine.
+try
+  e1 = d2-d1;
+  e2 = d4-d3;
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(e1,[2; 2; 0]);
+  t(3) = isequal(e2,9);
+end
+T = all(t);
 %@eof:1
 
 %@test:2
-%$ % Define some dates objects
-%$ d1 = dates('1950Y','1951Y','1953Y');
-%$ d2 = dates('1951Y','1952Y','1953Y');
-%$ d3 = dates('2000Y');
-%$ d4 = dates('1999Y');
-%$ % Call the tested routine.
-%$ try
-%$   e1 = d2-d1;
-%$   e2 = d4-d3;
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(e1,[1; 1; 0]);
-%$   t(3) = dassert(e2,-1);
-%$ end
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('1950Y','1951Y','1953Y');
+d2 = dates('1951Y','1952Y','1953Y');
+d3 = dates('2000Y');
+d4 = dates('1999Y');
+% Call the tested routine.
+try
+  e1 = d2-d1;
+  e2 = d4-d3;
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(e1,[1; 1; 0]);
+  t(3) = isequal(e2,-1);
+end
+T = all(t);
 %@eof:2
 
 %@test:3
-%$ % Define some dates objects
-%$ d1 = dates('2000Y');
-%$ d2 = dates('1999Y');
-%$ % Call the tested routine.
-%$ try
-%$   e1 = d1-1;
-%$   e2 = d2-(-1);
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(e1,d2);
-%$   t(3) = dassert(e2,d1);
-%$ end
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('2000Y');
+d2 = dates('1999Y');
+% Call the tested routine.
+try
+  e1 = d1-1;
+  e2 = d2-(-1);
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(e1,d2);
+  t(3) = isequal(e2,d1);
+end
+T = all(t);
 %@eof:3
 
 %@test:4
-%$ % Define some dates objects
-%$ d1 = dates('2000Q1');
-%$ e1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4');
-%$ % Call the tested routine.
-%$ try
-%$   f1 = d1-transpose(1:5);
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(e1,f1);
-%$ end
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('2000Q1');
+e1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4');
+% Call the tested routine.
+try
+  f1 = d1-transpose(1:5);
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(e1,f1);
+end
+T = all(t);
 %@eof:4
 
 %@test:5
-%$ % Define some dates objects
-%$ d1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4');
-%$ e1 = dates('2000Q1')*5;
-%$ % Call the tested routine.
-%$ try
-%$   f1 = d1-(-transpose(1:5));
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(e1,f1);
-%$ end
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4');
+e1 = dates('2000Q1')*5;
+% Call the tested routine.
+try
+  f1 = d1-(-transpose(1:5));
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(e1,f1);
+end
+T = all(t);
 %@eof:5
+
+%@test:6
+% Define some dates objects
+d1 = dates('2020-01-02');
+d2 = dates('2020-01-01','2019-12-31');
+% Call the tested routine.
+try
+  delta = d1-d2;
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal([1;2], delta);
+end
+T = all(t);
+%@eof:6
+
+%@test:7
+% Define some dates objects
+d1 = dates('2000-03-02');
+e2 = [1; 2];
+% Call the tested routine.
+try
+  d2 = d1-e2;
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(dates('2000-03-01', '2000-02-29'), d2);
+end
+T = all(t);
+%@eof:7
diff --git a/src/@dates/plus.m b/src/@dates/plus.m
index 281045af30a679102ad8fa39043007befe2997e0..e6a52b1afaa2ad98c585bdabb3fabfb2d206eb10 100644
--- a/src/@dates/plus.m
+++ b/src/@dates/plus.m
@@ -1,10 +1,10 @@
-function q = plus(o,p) % --*-- Unitary tests --*--
+function q = plus(o, p) % --*-- Unitary tests --*--
 
 % Overloads the plus (+) binary operator.
 %
 % INPUTS
-% - o [dates or integer]
-% - p [dates or integer]
+% - o [dates,integer]
+% - p [dates,integer]
 %
 % OUTPUTS
 % - q [dates]
@@ -14,7 +14,7 @@ function q = plus(o,p) % --*-- Unitary tests --*--
 % 2. If  one of the inputs is an integer or a vector of integers, the method shifts the dates
 %    object by X (the interger input) periods forward.
 
-% Copyright (C) 2013-2017 Dynare Team
+% Copyright © 2013-2020 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
@@ -31,7 +31,7 @@ function q = plus(o,p) % --*-- Unitary tests --*--
 
 if isa(o,'dates') && isa(p,'dates')
     % Concatenate dates objects without removing repetitions if o and p are not disjoint sets of dates.
-    if ~isequal(o.freq,p.freq)
+    if ~isequal(o.freq, p.freq)
         error('dates:plus:ArgCheck','Input arguments must have common frequency!')
     end
     if isempty(p)
@@ -65,86 +65,113 @@ else
     error('dates:plus:ArgCheck','Please read the manual.')
 end
 
+return
+
 %@test:1
-%$ % Define some dates objects
-%$ d1 = dates('1950Q1','1950Q2') ;
-%$ d2 = dates('1950Q3','1950Q4') ;
-%$ d3 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ;
-%$
-%$ % Call the tested routine.
-%$ try
-%$   e1 = d1+d2;
-%$   e2 = d1+d2+d3;
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(e1,d3);
-%$   t(3) = dassert(e2,dates('1950Q1','1950Q2','1950Q3','1950Q4','1950Q1','1950Q2','1950Q3','1950Q4'));
-%$ end
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('1950Q1','1950Q2') ;
+d2 = dates('1950Q3','1950Q4') ;
+d3 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ;
+
+% Call the tested routine.
+try
+  e1 = d1+d2;
+  e2 = d1+d2+d3;
+  t(1) = 1;
+catch
+  t(1) = 0;
+end
+
+if t(1)
+  t(2) = dassert(e1,d3);
+  t(3) = dassert(e2,dates('1950Q1','1950Q2','1950Q3','1950Q4','1950Q1','1950Q2','1950Q3','1950Q4'));
+end
+T = all(t);
 %@eof:1
 
 %@test:2
-%$ % Define some dates objects
-%$ d1 = dates('1950Q1');
-%$ e1 = dates('1950Q2');
-%$ e2 = dates('1950Q3');
-%$ e3 = dates('1950Q4');
-%$ e4 = dates('1951Q1');
-%$ e5 = dates('1950Q2','1950Q3','1950Q4','1951Q1');
-%$
-%$ % Call the tested routine.
-%$ try
-%$   f1 = d1+1;
-%$   f2 = d1+2;
-%$   f3 = d1+3;
-%$   f4 = d1+4;
-%$   f5 = d1+transpose(1:4);
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(e1,f1);
-%$   t(3) = dassert(e2,f2);
-%$   t(4) = dassert(e3,f3);
-%$   t(5) = dassert(e4,f4);
-%$   t(6) = dassert(e5,f5);
-%$ end
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('1950Q1');
+e1 = dates('1950Q2');
+e2 = dates('1950Q3');
+e3 = dates('1950Q4');
+e4 = dates('1951Q1');
+e5 = dates('1950Q2','1950Q3','1950Q4','1951Q1');
+
+% Call the tested routine.
+try
+  f1 = d1+1;
+  f2 = d1+2;
+  f3 = d1+3;
+  f4 = d1+4;
+  f5 = d1+transpose(1:4);
+  t(1) = 1;
+catch
+  t(1) = 0;
+end
+
+if t(1)
+  t(2) = dassert(e1,f1);
+  t(3) = dassert(e2,f2);
+  t(4) = dassert(e3,f3);
+  t(5) = dassert(e4,f4);
+  t(6) = dassert(e5,f5);
+end
+T = all(t);
 %@eof:2
 
 %@test:3
-%$ % Define some dates objects
-%$ d1 = dates('1950Q1');
-%$ e1 = dates('1949Q4');
-%$ e2 = dates('1949Q3');
-%$ e3 = dates('1949Q2');
-%$ e4 = dates('1949Q1');
-%$ e5 = dates('1948Q4');
-%$
-%$ % Call the tested routine.
-%$ try
-%$   f1 = d1+(-1);
-%$   f2 = d1+(-2);
-%$   f3 = d1+(-3);
-%$   f4 = d1+(-4);
-%$   f5 = d1+(-5);
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(e1,f1);
-%$   t(3) = dassert(e2,f2);
-%$   t(4) = dassert(e3,f3);
-%$   t(5) = dassert(e4,f4);
-%$   t(6) = dassert(e5,f5);
-%$ end
-%$ T = all(t);
+% Define some dates objects
+d1 = dates('1950Q1');
+e1 = dates('1949Q4');
+e2 = dates('1949Q3');
+e3 = dates('1949Q2');
+e4 = dates('1949Q1');
+e5 = dates('1948Q4');
+
+% Call the tested routine.
+try
+  f1 = d1+(-1);
+  f2 = d1+(-2);
+  f3 = d1+(-3);
+  f4 = d1+(-4);
+  f5 = d1+(-5);
+  t(1) = 1;
+catch
+  t(1) = 0;
+end
+
+if t(1)
+  t(2) = dassert(e1,f1);
+  t(3) = dassert(e2,f2);
+  t(4) = dassert(e3,f3);
+  t(5) = dassert(e4,f4);
+  t(6) = dassert(e5,f5);
+end
+T = all(t);
 %@eof:3
+
+%@test:4
+% Define some dates objects
+d1 = dates('2000-12-31');
+d2 = dates('2000-02-29');
+d3 = dates('2001-02-28');
+
+% Call the tested routine.
+try
+  f1 = d1+1;
+  f2 = d2+1;
+  f3 = d3+1;
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(char(f1), '2001-01-01');
+  t(3) = isequal(char(f2), '2000-03-01');
+  t(4) = isequal(char(f3), '2001-03-01');
+end
+T = all(t);
+%@eof:4
+
diff --git a/src/@dates/uminus.m b/src/@dates/uminus.m
index 840592182f6524fe154a18d225b233e549e35452..c2d0e8dcdeeacde0efff35a3aeba6eb0c1803a5b 100644
--- a/src/@dates/uminus.m
+++ b/src/@dates/uminus.m
@@ -8,7 +8,7 @@ function o = uminus(o)  % --*-- Unitary tests --*--
 % OUTPUTS
 % - o [dates]
 
-% Copyright (C) 2013-2017 Dynare Team
+% Copyright © 2013-2020 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
@@ -23,53 +23,77 @@ function o = uminus(o)  % --*-- Unitary tests --*--
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-o.time(:,2) = o.time(:,2)-1;
-idx = find(o.time(:,2)==0);
-o.time(idx,1) = o.time(idx,1)-1;
-o.time(idx,2) = o.freq;
+if o.freq==365
+    o.time(:,1) = o.time(:,1)-1;
+else
+    o.time(:,2) = o.time(:,2)-1;
+    idx = find(o.time(:,2)==0);
+    o.time(idx,1) = o.time(idx,1)-1;
+    o.time(idx,2) = o.freq;
+end
+
+return
 
 %@test:1
-%$ % Define some dates
-%$ date_1 = '1950Y';
-%$ date_2 = '1950Q2';
-%$ date_3 = '1950Q1';
-%$ date_4 = '1950M2';
-%$ date_5 = '1950M1';
-%$
-%$ % Call the tested routine.
-%$ d1 = dates(date_1); -d1;
-%$ d2 = dates(date_2); -d2;
-%$ d3 = dates(date_3); -d3;
-%$ d4 = dates(date_4); -d4;
-%$ d5 = dates(date_5); -d5;
-%$ i1 = (d1==dates('1949Y'));
-%$ i2 = (d2==dates('1950Q1'));
-%$ i3 = (d3==dates('1949Q4'));
-%$ i4 = (d4==dates('1950M1'));
-%$ i5 = (d5==dates('1949M12'));
-%$
-%$ % Check the results.
-%$ t(1) = dassert(i1,true);
-%$ t(2) = dassert(i2,true);
-%$ t(3) = dassert(i3,true);
-%$ t(4) = dassert(i4,true);
-%$ t(5) = dassert(i5,true);
-%$ T = all(t);
+% Define some dates
+date_1 = '1950Y';
+date_2 = '1950Q2';
+date_3 = '1950Q1';
+date_4 = '1950M2';
+date_5 = '1950M1';
+
+% Call the tested routine.
+try
+    d1 = dates(date_1); -d1;
+    d2 = dates(date_2); -d2;
+    d3 = dates(date_3); -d3;
+    d4 = dates(date_4); -d4;
+    d5 = dates(date_5); -d5;
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = (d1==dates('1949Y'));
+    t(3) = (d2==dates('1950Q1'));
+    t(4) = (d3==dates('1949Q4'));
+    t(5) = (d4==dates('1950M1'));
+    t(6) = (d5==dates('1949M12'));
+end
+T = all(t);
 %@eof:1
 
 %@test:2
-%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1');
-%$ d2 = dates('1949Q4','1950Q1','1950Q2','1950Q3','1950Q4');
-%$ try
-%$   -d1;
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(all(d2==d1),true);
-%$ end
-%$
-%$ T = all(t);
-%@eof:2
\ No newline at end of file
+d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1');
+d2 = dates('1949Q4','1950Q1','1950Q2','1950Q3','1950Q4');
+try
+  -d1;
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(d2==d1);
+end
+
+T = all(t);
+%@eof:2
+
+%@test:3
+d1 = dates('2000-01-01');
+d2 = dates('1999-12-31');
+try
+  -d1;
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = (d2==d1);
+end
+
+T = all(t);
+%@eof:3
\ No newline at end of file
diff --git a/src/@dates/uplus.m b/src/@dates/uplus.m
index 23bd48da0a7642fd2ebf0948460263c9038a4281..b185f438e1cadc158c3bf41db5864ab3d5296358 100644
--- a/src/@dates/uplus.m
+++ b/src/@dates/uplus.m
@@ -8,7 +8,7 @@ function o = uplus(o)  % --*-- Unitary tests --*--
 % OUTPUTS
 % - o [dates]
 
-% Copyright (C) 2013-2017 Dynare Team
+% Copyright © 2013-2020 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
@@ -23,53 +23,79 @@ function o = uplus(o)  % --*-- Unitary tests --*--
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
+if o.freq==365
+    o.time(:,1) = o.time(:,1)+1;
+    return
+end
+
 o.time(:,2) = o.time(:,2)+1;
 idx = find(o.time(:,2)>o.freq); % Happy new year!
 o.time(idx,1) = o.time(idx,1)+1;
 o.time(idx,2) = 1;
 
+return
+
 %@test:1
-%$ % Define some dates
-%$ date_1 = '1950Y';
-%$ date_2 = '1950Q2';
-%$ date_3 = '1950Q4';
-%$ date_4 = '1950M2';
-%$ date_5 = '1950M12';
-%$
-%$ % Call the tested routine.
-%$ d1 = dates(date_1); +d1;
-%$ d2 = dates(date_2); +d2;
-%$ d3 = dates(date_3); +d3;
-%$ d4 = dates(date_4); +d4;
-%$ d5 = dates(date_5); +d5;
-%$ i1 = (d1==dates('1951Y'));
-%$ i2 = (d2==dates('1950Q3'));
-%$ i3 = (d3==dates('1951Q1'));
-%$ i4 = (d4==dates('1950M3'));
-%$ i5 = (d5==dates('1951M1'));
-%$
-%$ % Check the results.
-%$ t(1) = dassert(i1,true);
-%$ t(2) = dassert(i2,true);
-%$ t(3) = dassert(i3,true);
-%$ t(4) = dassert(i4,true);
-%$ t(5) = dassert(i5,true);
-%$ T = all(t);
+% Define some dates
+date_1 = '1950Y';
+date_2 = '1950Q2';
+date_3 = '1950Q4';
+date_4 = '1950M2';
+date_5 = '1950M12';
+
+% Call the tested routine.
+try
+    d1 = dates(date_1); +d1;
+    d2 = dates(date_2); +d2;
+    d3 = dates(date_3); +d3;
+    d4 = dates(date_4); +d4;
+    d5 = dates(date_5); +d5;
+    t(1) = true;
+catch
+    t(1) = false;
+end
+
+if t(1)
+    t(2) = (d1==dates('1951Y'));
+    t(3) = (d2==dates('1950Q3'));
+    t(4) = (d3==dates('1951Q1'));
+    t(5) = (d4==dates('1950M3'));
+    t(6) = (d5==dates('1951M1'));
+end
+
+T = all(t);
 %@eof:1
 
 %@test:2
-%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1');
-%$ d2 = dates('1950Q2','1950Q3','1950Q4','1951Q1','1951Q2');
-%$ try
-%$   +d1;
-%$   t(1) = 1;
-%$ catch
-%$   t(1) = 0;
-%$ end
-%$
-%$ if t(1)
-%$   t(2) = dassert(all(d2==d1),true);
-%$ end
-%$
-%$ T = all(t);
-%@eof:2
\ No newline at end of file
+d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1');
+d2 = dates('1950Q2','1950Q3','1950Q4','1951Q1','1951Q2');
+try
+  +d1;
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(d2, d1);
+end
+
+T = all(t);
+%@eof:2
+
+%@test:3
+d1 = dates('2001-02-27','2001-02-28','2001-12-31');
+d2 = dates('2001-02-28','2001-03-01','2002-01-01');
+try
+  +d1;
+  t(1) = true;
+catch
+  t(1) = false;
+end
+
+if t(1)
+  t(2) = isequal(d2, d1);
+end
+
+T = all(t);
+%@eof:3
\ No newline at end of file
diff --git a/src/utilities/op/add_periods_to_array_of_dates.m b/src/utilities/op/add_periods_to_array_of_dates.m
index 6a2171a164b34c713e5c002a8e85d679bfb8b5e6..0d48b2038affd7479b69d00c6f57bbb46d4ef268 100644
--- a/src/utilities/op/add_periods_to_array_of_dates.m
+++ b/src/utilities/op/add_periods_to_array_of_dates.m
@@ -2,7 +2,7 @@ function time = add_periods_to_array_of_dates(time, freq, p)  % --*-- Unitary te
 
 % Adds a p periods (p can be negative) to a date (or a set of dates) characterized by array time and frequency freq.
 
-% Copyright (C) 2013-2017 Dynare Team
+% Copyright © 2013-2020 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -23,6 +23,11 @@ if isequal(rows(time),1) && length(p)>1
     time = repmat(time,length(p),1);
 end
 
+if freq==365
+    time(:,1) = time(:,1) + p;
+    return
+end
+
 time(:,1) = time(:,1) + fix(p/freq);
 time(:,2) = time(:,2) + rem(p,freq);
 
@@ -38,46 +43,48 @@ if ~isempty(id2)
     time(id2,2) = time(id2,2) + freq;
 end
 
+return
+
 %@test:1
-%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 4, 1),[1950 2]);
-%$ t(2) = dassert(add_periods_to_array_of_dates([1950 1], 4, 2),[1950 3]);
-%$ t(3) = dassert(add_periods_to_array_of_dates([1950 1], 4, 3),[1950 4]);
-%$ t(4) = dassert(add_periods_to_array_of_dates([1950 1], 4, 4),[1951 1]);
-%$ t(5) = dassert(add_periods_to_array_of_dates([1950 1], 4, 5),[1951 2]);
-%$ t(6) = dassert(add_periods_to_array_of_dates([1950 1], 4, 6),[1951 3]);
-%$ t(7) = dassert(add_periods_to_array_of_dates([1950 1], 4, 7),[1951 4]);
-%$ t(8) = dassert(add_periods_to_array_of_dates([1950 1], 4, 8),[1952 1]);
-%$ T = all(t);
+t(1) = isequal(add_periods_to_array_of_dates([1950 1], 4, 1),[1950 2]);
+t(2) = isequal(add_periods_to_array_of_dates([1950 1], 4, 2),[1950 3]);
+t(3) = isequal(add_periods_to_array_of_dates([1950 1], 4, 3),[1950 4]);
+t(4) = isequal(add_periods_to_array_of_dates([1950 1], 4, 4),[1951 1]);
+t(5) = isequal(add_periods_to_array_of_dates([1950 1], 4, 5),[1951 2]);
+t(6) = isequal(add_periods_to_array_of_dates([1950 1], 4, 6),[1951 3]);
+t(7) = isequal(add_periods_to_array_of_dates([1950 1], 4, 7),[1951 4]);
+t(8) = isequal(add_periods_to_array_of_dates([1950 1], 4, 8),[1952 1]);
+T = all(t);
 %@eof:1
 
 %@test:2
-%$ t(1) = dassert(add_periods_to_array_of_dates(repmat([1950 1],8,1), 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]);
-%$ T = all(t);
+t(1) = isequal(add_periods_to_array_of_dates(repmat([1950 1],8,1), 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]);
+T = all(t);
 %@eof:2
 
 %@test:3
-%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 1, 1),[1951 1]);
-%$ T = all(t);
+t(1) = isequal(add_periods_to_array_of_dates([1950 1], 1, 1),[1951 1]);
+T = all(t);
 %@eof:3
 
 %@test:4
-%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1; 1950 2; 1950 3; 1950 4], 4, 1),[1950 2; 1950 3; 1950 4; 1951 1]);
-%$ T = all(t);
+t(1) = isequal(add_periods_to_array_of_dates([1950 1; 1950 2; 1950 3; 1950 4], 4, 1),[1950 2; 1950 3; 1950 4; 1951 1]);
+T = all(t);
 %@eof:4
 
 %@test:5
-%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]);
-%$ T = all(t);
+t(1) = isequal(add_periods_to_array_of_dates([1950 1], 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]);
+T = all(t);
 %@eof:5
 
 %@test:6
-%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 4, -1),[1949 4]);
-%$ t(2) = dassert(add_periods_to_array_of_dates([1950 1], 4, -2),[1949 3]);
-%$ t(3) = dassert(add_periods_to_array_of_dates([1950 1], 4, -3),[1949 2]);
-%$ t(4) = dassert(add_periods_to_array_of_dates([1950 1], 4, -4),[1949 1]);
-%$ t(5) = dassert(add_periods_to_array_of_dates([1950 1], 4, -5),[1948 4]);
-%$ t(6) = dassert(add_periods_to_array_of_dates([1950 1], 4, -6),[1948 3]);
-%$ t(7) = dassert(add_periods_to_array_of_dates([1950 1], 4, -7),[1948 2]);
-%$ t(8) = dassert(add_periods_to_array_of_dates([1950 1], 4, -8),[1948 1]);
-%$ T = all(t);
+t(1) = isequal(add_periods_to_array_of_dates([1950 1], 4, -1),[1949 4]);
+t(2) = isequal(add_periods_to_array_of_dates([1950 1], 4, -2),[1949 3]);
+t(3) = isequal(add_periods_to_array_of_dates([1950 1], 4, -3),[1949 2]);
+t(4) = isequal(add_periods_to_array_of_dates([1950 1], 4, -4),[1949 1]);
+t(5) = isequal(add_periods_to_array_of_dates([1950 1], 4, -5),[1948 4]);
+t(6) = isequal(add_periods_to_array_of_dates([1950 1], 4, -6),[1948 3]);
+t(7) = isequal(add_periods_to_array_of_dates([1950 1], 4, -7),[1948 2]);
+t(8) = isequal(add_periods_to_array_of_dates([1950 1], 4, -8),[1948 1]);
+T = all(t);
 %@eof:6
\ No newline at end of file