diff --git a/src/cell.hpp b/src/cell.hpp
index 0eb7c8133fb7908f4b725fce6ecb48bbfa82aa92..c691e68422b856183c941d0fd1c4172d644f3289 100644
--- a/src/cell.hpp
+++ b/src/cell.hpp
@@ -91,9 +91,9 @@ public:
         probes_(other.probes_)
      {
          // unique_ptr's cannot be copy constructed, do a manual assignment
-         auto siter = segments_.begin();
-         for (const auto& s : other.segments_) {
-             *siter = std::move(s->clone());
+         segments_.reserve(other.segments_.size());
+         for (const auto& s: other.segments_) {
+             segments_.push_back(s->clone());
          }
      }
 
diff --git a/tests/unit/test_cell.cpp b/tests/unit/test_cell.cpp
index 3102d97435d3095b4ef91b885b040ac084f37a5f..eb28e42be495a425a7ff68256453c15e027929ab 100644
--- a/tests/unit/test_cell.cpp
+++ b/tests/unit/test_cell.cpp
@@ -165,3 +165,58 @@ TEST(cell_type, multiple_cables)
     }
 }
 
+TEST(cell_type, clone)
+{
+    using namespace nest::mc;
+
+    // make simple cell with multiple segments
+
+    cell c;
+    c.add_soma(2.1);
+    c.add_cable(0, segmentKind::dendrite, 0.3, 0.2, 10);
+    c.segment(1)->set_compartments(3);
+    c.add_cable(1, segmentKind::dendrite, 0.2, 0.15, 20);
+    c.segment(2)->set_compartments(5);
+
+    parameter_list exp_default("expsyn");
+    c.add_synapse({1, 0.3}, exp_default);
+
+    c.add_detector({0, 0.5}, 10.0);
+
+    // make clone
+
+    cell d(clone_cell, c);
+
+    // check equality
+
+    ASSERT_EQ(c.num_segments(), d.num_segments());
+    EXPECT_EQ(c.soma()->radius(), d.soma()->radius());
+    EXPECT_EQ(c.segment(1)->as_cable()->length(), d.segment(1)->as_cable()->length());
+    {
+        const auto& csyns = c.synapses();
+        const auto& dsyns = d.synapses();
+
+        ASSERT_EQ(csyns.size(), dsyns.size());
+        for (unsigned i=0; i<csyns.size(); ++i) {
+            ASSERT_EQ(csyns[i].location, dsyns[i].location);
+        }
+    }
+
+    ASSERT_EQ(1u, c.detectors().size());
+    ASSERT_EQ(1u, d.detectors().size());
+    EXPECT_EQ(c.detectors()[0].threshold, d.detectors()[0].threshold);
+
+    // check clone is independent
+
+    c.add_cable(2, segmentKind::dendrite, 0.15, 0.1, 20);
+    EXPECT_NE(c.num_segments(), d.num_segments());
+
+    d.detectors()[0].threshold = 13.0;
+    ASSERT_EQ(1u, c.detectors().size());
+    ASSERT_EQ(1u, d.detectors().size());
+    EXPECT_NE(c.detectors()[0].threshold, d.detectors()[0].threshold);
+
+    c.segment(1)->set_compartments(7);
+    EXPECT_NE(c.segment(1)->num_compartments(), d.segment(1)->num_compartments());
+    EXPECT_EQ(c.segment(2)->num_compartments(), d.segment(2)->num_compartments());
+}