diff --git a/src/scheme/DiscreteFunctionP0.hpp b/src/scheme/DiscreteFunctionP0.hpp
index 6bf5efc8b8add13d6f389f8c19b22b723f1025f4..fa95c4e1bba54c8ba1c623e67d2774313c85617b 100644
--- a/src/scheme/DiscreteFunctionP0.hpp
+++ b/src/scheme/DiscreteFunctionP0.hpp
@@ -258,7 +258,7 @@ class DiscreteFunctionP0 : public IDiscreteFunction
   DiscreteFunctionP0(const std::shared_ptr<const MeshType>& mesh, const CellValue<DataType>& cell_value)
     : m_mesh{mesh}, m_cell_values{cell_value}
   {
-    Assert(mesh->connectivity().shared_ptr() == cell_value.connectivity_ptr());
+    Assert(mesh->shared_connectivity() == cell_value.connectivity_ptr());
   }
 
   DiscreteFunctionP0() noexcept = delete;
diff --git a/tests/test_DiscreteFunctionP0.cpp b/tests/test_DiscreteFunctionP0.cpp
index 0adfd1c1f6c72404880ed5ba9ef1e719648c05ce..704000ecc79894ee9876ded1e6cfbd53f1aae5a7 100644
--- a/tests/test_DiscreteFunctionP0.cpp
+++ b/tests/test_DiscreteFunctionP0.cpp
@@ -49,8 +49,12 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
       REQUIRE(same_values(h, zero));
       REQUIRE(same_values(h, h_values));
 
+      DiscreteFunctionP0<Dimension, TinyVector<Dimension>> shallow_h{mesh};
+      shallow_h = h;
+
       copy_to(MeshDataManager::instance().getMeshData(*mesh).xj(), h_values);
 
+      REQUIRE(same_values(shallow_h, h_values));
       REQUIRE(same_values(h, h_values));
       REQUIRE(not same_values(h, zero));
 
@@ -2296,4 +2300,69 @@ TEST_CASE("DiscreteFunctionP0", "[scheme]")
       }
     }
   }
+
+#ifndef NDEBUG
+  SECTION("error")
+  {
+    SECTION("different meshes")
+    {
+      SECTION("1D")
+      {
+        constexpr size_t Dimension = 1;
+
+        std::shared_ptr mesh_1 = MeshDataBaseForTests::get().cartesianMesh1D();
+        std::shared_ptr mesh_2 =
+          std::make_shared<Mesh<Connectivity<Dimension>>>(mesh_1->shared_connectivity(), mesh_1->xr());
+
+        DiscreteFunctionP0<Dimension, double> f1{mesh_1};
+        DiscreteFunctionP0<Dimension, double> f2{mesh_2};
+
+        REQUIRE_THROWS_AS(f1 = f2, AssertError);
+        REQUIRE_THROWS_AS(copy_to(f1, f2), AssertError);
+        REQUIRE_THROWS_AS(f1 + f2, AssertError);
+        REQUIRE_THROWS_AS(f1 - f2, AssertError);
+        REQUIRE_THROWS_AS(f1 * f2, AssertError);
+        REQUIRE_THROWS_AS(f1 / f2, AssertError);
+      }
+
+      SECTION("2D")
+      {
+        constexpr size_t Dimension = 2;
+
+        std::shared_ptr mesh_1 = MeshDataBaseForTests::get().cartesianMesh2D();
+        std::shared_ptr mesh_2 =
+          std::make_shared<Mesh<Connectivity<Dimension>>>(mesh_1->shared_connectivity(), mesh_1->xr());
+
+        DiscreteFunctionP0<Dimension, double> f1{mesh_1};
+        DiscreteFunctionP0<Dimension, double> f2{mesh_2};
+
+        REQUIRE_THROWS_AS(f1 = f2, AssertError);
+        REQUIRE_THROWS_AS(copy_to(f1, f2), AssertError);
+        REQUIRE_THROWS_AS(f1 + f2, AssertError);
+        REQUIRE_THROWS_AS(f1 - f2, AssertError);
+        REQUIRE_THROWS_AS(f1 * f2, AssertError);
+        REQUIRE_THROWS_AS(f1 / f2, AssertError);
+      }
+
+      SECTION("3D")
+      {
+        constexpr size_t Dimension = 3;
+
+        std::shared_ptr mesh_1 = MeshDataBaseForTests::get().cartesianMesh3D();
+        std::shared_ptr mesh_2 =
+          std::make_shared<Mesh<Connectivity<Dimension>>>(mesh_1->shared_connectivity(), mesh_1->xr());
+
+        DiscreteFunctionP0<Dimension, double> f1{mesh_1};
+        DiscreteFunctionP0<Dimension, double> f2{mesh_2};
+
+        REQUIRE_THROWS_AS(f1 = f2, AssertError);
+        REQUIRE_THROWS_AS(copy_to(f1, f2), AssertError);
+        REQUIRE_THROWS_AS(f1 + f2, AssertError);
+        REQUIRE_THROWS_AS(f1 - f2, AssertError);
+        REQUIRE_THROWS_AS(f1 * f2, AssertError);
+        REQUIRE_THROWS_AS(f1 / f2, AssertError);
+      }
+    }
+  }
+#endif   // NDEBUG
 }