diff --git a/matlab/utilities/dataset/compute_cova.m b/matlab/utilities/dataset/compute_cova.m
deleted file mode 100644
index 51f68981e..000000000
--- a/matlab/utilities/dataset/compute_cova.m
+++ /dev/null
@@ -1,67 +0,0 @@
-function dataset_ = compute_cova(dataset_)
-% Computes the covariance matrix of the sample (possibly with missing observations).
-
-%@info:
-%! @deftypefn {Function File} {@var{dataset_} =} compute_corr(@var{dataset_})
-%! @anchor{compute_corr}
-%! This function computes covariance matrix of the sample (possibly with missing observations).
-%!
-%! @strong{Inputs}
-%! @table @var
-%! @item dataset_
-%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
-%! @end table
-%!
-%! @strong{Outputs}
-%! @table @var
-%! @item dataset_
-%! Dynare structure describing the dataset, built by @ref{initialize_dataset}
-%! @end table
-%!
-%! @strong{This function is called by:}
-%! @ref{descriptive_statistics}.
-%!
-%! @strong{This function calls:}
-%! @ref{ndim}, @ref{demean}, @ref{nandemean}.
-%!
-%! @strong{Remark 1.} On exit, a new field is appended to the structure: @code{dataset_.descriptive.cova} is a
-%! @tex{n\times n} vector (where @tex{n} is the number of observed variables as defined by @code{dataset_.info.nvobs}).
-%!
-%! @end deftypefn
-%@eod:
-
-% Copyright (C) 2011-2012 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 .
-
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
-dataset_.descriptive.cova = zeros(dataset_.nvobs);
-
-data = transpose(dataset_.data);
-
-for i=1:dataset_.info.nvobs
- for j=i:dataset_.info.nvobs
- if dataset_.missing.state
- dataset_.descriptive.cova(i,j) = nanmean(nandemean(data(:,i)).*nandemean(data(:,j)));
- else
- dataset_.descriptive.cova(i,j) = mean(demean(data(:,i)).*demean(data(:,j)));
- end
- if j>i
- dataset_.descriptive.cova(j,i) = dataset_.descriptive.cova(i,j);
- end
- end
-end
\ No newline at end of file
diff --git a/matlab/utilities/dataset/nancovariance.m b/matlab/utilities/dataset/nancovariance.m
new file mode 100644
index 000000000..8e2e2b227
--- /dev/null
+++ b/matlab/utilities/dataset/nancovariance.m
@@ -0,0 +1,101 @@
+function CovarianceMatrix = nancovariance(data)
+% Computes the covariance matrix of a sample (possibly with missing observations).
+
+%@info:
+%! @deftypefn {Function File} {@var{CovarianceMatrix} =} compute_corr(@var{data})
+%! @anchor{compute_cova}
+%! This function computes covariance matrix of a sample defined by a dseries object (possibly with missing observations).
+%!
+%! @strong{Inputs}
+%! @table @var
+%! @item data
+%! a T*N array of real numbers.
+%! @end table
+%!
+%! @strong{Outputs}
+%! @table @var
+%! @item CovarianceMatrix
+%! Array of real numbers.
+%! @end table
+%!
+%! @strong{This function is called by:}
+%! @ref{descriptive_statistics}.
+%!
+%! @strong{This function calls:}
+%! @ref{ndim}, @ref{demean}, @ref{nandemean}.
+%!
+%! @strong{Remark 1.} On exit, a new field is appended to the structure: @code{dataset_.descriptive.cova} is a
+%! @tex{n\times n} vector (where @tex{n} is the number of observed variables as defined by @code{dataset_.info.nvobs}).
+%!
+%! @end deftypefn
+%@eod:
+
+% Copyright (C) 2011-2014 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 .
+
+% Initialize the output.
+CovarianceMatrix = zeros(size(data,2));
+
+if isanynan(data)
+ data = bsxfun(@minus,data,nanmean(data));
+ for i=1:size(data,2)
+ for j=i:size(data,2)
+ CovarianceMatrix(i,j) = nanmean(data(:,i).*data(:,j));
+ if j>i
+ CovarianceMatrix(j,i) = CovarianceMatrix(i,j);
+ end
+ end
+ end
+else
+ data = bsxfun(@minus,data,mean(data));
+ CovarianceMatrix = (transpose(data)*data)/size(data,1);
+end
+
+%@test:1
+%$
+%$ % Define a dataset.
+%$ data1 = randn(10000000,2);
+%$
+%$ % Same dataset with missing observations.
+%$ data2 = data1;
+%$ data2(45,1) = NaN;
+%$ data2(57,2) = NaN;
+%$ data2(367,:) = NaN(1,2);
+%$
+%$ t = zeros(2,1);
+%$
+%$ % Call the tested routine.
+%$ try
+%$ c1 = nancovariance(data1);
+%$ t(1) = 1;
+%$ catch
+%$ t(1) = 0;
+%$ end
+%$ try
+%$ c2 = nancovariance(data2);
+%$ t(2) = 1;
+%$ catch
+%$ t(2) = 0;
+%$ end
+%$
+%$ if t(1) && t(2)
+%$ t(3) = max(max(abs(c1-c2)))<1e-4;
+%$ end
+%$
+%$ % Check the results.
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/matlab/utilities/general/isanynan.m b/matlab/utilities/general/isanynan.m
new file mode 100644
index 000000000..7a16419d0
--- /dev/null
+++ b/matlab/utilities/general/isanynan.m
@@ -0,0 +1,21 @@
+function yes = isanynan(array)
+% Return one if the array contains at least one NaN, 0 otherwise.
+
+% Copyright (C) 2011-2014 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 .
+
+yes = any(isnan(array(:)));
\ No newline at end of file