diff --git a/splinterpolator.h b/splinterpolator.h
index fbd7b4f96839375bbc8450218e01a0db9522db51..e7c43cfa48ce56b6a6fcea307df81a391fc26fa7 100644
--- a/splinterpolator.h
+++ b/splinterpolator.h
@@ -1431,16 +1431,19 @@ void Splinterpolator<T>::assign(const Splinterpolator<T>& src)
 template<class T>
 bool Splinterpolator<T>::calc_coef(const T *data_or_coefs, bool copy, bool data_are_coefs)
 {
-  if (_order < 2 && !copy) { _cptr = data_or_coefs; return(false); }
+  // No copy, and nearest/interp, or pre-calculated
+  // coefficients - just take a pointer to the data
+  if (_order < 2     && !copy) { _cptr = data_or_coefs; return(false); }
+  if (data_are_coefs && !copy) { _cptr = data_or_coefs; return(false); }
 
   // Allocate memory and put the original data into _coef
-  //
   unsigned int ts=1;
   for (unsigned int i=0; i<_dim.size(); i++) ts *= _dim[i];
   _coef = new T[ts];
   memcpy(_coef,data_or_coefs,ts*sizeof(T));
 
-  if (_order < 2) return(true);  // If nearest neighbour or linear, that's all we need
+  if (_order < 2)     return(true); // If nearest neighbour or linear, that's all we need
+  if (data_are_coefs) return(true); // User has given us pre-calculated coefficients
 
   // Loop over all non-singleton dimensions and deconvolve along them
   //