diff --git a/src/BeagleBone/BeagleBone.jl b/src/BeagleBone/BeagleBone.jl
index db415c95304114cb39a9c48525846264ff60e334..95e7acaeac008043d582696c7d30485368a09f54 100644
--- a/src/BeagleBone/BeagleBone.jl
+++ b/src/BeagleBone/BeagleBone.jl
@@ -152,6 +152,18 @@ function bbparse(l::Tuple, sock)
     end
 end
 
+function close_all_devices()
+    # When connection fails or closes, close devices
+    for key in keys(DEVICES)
+        for (devkey, active_device) in active_devices[key]
+            println("teardown $active_device")
+            teardown(active_device)
+            #Remove the device from the dict of active devices
+            delete!(active_devices[key], devkey)
+        end
+    end
+end
+
 global __waiting_first_connection__ = false
 """
     run_server(port=2001; debug=false)
@@ -181,8 +193,8 @@ function run_server(port=2001; debug=false)
             @async while isopen(sock)
                 try
                     l = deserialize(sock);
-                    println("deserialized:")
-                    println(l)
+                    # println("deserialized:")
+                    # println(l)
                     try
                         bbparse(l, sock)
                     catch err
@@ -192,7 +204,7 @@ function run_server(port=2001; debug=false)
                 catch err
                     if !isopen(sock) && (isa(err, Base.EOFError) || isa(err, Base.UVError))
                         println("Connection to server closed")
-                        # TODO teardown and remove all devices
+                        close_all_devices()
                     else
                         println("error: $(typeof(err))")
                         println("err: $err")
@@ -201,10 +213,11 @@ function run_server(port=2001; debug=false)
                 end
             end
         catch err
+            close_all_devices()
             if isa(err,Base.UVError) && err.prefix == "accept"
                 println("Server closed successfully")
             else
-                rethrow()
+                rethrow(err)
             end
         end
     end
diff --git a/src/BeagleBone/GPIO.jl b/src/BeagleBone/GPIO.jl
index f71d78ff2fff8400a64f17c4b5277d61ca4dea89..662f7610c6b847447853d046a4b58250af84aea7 100644
--- a/src/BeagleBone/GPIO.jl
+++ b/src/BeagleBone/GPIO.jl
@@ -64,7 +64,7 @@ end
 
 # Default to reading "value"
 function read(gpio::GPIO, debug::Bool=false)
-  read(gpio, GPIO_VALUE, debug=debug)
+  read(gpio, GPIO_VALUE, debug)
 end
 """
     l = read(gpio::GPIO, operation::Int32, debug::Bool=false)
diff --git a/src/BeagleBone/precompile.jl b/src/BeagleBone/precompile.jl
index 77862a61335bf4b9ac1351118e7a6a1eec38a1c5..3dac1e719b565ccb8f4cce9030a17bb1e9ae52c3 100644
--- a/src/BeagleBone/precompile.jl
+++ b/src/BeagleBone/precompile.jl
@@ -8,26 +8,38 @@ function precompile_bb()
     #Precompile serialize
     initdev("debug", Int32(1))
 
-    serialize(clientside, (true, Int32(2), ("debug", Int32(1), true), ("debug", Int32(1), (1,2.0,"asd"))))
-    serialize(clientside, (true, Int32(2), ("debug", Int32(1), Int32(1)), ("debug", Int32(1), 1.0)))
-    serialize(clientside, (false, Int32(2),    ("debug", Int32(1)), ("debug", Int32(1))))
-
-    serialize(clientside, (true, Int32(1), ("debug", Int32(1), true)))
-    serialize(clientside, (false, Int32(1), ("debug", Int32(1))))
-    serialize(clientside, (true, Int32(4), ("debug", Int32(1), true), ("debug", Int32(2), false), ("debug", Int32(3), true), ("debug", Int32(4), false)))
-
+    serialize(clientside, (WRITE, Int32(2), ("debug", Int32(1), true), ("debug", Int32(1), (1,2.0,"asd"))))
+    serialize(clientside, (WRITE, Int32(2), ("debug", Int32(1), Int32(1)), ("debug", Int32(1), 1.0)))
+    serialize(clientside, (READ, Int32(2),    ("debug", Int32(1)), ("debug", Int32(1))))
+
+    serialize(clientside, (WRITE, Int32(1), ("debug", Int32(1), true)))
+    serialize(clientside, (READ, Int32(1), ("debug", Int32(1))))
+    initdev("debug", Int32(2))
+    initdev("debug", Int32(3))
+    initdev("debug", Int32(4))
+    serialize(clientside, (WRITE, Int32(4), ("debug", Int32(1), true), ("debug", Int32(2), false), ("debug", Int32(3), true), ("debug", Int32(4), false)))
+
+    closedev("debug", Int32(1))
+    closedev("debug", Int32(2))
+    closedev("debug", Int32(3))
+    closedev("debug", Int32(4))
+
+    println("closing clientside")
     # Close the client side
     close(clientside)
 
+    println("closing server")
     #Close server
     close(server)
 
     debug = true
-
+    println("initdev")
     #Precompile SysLED
     led = initdev("sysled",Int32(1))
     write!(led, "1", debug)
     read(led, debug)
+    println("closedev")
+    closedev("sysled", Int32(1))
 
     ind = 1
     println("False: $(ind ∉ [1,2,3,4])")
@@ -36,11 +48,13 @@ function precompile_bb()
     gpio = initdev("gpio",Int32(1))
 
     write!(gpio, (Int32(1), "1"), debug)
+    closedev("gpio", Int32(1))
     #read(gpio, ind, args, debug)
 
+    # TODO activate when pwn is working
     # Precompile PWM
-    pwm = initdev("pwm", Int32(1))
-    write!(pwm, (Int32(1),"1"), debug)
+    #pwm = initdev("pwm", Int32(1))
+    #write!(pwm, (Int32(1),"1"), debug)
 
     #Do read/write to file
     val = true
diff --git a/src/BeagleBone/startup/juliaserver.service b/src/BeagleBone/startup/juliaserver.service
index 27861b30df00eb22a86f4666d266e10e35414456..aa7d285331827ab9cd07a7fc8c74ddd146f65a6e 100644
--- a/src/BeagleBone/startup/juliaserver.service
+++ b/src/BeagleBone/startup/juliaserver.service
@@ -2,7 +2,7 @@
 Description=JuliaServer service
 
 [Service]
-ExecStart=/home/debian/julia/bin/julia -i -e 'include("/home/debian/juliapackages/LabConnections/src/BeagleBone/startup/startup.jl")' &
+ExecStart=/usr/bin/screen -Dm /home/debian/julia/bin/julia -i -e 'include("/home/debian/juliapackages/LabConnections/src/BeagleBone/startup/startup.jl")' &
 
 [Install]
 WantedBy=multi-user.target