diff --git a/pub/lib/fit.cpp b/pub/lib/fit.cpp
index c8029ea1ec6c01d931c6525675a1e03f02d0f801..edad512e23f23a92590cd226c59200dd0dea15c1 100644
--- a/pub/lib/fit.cpp
+++ b/pub/lib/fit.cpp
@@ -82,7 +82,7 @@ static void compute_residues(
 
     for ( int i=0; i<n; i++) {
         if( !isfinite(cu->to_r(i)) )
-            throw S("function evaluation returns infinite value");
+            throw "infinite function value at x[" + S(i) + "]=" + S(s->x[i]);
 
         if        ( wt==COlc::_LIN ) {
             fvec[mdat+i] = s->y[i] - cu->to_r(i);
diff --git a/pub/lib/slice.cpp b/pub/lib/slice.cpp
index e20b9b73b761885a65dff29cb8e7f33ee8d4683c..fda72fad726c4fb2e62adcb8dcde9dc075c1fc81 100644
--- a/pub/lib/slice.cpp
+++ b/pub/lib/slice.cpp
@@ -8,6 +8,7 @@
 //! \brief CSlice handles z dependent data, is base class for CSpec, CCurve.
 
 
+#include <iostream>
 #include <vector>
 #include <string>
 #include <algorithm>
@@ -183,7 +184,8 @@ void CSpec::intpol( const vector<double>& xx, vector<double>* yy, vector<double>
     
     for( int ii=0; ii<nn; ++ii ) {
         (*yy)[ii] = 0;
-        (*dd)[ii] = 0;
+        if(dd)
+            (*dd)[ii] = 0;
     }
     int i = 0, ii = 0;
     while ( i<n-1 && xx[ii]<x[n-1] ) {
@@ -194,6 +196,9 @@ void CSpec::intpol( const vector<double>& xx, vector<double>* yy, vector<double>
         if( ii>=nn )
             return;
         (*yy)[ii] = ( (x[i+1]-xx[ii])*y[i] + (xx[ii]-x[i])*y[i+1] )/(x[i+1]-x[i]);
+        if( !isfinite((*yy)[ii]) ) {
+            std::cout << "TROUBLE " << i << " " << ii << "\n";
+        }
         if( dd )
             (*dd)[ii] = sqrt( (x[i+1]-xx[ii])*SQR(dy[i]) + (xx[ii]-x[i])*SQR(dy[i+1]) ) /
                 (x[i+1]-x[i]);