diff --git a/viper.go b/viper.go
index 44f3819..38bd17d 100644
--- a/viper.go
+++ b/viper.go
@@ -107,20 +107,23 @@
 }
 
 // Marshals the config into a Struct
-func Marshal(rawVal interface{}) (err error) {
-	err = mapstructure.Decode(defaults, rawVal)
+func Marshal(rawVal interface{}) error {
+	err := mapstructure.Decode(defaults, rawVal)
 	if err != nil {
-		return
+		return err
 	}
 	err = mapstructure.Decode(config, rawVal)
 	if err != nil {
-		return
+		return err 
 	}
 	err = mapstructure.Decode(override, rawVal)
 	if err != nil {
-		return
+		return err
 	}
-	return
+
+	insensativiseMaps()
+
+	return nil
 }
 
 // Bind a specific key to a flag (as used by cobra)
@@ -224,7 +227,23 @@
 	alias = strings.ToLower(alias)
 	if alias != key && alias != realKey(key) {
 		_, exists := aliases[alias]
+
 		if !exists {
+			// if we alias something that exists in one of the maps to another
+			// name, we'll never be able to get that value using the original
+			// name, so move the config value to the new realkey.
+			if val, ok := config[alias]; ok {
+				delete(config, alias)
+				config[key] = val
+			}
+			if val, ok := defaults[alias]; ok {
+				delete(defaults, alias)
+				defaults[key] = val
+			}
+			if val, ok := override[alias]; ok {
+				delete(override, alias)
+				override[key] = val
+			}
 			aliases[alias] = key
 		}
 	} else {
@@ -310,17 +329,26 @@
 		}
 	}
 
-	insensativiseMap()
+	insensativiseMap(config)
 }
 
-func insensativiseMap() {
-	for key, _ := range config {
-		if key != strings.ToLower(key) {
-			registerAlias(key, key)
+func insensativiseMaps() {
+	insensativiseMap(config)
+	insensativiseMap(defaults)
+	insensativiseMap(override)
+}
+
+func insensativiseMap(m map[string]interface{}) {
+	for key, val := range m {
+		lower := strings.ToLower(key)
+		if key != lower {
+			delete(m, key)
+			m[lower] = val
 		}
 	}
 }
 
+
 // Name for the config file.
 // Does not include extension.
 func SetConfigName(in string) {
diff --git a/viper_test.go b/viper_test.go
index b077b5b..ad20da8 100644
--- a/viper_test.go
+++ b/viper_test.go
@@ -21,7 +21,9 @@
 clothing:
   jacket: leather
   trousers: denim
-age: 35`)
+age: 35
+beard: true
+`)
 
 var tomlExample = []byte(`
 title = "TOML Example"
@@ -87,6 +89,15 @@
 	assert.Equal(t, 45, Get("age"))
 }
 
+func TestAliasInConfigFile(t *testing.T) {
+	// the config file specifies "beard".  If we make this an alias for
+	// "hasbeard", we still want the old config file to work with beard.
+	RegisterAlias("beard", "hasbeard")
+	assert.Equal(t, true, Get("hasbeard"))
+	Set("hasbeard", false)
+	assert.Equal(t, false, Get("beard"))
+}
+
 func TestYML(t *testing.T) {
 	Reset()
 	SetConfigType("yml")
@@ -153,4 +164,4 @@
 		t.Fatalf("unable to decode into struct, %v", err)
 	}
 	assert.Equal(t, &C, &config{Name: "Steve", Port: 1234})
-}
+}
\ No newline at end of file
