diff --git a/src/observations.cpp b/src/observations.cpp
index b6cb50cd2ecf6560eacb662ee0e9489f0c259032..3b2e5fe28b683427e90d16a67111f0ef9a31197f 100644
--- a/src/observations.cpp
+++ b/src/observations.cpp
@@ -26,11 +26,26 @@ void Observations::addObservation(const obsd_t & obs)
     assert(sat_2_idx_.size() == idx_2_sat_.size());
     assert(sat_2_idx_.size() == obs_.size());
 
-
-    assert(!hasSatellite(obs.sat) && "adding an observation of a satellite already stored!");
-    this->obs_.push_back(obs);
-    idx_2_sat_.push_back(obs.sat);
-    sat_2_idx_[obs.sat] = obs_.size()-1;
+    // copy obsd_t object
+    obsd_t copy_obs;
+    std::copy(obs.D, obs.D + 3, copy_obs.D);
+    std::copy(obs.L, obs.L + 3, copy_obs.L);
+    std::copy(obs.LLI, obs.LLI + 3, copy_obs.LLI);
+    std::copy(obs.P, obs.P + 3, copy_obs.P);
+    std::copy(obs.SNR, obs.SNR + 3, copy_obs.SNR);
+    std::copy(obs.code, obs.code + 3, copy_obs.code);
+    std::copy(obs.qualL, obs.qualL + 3, copy_obs.qualL);
+    copy_obs.eventime = obs.eventime;
+    copy_obs.freq = obs.freq;
+    copy_obs.rcv = obs.rcv;
+    copy_obs.sat = obs.sat;
+    copy_obs.time = obs.time;
+    copy_obs.timevalid = obs.timevalid;
+
+    assert(!hasSatellite(copy_obs.sat) && "adding an observation of a satellite already stored!");
+    this->obs_.push_back(copy_obs);
+    idx_2_sat_.push_back(copy_obs.sat);
+    sat_2_idx_[copy_obs.sat] = obs_.size()-1;
 
     //std::cout << "added observation of sat " << (int)obs.sat << " stored in idx " << sat_2_idx_[obs.sat] << std::endl;