diff --git a/actions/param_set.go b/actions/param_set.go
index d7b706964be6ece2e4b814bddc4422bdc1d02f44..5eceef47307ad6c50a1a8e2264313f9e2801e5f9 100644
--- a/actions/param_set.go
+++ b/actions/param_set.go
@@ -16,6 +16,7 @@
 package actions
 
 import (
+	"strconv"
 	"strings"
 
 	"github.com/ksonnet/ksonnet/component"
@@ -100,14 +101,18 @@ func NewParamSet(ksApp app.App, name, path, value string, opts ...ParamSetOpt) (
 
 // Run runs the action.
 func (ps *ParamSet) Run() error {
-
 	value, err := params.DecodeValue(ps.rawValue)
 	if err != nil {
 		return errors.Wrap(err, "value is invalid")
 	}
 
+	evaluatedValue := ps.rawValue
+	if _, ok := value.(string); ok {
+		evaluatedValue = strconv.Quote(ps.rawValue)
+	}
+
 	if ps.envName != "" {
-		return ps.setEnv(ps.app, ps.envName, ps.name, ps.rawPath, ps.rawValue)
+		return ps.setEnv(ps.app, ps.envName, ps.name, ps.rawPath, evaluatedValue)
 	}
 
 	path := strings.Split(ps.rawPath, ".")
diff --git a/metadata/params/params.go b/metadata/params/params.go
index da12d76f89dd78fa6830eb065bc4f1aedc09d204..014130a0062da1d015c4eaf84e19daad77d5b91f 100644
--- a/metadata/params/params.go
+++ b/metadata/params/params.go
@@ -63,6 +63,8 @@ func findComponentsObj(node ast.Node) (*ast.Object, error) {
 			}
 		}
 		return nil, fmt.Errorf("Invalid params schema -- there must be a top-level object '%s'", componentsID)
+	case *ast.ApplyBrace:
+		return findComponentsObj(n.Right)
 	}
 	return nil, fmt.Errorf("Invalid params schema -- did not expect node type: %T", node)
 }