diff --git a/src/mpim_grid/grid_convert.h b/src/mpim_grid/grid_convert.h
index 30b10839bf9590bf33ba22cdcfa63f091fc2a187..adb2931639c1a0a08545c0482481e7af9dddab4d 100644
--- a/src/mpim_grid/grid_convert.h
+++ b/src/mpim_grid/grid_convert.h
@@ -15,7 +15,7 @@ gcLLtoXYZ(double lon, double lat, std::array<double, 3> &xyz)
 }
 
 static inline void
-gcLLtoXYZ(double lon, double lat, double *xyz)
+gcLLtoXYZ(double lon, double lat, double (&xyz)[3])
 {
   auto cos_lat = std::cos(lat);
   xyz[0] = cos_lat * std::cos(lon);
diff --git a/src/pointsearch_full.h b/src/pointsearch_full.h
index 67163d21e1d18869cb38308ff6e46972f57fcc97..e7f661e54c1cab433a30b13be38565a6ff957049 100644
--- a/src/pointsearch_full.h
+++ b/src/pointsearch_full.h
@@ -24,10 +24,7 @@ public:
   {
     create(lons, lats);
   }
-  ~PointsearchFull()
-  {
-    if (m_pointsXYZ) delete[] m_pointsXYZ;
-  }
+  ~PointsearchFull() {}
 
   size_t
   search_nearest(const PointLonLat &pointLL, size_t *index, double *dist) override
@@ -85,14 +82,14 @@ public:
 
 private:
   size_t m_n{ 0 };
-  double (*m_pointsXYZ)[3]{ nullptr };
+  std::unique_ptr<double[][3]> m_pointsXYZ;
   const PointsearchParams &m_params;
 
   void
   create(const Varray<double> &lons, const Varray<double> &lats)
   {
     auto n = lons.size();
-    m_pointsXYZ = new double[n][3];
+    m_pointsXYZ = std::make_unique<double[][3]>(n);
 
 #ifdef HAVE_OPENMP4
 #pragma omp simd
diff --git a/src/pointsearch_spherepart.h b/src/pointsearch_spherepart.h
index f89f3b55bd6adf3644c0fe54b2df54c43575e9ca..d2cbb3f8ae04a8cf5b2f5a5102d061b9a4674111 100644
--- a/src/pointsearch_spherepart.h
+++ b/src/pointsearch_spherepart.h
@@ -39,19 +39,19 @@ public:
 
     auto searchArcRadius = chord_to_arc_length(m_params.searchRadius);
 
-    double tgtPoint[1][3];
-    gcLLtoXYZ(pointLL.get_lon(), pointLL.get_lat(), tgtPoint[0]);
+    double tgtPoint[3];
+    gcLLtoXYZ(pointLL.get_lon(), pointLL.get_lat(), tgtPoint);
 
     if (!m_params.extrapolation)
       for (int i = 0; i < 3; ++i)
-        if (tgtPoint[0][i] < m_min[i] || tgtPoint[0][i] > m_max[i]) return 0;
+        if (tgtPoint[i] < m_min[i] || tgtPoint[i] > m_max[i]) return 0;
 
     size_t local_point_ids_array_size = 0;
     size_t num_local_point_ids;
     size_t *local_point_ids = nullptr;
     double cos_angle;
 
-    yac_point_sphere_part_search_NN(m_yacPointSearch, 1, tgtPoint, &cos_angle, nullptr, nullptr, &local_point_ids,
+    yac_point_sphere_part_search_NN(m_yacPointSearch, 1, &tgtPoint, &cos_angle, nullptr, nullptr, &local_point_ids,
                                     &local_point_ids_array_size, &num_local_point_ids);
 
     size_t numIndices = 0;
@@ -124,6 +124,7 @@ private:
   float m_min[3] = { 0 };
   float m_max[3] = { 0 };
   std::unique_ptr<double[][3]> m_pointsXYZ;
+
   point_sphere_part_search *m_yacPointSearch{ nullptr };
   const PointsearchParams &m_params;
 
@@ -137,11 +138,11 @@ private:
     double max[3] = { -1.e9, -1.e9, -1.e9 };
 
 #ifdef HAVE_OPENMP45
-#pragma omp parallel for if (n > cdoMinLoopSize) schedule(static) reduction(min : min[:3]) reduction(max : max[:3])
+#pragma omp parallel for if (n > cdoMinLoopSize) schedule(static) reduction(min : min[ : 3]) reduction(max : max[ : 3])
 #endif
     for (size_t i = 0; i < n; ++i)
       {
-        auto pointXYZ = m_pointsXYZ[i];
+        auto &pointXYZ = m_pointsXYZ[i];
         gcLLtoXYZ(lons[i], lats[i], pointXYZ);
         min_point(min, pointXYZ);
         max_point(max, pointXYZ);