diff --git a/tests/.gitignore b/tests/.gitignore
index 355c011cf96a51aae73316261c0dd3868ba50815..cad54782c7f45f38957888a755d50e19881f54b7 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -95,7 +95,6 @@ wsOct
 !/kalman_filter_smoother/testsmoother.m
 !/kalman_steady_state/test1.m
 !/kronecker/nash_matrices.mat
-!/kronecker/small_matrices.mat
 !/kronecker/test_kron.m
 !/load_octave_packages.m
 !/ls2003/data_ca1.m
@@ -152,6 +151,7 @@ wsOct
 !/run_all_unitary_tests.m
 !/run_block_byte_tests_matlab.m
 !/run_block_byte_tests_octave.m
+!/run_kronecker_tests.m
 !/run_m_script.m
 !/run_o_script.m
 !/run_reporting_test_matlab.m
diff --git a/tests/Makefile.am b/tests/Makefile.am
index ae05fc9292d72fe934b84b5f06c0e1d1ff016958..38ab3118e066ade3dc2dcb08d9ced09c3672953a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1075,7 +1075,8 @@ M_TRS_FILES += 	run_block_byte_tests_matlab.m.trs \
 		run_all_unitary_tests.m.trs \
 		histval_initval_file_unit_tests.m.trs \
 		test_aggregate_routine_1_2.m.trs \
-		test_aggregate_routine_1_2_3.m.trs
+		test_aggregate_routine_1_2_3.m.trs \
+		run_kronecker_tests.m.trs
 
 M_XFAIL_TRS_FILES = $(patsubst %.mod, %.m.trs, $(XFAIL_MODFILES))
 
@@ -1085,7 +1086,8 @@ O_TRS_FILES += $(patsubst %.mod, %.o.trs, $(PARTICLEFILES))
 O_TRS_FILES += 	run_block_byte_tests_octave.o.trs \
 		run_reporting_test_octave.o.trs \
 		run_all_unitary_tests.o.trs \
-	 	histval_initval_file_unit_tests.o.trs
+		histval_initval_file_unit_tests.o.trs \
+		run_kronecker_tests.o.trs
 
 O_XFAIL_TRS_FILES = $(patsubst %.mod, %.o.trs, $(XFAIL_MODFILES))
 
@@ -1255,7 +1257,10 @@ EXTRA_DIST = \
 	histval_initval_file/my_assert.m \
 	histval_initval_file/ramst_data.xls \
 	histval_initval_file/ramst_data.xlsx \
-	histval_initval_file/ramst_initval_file_data.m
+	histval_initval_file/ramst_initval_file_data.m \
+	run_kronecker_tests.m \
+	kronecker/test_kron.m \
+	kronecker/nash_matrices.mat
 
 if ENABLE_MATLAB
 check-local: check-matlab
diff --git a/tests/kronecker/small_matrices.mat b/tests/kronecker/small_matrices.mat
deleted file mode 100644
index 498427c6e9262438a7ed391521e00440a680b7d5..0000000000000000000000000000000000000000
Binary files a/tests/kronecker/small_matrices.mat and /dev/null differ
diff --git a/tests/kronecker/test_kron.m b/tests/kronecker/test_kron.m
index 956e69652c9184502ba85cf5c380d62423fbf3fd..f25776e23a2686235004ff689b202176a06ba8d8 100644
--- a/tests/kronecker/test_kron.m
+++ b/tests/kronecker/test_kron.m
@@ -1,5 +1,5 @@
 function info = test_kron(test,number_of_threads)
-% Copyright (C) 2007-2020 Dynare Team
+% Copyright (C) 2007-2021 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -28,10 +28,11 @@ if test == 1
     disp('')
     disp('I''m building the test problem...')
     tic
-    percentage_of_non_zero_elements = 10e-4;
-    NumberOfVariables = 549;%100;
-    NumberOfEquations = 256;%50
-    NumberOfColsInB   = 50 ; 
+    percentage_of_non_zero_elements = 1e-3;
+    NumberOfVariables = 120;
+    NumberOfEquations = 70;
+    NumberOfColsInB   = 50;
+    NumberOfColsInC   = 60;
     A = zeros(NumberOfEquations,NumberOfVariables^2);
     for i = 1:NumberOfEquations
         for j = 1:NumberOfVariables
@@ -47,38 +48,50 @@ if test == 1
     end
     A = sparse(A);
     B = randn(NumberOfVariables,NumberOfColsInB);
+    C = randn(NumberOfVariables,NumberOfColsInC);
     disp('Done!')
     toc
     disp('')
-    disp('Computation of A*kron(B,B) with the mex file (v1):')
+    disp('Computation of A*kron(B,B) with the mex file:')
     tic 
     D1 = sparse_hessian_times_B_kronecker_C(A,B,number_of_threads);
     toc
-    disp('')
-    disp('Computation of A*kron(B,B) with the mex file (v2):')
+    disp('Computation of A*kron(B,B) with two nested loops:')
     tic
