diff --git a/README.md b/README.md
index 2aca568eeceab42d2312b51e947efa885036b927..4870e9799523ebceca07d361e4d615ee3052bee7 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,6 @@
+## News
+2018-12-07: Update to julia v1.0 is ongoing, check branch `julia1`
+
 [![pipeline status](https://gitlab.control.lth.se/processes/LabProcesses.jl/badges/master/pipeline.svg)](https://gitlab.control.lth.se/processes/LabProcesses.jl/commits/master)
 [![coverage report](https://gitlab.control.lth.se/processes/LabProcesses.jl/badges/master/coverage.svg)](https://gitlab.control.lth.se/processes/LabProcesses.jl/commits/master)
 
@@ -37,4 +40,4 @@ och lägga till tre rader som
 
 När .gitlab-ci.yml uppdateras i master triggas en pipline. Om denna lyckas kommer dokumentationen finnas under
 
-http://processes.gitlab.control.lth.se/documentation/myfoldername/
\ No newline at end of file
+http://processes.gitlab.control.lth.se/documentation/myfoldername/
diff --git a/REQUIRE b/REQUIRE
index d5abd45daaab624c5b1cb14ccb404f76c0e1b6d6..ff86b9895ae7badf35f3dcec9383f2520c13e1ea 100644
--- a/REQUIRE
+++ b/REQUIRE
@@ -1,3 +1,4 @@
-julia 0.6
+julia 0.7
 ControlSystems
 Parameters
+DSP
diff --git a/src/LabProcesses.jl b/src/LabProcesses.jl
index e193536820120db4ad968a6e9feca62b01758c73..b2f1a6883365f2159e13f0f8f7edcee54cc82fde 100644
--- a/src/LabProcesses.jl
+++ b/src/LabProcesses.jl
@@ -1,4 +1,5 @@
 # __precompile__()
+using Pkg
 installed_packages = Pkg.installed()
 if "LabConnections" ∉ keys(installed_packages)
 	Pkg.clone("https://gitlab.control.lth.se/cont-frb/LabConnections.jl")
@@ -8,7 +9,7 @@ end
 
 module LabProcesses
 
-using ControlSystems, LabConnections.Computer, Parameters
+using ControlSystems, LabConnections.Computer, Parameters, DSP, LinearAlgebra
 
 include("utilities.jl")
 
diff --git a/src/controllers.jl b/src/controllers.jl
index a6d21b1ae4fc42abe1ae2cdc7c2fac4f81468736..55eb8c43e9e99cb1f78b84616fa305a20752d9af 100644
--- a/src/controllers.jl
+++ b/src/controllers.jl
@@ -27,16 +27,16 @@ function run_control_2DOF(P::AbstractProcess,sysFB, sysFF=nothing; duration = 10
 		rf = sysFF == nothing ? r[:,i] : Gff(r[:,i])
 		e  = rf-y[:,i]
 		ui = Gfb(e)
-		ui + bias(P)
+		ui .+ bias(P)
 	end
 
 	simulation = isa(P, SimulatedProcess)
 	initialize(P)
 	for (i,t) = enumerate(0:h:duration)
 		@periodically h simulation begin
-			y[:,i]     = measure(P)
-			r[:,i]     = reference(t)
-			u[:,i]     = calc_control(i) # y,r must be updated before u
+			y[:,i]    .= measure(P)
+			r[:,i]    .= reference(t)
+			u[:,i]    .= calc_control(i) # y,r must be updated before u
 			control(P, [clamp.(u[j,i], inputrange(P)[j]...) for j=1:nu])
 		end
 	end
diff --git a/src/interface_implementations/ballandbeam.jl b/src/interface_implementations/ballandbeam.jl
index 9ae3da6834ea9c2abb390e2b20f44cf0c66a3dcb..a9e04e2acb96c775c3782050db2c09d4a617d6cf 100644
--- a/src/interface_implementations/ballandbeam.jl
+++ b/src/interface_implementations/ballandbeam.jl
@@ -48,7 +48,7 @@ const beam_system, nice_beam_controller = define_beam_system()
 struct BeamSimulator <: SimulatedProcess
     h::Float64
     s::SysFilter
-    BeamSimulator(;h::Real = 0.01) = new(Float64(h), SysFilter(beam_system, h))
+    BeamSimulator(;h::Real = 0.01, bias=0) = new(Float64(h), SysFilter(beam_system, h))
 end
 
 struct BallAndBeam <: PhysicalProcess
@@ -96,7 +96,7 @@ bias(p::BallAndBeamSimulator)            = 0
 
 function control(p::AbstractBeamOrBallAndBeam, u::AbstractArray)
     length(u) == 1 || error("Process $(typeof(p)) only accepts one control signal, tried to send u=$u.")
-    send(p.control,u[1])
+    control(p,u[1])
 end
 control(p::AbstractBeamOrBallAndBeam, u::Number) = send(p.control,u)
 control(p::BeamSimulator, u::Number)             = p.s(u)
@@ -104,7 +104,7 @@ control(p::BallAndBeamSimulator, u::Number)      = error("Not yet implemented")
 
 measure(p::Beam)                         = read(p.measure)
 measure(p::BallAndBeam)                  = [read(p.measure1), read(p.measure2)]
-measure(p::BeamSimulator)                = vecdot(p.s.sys.C,p.s.state)
+measure(p::BeamSimulator)                = dot(p.s.sys.C,p.s.state)
 measure(p::BallAndBeamSimulator)         = error("Not yet implemented")
 
 
diff --git a/src/interface_implementations/define_beam_system.jl b/src/interface_implementations/define_beam_system.jl
index 5aba53bb0a0869175490a92c9245dac0db997a96..76365fa6e4b9599118ccc32aec093bd3e38a30eb 100644
--- a/src/interface_implementations/define_beam_system.jl
+++ b/src/interface_implementations/define_beam_system.jl
@@ -1,4 +1,4 @@
-using ControlSystems
+using ControlSystems, DSP
 
 """
     beammodel, beamcontroller = define_beam_system(;doplot=false)
diff --git a/src/utilities.jl b/src/utilities.jl
index 3b4d1f2ffe14df0930d372b7bcf9e2515a208b87..6ae5a9df5c63e2e9ad3f86c700fcb2bdaa0e5c2e 100644
--- a/src/utilities.jl
+++ b/src/utilities.jl
@@ -9,7 +9,7 @@ macro periodically(h, body)
 		local start_time = time()
 		$(esc(body))
 		local execution_time = time()-start_time
-		sleep(max(0,$(esc(h))-execution_time))
+		Libc.systemsleep(max(0,$(esc(h))-execution_time))
 	end
 end
 
@@ -37,22 +37,22 @@ Create a SysFilter object that can be used to implement control loops and simula
 with LTI systems, i.e., `U(z) = C(z)E(z)`. To filter a signal `u` through the filter,
 call like `y = Csf(u)`. Calculates the filtered output `y` in `y = Cx+Du, x'=Ax+Bu`
 """
-struct SysFilter
-	sys::StateSpace
+struct SysFilter{T<:StateSpace}
+	sys::T
 	state::Vector{Float64}
 	function SysFilter(sys::StateSpace, state::AbstractVector)
 		@assert !ControlSystems.iscontinuous(sys) "Can not filter using continuous time model."
 		@assert length(state) == sys.nx "length(state) != sys.nx"
-		new(sys, state)
+		new{typeof(sys)}(sys, state)
 	end
 	function SysFilter(sys::StateSpace)
 		@assert !ControlSystems.iscontinuous(sys) "Can not filter using continuous time model. Supply sample time."
-		new(sys, init_sysfilter(sys))
+		new{typeof(sys)}(sys, init_sysfilter(sys))
 	end
 	function SysFilter(sys::StateSpace, h::Real)
 		@assert ControlSystems.iscontinuous(sys) "Sample time supplied byt system model is already in discrete time."
 		sysd = c2d(sys, h)[1]
-		new(sysd, init_sysfilter(sysd))
+		new{typeof(sysd)}(sysd, init_sysfilter(sysd))
 	end
 end
 (s::SysFilter)(input) = sysfilter!(s.state, s.sys, input)
diff --git a/test/runtests.jl b/test/runtests.jl
index 20189a9389e479138cbffcab42609fc1e55188d0..75039e2a0c8cd0d274b56e006839c039b87e52a8 100644
--- a/test/runtests.jl
+++ b/test/runtests.jl
@@ -1,5 +1,5 @@
-using LabProcesses, ControlSystems
-using Base.Test
+using LabProcesses, ControlSystems, DSP
+using Test
 
 # Reference generators
 r = PRBSGenerator(Int(4))
@@ -8,14 +8,14 @@ seq = [r() for i = 1:10]
 foreach(r,1:10_000)
 
 function test_sysfilter()
-        N = 10
-        u = randn(N)
-        b = [1, 1]
-        a = [1, 0.1, 1]
-	  sys = ss(tf(b,a,1))
+	N     = 10
+	u     = randn(N)
+	b     = [1, 1]
+	a     = [1, 0.1, 1]
+	sys   = ss(tf(b,a,1))
 	state = init_sysfilter(sys)
-       yf = filt(b,a,u)
-	  yff = similar(yf)
+	yf    = filt(b,a,u)
+	yff   = similar(yf)
 	for i in eachindex(u)
 		yff[i] = sysfilter!(state, sys, u[i])[1]
 	end