diff --git a/matlab/ols/pooled_ols.m b/matlab/ols/pooled_ols.m
index 3785bc25d7a6af37788698c5c103261deaa79f1a..7149e41c25ad22d80b0191debc2beef84cd49aab 100644
--- a/matlab/ols/pooled_ols.m
+++ b/matlab/ols/pooled_ols.m
@@ -76,8 +76,8 @@ else
 end
 
 st = dbstack(1);
-if isoctave
-    % Workaround for bug in Octave 6, see https://savannah.gnu.org/bugs/?60531
+if isoctave && octave_ver_less_than('6.3.0')
+    % Workaround for https://savannah.gnu.org/bugs/?60531, fixed in 6.3.0
     st = st(2:end);
 end
 if ~isempty(st) && strcmp(st(1).name, 'pooled_fgls')
diff --git a/matlab/ols/sur.m b/matlab/ols/sur.m
index 78b573abb026079a9e53570d048fab0f070c0c97..9dc92e4c5bc774d81d7ff33d0da004453b4d44ff 100644
--- a/matlab/ols/sur.m
+++ b/matlab/ols/sur.m
@@ -121,8 +121,8 @@ end
 %
 
 st = dbstack(1);
-if isoctave
-    % Workaround for bug in Octave 6, see https://savannah.gnu.org/bugs/?60531
+if isoctave && octave_ver_less_than('6.3.0')
+    % Workaround for https://savannah.gnu.org/bugs/?60531, fixed in 6.3.0
     st = st(2:end);
 end
 if ~isempty(st) && strcmp(st(1).name, 'surgibbs')
