diff --git a/src/expr.cpp b/src/expr.cpp
index eac7f062114826ac3650fff44891672dff2e3f6f..48a2844a14b9e7ffe75113fd7f2bd552042cb6b6 100644
--- a/src/expr.cpp
+++ b/src/expr.cpp
@@ -616,9 +616,11 @@ void CTree::tree_vec_val( vector<double> *ret, uint k, uint j ) const
     CContext ctx( k, j );
     ctx.set_nv( ret->size() );
     tree_val( &val, &ctx );
-    if ( !val.is_vector() )
-        throw "tree_vec_val got " + val.info();
-    (*ret) = val.vd;
+    if ( val.is_vector() )
+        (*ret) = val.vd;
+    else
+        for( uint iv=0; iv<ret->size(); ++iv )
+            (*ret)[iv] = val.d;
 }
 
 
@@ -808,12 +810,17 @@ void NCalc::Calculator()
         user_xaxparse( s.c_str(), &T );
         NOlm::IterateEle iter;
         CEle *ein;
-        while ( (ein=iter()) ) {
-            uint k = iter.SelNo();
-            T->tree_point_val( &v, k );
-            if ( iter.size()>1 )
-                printf( "f%d: ", k );
+        if( iter.size()==0 ) {
+            T->tree_point_val( &v, -1 );
             printf("%.12g\n", v);
+        } else {
+            while ( (ein=iter()) ) {
+                uint k = iter.SelNo();
+                T->tree_point_val( &v, k );
+                if ( iter.size()>1 )
+                    printf( "f%d: ", k );
+                printf("%.12g\n", v);
+            }
         }
     }
 }