Adding Support for Environment variable prefixes
diff --git a/viper.go b/viper.go
index f942d92..d075a95 100644
--- a/viper.go
+++ b/viper.go
@@ -74,6 +74,7 @@
 	configName string
 	configFile string
 	configType string
+	envPrefix  string
 
 	config   map[string]interface{}
 	override map[string]interface{}
@@ -125,6 +126,22 @@
 	}
 }
 
+// Define a prefix that ENVIRONMENT variables will use.
+func SetEnvPrefix(in string) { v.SetEnvPrefix(in) }
+func (v *viper) SetEnvPrefix(in string) {
+	if in != "" {
+		v.envPrefix = in
+	}
+}
+
+func (v *viper) mergeWithEnvPrefix(in string) string {
+	if v.envPrefix != "" {
+		return v.envPrefix + "_" + in
+	}
+
+	return in
+}
+
 // Return the config file used
 func ConfigFileUsed() string            { return v.ConfigFileUsed() }
 func (v *viper) ConfigFileUsed() string { return v.configFile }
@@ -342,6 +359,7 @@
 // Binds a viper key to a ENV variable
 // ENV variables are case sensitive
 // If only a key is provided, it will use the env key matching the key, uppercased.
+// EnvPrefix will be used when set when env name is not provided.
 func BindEnv(input ...string) (err error) { return v.BindEnv(input...) }
 func (v *viper) BindEnv(input ...string) (err error) {
 	var key, envkey string
@@ -352,7 +370,7 @@
 	key = strings.ToLower(input[0])
 
 	if len(input) == 1 {
-		envkey = strings.ToUpper(key)
+		envkey = strings.ToUpper(v.mergeWithEnvPrefix(key))
 	} else {
 		envkey = input[1]
 	}