diff --git a/.gitignore b/.gitignore
index 1f117b4b0f8f180745090549ce5b2d020b7f67e2..be2c96947966ddba989593fabbf2d203f9171cb9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -116,8 +116,6 @@ mex/build/matlab/run_m2html.m
 /matlab/dynare_m
 /matlab/dynare_m.exe
 /matlab/dynare_version.m
-/matlab/empty-dates-object.mat
-/matlab/empty-dseries-object.mat
 
 # DLL rules
 *.mex
diff --git a/matlab/@dates/dates.m b/matlab/@dates/dates.m
index b52eb9c93f42d080bc30a6cd52ee7b04c9921b2a..5df103424a6798a10a6232564a0c2c58a229caac 100644
--- a/matlab/@dates/dates.m
+++ b/matlab/@dates/dates.m
@@ -62,13 +62,15 @@ function dd = dates(varargin) % --*-- 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 exist('empty-dates-object.mat','file')
-    load('empty-dates-object');
-else
+if nargin>0 && isequal(varargin{1},'initialize')
     dd = struct('ndat', 0, 'freq', NaN(0), 'time', NaN(0,2));
     dd = class(dd,'dates');
+    assignin('base','emptydatesobject',dd);
+    return
 end
 
+dd = evalin('base','emptydatesobject');
+
 switch nargin
   case 0
     % Returns an empty object
diff --git a/matlab/@dseries/dseries.m b/matlab/@dseries/dseries.m
index 55ed8c3b75e0983f93898dcc4232bcba7faffde7..213800c70a9702655558c89a82e9590b32ee3cea 100644
--- a/matlab/@dseries/dseries.m
+++ b/matlab/@dseries/dseries.m
@@ -76,9 +76,7 @@ function ts = dseries(varargin) % --*-- 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 exist('empty-dseries-object.mat','file')
-    load('empty-dseries-object');
-else
+if nargin>0 && isequal(varargin{1},'initialize')
     ts = struct;
     ts.data  = [];
     ts.nobs  = 0;
@@ -88,8 +86,13 @@ else
     ts.freq  = [];
     ts.init  = dates();
     ts.dates = dates();
+    ts = class(ts,'dseries');
+    assignin('base','emptydseriesobject',ts);
+    return
 end
 
+ts = evalin('base','emptydseriesobject');
+
 switch nargin
   case 0
     %  Create an empty dseries object.
diff --git a/matlab/dynare_config.m b/matlab/dynare_config.m
index 9f8f706c092c27c8017e993ec189649afa8fe66c..2eb992b36e81c768b8d0d07dfcc8493d406104ab 100644
--- a/matlab/dynare_config.m
+++ b/matlab/dynare_config.m
@@ -249,18 +249,8 @@ if verbose
     skipline()
 end
 
-% Delete empty dates and dseries saved on disk.
-if exist('empty-dates-object.mat','file')
-    delete([dynareroot 'empty-dates-object.mat']);
-end
-if exist('empty-dseries-object.mat','file')
-    delete([dynareroot 'empty-dseries-object.mat']);
-end
-
-% Save empty dates and dseries objects on disk.
-dd = dates();
-ts = dseries();
-save([dynareroot 'empty-dates-object.mat'],'dd');
-save([dynareroot 'empty-dseries-object.mat'],'ts');
+% Save empty dates and dseries objects (necessary if a mod file is not preprocessed).
+dates('initialize');
+dseries('initialize');
 
 cd(origin);
diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc
index 314fd504e493c416a40559c2bb4939d9b4c7179a..5c6c9fa752e93ec70cf99e96058cc8e0b1f462c3 100644
--- a/preprocessor/ModFile.cc
+++ b/preprocessor/ModFile.cc
@@ -554,6 +554,10 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool no_log, b
     mOutputFile << "clear all" << endl;
 
   mOutputFile << "tic;" << endl
+	      << "% Save empty dates and dseries objects in memory." << endl
+	      << "dates('initialize');" << endl
+	      << "dseries('initialize');" << endl
+	      << "% Define global variables." << endl
               << "global M_ oo_ options_ ys0_ ex0_ estimation_info" << endl
               << "options_ = [];" << endl
               << "M_.fname = '" << basename << "';" << endl