diff --git a/cmd/common.go b/cmd/common.go
index 89f45bc4883faec29db8af16b60f7f5411408827..1200d4ec52ca5c3c44a9647c7df430d54627d453 100644
--- a/cmd/common.go
+++ b/cmd/common.go
@@ -90,7 +90,9 @@ func runChecks(t check.NodeType) {
 		file = federatedFile
 	}
 
-	in, err := ioutil.ReadFile(file)
+	ver := getKubeVersion()
+	path := fmt.Sprintf("%s/%s/%s", cfgDir, ver.Server, file)
+	in, err := ioutil.ReadFile(path)
 	if err != nil {
 		exitWithError(fmt.Errorf("error opening %s controls file: %v", t, err))
 	}
diff --git a/cmd/federated.go b/cmd/federated.go
index 1ebc2511e49589a4c358600785eaad9c2d8097a8..0f9dbf32030b872d04b5895e4221a3fbe2470545 100644
--- a/cmd/federated.go
+++ b/cmd/federated.go
@@ -33,7 +33,7 @@ func init() {
 	federatedCmd.PersistentFlags().StringVarP(&federatedFile,
 		"file",
 		"f",
-		cfgDir+"/federated.yaml",
+		"/federated.yaml",
 		"Alternative YAML file for federated checks",
 	)
 
diff --git a/cmd/master.go b/cmd/master.go
index b702615b39a317f311d27e42b67b5ec8a2947634..1659d38549f6bd473d5b6945561fe69f8b7f1fab 100644
--- a/cmd/master.go
+++ b/cmd/master.go
@@ -33,7 +33,7 @@ func init() {
 	masterCmd.PersistentFlags().StringVarP(&masterFile,
 		"file",
 		"f",
-		cfgDir+"/master.yaml",
+		"/master.yaml",
 		"Alternative YAML file for master checks",
 	)
 
diff --git a/cmd/node.go b/cmd/node.go
index 9ea68bab8b4adbdc011e29df0623a6c503fa3c8c..b07ed7e0df1cc21d86916beac73f742a3d2af037 100644
--- a/cmd/node.go
+++ b/cmd/node.go
@@ -33,7 +33,7 @@ func init() {
 	nodeCmd.PersistentFlags().StringVarP(&nodeFile,
 		"file",
 		"f",
-		cfgDir+"/node.yaml",
+		"/node.yaml",
 		"Alternative YAML file for node checks",
 	)
 
diff --git a/cmd/util.go b/cmd/util.go
index 478ae21ce75796cfff0834afbe75575b312ee009..fa926d8db0144dfa4e38b2f9ff1fefad68697282 100644
--- a/cmd/util.go
+++ b/cmd/util.go
@@ -159,3 +159,38 @@ func multiWordReplace(s string, subname string, sub string) string {
 
 	return strings.Replace(s, subname, sub, -1)
 }
+
+type version struct {
+	Server string
+	Client string
+}
+
+func getKubeVersion() *version {
+	ver := new(version)
+	// These executables might not be on the user's path.
+	_, err := exec.LookPath("kubectl")
+	if err != nil {
+		s := fmt.Sprintf("Kubernetes version check skipped with error %v", err)
+		continueWithError(err, sprintlnWarn(s))
+		return nil
+	}
+
+	cmd := exec.Command("kubectl", "version")
+	out, err := cmd.Output()
+	if err != nil {
+		s := fmt.Sprintf("Kubernetes version check skipped, with error getting kubectl version")
+		continueWithError(err, sprintlnWarn(s))
+		return nil
+	}
+
+	clientVerRe := regexp.MustCompile(`Client.*Major:"(\d+)".*Minor:"(\d+)"`)
+	svrVerRe := regexp.MustCompile(`Server.*Major:"(\d+)".*Minor:"(\d+)"`)
+
+	sub := clientVerRe.FindStringSubmatch(string(out))
+	ver.Client = sub[1] + "." + sub[2]
+
+	sub = svrVerRe.FindStringSubmatch(string(out))
+	ver.Server = sub[1] + "." + sub[2]
+
+	return ver
+}
diff --git a/cmd/util_test.go b/cmd/util_test.go
index dbd434b533e04ab68631670bb21a737fcdbe085f..40994a1a52a448d196efffd709263eb7eb9c63da 100644
--- a/cmd/util_test.go
+++ b/cmd/util_test.go
@@ -129,3 +129,18 @@ func TestMultiWordReplace(t *testing.T) {
 		})
 	}
 }
+
+func TestGetKubeVersion(t *testing.T) {
+	ver := getKubeVersion()
+	if ver == nil {
+		t.Log("Expected non nil version info.")
+	} else {
+		if ok, err := regexp.MatchString(`\d+.\d+`, ver.Client); !ok && err != nil {
+			t.Logf("Expected:%v got %v\n", "n.m", ver.Client)
+		}
+
+		if ok, err := regexp.MatchString(`\d+.\d+`, ver.Server); !ok && err != nil {
+			t.Logf("Expected:%v got %v\n", "n.m", ver.Server)
+		}
+	}
+}