diff --git a/tests/ecb/SUR/panel_var_diff_NB_simulation_test.mod b/tests/ecb/SUR/panel_var_diff_NB_simulation_test.mod
index e5a1f85ee6bd34a813864e1a42f620f5294693ea..ce265aa47b7325b107b693566523de250ea5c375 100644
--- a/tests/ecb/SUR/panel_var_diff_NB_simulation_test.mod
+++ b/tests/ecb/SUR/panel_var_diff_NB_simulation_test.mod
@@ -182,33 +182,61 @@ if NSIMS > 1
         error(['sum(abs(mean(BETA)'' - calibrated_values)) ' num2str(sum(abs(mean(BETA)' - calibrated_values)))]);
     end
 else
-    good = [-0.826686196809409
-        -0.346753563700393
-        0.063013991583949
-        0.074802596658698
-        -0.017440119721953
-        -0.127090614348862
-        0.025293280404460
-        0.524290302468866
-        -0.117611206771440
-        -0.027776224547132
-        -0.156590828735908
-        0.054039707976331
-        0.276257666502046
-        1.000417289621684
-        0.999336865129450
-        -0.803258152338916
-        -0.309594948488168
-        0.051602756230521
-        0.039275481081030
-        0.024897596371662
-        -0.096310133845385
-        -0.022630284059365
-        0.461683465196454
-        -0.110278113383114
-        1.000000000000000];
+    if isoctave
+        good = [-8.352553221721005e-01
+                -3.197321434625048e-01
+                1.833371158471533e-02
+                5.535617069191032e-02
+                1.561983042003726e-02
+                -8.993909626264719e-02
+                1.711785670581707e-02
+                4.757720040796121e-01
+                -8.571091170339767e-02
+                -2.950787496937523e-02
+                -1.364615168219547e-01
+                3.188305976033711e-03
+                2.978809614745770e-01
+                1.000152497234268e+00
+                1.000581562867493e+00
+                -8.285078166013811e-01
+                -3.282738244438672e-01
+                1.707491564143498e-02
+                5.924757545427200e-02
+                4.811130814635710e-02
+                -1.066481566003144e-01
+                4.462314484614635e-03
+                4.862610106651586e-01
+                -7.133910570135164e-02
+                1.000000000000000e+00];
+    else
+        good = [-0.826686196809409
+                -0.346753563700393
+                0.063013991583949
+                0.074802596658698
+                -0.017440119721953
+                -0.127090614348862
+                0.025293280404460
+                0.524290302468866
+                -0.117611206771440
+                -0.027776224547132
+                -0.156590828735908
+                0.054039707976331
+                0.276257666502046
+                1.000417289621684
+                0.999336865129450
+                -0.803258152338916
+                -0.309594948488168
+                0.051602756230521
+                0.039275481081030
+                0.024897596371662
+                -0.096310133845385
+                -0.022630284059365
+                0.461683465196454
+                -0.110278113383114
+                1.000000000000000];
+    end
     if max(abs(BETA' - good)) > 1e-14
-        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA - good)))]);
+        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA' - good)))]);
     end
     return
 end
diff --git a/tests/ecb/SUR/panel_var_diff_NB_simulation_zero_eq.mod b/tests/ecb/SUR/panel_var_diff_NB_simulation_zero_eq.mod
index 24667c57019d96e3a1f727d7e1da0b677e45f1fe..e58cec26196afc917cbf36d95ec49ce240536a26 100644
--- a/tests/ecb/SUR/panel_var_diff_NB_simulation_zero_eq.mod
+++ b/tests/ecb/SUR/panel_var_diff_NB_simulation_zero_eq.mod
@@ -181,33 +181,61 @@ if NSIMS > 1
         error(['sum(abs(mean(BETA)'' - calibrated_values)) ' num2str(sum(abs(mean(BETA)' - calibrated_values)))]);
     end
 else
-    good = [-0.806260229719792
-        -0.354371215026078
-        0.067618717060638
-        0.088053231576354
-        -0.057161898696690
-        -0.136999143481575
-        0.052047088887385
-        0.524022502978068
-        -0.110211572532150
-        -0.041415758049800
-        -0.162997606880957
-        0.091000830792721
-        0.281196660545012
-        1.000000000000000
-        1.000000000000000
-        -0.823354793011220
-        -0.337521089381118
-        0.025493177305917
-        0.059513905441361
-        0.016845886773011
-        -0.151537340795868
-        0.004832174649536
-        0.430883913061161
-        -0.071743697511067
-        1.000000000000000];
+    if isoctave
+        good = [-8.508881335545030e-01
+                -3.179264262251253e-01
+                1.706077291589632e-02
+                5.094145179829853e-02
+                2.872070962130504e-02
+                -7.897668797162463e-02
+                1.813470896478606e-02
+                4.750302886967402e-01
+                -1.012751928847461e-01
+                -6.283292307902170e-02
+                -1.545808456642344e-01
+                1.853656209646514e-02
+                3.063655024212261e-01
+                1.000000000000000e+00
+                1.000000000000000e+00
+                -8.099002474688380e-01
+                -3.261126857285238e-01
+                1.076547521814692e-02
+                7.106757398866259e-02
+                5.150937460065234e-02
+                -8.935904867391903e-02
+                2.021540487647845e-03
+                5.175196576194863e-01
+                -8.339003914920010e-02
+                1.000000000000000e+00];
+    else
+        good = [-0.806260229719792
+                -0.354371215026078
+                0.067618717060638
+                0.088053231576354
+                -0.057161898696690
+                -0.136999143481575
+                0.052047088887385
+                0.524022502978068
+                -0.110211572532150
+                -0.041415758049800
+                -0.162997606880957
+                0.091000830792721
+                0.281196660545012
+                1.000000000000000
+                1.000000000000000
+                -0.823354793011220
+                -0.337521089381118
+                0.025493177305917
+                0.059513905441361
+                0.016845886773011
+                -0.151537340795868
+                0.004832174649536
+                0.430883913061161
+                -0.071743697511067
+                1.000000000000000];
+    end
     if max(abs(BETA' - good)) > 1e-14
-        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA - good)))]);
+        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA' - good)))]);
     end
     return
 end
diff --git a/tests/ecb/SUR/sur_noniterative.mod b/tests/ecb/SUR/sur_noniterative.mod
index 35ef510bd4b5f76220f7b0eb1920b54077f91126..6bee2aa794a63ba35a6dcf9c5449a9d33dec8829 100644
--- a/tests/ecb/SUR/sur_noniterative.mod
+++ b/tests/ecb/SUR/sur_noniterative.mod
@@ -182,33 +182,61 @@ if NSIMS > 1
         error(['sum(abs(mean(BETA)'' - calibrated_values)) ' num2str(sum(abs(mean(BETA)' - calibrated_values)))]);
     end
 else
-    good = [-0.826686383251952
-        -0.346754226737713
-        0.063012625739192
-        0.074803008678581
-        -0.017406695286611
-        -0.127075466955954
-        0.025273119798253
-        0.524311285013928
-        -0.117653504652072
-        -0.027795769946178
-        -0.156599054434094
-        0.054048691636616
-        0.276250884768198
-        1.000417819589230
-        0.999336022919911
-        -0.803262845969268
-        -0.309598590696623
-        0.051598925732525
-        0.039275097813797
-        0.024902442384228
-        -0.096310332265968
-        -0.022625946626029
-        0.461672601960238
-        -0.110232456667380
-        1.000000000000000];
+    if isoctave
+        good = [-8.352711907718519e-01
+                -3.197368335063609e-01
+                1.830685100998439e-02
+                5.536915629862437e-02
+                1.566163243855698e-02
+                -8.995230955089947e-02
+                1.710935092250227e-02
+                4.757441246761275e-01
+                -8.573675430889326e-02
+                -2.950285276336573e-02
+                -1.364655025289198e-01
+                3.184886642127426e-03
+                2.978870523376794e-01
+                1.000152378474068e+00
+                1.000581466494965e+00
+                -8.285158207247403e-01
+                -3.282747267443599e-01
+                1.706204285142614e-02
+                5.925659983555025e-02
+                4.809406612246896e-02
+                -1.066459229859625e-01
+                4.461752530619897e-03
+                4.861864360463416e-01
+                -7.128754584729166e-02
+                1.000000000000000e+00];
+    else
+        good = [-0.826686383251952
+                -0.346754226737713
+                0.063012625739192
+                0.074803008678581
+                -0.017406695286611
+                -0.127075466955954
+                0.025273119798253
+                0.524311285013928
+                -0.117653504652072
+                -0.027795769946178
+                -0.156599054434094
+                0.054048691636616
+                0.276250884768198
+                1.000417819589230
+                0.999336022919911
+                -0.803262845969268
+                -0.309598590696623
+                0.051598925732525
+                0.039275097813797
+                0.024902442384228
+                -0.096310332265968
+                -0.022625946626029
+                0.461672601960238
+                -0.110232456667380
+                1.000000000000000];
+    end
     if max(abs(BETA' - good)) > 1e-14
-        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA - good)))]);
+        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA' - good)))]);
     end
     return
 end
diff --git a/tests/ecb/SUR/sur_params_noniterative.mod b/tests/ecb/SUR/sur_params_noniterative.mod
index e74a293020412cc8531f071d12f94915468fbe4d..c85ffe2e8571db4a3a9f5793538b0f2a2ebc8c19 100644
--- a/tests/ecb/SUR/sur_params_noniterative.mod
+++ b/tests/ecb/SUR/sur_params_noniterative.mod
@@ -181,31 +181,59 @@ if NSIMS > 1
         error(['sum(abs(mean(BETA)'' - calibrated_values)) ' num2str(sum(abs(mean(BETA)' - calibrated_values)))]);
     end
 else
-    good = [-0.811559435201128
-        -0.323715338568976
-        0.073666282610569
-        0.058397703958446
-        0.018989604697742
-        -0.109597659887432
-        0.003766796763203
-        0.510389966839712
-        -0.072235928612349
-        -0.043850066260836
-        -0.153283917138772
-        0.058739144948151
-        0.292121949736756
-        1.000413662363949
-        0.999337514406012
-        -0.822375165893149
-        -0.323715338568977
-        0.046096335070402
-        0.058397703958446
-        0.018989604697742
-        -0.109597659887433
-        0.003766796763203
-        0.480506381923643
-        -0.111002148299648
-        1.000000000000000];
+    if isoctave
+        good = [-8.387004799504507e-01
+                -3.237153385689760e-01
+                1.627623494498021e-02
+                5.839770395844600e-02
+                1.898960469774210e-02
+                -1.095976598874320e-01
+                3.766796763202500e-03
+                4.616983632734178e-01
+                -7.223592861234940e-02
+                -4.385006626083560e-02
+                -1.532839171387720e-01
+                5.627557877681382e-03
+                2.921219497367560e-01
+                1.000151654801889e+00
+                1.000581567733505e+00
+                -8.223751658931490e-01
+                -3.237153385689770e-01
+                1.795374571546572e-02
+                5.839770395844610e-02
+                1.898960469774220e-02
+                -1.095976598874330e-01
+                3.766796763202560e-03
+                4.805063819236430e-01
+                -5.852923523496190e-02
+                1.000000000000000e+00];
+        else
+            good = [-0.811559435201128
+                    -0.323715338568976
+                    0.073666282610569
+                    0.058397703958446
+                    0.018989604697742
+                    -0.109597659887432
+                    0.003766796763203
+                    0.510389966839712
+                    -0.072235928612349
+                    -0.043850066260836
+                    -0.153283917138772
+                    0.058739144948151
+                    0.292121949736756
+                    1.000413662363949
+                    0.999337514406012
+                    -0.822375165893149
+                    -0.323715338568977
+                    0.046096335070402
+                    0.058397703958446
+                    0.018989604697742
+                    -0.109597659887433
+                    0.003766796763203
+                    0.480506381923643
+                    -0.111002148299648
+                    1.000000000000000];
+    end
     if max(abs(BETA' - good)) > 2e-14
         error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA' - good)))]);
     end
diff --git a/tests/ecb/pooled_fgls/panel_var_diff_NB_simulation_test.mod b/tests/ecb/pooled_fgls/panel_var_diff_NB_simulation_test.mod
index c36a2a5d4b0c927bf5a8bdf8c6d9c2954d00119a..171f4dc5392f5fd9083d6a6d9951afa8afc02eee 100644
--- a/tests/ecb/pooled_fgls/panel_var_diff_NB_simulation_test.mod
+++ b/tests/ecb/pooled_fgls/panel_var_diff_NB_simulation_test.mod
@@ -194,33 +194,61 @@ if NSIMS > 1
         error(['sum(abs(mean(BETA)'' - calibrated_values)) ' num2str(sum(abs(mean(BETA)' - calibrated_values)))]);
     end
 else
-    good = [-0.814463611096955
-        -0.327545854281441
-        0.058155751549620
-        0.056956172127541
-        0.004760467203543
-        -0.110209140210870
-        0.000873625473015
-        0.492984603730353
-        -0.110739844810764
-        -0.026953553332579
-        -0.155433250333810
-        0.053391289583053
-        0.275361374992940
-        1.000446511792020
-        0.999278815424852
-        -0.814463611096955
-        -0.327545854281441
-        0.058155751549620
-        0.056956172127541
-        0.004760467203543
-        -0.110209140210870
-        0.000873625473015
-        0.492984603730353
-        -0.110739844810764
-        0.999278815424852];
+    if isoctave
+        good = [-8.316948155834608e-01
+                -3.234334069775354e-01
+                1.844389028026164e-02
+                5.681483820127380e-02
+                3.240547937543738e-02
+                -9.766788804673115e-02
+                1.056637137077583e-02
+                4.833681328497947e-01
+                -7.893398290308180e-02
+                -2.936396277337527e-02
+                -1.362519309595106e-01
+                3.082943385113618e-03
+                2.979145726897833e-01
+                1.000152555627138e+00
+                1.000546950369327e+00
+                -8.316948155834608e-01
+                -3.234334069775354e-01
+                1.844389028026164e-02
+                5.681483820127380e-02
+                3.240547937543738e-02
+                -9.766788804673115e-02
+                1.056637137077583e-02
+                4.833681328497947e-01
+                -7.893398290308180e-02
+                1.000546950369327e+00];
+    else
+        good = [-0.814463611096955
+                -0.327545854281441
+                0.058155751549620
+                0.056956172127541
+                0.004760467203543
+                -0.110209140210870
+                0.000873625473015
+                0.492984603730353
+                -0.110739844810764
+                -0.026953553332579
+                -0.155433250333810
+                0.053391289583053
+                0.275361374992940
+                1.000446511792020
+                0.999278815424852
+                -0.814463611096955
+                -0.327545854281441
+                0.058155751549620
+                0.056956172127541
+                0.004760467203543
+                -0.110209140210870
+                0.000873625473015
+                0.492984603730353
+                -0.110739844810764
+                0.999278815424852];
+    end
     if max(abs(BETA' - good)) > 1e-14
-        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA - good)))]);
+        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA' - good)))]);
     end
     return
 end
diff --git a/tests/ecb/pooled_fgls/test_param_names.mod b/tests/ecb/pooled_fgls/test_param_names.mod
index cc76ee1497cc69c75017e4cf7596592579a495b5..d6793407b44bb46f2f127947631de9b0a3417db5 100644
--- a/tests/ecb/pooled_fgls/test_param_names.mod
+++ b/tests/ecb/pooled_fgls/test_param_names.mod
@@ -199,33 +199,61 @@ if NSIMS > 1
         error(['sum(abs(mean(BETA)'' - calibrated_values)) ' num2str(sum(abs(mean(BETA)' - calibrated_values)))]);
     end
 else
-    good = [-0.814720065821038
-        -0.327476517170325
-        0.058494818795786
-        0.057190907485572
-        0.018989604697742
-        -0.109597659887432
-        0.003766796763203
-        0.480506381923644
-        -0.072235928612349
-        -0.043850066260836
-        -0.153283917138772
-        0.032874498377282
-        0.292121949736756
-        1.000000000000000
-        1.000000000000000
-        -0.814720065821038
-        -0.327476517170325
-        0.058494818795786
-        0.057190907485572
-        0.018989604697742
-        -0.109597659887433
-        0.003766796763203
-        0.480506381923643
-        -0.072235928612349
-        0.999222744717732];
+    if isoctave
+        good = [-8.310501956997751e-01
+                -3.225294235017088e-01
+                1.865216033306362e-02
+                5.663863653611149e-02
+                1.898960469774210e-02
+                -1.095976598874320e-01
+                3.766796763202500e-03
+                4.805063819236440e-01
+                -7.223592861234940e-02
+                -4.385006626083560e-02
+                -1.532839171387720e-01
+                3.287449837728250e-02
+                2.921219497367560e-01
+                1.000000000000000e+00
+                1.000000000000000e+00
+                -8.310501956997751e-01
+                -3.225294235017088e-01
+                1.865216033306362e-02
+                5.663863653611149e-02
+                1.898960469774220e-02
+                -1.095976598874330e-01
+                3.766796763202560e-03
+                4.805063819236430e-01
+                -7.223592861234940e-02
+                9.987547807197997e-01];
+    else
+        good = [-0.814720065821038
+                -0.327476517170325
+                0.058494818795786
+                0.057190907485572
+                0.018989604697742
+                -0.109597659887432
+                0.003766796763203
+                0.480506381923644
+                -0.072235928612349
+                -0.043850066260836
+                -0.153283917138772
+                0.032874498377282
+                0.292121949736756
+                1.000000000000000
+                1.000000000000000
+                -0.814720065821038
+                -0.327476517170325
+                0.058494818795786
+                0.057190907485572
+                0.018989604697742
+                -0.109597659887433
+                0.003766796763203
+                0.480506381923643
+                -0.072235928612349
+                0.999222744717732];
+    end
     if max(abs(BETA' - good)) > 1e-14
-        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA - good)))]);
+        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA' - good)))]);
     end
     return
 end
diff --git a/tests/ecb/pooled_ols/panel_var_diff_NB_simulation_test.mod b/tests/ecb/pooled_ols/panel_var_diff_NB_simulation_test.mod
index bed845401f72ac559088a38c88e48ea2601c821c..812b7dddfcc44f4300987dade1cfdd9392f24ffa 100644
--- a/tests/ecb/pooled_ols/panel_var_diff_NB_simulation_test.mod
+++ b/tests/ecb/pooled_ols/panel_var_diff_NB_simulation_test.mod
@@ -194,33 +194,61 @@ if NSIMS > 1
         error(['sum(abs(mean(BETA)'' - calibrated_values)) ' num2str(sum(abs(mean(BETA)' - calibrated_values)))]);
     end
 else
-    good = [-0.814685080218300
-        -0.327809964140588
-        0.058359966460475
-        0.056151094599907
-        0.004707755717058
-        -0.110288651670160
-        0.000910770641800
-        0.494342669441397
-        -0.109455922483561
-        -0.029329632163194
-        -0.157236653586389
-        0.054467548349538
-        0.275969658826900
-        1.000451016087141
-        0.999236021952814
-        -0.814685080218300
-        -0.327809964140588
-        0.058359966460475
-        0.056151094599907
-        0.004707755717058
-        -0.110288651670160
-        0.000910770641800
-        0.494342669441397
-        -0.109455922483561
-        0.999236021952814];
+    if isoctave
+        good = [-8.326280521072452e-01
+                -3.245092907529956e-01
+                1.559933898700820e-02
+                5.713420837713284e-02
+                3.388617725743132e-02
+                -9.835803574929934e-02
+                1.037828626390050e-02
+                4.790835066516009e-01
+                -7.694420195196504e-02
+                -2.922379636988930e-02
+                -1.371982891499323e-01
+                2.777450595768412e-03
+                2.974861843569638e-01
+                1.000142844833019e+00
+                1.000541015648813e+00
+                -8.326280521072452e-01
+                -3.245092907529956e-01
+                1.559933898700820e-02
+                5.713420837713284e-02
+                3.388617725743132e-02
+                -9.835803574929934e-02
+                1.037828626390050e-02
+                4.790835066516009e-01
+                -7.694420195196504e-02
+                1.000541015648813e+00];
+    else
+        good = [-0.814685080218300
+                -0.327809964140588
+                0.058359966460475
+                0.056151094599907
+                0.004707755717058
+                -0.110288651670160
+                0.000910770641800
+                0.494342669441397
+                -0.109455922483561
+                -0.029329632163194
+                -0.157236653586389
+                0.054467548349538
+                0.275969658826900
+                1.000451016087141
+                0.999236021952814
+                -0.814685080218300
+                -0.327809964140588
+                0.058359966460475
+                0.056151094599907
+                0.004707755717058
+                -0.110288651670160
+                0.000910770641800
+                0.494342669441397
+                -0.109455922483561
+                0.999236021952814];
+    end
     if max(abs(BETA' - good)) > 1e-14
-        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA - good)))]);
+        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA' - good)))]);
     end
     return
 end
diff --git a/tests/ecb/pooled_ols/test_param_names.mod b/tests/ecb/pooled_ols/test_param_names.mod
index fad39e7e5deb22d762eabe069013fc9246ab82ba..510a485998c26f8da57ccf83e7b2e9f3b3b9211f 100644
--- a/tests/ecb/pooled_ols/test_param_names.mod
+++ b/tests/ecb/pooled_ols/test_param_names.mod
@@ -199,33 +199,61 @@ if NSIMS > 1
         error(['sum(abs(mean(BETA)'' - calibrated_values)) ' num2str(sum(abs(mean(BETA)' - calibrated_values)))]);
     end
 else
-    good = [-0.814685080218300
-        -0.327809964140588
-        0.058359966460474
-        0.056151094599907
-        0.018989604697742
-        -0.109597659887432
-        0.003766796763203
-        0.480506381923644
-        -0.072235928612349
-        -0.043850066260836
-        -0.153283917138772
-        0.032874498377282
-        0.292121949736756
-        1.000000000000000
-        1.000000000000000
-        -0.814685080218300
-        -0.327809964140588
-        0.058359966460474
-        0.056151094599907
-        0.018989604697742
-        -0.109597659887433
-        0.003766796763203
-        0.480506381923643
-        -0.072235928612349
-        0.999158727555345];
+    if isoctave
+        good = [-8.326280521072453e-01
+                -3.245092907529958e-01
+                1.559933898700814e-02
+                5.713420837713350e-02
+                1.898960469774210e-02
+                -1.095976598874320e-01
+                3.766796763202500e-03
+                4.805063819236440e-01
+                -7.223592861234940e-02
+                -4.385006626083560e-02
+                -1.532839171387720e-01
+                3.287449837728250e-02
+                2.921219497367560e-01
+                1.000000000000000e+00
+                1.000000000000000e+00
+                -8.326280521072453e-01
+                -3.245092907529958e-01
+                1.559933898700814e-02
+                5.713420837713350e-02
+                1.898960469774220e-02
+                -1.095976598874330e-01
+                3.766796763202560e-03
+                4.805063819236430e-01
+                -7.223592861234940e-02
+                9.990194453441936e-01];
+    else
+        good = [-0.814685080218300
+                -0.327809964140588
+                0.058359966460474
+                0.056151094599907
+                0.018989604697742
+                -0.109597659887432
+                0.003766796763203
+                0.480506381923644
+                -0.072235928612349
+                -0.043850066260836
+                -0.153283917138772
+                0.032874498377282
+                0.292121949736756
+                1.000000000000000
+                1.000000000000000
+                -0.814685080218300
+                -0.327809964140588
+                0.058359966460474
+                0.056151094599907
+                0.018989604697742
+                -0.109597659887433
+                0.003766796763203
+                0.480506381923643
+                -0.072235928612349
+                0.999158727555345];
+    end
     if max(abs(BETA' - good)) > 1e-14
-        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA - good)))]);
+        error(['sum of BETA'' - good was: ' num2str(sum(abs(BETA' - good)))]);
     end
     return
 end
diff --git a/tests/estimation/univariate/ols/mc-ols.inc b/tests/estimation/univariate/ols/mc-ols.inc
index 9d5977c98e2ee2d06ae02ee6c857421d2a90316a..ce9c639d4574bd66701105c3a20b9ce552ceb54b 100644
--- a/tests/estimation/univariate/ols/mc-ols.inc
+++ b/tests/estimation/univariate/ols/mc-ols.inc
@@ -49,36 +49,81 @@ verbatim;
             error('There is probably an error in the OLS routine.')
         end
     else
+        % NB: estimation results depend on the sequence of generated random
+        % numbers, hence we need to hardcode different results between MATLAB
+        % and Octave
         if strcmp(M_.fname, 'ols_base')
-            good = [0.025487074270635
-                -0.126705792250240
-                0.002639663639062
-                0.486913131141265
-                -0.027702100375691];
+            if isoctave
+                good = [2.509401520579608e-02
+                        -1.212468793686628e-01
+                        2.983003417202038e-02
+                        4.645373135672548e-01
+                        -6.312448906643650e-02];
+            else
+                good = [0.025487074270635
+                        -0.126705792250240
+                        0.002639663639062
+                        0.486913131141265
+                        -0.027702100375691];
+            end
         elseif strcmp(M_.fname, 'ols_param_names')
-            good = [-0.125265361034515
-                0.497003481797959];
+            if isoctave
+                good = [-0.125307512725951
+                        0.465364467369817];
+            else
+                good = [-0.125265361034515
+                        0.497003481797959];
+            end
         elseif strcmp(M_.fname, 'ols_date_range')
-            good = [0.468607715487806
-                -0.011224442004140
-                0.033681224841824
-                -0.126743281213504];
+            if isoctave
+                good = [4.775810440061960e-01
+                        2.096533656963026e-02
+                        3.264889547460539e-02
+                        -1.167420901882959e-01];
+            else
+                good = [0.468607715487806
+                        -0.011224442004140
+                        0.033681224841824
+                        -0.126743281213504];
+            end
         elseif strcmp(M_.fname, 'ols_wc_1')
-            good = [0.466534186307255
-                -0.010596174928406
-                0.035098464382347
-                -0.126502172176703];
+            if isoctave
+                good = [4.778519485900916e-01
+                        2.028231364527827e-02
+                        3.186766890724485e-02
+                        -1.173897445629599e-01];
+            else
+                good = [0.466534186307255
+                        -0.010596174928406
+                        0.035098464382347
+                        -0.126502172176703];
+            end
         elseif strcmp(M_.fname, 'ols_wc_2')
-            good = [0.485802603276717
-                0.002660854661647
-                0.025434782170432
-                -0.126939890810119
-                0.043688440124315];
+            if isoctave
+                good = [4.679679703340907e-01
+                        2.987618894535485e-02
+                        2.503849196608867e-02
+                        -1.206391201296474e-01
+                        3.435379133407408e-02];
+            else
+                good = [0.485802603276717
+                        0.002660854661647
+                        0.025434782170432
+                        -0.126939890810119
+                        0.043688440124315];
+            end
         elseif strcmp(M_.fname, 'ols_wc_3')
-            good = [0.490636551206316
-                0.014209413280418
-                0.028534044956486
-                -0.094387460262917];
+            if isoctave
+                good = [4.766230170524117e-01
+                        2.500479091401997e-02
+                        2.333265887171398e-02
+                        -9.913848386063488e-02];
+            else
+                good = [0.490636551206316
+                        0.014209413280418
+                        0.028534044956486
+                        -0.094387460262917];
+            end
         end
         if max(abs(good-Beta(:,pid)'))>1e-2
             error('There is probably an error in the OLS routine.')
diff --git a/tests/histval_initval_file_unit_tests.m b/tests/histval_initval_file_unit_tests.m
index 183ce12081cfca2b0e5ac5e3995353621e9859fd..34f558b6b39e8cf99b7c142665cde412020ecf2c 100644
--- a/tests/histval_initval_file_unit_tests.m
+++ b/tests/histval_initval_file_unit_tests.m
@@ -148,6 +148,11 @@ fprintf(fh, '%f ', y);
 fprintf(fh, '];\n');
 fclose(fh);
 
+if isoctave
+    % To ensure that Octave sees the newly-created data.m script
+    rehash
+end
+
 M.endo_nbr = 1;
 M.orig_endo_nbr = 1;
 M.endo_names = {'y'};