diff --git a/bazel_tools/docker.bzl b/bazel_tools/docker.bzl
deleted file mode 100644
index b45c72c..0000000
--- a/bazel_tools/docker.bzl
+++ /dev/null
@@ -1,56 +0,0 @@
-__PUSH_TO_DEV_TMPL = """
-#!/bin/sh
-set -eE -o functrace
-# --- begin runfiles.bash initialization ---
-# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash).
-set -euo pipefail
-if [[ ! -d "\$${{RUNFILES_DIR:-/dev/null}}" && ! -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then
-    if [[ -f "\$$0.runfiles_manifest" ]]; then
-        export RUNFILES_MANIFEST_FILE="\$$0.runfiles_manifest"
-    elif [[ -f "\$$0.runfiles/MANIFEST" ]]; then
-        export RUNFILES_MANIFEST_FILE="\$$0.runfiles/MANIFEST"
-    elif [[ -f "\$$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-        export RUNFILES_DIR="\$$0.runfiles"
-    fi
-fi
-if [[ -f "\$${{RUNFILES_DIR:-/dev/null}}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-    source "\$${{RUNFILES_DIR}}/bazel_tools/tools/bash/runfiles/runfiles.bash"
-elif [[ -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then
-    source "\$$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
-    	                 "\$$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
-else
-    echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
-    exit 1
-fi
-# --- end runfiles.bash initialization ---
-IMAGE="{registry}/{image}:{tag}"
-DOCKERFILE=\$$(rlocation __main__/{package}/{dockerfile})
-docker build \
-      --tag=\$$IMAGE \
-      --file=\$$DOCKERFILE \
-      \$$(dirname "\$$DOCKERFILE")
-docker push \$$IMAGE
-"""
-
-def docker_image(name, registry, image, tag, dockerfile, srcs, **kwargs):
-    native.genrule(
-        name = "%s.sh" % name,
-        executable = False,
-        outs = ["build_and_push.sh"],
-        cmd = """cat > $@ <<EOM
-%s
-EOM
-""" % __PUSH_TO_DEV_TMPL.format(
-            registry = registry,
-            image = image,
-            tag = tag,
-            dockerfile = dockerfile,
-            package = native.package_name(),
-        ),
-    )
-    native.sh_binary(
-        name = name,
-        srcs = ["build_and_push.sh"],
-        data = srcs + [dockerfile],
-        deps = ["@bazel_tools//tools/bash/runfiles"],
-    )
diff --git a/bazel_tools/helm.bzl b/bazel_tools/helm.bzl
deleted file mode 100644
index 8635257..0000000
--- a/bazel_tools/helm.bzl
+++ /dev/null
@@ -1,80 +0,0 @@
-__HELM_INSTALL_TMPL = """
-#!/bin/sh
-# --- begin runfiles.bash initialization ---
-# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash).
-set -euo pipefail
-if [[ ! -d "\$${{RUNFILES_DIR:-/dev/null}}" && ! -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then
-    if [[ -f "\$$0.runfiles_manifest" ]]; then
-        export RUNFILES_MANIFEST_FILE="\$$0.runfiles_manifest"
-    elif [[ -f "\$$0.runfiles/MANIFEST" ]]; then
-        export RUNFILES_MANIFEST_FILE="\$$0.runfiles/MANIFEST"
-    elif [[ -f "\$$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-        export RUNFILES_DIR="\$$0.runfiles"
-    fi
-fi
-if [[ -f "\$${{RUNFILES_DIR:-/dev/null}}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
-    source "\$${{RUNFILES_DIR}}/bazel_tools/tools/bash/runfiles/runfiles.bash"
-elif [[ -f "\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then
-    source "\$$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
-    	                 "\$$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
-else
-    echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
-    exit 1
-fi
-# --- end runfiles.bash initialization ---
-CHART_TARBALL=\$$(rlocation __main__/{package}/{chart})
-helm --namespace={namespace} install --create-namespace {release_name} \$$CHART_TARBALL {args}
-"""
-
-__HELM_UNINSTALL_TMPL = """
-helm --namespace={namespace} uninstall {release_name}
-"""
-
-def helm_install(name, namespace, release_name, chart, args):
-    args_str = ""
-    for arg, value in args.items():
-        args_str += "--set %s=%s " % (arg, value)
-    native.genrule(
-        name = "%s.sh" % name,
-        executable = False,
-        srcs = [chart],
-        outs = ["helm_install.sh"],
-        cmd = """cat > $@ <<EOM
-%s
-EOM
-""" % __HELM_INSTALL_TMPL.format(
-            namespace = namespace,
-            release_name = release_name,
-            package = native.package_name(),
-            chart = "%s.tar.gz" % chart.split(":")[1],
-            args = args_str,
-        ),
-    )
-    native.sh_binary(
-        name = name,
-        srcs = ["helm_install.sh"],
-        data = [
-            chart,
-        ],
-        deps = [
-            "@bazel_tools//tools/bash/runfiles",
-        ],
-    )
-
-def helm_uninstall(name, namespace, release_name):
-    native.genrule(
-        name = "%s.sh" % name,
-        executable = False,
-        outs = ["helm_uninstall.sh"],
-        cmd = """cat > $@ <<EOM
-%s
-EOM
-""" % __HELM_UNINSTALL_TMPL.format(
-            namespace = namespace,
-            release_name = release_name,
-        ),
-    )
-    native.sh_binary(
-        name = name,
-        srcs = ["helm_uninstall.sh"],
-    )
diff --git a/core/vpn/in_memory_manager.go b/core/vpn/in_memory_manager.go
index eef4097..3f12635 100644
--- a/core/vpn/in_memory_manager.go
+++ b/core/vpn/in_memory_manager.go
@@ -183,7 +183,7 @@
 	m.lock.Lock()
 	defer m.lock.Unlock()
 	if d, ok := m.keyToDevices[pubKey]; ok {
-		return m.genNetworkMap(d), nil
+		return m.genNetworkMap(d)
 	}
 	return nil, errorDeviceNotFound(pubKey)
 }
@@ -209,12 +209,12 @@
 	}
 }
 
-func (m *InMemoryManager) genNetworkMap(d *types.DeviceInfo) *types.NetworkMap {
+func (m *InMemoryManager) genNetworkMap(d *types.DeviceInfo) (*types.NetworkMap, error) {
 	vpnIP, err := m.ipm.Get(d.PublicKey)
 	// NOTE(giolekva): Should not happen as devices must have been already registered and assigned IP address.
 	// Maybe should return error anyways instead of panic?
 	if err != nil {
-		panic(err)
+		return nil, err
 	}
 	ret := types.NetworkMap{
 		Self: types.Node{
@@ -243,5 +243,5 @@
 			})
 		}
 	}
-	return &ret
+	return &ret, nil
 }
diff --git a/core/vpn/manager.go b/core/vpn/manager.go
index 13f1d09..d0d3ef0 100644
--- a/core/vpn/manager.go
+++ b/core/vpn/manager.go
@@ -25,7 +25,7 @@
 	AddDeviceToGroup(pubKey types.PublicKey, id types.GroupID) (*types.NetworkMap, error)
 	// Removes device from the group and returns updated network configuration.
 	RemoveDeviceFromGroup(pubKey types.PublicKey, id types.GroupID) (*types.NetworkMap, error)
-	// Returns network configuration for a device with give public key.
+	// Returns network configuration for a device with a given public key.
 	// Result of this call must be encrypted with the same public key before
 	// sending it back to the client, so only the owner of it's corresponding
 	// private key is able to decrypt and use it.
