Better binding to Pflag
diff --git a/viper.go b/viper.go
index 2037881..709349c 100644
--- a/viper.go
+++ b/viper.go
@@ -123,7 +123,15 @@
 		return fmt.Errorf("flag for %q is nil", key)
 	}
 	pflags[key] = flag
-	SetDefault(key, flag.Value.String())
+
+	switch flag.Value.Type() {
+	case "int", "int8", "int16", "int32", "int64":
+		SetDefault(key, cast.ToInt(flag.Value.String()))
+	case "bool":
+		SetDefault(key, cast.ToBool(flag.Value.String()))
+	default:
+		SetDefault(key, flag.Value.String())
+	}
 	return nil
 }