diff --git a/lib/src/options.c b/lib/src/options.c
index a53bd0647..e636a41d0 100644
--- a/lib/src/options.c
+++ b/lib/src/options.c
@@ -201,6 +201,7 @@ struct gretl_option gretl_opts[] = {
     { DISCRETE, OPT_R, "reverse", 0 },
     { DPANEL,   OPT_A, "asymptotic", 0 },
     { DPANEL,   OPT_D, "time-dummies", 1 },
+    { DPANEL,   OPT_K, "keep-extra", 0 },
     { DPANEL,   OPT_L, "system", 0 },
     { DPANEL,   OPT_T, "two-step", 0 },
     { DPANEL,   OPT_V, "verbose", 0 },
diff --git a/plugin/arbond.c b/plugin/arbond.c
index 46b19eb1a..e6f96a2e0 100644
--- a/plugin/arbond.c
+++ b/plugin/arbond.c
@@ -1712,7 +1712,8 @@ static int dpd_finalize_model (MODEL *pmod, ddset *dpd,
     char tmp[32];
     int i, j;
     int err = 0;
-
+    int keep_extra = opt & OPT_K;
+    
     if (dpd->flags & DPD_REDO) {
 	goto restart;
     }
@@ -1854,6 +1855,16 @@ static int dpd_finalize_model (MODEL *pmod, ddset *dpd,
 	}
 	if (dpd->A != NULL) {
 	    gretl_model_set_int(pmod, "ninst", dpd->A->rows);
+	    if (keep_extra) {
+		gretl_matrix *A;
+		A = gretl_matrix_copy(dpd->A);
+		gretl_model_set_matrix_as_data(pmod, "A", A);
+	    }
+	}
+	if (keep_extra && dpd->ZT != NULL) {
+	    gretl_matrix *Z;
+	    Z = gretl_matrix_copy(dpd->ZT);
+	    gretl_model_set_matrix_as_data(pmod, "Z", Z);
 	}
 	if (opt & OPT_D) {
 	    maybe_suppress_time_dummies(pmod, dpd->ndum);
