diff --git a/Device/Beam/Beam.cpp b/Device/Beam/Beam.cpp
index 8dd9605cf36efbecca0a72d54f7ca5c53d981c6b..3ae08c2d94d46fcb04e5f7e075d7d78a263e543a 100644
--- a/Device/Beam/Beam.cpp
+++ b/Device/Beam/Beam.cpp
@@ -22,28 +22,21 @@ using std::numbers::pi;
 
 //... Constructors, destructors:
 
-Beam::Beam(std::vector<double> P)
-    : INode(P)
-    , m_intensity(m_P[0])
-    , m_wavelength(m_P[1])
-    , m_alpha(m_P[2])
-    , m_phi(m_P[3])
-{
-    ASSERT(m_intensity > 0);
-    ASSERT(m_alpha >= 0);
-    precompute();
-}
-
 Beam::Beam(double intensity, double wavelength, double alpha, double phi)
-    : Beam(std::vector<double>{intensity, wavelength, alpha, phi})
+    : INode()
+    , m_intensity(intensity)
+    , m_wavelength(wavelength)
+    , m_alpha(alpha)
+    , m_phi(phi)
 {
+    precompute();
 }
 
 Beam::~Beam() = default;
 
 Beam* Beam::clone() const
 {
-    Beam* result = new Beam(m_P);
+    Beam* result = new Beam(m_intensity, m_wavelength, m_alpha, m_phi);
     result->m_shape_factor = m_shape_factor;
     result->m_polarization = m_polarization;
     return result;
@@ -89,6 +82,7 @@ const IFootprint* Beam::footprint() const
 void Beam::setIntensity(double intensity)
 {
     m_intensity = intensity;
+    precompute();
 }
 
 void Beam::setWavelength(double wavelength)
@@ -129,6 +123,9 @@ void Beam::setPolarization(const R3 polarization)
 //! To be called whenever wavelength or alpha or phi has changed.
 void Beam::precompute()
 {
+    ASSERT(m_intensity > 0);
+    ASSERT(m_wavelength >= 0);
+    ASSERT(m_alpha >= 0);
     m_wavenumber = (2 * pi) / m_wavelength;
     m_k = vecOfKAlphaPhi(m_wavenumber, -m_alpha, -m_phi);
 }
diff --git a/Device/Beam/Beam.h b/Device/Beam/Beam.h
index e4334f02cc7ec635b1eb49652e2379edd187b387..c18442f7f9a92e8c44a1d018ce5aaaa0f00cc5c4 100644
--- a/Device/Beam/Beam.h
+++ b/Device/Beam/Beam.h
@@ -82,14 +82,13 @@ public:
 private:
     Beam(); // needed by Swig
 #ifndef SWIG
-    Beam(std::vector<double> P);
 
     void precompute();
 
-    double& m_intensity; //!< beam intensity (neutrons/sec)
-    double& m_wavelength;
-    double& m_alpha;
-    double& m_phi;
+    double m_intensity; //!< beam intensity (neutrons/sec)
+    double m_wavelength;
+    double m_alpha;
+    double m_phi;
     std::shared_ptr<IFootprint> m_shape_factor; //!< footprint correction handler
     R3 m_polarization;                          //!< Bloch vector encoding the beam's polarization