diff --git a/matlab/@dynSeries/align.m b/matlab/@dynSeries/align.m
new file mode 100644
index 000000000..d8b39b8ab
--- /dev/null
+++ b/matlab/@dynSeries/align.m
@@ -0,0 +1,123 @@
+function [a,b] = align(a, b)
+
+%@info:
+%! @deftypefn {Function File} {[@var{a}, @var{b}] =} merge_dates (@var{a}, @var{b})
+%! @anchor{dynSeries/align}
+%! @sp 1
+%! If dynSeries objects @var{a} and @var{b} are defined on different time ranges, extend @var{a} and/or
+%! @var{b} with NaNs so that they are defined on the same time range.
+%! @sp 2
+%! @strong{Inputs}
+%! @sp 1
+%! @table @ @var
+%! @item a
+%! Object instantiated by @ref{dynSeries}.
+%! @item b
+%! Object instantiated by @ref{dynSeries}.
+%! @end table
+%! @sp 2
+%! @strong{Outputs}
+%! @sp 1
+%! @table @ @var
+%! @item a
+%! Object instantiated by @ref{dynSeries}.
+%! @item b
+%! Object instantiated by @ref{dynSeries}.
+%! @end table
+%! @end deftypefn
+%@eod:
+
+% Copyright (C) 2013 Dynare Team
+%
+% This file is part of Dynare.
+%
+% Dynare 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 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 .
+
+if ~isequal(a.freq,b.freq)
+ error(['dynSeries::merge_dates: ''' inputname(1) ''' and ''' inputname(2) ''' dynSeries objects must have common frequencies!'])
+end
+
+init = min(a.init,b.init);
+
+time_range_of_a = a.init:a.init+a.nobs;
+time_range_of_b = b.init:b.init+b.nobs;
+
+last_a = time_range_of_a(a.nobs);
+last_b = time_range_of_b(b.nobs);
+
+
+common_time_range = intersect(time_range_of_a,time_range_of_b);
+
+if isempty(common_time_range)
+ error(['dynSeries::merge_dates: ''' inputname(1) ''' and ''' inputname(2) ''' dynSeries object must have at least one common date!'])
+end
+
+if a.initb.init
+ n = a.init-b.init;
+ a.data = [NaN(n,a.vobs); a.data];
+ a.nobs = a.nobs+n;
+ a.init = init;
+end
+
+if last_a>last_b
+ n = last_a-last_b;
+ b.data = [b.data; NaN(n,b.vobs)];
+ b.nobs = b.nobs+n;
+ return
+end
+
+if last_a