diff --git a/env_options.go b/env_options.go
index 2016ff81..b918428e 100644
--- a/env_options.go
+++ b/env_options.go
@@ -6,7 +6,9 @@ import (
 	"strings"
 )
 
-func LoadOptionsFromEnv(options interface{}, cfg map[string]interface{}) {
+type EnvOptions map[string]interface{}
+
+func (cfg EnvOptions) LoadEnvForStruct(options interface{}) {
 	val := reflect.ValueOf(options).Elem()
 	typ := val.Type()
 	for i := 0; i < typ.NumField(); i++ {
diff --git a/env_options_test.go b/env_options_test.go
new file mode 100644
index 00000000..354dc424
--- /dev/null
+++ b/env_options_test.go
@@ -0,0 +1,26 @@
+package main
+
+import (
+	"os"
+	"testing"
+
+	"github.com/bmizerany/assert"
+)
+
+type envTest struct {
+	testField string `cfg:"target_field" env:"TEST_ENV_FIELD"`
+}
+
+func TestLoadEnvForStruct(t *testing.T) {
+
+	cfg := make(EnvOptions)
+	cfg.LoadEnvForStruct(&envTest{})
+
+	_, ok := cfg["target_field"]
+	assert.Equal(t, ok, false)
+
+	os.Setenv("TEST_ENV_FIELD", "1234abcd")
+	cfg.LoadEnvForStruct(&envTest{})
+	v := cfg["target_field"]
+	assert.Equal(t, v, "1234abcd")
+}
diff --git a/main.go b/main.go
index 3f910965..31accf6c 100644
--- a/main.go
+++ b/main.go
@@ -48,14 +48,14 @@ func main() {
 
 	opts := NewOptions()
 
-	var cfg map[string]interface{}
+	cfg := make(EnvOptions)
 	if *config != "" {
 		_, err := toml.DecodeFile(*config, &cfg)
 		if err != nil {
 			log.Fatalf("ERROR: failed to load config file %s - %s", *config, err)
 		}
 	}
-	LoadOptionsFromEnv(opts, cfg)
+	cfg.LoadEnvForStruct(opts)
 	options.Resolve(opts, flagSet, cfg)
 
 	err := opts.Validate()