diff --git a/src/interface_implementations/ballandbeam.jl b/src/interface_implementations/ballandbeam.jl
index f42fbe05f98f7fc5a74368aea75a8a13ff827748..77dbe7f7cd7ab2962360e5d63e810699bf9696d8 100644
--- a/src/interface_implementations/ballandbeam.jl
+++ b/src/interface_implementations/ballandbeam.jl
@@ -24,12 +24,22 @@ Physical beam process
 - `measure::AnalogInput10V = AnalogInput10V(0)`
 - `control::AnalogOutput10V = AnalogOutput10V(1)`
 """
-@with_kw struct Beam <: PhysicalProcess
-    h::Float64 = 0.01
-    bias::Float64 = 0.0
-    stream::LabStream = ComediStream()
-    measure::AnalogInput10V = AnalogInput10V(0)
-    control::AnalogOutput10V = AnalogOutput10V(1)
+struct Beam <: PhysicalProcess
+    h::Float64
+    bias::Float64
+    stream::LabStream
+    measure::AnalogInput10V
+    control::AnalogOutput10V
+end
+function Beam(;
+    h::Float64               = 0.01,
+    bias::Float64            = 0.,
+    stream::LabStream        = ComediStream(),
+    measure::AnalogInput10V  = AnalogInput10V(0),
+    control::AnalogOutput10V = AnalogOutput10V(1))
+    p = new(Float64(h),Float64(bias),stream,measure,control)
+    init_devices!(p.stream, p.measure, p.control)
+    p
 end
 
 include("define_beam_system.jl")
@@ -41,13 +51,24 @@ struct BeamSimulator <: SimulatedProcess
     BeamSimulator(;h::Real = 0.01) = new(Float64(h), SysFilter(beam_system, h))
 end
 
-@with_kw struct BallAndBeam <: PhysicalProcess
-    h::Float64 = 0.01
-    bias::Float64 = 0.0
-    stream::LabStream = ComediStream()
-    measure1::AnalogInput10V = AnalogInput10V(0)
-    measure2::AnalogInput10V = AnalogInput10V(1)
-    control::AnalogOutput10V = AnalogOutput10V(0)
+struct BallAndBeam <: PhysicalProcess
+    h::Float64
+    bias::Float64
+    stream::LabStream
+    measure1::AnalogInput10V
+    measure2::AnalogInput10V
+    control::AnalogOutput10V
+end
+function BallAndBeam(;
+    h                        = 0.01,
+    bias                     = 0.,
+    stream                   = ComediStream(),
+    measure1::AnalogInput10V = AnalogInput10V(0),
+    measure2::AnalogInput10V = AnalogInput10V(1),
+    control::AnalogOutput10V = AnalogOutput10V(1))
+    p = new(h,bias,stream,measure1,measure2,control)
+    init_devices!(p.stream, p.measure1, p.measure2, p.control)
+    p
 end
 
 struct BallAndBeamSimulator <: SimulatedProcess
@@ -84,10 +105,9 @@ measure(p::BeamSimulator)                = vecdot(p.s.sys.C,p.s.state)
 measure(p::BallAndBeamSimulator)         = error("Not yet implemented")
 
 
-initialize(p::Beam)                    = init_devices!(p.stream, p.measure, p.control)
-initialize(p::BallAndBeam)             = init_devices!(p.stream, p.measure1,
-                                                       p.measure2, p.control)
-finalize(p::AbstractBeamOrBallAndBeam) = close(p.stream)
+initialize(p::Beam)                    = nothing
+initialize(p::BallAndBeam)             = nothing
+finalize(p::AbstractBeamOrBallAndBeam) = foreach(close, p.stream.devices)
 initialize(p::BallAndBeamSimulator)    = nothing
 finalize(p::BallAndBeamSimulator)      = nothing
 initialize(p::BeamSimulator)           = p.s.state .*= 0
diff --git a/src/interface_implementations/eth_helicopter.jl b/src/interface_implementations/eth_helicopter.jl
index aab34a8a4e192b700a2d6855b2c5ea6c9b411dbf..9606f23328bbf939a5556c33e7d4781773c5fb90 100644
--- a/src/interface_implementations/eth_helicopter.jl
+++ b/src/interface_implementations/eth_helicopter.jl
@@ -22,13 +22,25 @@ export ETHHelicopter, ETHHelicopterSimulator, AbstractETHHelicopter
 - `control2::AnalogOutput10V = AnalogOutput10V(1)`
 """
 @with_kw struct ETHHelicopter <: PhysicalProcess
-    h::Float64 = 0.05
-    bias::Float64 = 0.0
-    stream::LabStream = ComediStream()
-    measure1::AnalogInput10V = AnalogInput10V(0)
-    measure2::AnalogInput10V = AnalogInput10V(1)
-    control1::AnalogOutput10V = AnalogOutput10V(0)
-    control2::AnalogOutput10V = AnalogOutput10V(1)
+    h::Float64
+    bias::Float64
+    stream::LabStream
+    measure1::AnalogInput10V
+    measure2::AnalogInput10V
+    control1::AnalogOutput10V
+    control2::AnalogOutput10V
+end
+function ETHHelicopter(;
+    h                         = 0.05,
+    bias                      = 0.,
+    stream                    = ComediStream(),
+    measure1::AnalogInput10V  = AnalogInput10V(0),
+    measure2::AnalogInput10V  = AnalogInput10V(1),
+    control1::AnalogOutput10V = AnalogOutput10V(0),
+    control2::AnalogOutput10V = AnalogOutput10V(1))
+    p = new(h,bias,stream,measure1,measure2,control1,control2)
+    init_devices!(p.stream, p.measure1, p.measure2, p.control1, p.control2)
+    p
 end
 
 
@@ -55,15 +67,12 @@ function control(p::ETHHelicopter, u)
     send(p.control2,u[2])
 end
 
-measure(p::ETHHelicopter) = [read(p.measure1), read(p.measure2)] #i=0 for pitch, i=1 for yaw
-
-
+measure(p::ETHHelicopter) = [read(p.measure1), read(p.measure2)]
 control(p::ETHHelicopterSimulator, u)  = error("Not yet implemented")
 measure(p::ETHHelicopterSimulator)     = error("Not yet implemented")
 
 
-
-initialize(p::ETHHelicopter) = init_devices!(p.stream, p.measure1, p.measure2, p.control1, p.control2)
-finalize(p::ETHHelicopter)   = close(p.stream)
+initialize(p::ETHHelicopter)          = nothing
+finalize(p::ETHHelicopter)            = foreach(close, p.stream.devices)
 initialize(p::ETHHelicopterSimulator) = nothing
 finalize(p::ETHHelicopterSimulator)   = nothing