diff --git a/matlab/islagof.m b/matlab/islagof.m
new file mode 100644
index 000000000..271cbe186
--- /dev/null
+++ b/matlab/islagof.m
@@ -0,0 +1,129 @@
+function b = islagof(v1, v2)
+
+% Returns true if and only if variable v1 is a lag of variable v2.
+%
+% INPUTS
+% - v1 [string] Variable name.
+% - v2 [string] Variable name.
+%
+% OUTPUTS
+% - b [logical]
+
+% Copyright (C) 2018 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 .
+
+global M_
+
+if ~ischar(v1) && isscalar(v1) && isnumeric(v1) && isint(v1)
+ id1 = v1;
+ if id1>M_.endo_nbr
+ error('First input must be an integer between 1 and %u', M_.endo_nbr)
+ end
+end
+
+if ~ischar(v2) && isscalar(v2) && isnumeric(v2) && isint(v2)
+ id2 = v2;
+ if id2>M_.endo_nbr
+ error('First input must be an integer between 1 and %u', M_.endo_nbr)
+ end
+end
+
+% Set output default value
+b = false;
+
+% Get index of v1
+if ischar(v1)
+ id1 = find(strcmp(v1, M_.endo_names));
+end
+
+if isempty(id1)
+ error('First input must be a variable name.')
+end
+
+% Get index of v2
+if ischar(v2)
+ id2 = find(strcmp(v2, M_.endo_names));
+end
+
+if isempty(id2)
+ error('Second input must be a variable name.')
+end
+
+% A variable cannot be a lag of itself.
+if isequal(id1, id2)
+ return
+end
+
+% Are v1 and v2 auxiliary variables?
+v1_is_an_auxiliary_variable = id1>M_.orig_endo_nbr;
+v2_is_an_auxiliary_variable = id2>M_.orig_endo_nbr;
+
+% At least one of the variables must be an auxiliary variable
+if ~v1_is_an_auxiliary_variable && ~v2_is_an_auxiliary_variable
+ return
+end
+
+% If v1 and v2 are auxiliary variables
+if v1_is_an_auxiliary_variable && v2_is_an_auxiliary_variable
+ auxinfo1 = M_.aux_vars(get_aux_variable_id(id1));
+ auxinfo2 = M_.aux_vars(get_aux_variable_id(id2));
+ isleadlag1 = ismember(auxinfo1.type, [1,0]);
+ isleadlag2 = ismember(auxinfo2.type, [1,0]);
+ % If v1 and v2 are lead/lag auxiliary variables
+ if isleadlag1 && isleadlag2
+ % If v1 and v2 are lead/lag of a common endogenous variable.
+ if auxinfo1.orig_index && auxinfo2.orig_index
+ if auxinfo1.orig_lead_lag