diff --git a/pub/lib/import.cpp b/pub/lib/import.cpp
index 921a052ff347e88ef28ef7f3cf533eb1ace4ebb0..aebe61b6114f801d3d9b6a933695650d2eea0a97 100644
--- a/pub/lib/import.cpp
+++ b/pub/lib/import.cpp
@@ -141,7 +141,7 @@ void NImport::read_tab(string qualif)
                 }
                 if (!horizontal) {
                     s = PSpec(new CSpec);
-                    s->z.resize(nz);
+                    s->z.resize(nzdat);
                     for (int iz = 0; iz < nzdat; ++iz)
                         s->z[iz] = RObjDbl(new CObjDbl(zdat[iz]));
                 }
diff --git a/pub/lib/node.cpp b/pub/lib/node.cpp
index 99b45e78bf1bd4af24f2201def28c9ee5207aa73..4ae82b0777366807404ef8752d244d237233c6a1 100644
--- a/pub/lib/node.cpp
+++ b/pub/lib/node.cpp
@@ -523,8 +523,7 @@ RObj CNodeGeni::tree_val(const CContext& ctx) const
         if (ctx.dim == CContext::_1)
             return val;
         else if (ctx.dim == CContext::_VI)
-            throw "TODO: implement to_vec";
-            // return val.to_vec(ctx.nv);
+            return val->to_vec(ctx.nv);
         else
             throw "BUG: unforeseen dimension {context: " + ctx.context_info() + "}";
 
diff --git a/pub/lib/obj.cpp b/pub/lib/obj.cpp
index 63d107d6989800f49d8b8da57af065fe58b7cd30..8849ff28ec9274a04deaf2086e5b1415a7d4bfa6 100644
--- a/pub/lib/obj.cpp
+++ b/pub/lib/obj.cpp
@@ -40,6 +40,10 @@ string CObjInt::to_s(int maxlen, int minlen, int prec) const
     return ret;
 }
 
+RObjVecNum CObjInt::to_vec(int repetitions) const
+{
+    return RObjVecInt(new CObjVecInt(vector<int>(repetitions, val)));
+}
 
 //**************************************************************************************************
 //  CObjDbl
@@ -65,6 +69,11 @@ string CObjDbl::result_info() const
         return "CObjDbl(" + to_s() + ")";
 }
 
+RObjVecNum CObjDbl::to_vec(int repetitions) const
+{
+    return RObjVecDbl(new CObjVecDbl(vector<double>(repetitions, val)));
+}
+
 
 //**************************************************************************************************
 //  CObjEnu
@@ -84,6 +93,12 @@ string CObjEnu::result_info() const
         return "CObjDbl(" + to_s() + ")";
 }
 
+RObjVecNum CObjEnu::to_vec(int repetitions) const
+{
+    return RObjVecEnu(new CObjVecEnu(vector<double>(repetitions, val),
+                                     vector<double>(repetitions, err)));
+}
+
 
 //**************************************************************************************************
 //  CObjVec
diff --git a/pub/lib/obj.hpp b/pub/lib/obj.hpp
index 756f4295ae7e420159db1ca45baca55a06f6b037..7a049a563ae37719aaf21f76c13e339e5ce3acd5 100644
--- a/pub/lib/obj.hpp
+++ b/pub/lib/obj.hpp
@@ -50,7 +50,7 @@ public:
     bool is_vec() const { return false; }
     virtual double to_dr() const { return 0.; }
     virtual double to_dr(int i) const { return 0.; }
-    virtual RObjVecNum to_vec(int repetitions) const;
+    virtual RObjVecNum to_vec(int repetitions) const = 0;
 };
 
 //! Data container holding a single integer number.
diff --git a/pub/trivia/integrate.cpp b/pub/trivia/integrate.cpp
index 3993cfb16bd72710eb7a79751441d0e8e4311a7f..f5ce5ed81df9155052e3439910e47c6955167756 100644
--- a/pub/trivia/integrate.cpp
+++ b/pub/trivia/integrate.cpp
@@ -52,6 +52,8 @@ double triv::integrate(
         case 6:
             rule = GSL_INTEG_GAUSS15;
             break;
+        default:
+            throw "Impossible case";
         }
         // QAG adaptive integration
         gsl_integration_qag(&F, low, hig, epsabs, epsrel, nwork, rule, work, &val, &err);