-    D2 = sparse_hessian_times_B_kronecker_C(A,B,B,number_of_threads);
+    D2 = zeros(NumberOfEquations,NumberOfColsInB*NumberOfColsInB);
+    k = 1;
+    for i1 = 1:NumberOfColsInB
+        for i2 = 1:NumberOfColsInB
+            D2(:,k) = A*kron(B(:,i1),B(:,i2));
+            k = k+1;
+        end
+    end
     toc
     disp('');
     disp(['Difference between D1 and D2 = ' num2str(max(max(abs(D1-D2))))]);
-    if max(max(abs(D1-D2)))>1e-10
+    if max(max(abs(D1-D2)))>1e-13
         test1_1=0; 
     end
-    disp(' ')
-    disp('Computation of A*kron(B,B) with two nested loops:')
+    disp('')
+    disp('Computation of A*kron(B,C) with the mex file:')
     tic
-    D3 = zeros(NumberOfEquations,NumberOfColsInB*NumberOfColsInB);
+    D3 = sparse_hessian_times_B_kronecker_C(A,B,C,number_of_threads);
+    toc
+    disp('Computation of A*kron(B,C) with two nested loops:')
+    tic
+    D4 = zeros(NumberOfEquations,NumberOfColsInB*NumberOfColsInC);
     k = 1;
     for i1 = 1:NumberOfColsInB
-        for i2 = 1:NumberOfColsInB
-            D3(:,k) = A*kron(B(:,i1),B(:,i2)); 
+        for i2 = 1:NumberOfColsInC
+            D4(:,k) = A*kron(B(:,i1),C(:,i2));
             k = k+1;
         end
     end
     toc
+    disp(' ')
     disp('');
-    disp(['Difference between D1 and D3 = ' num2str(max(max(abs(D1-D3))))]);
-    if max(max(abs(D1-D3)))>1e-10
+    disp(['Difference between D3 and D4 = ' num2str(max(max(abs(D3-D4))))]);
+    if max(max(abs(D3-D4)))>1e-13
         test1_2=0; 
     end
 % $$$ FOR THE DIMENSIONS CONSIDERED HERE THIS PART WILL RESULT IN A OUT OF MEMORY ERROR.   
@@ -163,7 +176,7 @@ if test==3
     disp('Test with full format matrix -- 1(a)')
     D1 = A*kron(B,C);
     tic
-    D2 = A_times_B_kronecker_C(A,B,C,number_of_threads);
+    D2 = A_times_B_kronecker_C(A,B,C);
     toc
     disp(['Difference between D1 and D2 = ' num2str(max(max(abs(D1-D2))))]);
     if max(max(abs(D1-D2)))>1e-10
@@ -172,7 +185,7 @@ if test==3
     disp('Test with full format matrix -- 1(b)')
     D1 = A*kron(B,B);
     tic
-    D2 = A_times_B_kronecker_C(A,B,number_of_threads);
+    D2 = A_times_B_kronecker_C(A,B);
     toc
     disp(['Difference between D1 and D2 = ' num2str(max(max(abs(D1-D2))))]);
     if max(max(abs(D1-D2)))>1e-10
diff --git a/tests/run_kronecker_tests.m b/tests/run_kronecker_tests.m
new file mode 100644
index 0000000000000000000000000000000000000000..01cf38c964883b39962b2356bc3773c5874282ee
--- /dev/null
+++ b/tests/run_kronecker_tests.m
@@ -0,0 +1,56 @@
+% Copyright (C) 2021 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 <https://www.gnu.org/licenses/>.
+
+top_test_dir = getenv('TOP_TEST_DIR');
+addpath([top_test_dir filesep '..' filesep 'matlab']);
+dynare_config
+
+cd kronecker
+
+disp('**** Testing sparse_hessian_times_B_kronecker_C MEX...')
+disp('')
+disp('** Test 1')
+info(1) = test_kron(1, num_procs);
+disp('')
+disp('** Test 2')
+info(2) = test_kron(2, num_procs);
+disp('')
+disp('**** Testing A_times_B_kronecker_C MEX...')
+info(3) = test_kron(3, num_procs);
+
+cd ..
+
+if isoctave
+    ext = '.o.trs';
+else
+    ext = '.m.trs';
+end
+fid = fopen([ 'run_kronecker_tests' ext ], 'w+');
+num_failed_tests = sum(~info);
+tests = { 'sparse1', 'sparse2', 'dense' };
+failed_tests = tests(find(~info));
+if num_failed_tests > 0
+  fprintf(fid,':test-result: FAIL\n');
+  fprintf(fid,':number-tests: 3\n');
+  fprintf(fid,':number-failed-tests: %d\n', num_failed_tests);
+  fprintf(fid,':list-of-failed-tests: %s\n', failed_tests{:});
+else
+  fprintf(fid,':test-result: PASS\n');
+  fprintf(fid,':number-tests: 3\n');
+  fprintf(fid,':number-failed-tests: 0\n');
+end
+fclose(fid);