diff --git a/check/controls.go b/check/controls.go
index 4e7cde54a69a84a6bbf6922772c4460f1da6d661..dfea0067178a0b1436669852993716d572104ae9 100644
--- a/check/controls.go
+++ b/check/controls.go
@@ -17,7 +17,6 @@ package check
 import (
 	"encoding/json"
 	"fmt"
-	"os"
 
 	yaml "gopkg.in/yaml.v2"
 )
@@ -46,19 +45,16 @@ type Summary struct {
 }
 
 // NewControls instantiates a new master Controls object.
-func NewControls(t NodeType, in []byte) *Controls {
-	var err error
+func NewControls(t NodeType, in []byte) (*Controls, error) {
 	c := new(Controls)
 
-	err = yaml.Unmarshal(in, c)
+	err := yaml.Unmarshal(in, c)
 	if err != nil {
-		fmt.Fprintf(os.Stderr, "%s\n", err)
-		os.Exit(1)
+		return nil, fmt.Errorf("failed to unmarshal YAML: %s", err)
 	}
 
 	if t != c.Type {
-		fmt.Fprintf(os.Stderr, "non-%s controls file specified\n", t)
-		os.Exit(1)
+		return nil, fmt.Errorf("non-%s controls file specified", t)
 	}
 
 	// Prepare audit commands
@@ -68,7 +64,7 @@ func NewControls(t NodeType, in []byte) *Controls {
 		}
 	}
 
-	return c
+	return c, nil
 }
 
 // RunGroup runs all checks in a group.
diff --git a/check/test_test.go b/check/test_test.go
index 8e495cc1e78190a8f096eed9d4ce519906b12afe..76774f9f55362dd60101f54e2a670ef6d72607f0 100644
--- a/check/test_test.go
+++ b/check/test_test.go
@@ -30,7 +30,10 @@ func init() {
 	if err != nil {
 		panic("Failed reading test data: " + err.Error())
 	}
-	controls = NewControls(MASTER, in)
+	controls, err = NewControls(MASTER, in)
+	if err != nil {
+		panic("Failed creating test controls: " + err.Error())
+	}
 }
 
 func TestTestExecute(t *testing.T) {
diff --git a/cmd/common.go b/cmd/common.go
index 63940d4cf2e2152ea86abd8e712ef000b4e2099e..8362ea29236a4d1951b02a0dad749e2139687e7d 100644
--- a/cmd/common.go
+++ b/cmd/common.go
@@ -88,7 +88,7 @@ func runChecks(t check.NodeType) {
 
 	in, err := ioutil.ReadFile(file)
 	if err != nil {
-		fmt.Fprintf(os.Stderr, "error opening %s controls file: %s\n", t, err)
+		fmt.Fprintf(os.Stderr, "error opening %s controls file: %v\n", t, err)
 		os.Exit(1)
 	}
 
@@ -97,7 +97,11 @@ func runChecks(t check.NodeType) {
 	s = strings.Replace(s, "$etcdConfDir", viper.Get("etcdConfDir").(string), -1)
 	s = strings.Replace(s, "$flanneldConfDir", viper.Get("flanneldConfDir").(string), -1)
 
-	controls := check.NewControls(t, []byte(s))
+	controls, err := check.NewControls(t, []byte(s))
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "error setting up %s controls: %v\n", t, err)
+		os.Exit(1)
+	}
 
 	if groupList != "" && checkList == "" {
 		ids := cleanIDs(groupList)