diff --git a/cmd/root.go b/cmd/root.go
index 331621c..4831c7b 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -36,10 +36,10 @@
 var stderr = ""
 var stdout = ""
 var RootCmd = &cobra.Command{
-	Use:   "wskdeploy",
-    SilenceErrors: true,
-    SilenceUsage: true,
-	Short: "A tool set to help deploy your openwhisk packages in batch.",
+	Use:           "wskdeploy",
+	SilenceErrors: true,
+	SilenceUsage:  true,
+	Short:         "A tool set to help deploy your openwhisk packages in batch.",
 	Long: `A tool to deploy openwhisk packages with a manifest and/or deployment yaml file.
 
 wskdeploy without any commands or flags deploys openwhisk package in the current directory if manifest.yaml exists.
@@ -111,7 +111,7 @@
 	RootCmd.Flags().StringVarP(&utils.Flags.ProjectPath, "project", "p", ".", "path to serverless project")
 	RootCmd.Flags().StringVarP(&utils.Flags.ManifestPath, "manifest", "m", "", "path to manifest file")
 	RootCmd.Flags().StringVarP(&utils.Flags.DeploymentPath, "deployment", "d", "", "path to deployment file")
-	RootCmd.PersistentFlags().BoolVarP(&utils.Flags.Strict,"strict", "s", false, "allow user defined runtime version")
+	RootCmd.PersistentFlags().BoolVarP(&utils.Flags.Strict, "strict", "s", false, "allow user defined runtime version")
 	RootCmd.PersistentFlags().BoolVarP(&utils.Flags.UseInteractive, "allow-interactive", "i", false, "allow interactive prompts")
 	RootCmd.PersistentFlags().BoolVarP(&utils.Flags.UseDefaults, "allow-defaults", "a", false, "allow defaults")
 	RootCmd.PersistentFlags().BoolVarP(&utils.Flags.Verbose, "verbose", "v", false, "verbose output")
@@ -119,8 +119,9 @@
 	RootCmd.PersistentFlags().StringVarP(&utils.Flags.Namespace, "namespace", "n", "", wski18n.T("namespace"))
 	RootCmd.PersistentFlags().StringVarP(&utils.Flags.Auth, "auth", "u", "", wski18n.T("authorization `KEY`"))
 	RootCmd.PersistentFlags().StringVar(&utils.Flags.ApiVersion, "apiversion", "", wski18n.T("whisk API `VERSION`"))
-    RootCmd.PersistentFlags().StringVarP(&utils.Flags.Key, "key", "k", "", wski18n.T("path of the .key file"))
-    RootCmd.PersistentFlags().StringVarP(&utils.Flags.Cert, "cert", "c", "", wski18n.T("path of the .cert file"))
+	RootCmd.PersistentFlags().StringVarP(&utils.Flags.Key, "key", "k", "", wski18n.T("path of the .key file"))
+	RootCmd.PersistentFlags().StringVarP(&utils.Flags.Cert, "cert", "c", "", wski18n.T("path of the .cert file"))
+	RootCmd.PersistentFlags().BoolVarP(&utils.Flags.Managed, "managed", "", false, "mark project entities as managed")
 }
 
 // initConfig reads in config file and ENV variables if set.
@@ -315,7 +316,7 @@
 
 		verifiedPlan, err := deployer.ConstructUnDeploymentPlan()
 		if err != nil {
-		    return err
+			return err
 		}
 
 		err = deployer.UnDeploy(verifiedPlan)
diff --git a/deployers/manifestreader.go b/deployers/manifestreader.go
index d83a852..1950ca8 100644
--- a/deployers/manifestreader.go
+++ b/deployers/manifestreader.go
@@ -51,8 +51,8 @@
 	return manifest, manifestParser, nil
 }
 
-func (reader *ManifestReader) InitRootPackage(manifestParser *parsers.YAMLParser, manifest *parsers.YAML) error {
-	packages, err := manifestParser.ComposeAllPackages(manifest, reader.serviceDeployer.ManifestPath)
+func (reader *ManifestReader) InitRootPackage(manifestParser *parsers.YAMLParser, manifest *parsers.YAML, ma whisk.KeyValue) error {
+	packages, err := manifestParser.ComposeAllPackages(manifest, reader.serviceDeployer.ManifestPath, ma)
 	if err != nil {
 		return utils.NewYAMLFormatError(err.Error())
 	}
@@ -62,7 +62,7 @@
 }
 
 // Wrapper parser to handle yaml dir
-func (deployer *ManifestReader) HandleYaml(sdeployer *ServiceDeployer, manifestParser *parsers.YAMLParser, manifest *parsers.YAML) error {
+func (deployer *ManifestReader) HandleYaml(sdeployer *ServiceDeployer, manifestParser *parsers.YAMLParser, manifest *parsers.YAML, ma whisk.KeyValue) error {
 
 	var err error
 	deps, err := manifestParser.ComposeDependenciesFromAllPackages(manifest, deployer.serviceDeployer.ProjectPath, deployer.serviceDeployer.ManifestPath)
@@ -70,17 +70,17 @@
 		return utils.NewYAMLFormatError(err.Error())
 	}
 
-	actions, err := manifestParser.ComposeActionsFromAllPackages(manifest, deployer.serviceDeployer.ManifestPath)
+	actions, err := manifestParser.ComposeActionsFromAllPackages(manifest, deployer.serviceDeployer.ManifestPath, ma)
 	if err != nil {
 		return utils.NewYAMLFormatError(err.Error())
 	}
 
-	sequences, err := manifestParser.ComposeSequencesFromAllPackages(deployer.serviceDeployer.ClientConfig.Namespace, manifest)
+	sequences, err := manifestParser.ComposeSequencesFromAllPackages(deployer.serviceDeployer.ClientConfig.Namespace, manifest, ma)
 	if err != nil {
 		return utils.NewYAMLFormatError(err.Error())
 	}
 
-	triggers, err := manifestParser.ComposeTriggersFromAllPackages(manifest, deployer.serviceDeployer.ManifestPath)
+	triggers, err := manifestParser.ComposeTriggersFromAllPackages(manifest, deployer.serviceDeployer.ManifestPath, ma)
 	if err != nil {
 		return utils.NewYAMLFormatError(err.Error())
 	}
diff --git a/deployers/manifestreader_test.go b/deployers/manifestreader_test.go
index 79a99e6..646c228 100644
--- a/deployers/manifestreader_test.go
+++ b/deployers/manifestreader_test.go
@@ -23,6 +23,7 @@
 	"github.com/apache/incubator-openwhisk-wskdeploy/parsers"
 	"github.com/stretchr/testify/assert"
 	"testing"
+	"github.com/apache/incubator-openwhisk-client-go/whisk"
 )
 
 var mr *ManifestReader
@@ -46,14 +47,14 @@
 
 // Test could Init root package successfully.
 func TestManifestReader_InitRootPackage(t *testing.T) {
-	err := mr.InitRootPackage(ps, ms)
+	err := mr.InitRootPackage(ps, ms, whisk.KeyValue{})
 	assert.Equal(t, err, nil, "Init Root Package failed")
 }
 
 // Test Parameters
 func TestManifestReader_param(t *testing.T) {
 	ms, _ := ps.ParseManifest("../tests/dat/manifest6.yaml")
-	err := mr.InitRootPackage(ps, ms)
+	err := mr.InitRootPackage(ps, ms, whisk.KeyValue{})
 	assert.Equal(t, err, nil, "Init Root Package failed")
 
 	// TODO.
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 4bfdf15..77cda4b 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -71,6 +71,7 @@
 //   3. Collect information about the source code files in the working directory
 //   4. Create a deployment plan to create OpenWhisk service
 type ServiceDeployer struct {
+	ProjectName 	string
 	Deployment      *DeploymentProject
 	Client          *whisk.Client
 	mt              sync.RWMutex
@@ -85,6 +86,7 @@
 	InteractiveChoice     bool
 	ClientConfig          *whisk.Config
 	DependencyMaster      map[string]utils.DependencyRecord
+	ManagedAnnotation whisk.KeyValue
 }
 
 // NewServiceDeployer is a Factory to create a new ServiceDeployer
@@ -121,8 +123,26 @@
 	}
 
 	deployer.RootPackageName = manifest.Package.Packagename
+	deployer.ProjectName = manifest.GetProject().Name
 
-	manifestReader.InitRootPackage(manifestParser, manifest)
+	// Generate Managed Annotations if its marked as a Managed Deployment
+	// Managed deployments are the ones when OpenWhisk entities are deployed with command line flag --managed.
+	// Which results in a hidden annotation in every OpenWhisk entity in manifest file.
+	if utils.Flags.Managed {
+		// OpenWhisk entities are annotated with Project Name and therefore
+		// Project Name in manifest/deployment file is mandatory for managed deployments
+		if deployer.ProjectName == "" {
+			return utils.NewYAMLFormatError("Project name in manifest file is mandatory for managed deployments")
+		}
+		// Every OpenWhisk entity in the manifest file will be annotated with:
+		//managed: '{"__OW__PROJECT__NAME": <name>, "__OW__PROJECT_HASH": <hash>, "__OW__FILE": <path>}'
+		deployer.ManagedAnnotation, err = utils.GenerateManagedAnnotation(deployer.ProjectName, manifest.Filepath)
+		if err != nil {
+			return utils.NewYAMLFormatError(err.Error())
+		}
+	}
+
+	manifestReader.InitRootPackage(manifestParser, manifest, deployer.ManagedAnnotation)
 
 	if deployer.IsDefault == true {
 		fileReader := NewFileSystemReader(deployer)
@@ -134,7 +154,7 @@
 	}
 
 	// process manifest file
-	err = manifestReader.HandleYaml(deployer, manifestParser, manifest)
+	err = manifestReader.HandleYaml(deployer, manifestParser, manifest, deployer.ManagedAnnotation)
 	if err != nil {
 		return err
 	}
@@ -194,7 +214,7 @@
 	}
 
 	deployer.RootPackageName = manifest.Package.Packagename
-	manifestReader.InitRootPackage(manifestParser, manifest)
+	manifestReader.InitRootPackage(manifestParser, manifest, whisk.KeyValue{})
 
 	// process file system
 	if deployer.IsDefault == true {
@@ -212,7 +232,7 @@
 	}
 
 	// process manifest file
-	err = manifestReader.HandleYaml(deployer, manifestParser, manifest)
+	err = manifestReader.HandleYaml(deployer, manifestParser, manifest, whisk.KeyValue{})
 	if err != nil {
 		return deployer.Deployment, err
 	}
@@ -338,6 +358,18 @@
 		return err
 	}
 
+	// During managed deployments, after deploying list of entities in a project
+	// refresh previously deployed project entities, delete the assets which is no longer part of the project
+	// i.e. in a subsequent managed deployment of the same project minus few OpenWhisk entities
+	// from the manifest file must result in undeployment of those deleted entities
+	if utils.Flags.Managed {
+		if err := deployer.RefreshManagedEntities(deployer.ManagedAnnotation); err != nil {
+			errString := wski18n.T("Undeployment of deleted entities did not complete sucessfully during managed deployment. Run `wskdeploy undeploy` to remove partially deployed assets.\n")
+			whisk.Debug(whisk.DbgError, errString)
+			return err
+		}
+	}
+
 	return nil
 }
 
@@ -426,6 +458,134 @@
 	return nil
 }
 
+func (deployer *ServiceDeployer) RefreshManagedEntities(maValue whisk.KeyValue) error {
+
+	ma := maValue.Value.(map[string]interface{})
+	if err := deployer.RefreshManagedTriggers(ma); err != nil {
+		return err
+	}
+
+	//if err := deployer.RefreshManagedRules(ma); err != nil {
+	//	return err
+	//}
+
+	//if err := deployer.RefreshManagedPackages(ma); err != nil {
+	//	return err
+	//}
+
+	return nil
+
+}
+func (deployer *ServiceDeployer) RefreshManagedActions(packageName string, ma map[string]interface{}) error {
+	options := whisk.ActionListOptions{}
+	// get a list of actions in your namespace
+	actions, _, err := deployer.Client.Actions.List(packageName, &options)
+	if err != nil {
+		return err
+	}
+	// iterate over list of actions to find an action with managed annotations
+	// check if "managed" annotation is attached to an action
+	for _, action := range actions {
+		// an annotation with "managed" key indicates that an action was deployed as part of managed deployment
+		// if such annotation exists, check if it belongs to the current managed deployment
+		// this action has attached managed annotations
+		if a := action.Annotations.GetValue(utils.MANAGED); a != nil {
+			// decode the JSON blob and retrieve __OW_PROJECT_NAME and __OW_PROJECT_HASH
+			aa := a.(map[string]interface{})
+			// we have found an action which was earlier part of the current project
+			// and this action was deployed as part of managed deployment and now
+			// must be undeployed as its not part of the project anymore
+			// The annotation with same project name but different project hash indicates
+			// that this action is deleted from the project in manifest file
+			if aa[utils.OW_PROJECT_NAME] == ma[utils.OW_PROJECT_NAME] && aa[utils.OW_PROJECT_HASH] != ma[utils.OW_PROJECT_HASH] {
+				actionName := strings.Join([]string{packageName, action.Name}, "/")
+				output := wski18n.T("Found the action {{.action}} which is deleted" +
+					" from the current project {{.project}} in manifest file which is being undeployed.\n",
+					map[string]interface{}{"action": actionName, "project": aa[utils.OW_PROJECT_NAME]})
+				whisk.Debug(whisk.DbgInfo, output)
+				_, err := deployer.Client.Actions.Delete(actionName)
+				if err != nil {
+					return err
+				}
+			}
+		}
+	}
+	return nil
+}
+
+func (deployer *ServiceDeployer) RefreshManagedTriggers(ma map[string]interface{}) error {
+	options := whisk.TriggerListOptions{}
+	// Get list of triggers in your namespace
+	triggers, _, err := deployer.Client.Triggers.List(&options)
+	if err != nil {
+		return err
+	}
+	// iterate over the list of triggers to determine whether any of them was part of managed project
+	// and now deleted from manifest file we can determine that from the managed annotation
+	// If a trigger has attached managed annotation with the project name equals to the current project name
+	// but the project hash is different (project hash differs since the trigger is deleted from the manifest file)
+	for _, trigger := range triggers {
+		// trigger has attached managed annotation
+		if a := trigger.Annotations.GetValue(utils.MANAGED); a != nil {
+			// decode the JSON blob and retrieve __OW_PROJECT_NAME and __OW_PROJECT_HASH
+			ta := a.(map[string]interface{})
+			if ta[utils.OW_PROJECT_NAME] == ma[utils.OW_PROJECT_NAME] && ta[utils.OW_PROJECT_HASH] != ma[utils.OW_PROJECT_HASH] {
+				// we have found a trigger which was earlier part of the current project
+				output := wski18n.T("Found the trigger {{.trigger}} which is deleted" +
+					" from the current project {{.project}} in manifest file which is being undeployed.\n",
+					map[string]interface{}{"trigger": trigger.Name, "project": ma[utils.OW_PROJECT_NAME]})
+				whisk.Debug(whisk.DbgInfo, output)
+				_, _, err := deployer.Client.Triggers.Delete(trigger.Name)
+				if err != nil {
+					return err
+				}
+			}
+		}
+	}
+	return nil
+}
+
+func (deployer *ServiceDeployer) RefreshManagedRules(ma map[string]interface{}) error {
+	return nil
+}
+
+func (deployer *ServiceDeployer) RefreshManagedPackages(ma map[string]interface{}) error {
+	options := whisk.PackageListOptions{}
+	// Get the list of packages in your namespace
+	packages, _, err := deployer.Client.Packages.List(&options)
+	if err != nil {
+		return err
+	}
+	// iterate over each package to find managed annotations
+	// check if "managed" annotation is attached to a package
+	// when managed project name matches with the current project name and project
+	// hash differs, indicates that the package was part of the current project but
+	// now is deleted from the manifest file and should be undeployed.
+	for _, pkg := range packages {
+		if a := pkg.Annotations.GetValue(utils.MANAGED); a != nil {
+			// decode the JSON blob and retrieve __OW_PROJECT_NAME and __OW_PROJECT_HASH
+			pa := a.(map[string]interface{})
+			// perform the similar check on the list of actions from this package
+			// since package can not be deleted if its not empty (has any action or sequence)
+			if err := deployer.RefreshManagedActions(pkg.Name, ma); err != nil {
+				return err
+			}
+			// we have found a package which was earlier part of the current project
+			if pa[utils.OW_PROJECT_NAME] ==  ma[utils.OW_PROJECT_NAME] && pa[utils.OW_PROJECT_HASH] != ma[utils.OW_PROJECT_HASH] {
+				output := wski18n.T("Found the package {{.package}} which is deleted" +
+					" from the current project {{.project}} in manifest file which is being undeployed.\n",
+					map[string]interface{}{"package": pkg.Name, "project": pa[utils.OW_PROJECT_NAME]})
+				whisk.Debug(whisk.DbgInfo, output)
+				_, err := deployer.Client.Packages.Delete(pkg.Name)
+				if err != nil {
+					return err
+				}
+			}
+		}
+	}
+	return nil
+}
+
 func (deployer *ServiceDeployer) DeployPackages() error {
 	for _, pack := range deployer.Deployment.Packages {
 		err := deployer.createPackage(pack.Package)
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index 6999785..b13bcb8 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -107,7 +107,7 @@
 	if manifest.Package.Packagename != "" {
 		return dm.ComposeDependencies(manifest.Package, projectPath, filePath, manifest.Package.Packagename)
 	} else {
-		if manifest.Packages != nil {
+		if len(manifest.Packages) != 0 {
 			packages = manifest.Packages
 		} else {
 			packages = manifest.GetProject().Packages
@@ -191,20 +191,20 @@
 	return depMap, nil
 }
 
-func (dm *YAMLParser) ComposeAllPackages(manifest *YAML, filePath string) (map[string]*whisk.Package, error) {
+func (dm *YAMLParser) ComposeAllPackages(manifest *YAML, filePath string, ma whisk.KeyValue) (map[string]*whisk.Package, error) {
 	packages := map[string]*whisk.Package{}
 	manifestPackages := make(map[string]Package)
 
 	if manifest.Package.Packagename != "" {
 		fmt.Println("WARNING: using package inside of manifest file will soon be deprecated, please use packages instead.")
-		s, err := dm.ComposePackage(manifest.Package, manifest.Package.Packagename, filePath)
+		s, err := dm.ComposePackage(manifest.Package, manifest.Package.Packagename, filePath, ma)
 		if err == nil {
 			packages[manifest.Package.Packagename] = s
 		} else {
 			return nil, err
 		}
 	} else {
-		if manifest.Packages != nil {
+		if len(manifest.Packages) != 0 {
 			manifestPackages = manifest.Packages
 		} else {
 			manifestPackages = manifest.GetProject().Packages
@@ -212,7 +212,7 @@
 	}
 
 	for n, p := range manifestPackages {
-		s, err := dm.ComposePackage(p, n, filePath)
+		s, err := dm.ComposePackage(p, n, filePath, ma)
 
 		if err == nil {
 			packages[n] = s
@@ -224,7 +224,7 @@
 	return packages, nil
 }
 
-func (dm *YAMLParser) ComposePackage(pkg Package, packageName string, filePath string) (*whisk.Package, error) {
+func (dm *YAMLParser) ComposePackage(pkg Package, packageName string, filePath string, ma whisk.KeyValue) (*whisk.Package, error) {
 	var errorParser error
 	pag := &whisk.Package{}
 	pag.Name = packageName
@@ -290,18 +290,23 @@
 		pag.Annotations = append(pag.Annotations, listOfAnnotations...)
 	}
 
+	// add Managed Annotations if this is Managed Deployment
+	if utils.Flags.Managed {
+		pag.Annotations = append(pag.Annotations, ma)
+	}
+
 	return pag, nil
 }
 
-func (dm *YAMLParser) ComposeSequencesFromAllPackages(namespace string, mani *YAML) ([]utils.ActionRecord, error) {
+func (dm *YAMLParser) ComposeSequencesFromAllPackages(namespace string, mani *YAML, ma whisk.KeyValue) ([]utils.ActionRecord, error) {
 	var s1 []utils.ActionRecord = make([]utils.ActionRecord, 0)
 
 	manifestPackages := make(map[string]Package)
 
 	if mani.Package.Packagename != "" {
-		return dm.ComposeSequences(namespace, mani.Package.Sequences, mani.Package.Packagename)
+		return dm.ComposeSequences(namespace, mani.Package.Sequences, mani.Package.Packagename, ma)
 	} else {
-		if mani.Packages != nil {
+		if len(mani.Packages) != 0 {
 			manifestPackages = mani.Packages
 		} else {
 			manifestPackages = mani.GetProject().Packages
@@ -309,7 +314,7 @@
 	}
 
 	for n, p := range manifestPackages {
-		s, err := dm.ComposeSequences(namespace, p.Sequences, n)
+		s, err := dm.ComposeSequences(namespace, p.Sequences, n, ma)
 		if err == nil {
 			s1 = append(s1, s...)
 		} else {
@@ -319,7 +324,7 @@
 	return s1, nil
 }
 
-func (dm *YAMLParser) ComposeSequences(namespace string, sequences map[string]Sequence, packageName string) ([]utils.ActionRecord, error) {
+func (dm *YAMLParser) ComposeSequences(namespace string, sequences map[string]Sequence, packageName string, ma whisk.KeyValue) ([]utils.ActionRecord, error) {
 	var s1 []utils.ActionRecord = make([]utils.ActionRecord, 0)
 
 	for key, sequence := range sequences {
@@ -356,27 +361,32 @@
 			wskaction.Annotations = keyValArr
 		}
 
+		// appending managed annotations if its a managed deployment
+		if utils.Flags.Managed {
+			wskaction.Annotations = append(wskaction.Annotations, ma)
+		}
+
 		record := utils.ActionRecord{Action: wskaction, Packagename: packageName, Filepath: key}
 		s1 = append(s1, record)
 	}
 	return s1, nil
 }
 
-func (dm *YAMLParser) ComposeActionsFromAllPackages(manifest *YAML, filePath string) ([]utils.ActionRecord, error) {
+func (dm *YAMLParser) ComposeActionsFromAllPackages(manifest *YAML, filePath string, ma whisk.KeyValue) ([]utils.ActionRecord, error) {
 	var s1 []utils.ActionRecord = make([]utils.ActionRecord, 0)
 	manifestPackages := make(map[string]Package)
 
 	if manifest.Package.Packagename != "" {
-		return dm.ComposeActions(filePath, manifest.Package.Actions, manifest.Package.Packagename)
+		return dm.ComposeActions(filePath, manifest.Package.Actions, manifest.Package.Packagename, ma)
 	} else {
-		if manifest.Packages != nil {
+		if len(manifest.Packages) != 0 {
 			manifestPackages = manifest.Packages
 		} else {
 			manifestPackages = manifest.GetProject().Packages
 		}
 	}
 	for n, p := range manifestPackages {
-		a, err := dm.ComposeActions(filePath, p.Actions, n)
+		a, err := dm.ComposeActions(filePath, p.Actions, n, ma)
 		if err == nil {
 			s1 = append(s1, a...)
 		} else {
@@ -386,7 +396,7 @@
 	return s1, nil
 }
 
-func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action, packageName string) ([]utils.ActionRecord, error) {
+func (dm *YAMLParser) ComposeActions(filePath string, actions map[string]Action, packageName string, ma whisk.KeyValue) ([]utils.ActionRecord, error) {
 
 	var errorParser error
 	var s1 []utils.ActionRecord = make([]utils.ActionRecord, 0)
@@ -546,6 +556,10 @@
 		if len(listOfAnnotations) > 0 {
 			wskaction.Annotations = append(wskaction.Annotations, listOfAnnotations...)
 		}
+		// add managed annotations if its marked as managed deployment
+		if utils.Flags.Managed {
+			wskaction.Annotations = append(wskaction.Annotations, ma)
+		}
 
 		/*
   		 *  Web Export
@@ -603,21 +617,21 @@
 
 }
 
-func (dm *YAMLParser) ComposeTriggersFromAllPackages(manifest *YAML, filePath string) ([]*whisk.Trigger, error) {
+func (dm *YAMLParser) ComposeTriggersFromAllPackages(manifest *YAML, filePath string, ma whisk.KeyValue) ([]*whisk.Trigger, error) {
 	var triggers []*whisk.Trigger = make([]*whisk.Trigger, 0)
 	manifestPackages := make(map[string]Package)
 
 	if manifest.Package.Packagename != "" {
-		return dm.ComposeTriggers(filePath, manifest.Package)
+		return dm.ComposeTriggers(filePath, manifest.Package, ma)
 	} else {
-		if manifest.Packages != nil {
+		if len(manifest.Packages) != 0 {
 			manifestPackages = manifest.Packages
 		} else {
 			manifestPackages = manifest.GetProject().Packages
 		}
 	}
 	for _, p := range manifestPackages {
-		t, err := dm.ComposeTriggers(filePath, p)
+		t, err := dm.ComposeTriggers(filePath, p, ma)
 		if err == nil {
 			triggers = append(triggers, t...)
 		} else {
@@ -627,7 +641,7 @@
 	return triggers, nil
 }
 
-func (dm *YAMLParser) ComposeTriggers(filePath string, pkg Package) ([]*whisk.Trigger, error) {
+func (dm *YAMLParser) ComposeTriggers(filePath string, pkg Package, ma whisk.KeyValue) ([]*whisk.Trigger, error) {
 	var errorParser error
 	var t1 []*whisk.Trigger = make([]*whisk.Trigger, 0)
 
@@ -690,6 +704,11 @@
 			wsktrigger.Annotations = append(wsktrigger.Annotations, listOfAnnotations...)
 		}
 
+		// add managed annotations if its a managed deployment
+		if utils.Flags.Managed {
+			wsktrigger.Annotations = append(wsktrigger.Annotations, ma)
+		}
+
 		t1 = append(t1, wsktrigger)
 	}
 	return t1, nil
@@ -702,7 +721,7 @@
 	if manifest.Package.Packagename != "" {
 		return dm.ComposeRules(manifest.Package, manifest.Package.Packagename)
 	} else {
-		if manifest.Packages != nil {
+		if len(manifest.Packages) != 0 {
 			manifestPackages = manifest.Packages
 		} else {
 			manifestPackages = manifest.GetProject().Packages
@@ -743,7 +762,7 @@
 	if manifest.Package.Packagename != "" {
 		return dm.ComposeApiRecords(manifest.Package)
 	} else {
-		if manifest.Packages != nil {
+		if len(manifest.Packages) != 0 {
 			manifestPackages = manifest.Packages
 		} else {
 			manifestPackages = manifest.GetProject().Packages
diff --git a/parsers/manifest_parser_test.go b/parsers/manifest_parser_test.go
index d2d07bd..3b9731d 100644
--- a/parsers/manifest_parser_test.go
+++ b/parsers/manifest_parser_test.go
@@ -30,6 +30,7 @@
     "reflect"
     "strconv"
     "strings"
+    "github.com/apache/incubator-openwhisk-client-go/whisk"
 )
 
 // Test 1: validate manifest_parser:Unmarshal() method with a sample manifest in NodeJS
@@ -474,7 +475,7 @@
             // read and parse manifest.yaml file
             p := NewYAMLParser()
             m, _ := p.ParseManifest(tmpfile.Name())
-            actions, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name())
+            actions, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name(), whisk.KeyValue{})
             var expectedResult string
             if err == nil {
                 for i := 0; i < len(actions); i++ {
@@ -516,7 +517,7 @@
             // read and parse manifest.yaml file
             p := NewYAMLParser()
             m, _ := p.ParseManifest(tmpfile.Name())
-            _, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name())
+            _, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name(), whisk.KeyValue{})
             // (TODO) uncomment the following test case after issue #307 is fixed
             // (TODO) its failing right now as we are lacking check on invalid runtime
             // TODO() https://github.com/apache/incubator-openwhisk-wskdeploy/issues/608
@@ -541,7 +542,7 @@
         assert.Fail(t, "Failed to parse manifest: " + manifestFile )
     }
 
-    actions, err := p.ComposeActionsFromAllPackages(m, manifestFile)
+    actions, err := p.ComposeActionsFromAllPackages(m, manifestFile, whisk.KeyValue{})
 
     if err == nil {
         // assert that the actions variable has only one action
@@ -700,7 +701,7 @@
         assert.Fail(t, "Failed to parse manifest: " + manifestFile )
     }
 
-    actions, err := p.ComposeActionsFromAllPackages(m, manifestFile)
+    actions, err := p.ComposeActionsFromAllPackages(m, manifestFile, whisk.KeyValue{})
 
     if err == nil {
         // assert that the actions variable has only one action
@@ -780,7 +781,7 @@
             // read and parse manifest.yaml file
             p := NewYAMLParser()
             m, _ := p.ParseManifest(tmpfile.Name())
-            actions, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name())
+            actions, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name(), whisk.KeyValue{})
             var expectedResult, actualResult string
             if err == nil {
                 for i := 0; i < len(actions); i++ {
@@ -830,7 +831,7 @@
           // read and parse manifest.yaml file
           p := NewYAMLParser()
           m, _ := p.ParseManifest(tmpfile.Name())
-          actions, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name())
+          actions, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name(), whisk.KeyValue{})
           //var expectedResult, actualResult string
           if err == nil {
               for i:=0; i<len(actions); i++ {
@@ -867,7 +868,7 @@
             // read and parse manifest.yaml file
             p := NewYAMLParser()
             m, _ := p.ParseManifest(tmpfile.Name())
-            actions, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name())
+            actions, err := p.ComposeActionsFromAllPackages(m, tmpfile.Name(), whisk.KeyValue{})
             if err == nil {
                 for i := 0; i < len(actions); i++ {
                     if actions[i].Action.Name == "hello" {
@@ -1061,7 +1062,7 @@
     // read and parse manifest.yaml file
     p := NewYAMLParser()
     m, _ := p.ParseManifest(tmpfile.Name())
-    pkg, err := p.ComposeAllPackages(m, tmpfile.Name())
+    pkg, err := p.ComposeAllPackages(m, tmpfile.Name(), whisk.KeyValue{})
     if err == nil {
         n := "helloworld"
         assert.NotNil(t, pkg[n], "Failed to get the whole package")
@@ -1091,7 +1092,7 @@
     // read and parse manifest.yaml file
     p := NewYAMLParser()
     m, _ := p.ParseManifest(tmpfile.Name())
-    seqList, err := p.ComposeSequencesFromAllPackages("", m)
+    seqList, err := p.ComposeSequencesFromAllPackages("", m, whisk.KeyValue{})
     if err != nil {
         assert.Fail(t, "Failed to compose sequences")
     }
@@ -1123,7 +1124,7 @@
         assert.Fail(t, "Failed to parse manifest: " + manifestFile )
     }
 
-    triggerList, err := p.ComposeTriggersFromAllPackages(m, manifestFile)
+    triggerList, err := p.ComposeTriggersFromAllPackages(m, manifestFile, whisk.KeyValue{})
     if err != nil {
         assert.Fail(t, "Failed to compose trigger")
     }
diff --git a/tests/src/integration/alarmtrigger/deployment.yaml b/tests/src/integration/alarmtrigger/deployment.yaml
index 4d983e3..75e1d59 100644
--- a/tests/src/integration/alarmtrigger/deployment.yaml
+++ b/tests/src/integration/alarmtrigger/deployment.yaml
@@ -1,13 +1,13 @@
 project:
     name: HelloWorldEvery12Hours
     packages:
-      helloworld:
-        actions:
-            helloworld:
-                inputs:
-                    name: Amy
-                    place: Paris
-        triggers:
-            Every12Hours:
-                inputs:
-                    cron: "0 */12 * * *"
+        helloworld:
+            actions:
+                helloworld:
+                    inputs:
+                        name: Amy
+                        place: Paris
+            triggers:
+                Every12Hours:
+                    inputs:
+                        cron: "0 */12 * * *"
\ No newline at end of file
diff --git a/tests/src/integration/alarmtrigger/manifest.yaml b/tests/src/integration/alarmtrigger/manifest.yaml
index eef0b7c..d322c48 100644
--- a/tests/src/integration/alarmtrigger/manifest.yaml
+++ b/tests/src/integration/alarmtrigger/manifest.yaml
@@ -21,4 +21,4 @@
         rules:
             helloworldEvery12Hours:
                 action: helloworld
-                trigger: Every12Hours
+                trigger: Every12Hours
\ No newline at end of file
diff --git a/tests/src/integration/common/wskdeploy.go b/tests/src/integration/common/wskdeploy.go
index 9f6aa5c..3b1fb00 100644
--- a/tests/src/integration/common/wskdeploy.go
+++ b/tests/src/integration/common/wskdeploy.go
@@ -169,6 +169,10 @@
 	return wskdeploy.RunCommand("undeploy", "-m", manifestpath)
 }
 
+func (Wskdeploy *Wskdeploy) ManagedDeployment(manifestPath string, deploymentPath string) (string, error) {
+	return Wskdeploy.RunCommand("-m", manifestPath, "-d", deploymentPath, "--managed")
+}
+
 // This method is only for testing
 // This method will mock a construction of deployment plan, creating all the memory objects
 // This method CANNOT be used for real deployment!
diff --git a/tests/src/integration/managed-deployment/00-manifest-minus-second-package.yaml b/tests/src/integration/managed-deployment/00-manifest-minus-second-package.yaml
new file mode 100644
index 0000000..4d69c70
--- /dev/null
+++ b/tests/src/integration/managed-deployment/00-manifest-minus-second-package.yaml
@@ -0,0 +1,60 @@
+project:
+    name: MyFirstManagedProject
+    packages:
+        ManagedPackage-1:
+            actions:
+                HelloWorld-1:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                HelloWorld-2:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                HelloWorld-3:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+            sequences:
+                ManagedSequence-1:
+                    actions: HelloWorld-1, HelloWorld-2, HelloWorld-3
+                ManagedSequence-2:
+                    actions: HelloWorld-1, HelloWorld-2, HelloWorld-3
+            triggers:
+                ManagedTrigger-1:
+            rules:
+                ManagedRule-1:
+                    action: ManagedSequence-1
+                    trigger: ManagedTrigger-1
+
+
diff --git a/tests/src/integration/managed-deployment/01-manifest-minus-sequence-2.yaml b/tests/src/integration/managed-deployment/01-manifest-minus-sequence-2.yaml
new file mode 100644
index 0000000..eea15e2
--- /dev/null
+++ b/tests/src/integration/managed-deployment/01-manifest-minus-sequence-2.yaml
@@ -0,0 +1,57 @@
+project:
+    name: MyFirstManagedProject
+    packages:
+        ManagedPackage-1:
+            actions:
+                HelloWorld-1:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                HelloWorld-2:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                HelloWorld-3:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+            sequences:
+                ManagedSequence-1:
+                    actions: HelloWorld-1, HelloWorld-2, HelloWorld-3
+            triggers:
+                ManagedTrigger-1:
+            rules:
+                ManagedRule-1:
+                    action: ManagedSequence-1
+                    trigger: ManagedTrigger-1
+
diff --git a/tests/src/integration/managed-deployment/02-manifest-minus-action-3.yaml b/tests/src/integration/managed-deployment/02-manifest-minus-action-3.yaml
new file mode 100644
index 0000000..82d52b5
--- /dev/null
+++ b/tests/src/integration/managed-deployment/02-manifest-minus-action-3.yaml
@@ -0,0 +1,43 @@
+project:
+    name: MyFirstManagedProject
+    packages:
+        ManagedPackage-1:
+            actions:
+                HelloWorld-1:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                HelloWorld-2:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+            sequences:
+                ManagedSequence-1:
+                    actions: HelloWorld-1, HelloWorld-2
+            triggers:
+                ManagedTrigger-1:
+            rules:
+                ManagedRule-1:
+                    action: ManagedSequence-1
+                    trigger: ManagedTrigger-1
+
diff --git a/tests/src/integration/managed-deployment/03-manifest-minus-trigger.yaml b/tests/src/integration/managed-deployment/03-manifest-minus-trigger.yaml
new file mode 100644
index 0000000..bb496f6
--- /dev/null
+++ b/tests/src/integration/managed-deployment/03-manifest-minus-trigger.yaml
@@ -0,0 +1,37 @@
+project:
+    name: MyFirstManagedProject
+    packages:
+        ManagedPackage-1:
+            actions:
+                HelloWorld-1:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                HelloWorld-2:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+            sequences:
+                ManagedSequence-1:
+                    actions: HelloWorld-1, HelloWorld-2
+
diff --git a/tests/src/integration/managed-deployment/04-manifest-minus-package.yaml b/tests/src/integration/managed-deployment/04-manifest-minus-package.yaml
new file mode 100644
index 0000000..03f77df
--- /dev/null
+++ b/tests/src/integration/managed-deployment/04-manifest-minus-package.yaml
@@ -0,0 +1,4 @@
+project:
+    name: MyFirstManagedProject
+    packages:
+
diff --git a/tests/src/integration/managed-deployment/actions/hello.js b/tests/src/integration/managed-deployment/actions/hello.js
new file mode 100644
index 0000000..25fdafb
--- /dev/null
+++ b/tests/src/integration/managed-deployment/actions/hello.js
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Return a simple greeting message for the whole world.
+ */
+function main(params) {
+    msg = "Hello, " + params.name + " from " + params.place;
+    console.log(msg)
+    return { payload:  msg };
+}
+
diff --git a/tests/src/integration/managed-deployment/managed-deployment_test.go b/tests/src/integration/managed-deployment/managed-deployment_test.go
new file mode 100644
index 0000000..10e8aa8
--- /dev/null
+++ b/tests/src/integration/managed-deployment/managed-deployment_test.go
@@ -0,0 +1,62 @@
+// +build integration
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests
+
+import (
+	"github.com/apache/incubator-openwhisk-wskdeploy/tests/src/integration/common"
+	"github.com/stretchr/testify/assert"
+	"os"
+	"testing"
+)
+
+func TestManagedDeployment(t *testing.T) {
+	path := "/src/github.com/apache/incubator-openwhisk-wskdeploy/tests/src/integration/managed-deployment/"
+	manifestPath := os.Getenv("GOPATH") + path + "manifest.yaml"
+	deploymentPath := ""
+	wskdeploy := common.NewWskdeploy()
+	_, err := wskdeploy.ManagedDeployment(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest and deployment files.")
+
+	manifestPath = os.Getenv("GOPATH") + path + "00-manifest-minus-second-package.yaml"
+	wskdeploy = common.NewWskdeploy()
+	_, err = wskdeploy.ManagedDeployment(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest and deployment files.")
+
+	manifestPath = os.Getenv("GOPATH") + path + "01-manifest-minus-sequence-2.yaml"
+	wskdeploy = common.NewWskdeploy()
+	_, err = wskdeploy.ManagedDeployment(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest and deployment files.")
+
+	manifestPath = os.Getenv("GOPATH") + path + "02-manifest-minus-action-3.yaml"
+	wskdeploy = common.NewWskdeploy()
+	_, err = wskdeploy.ManagedDeployment(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest and deployment files.")
+
+	manifestPath = os.Getenv("GOPATH") + path + "03-manifest-minus-trigger.yaml"
+	wskdeploy = common.NewWskdeploy()
+	_, err = wskdeploy.ManagedDeployment(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest and deployment files.")
+
+	manifestPath = os.Getenv("GOPATH") + path + "04-manifest-minus-package.yaml"
+	wskdeploy = common.NewWskdeploy()
+	_, err = wskdeploy.ManagedDeployment(manifestPath, deploymentPath)
+	assert.Equal(t, nil, err, "Failed to deploy based on the manifest and deployment files.")
+}
+
diff --git a/tests/src/integration/managed-deployment/manifest.yaml b/tests/src/integration/managed-deployment/manifest.yaml
new file mode 100644
index 0000000..93582d1
--- /dev/null
+++ b/tests/src/integration/managed-deployment/manifest.yaml
@@ -0,0 +1,85 @@
+project:
+    name: MyFirstManagedProject
+    packages:
+        ManagedPackage-1:
+            actions:
+                HelloWorld-1:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                HelloWorld-2:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+                HelloWorld-3:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+            sequences:
+                ManagedSequence-1:
+                    actions: HelloWorld-1, HelloWorld-2, HelloWorld-3
+                ManagedSequence-2:
+                    actions: HelloWorld-1, HelloWorld-2, HelloWorld-3
+            triggers:
+                ManagedTrigger-1:
+            rules:
+                ManagedRule-1:
+                    action: ManagedSequence-1
+                    trigger: ManagedTrigger-1
+        ManagedPackage-2:
+            actions:
+                HelloWorld-1:
+                    function: actions/hello.js
+                    runtime: nodejs:6
+                    inputs:
+                        name:
+                            type: string
+                            description: name of a person
+                        place:
+                            type: string
+                            description: location of a person
+                    outputs:
+                        payload:
+                            type: string
+                            description: a simple greeting message, Hello World!
+            sequences:
+                ManagedSequence-1:
+                    actions: HelloWorld-1
+            triggers:
+                ManagedTrigger-2:
+            rules:
+                ManagedRule-2:
+                    action: ManagedSequence-1
+                    trigger: ManagedTrigger-2
+
+
diff --git a/utils/flags.go b/utils/flags.go
index 7b35856..2a31256 100644
--- a/utils/flags.go
+++ b/utils/flags.go
@@ -35,6 +35,7 @@
 	Strict          bool   // strict flag to support user defined runtime version.
 	Key		string
 	Cert		string
+	Managed 	bool   // OpenWhisk Managed Deployments
 
 	//action flag definition
 	//from go cli
diff --git a/utils/managedannotations.go b/utils/managedannotations.go
new file mode 100644
index 0000000..f550193
--- /dev/null
+++ b/utils/managedannotations.go
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package utils
+
+import (
+	"crypto/sha1"
+	"encoding/json"
+	"fmt"
+	"os"
+	"github.com/apache/incubator-openwhisk-client-go/whisk"
+)
+
+/*
+ * The whole purpose of this utility is to create a managed annotation for managed deployment.
+ * Every OpenWhisk entity in the manifest file will be annotated with:
+ * managed:
+ * 	__OW__PROJECT__NAME: MyProject
+ *	__OW__PROJECT_HASH: SHA1("OpenWhisk " + <size_of_manifest_file> + "\0" + <contents_of_manifest_file>)
+ *	__OW__FILE: Absolute path of manifest file on file system
+*/
+
+const (
+	MANAGED   = "managed"
+	OPENWHISK = "OpenWhisk"
+	NULL      = "golang\000"
+	OW_PROJECT_NAME = "__OW_PROJECT_NAME"
+	OW_PROJECT_HASH = "__OW_PROJECT_HASH"
+
+)
+
+type ManagedAnnotation struct {
+	ProjectName string `json:"__OW_PROJECT_NAME"`
+	ProjectHash string `json:"__OW_PROJECT_HASH"`
+	File        string `json:"__OW_FILE"`
+}
+
+// Project Hash is generated based on the following formula:
+// SHA1("OpenWhisk " + <size_of_manifest_file> + "\0" + <contents_of_manifest_file>)
+// Where the text OpenWhisk is a constant prefix
+// \0 is also constant and is the NULL character
+// The <size_of_manifest_file> and <contents_of_manifest_file> vary depending on the manifest file
+func generateProjectHash(filePath string) (string, error) {
+	projectHash := ""
+	// open file to read manifest file and find its size
+	file, err := os.Open(filePath)
+	defer file.Close()
+	if err != nil {
+		return projectHash, err
+	}
+
+	// run stat on the manifest file to get its size
+	f, err := file.Stat()
+	if err != nil {
+		return projectHash, err
+	}
+	size := f.Size()
+
+	// read the file contents
+	contents := make([]byte, size)
+	_, err = file.Read(contents)
+	if err != nil {
+		return projectHash, err
+	}
+
+	// combine all the hash components used to generate SHA1
+	hashContents := OPENWHISK + string(size) + NULL + string(contents)
+
+	// generate a new hash.Hash computing the SHA1 checksum
+	h := sha1.New()
+	h.Write([]byte(hashContents))
+	// Sum returns the SHA-1 checksum of the data
+	hash := h.Sum(nil)
+	// return SHA-1 checksum in hex format
+	projectHash = fmt.Sprintf("%x", hash)
+
+	return projectHash, nil
+}
+
+func GenerateManagedAnnotation(projectName string, filePath string) (whisk.KeyValue, error) {
+	projectHash, err := generateProjectHash(filePath)
+	managedAnnotation := whisk.KeyValue{}
+	if err != nil {
+		return managedAnnotation, err
+	}
+	m := ManagedAnnotation{
+		ProjectName: projectName,
+		ProjectHash: projectHash,
+		File:        filePath,
+	}
+	ma, err := json.Marshal(m)
+	if err != nil {
+		return managedAnnotation, err
+	}
+	var a interface{}
+	err = json.Unmarshal(ma, &a)
+	managedAnnotation = whisk.KeyValue{Key:MANAGED, Value:a.(map[string]interface{})}
+	return managedAnnotation, nil
+}
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index d60b414..53ecfca 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -109,12 +109,12 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x4d\x6f\xdb\x38\x10\xbd\xe7\x57\x0c\x72\xf1\x25\xd0\xb6\x5d\x2c\xb0\xe8\x2d\xd8\x7e\x05\x6d\x93\x20\xc9\xb6\x28\xba\x05\xc2\x88\x63\x8b\x35\x45\x0a\x24\xe5\xc0\x15\xfc\xdf\x17\x14\x25\xdb\x49\x24\x8a\x92\x65\x6f\x51\x6c\x4f\x8e\xad\x79\xef\xcd\x90\x1c\xce\x50\xec\xd7\x23\x80\xe2\x08\x00\xe0\x98\xd1\xe3\x97\x70\xfc\x0e\x39\x97\xc7\x27\xee\x2b\xa3\x88\xd0\x9c\x18\x26\x85\xfd\xed\x54\xc0\xe9\xe5\x19\x24\x52\x1b\x48\x73\x6d\xe0\x0e\x21\x53\x72\xc1\x28\xd2\xe8\xf8\x08\x60\x75\xf2\x18\xee\x23\xd3\x9a\x89\x19\xc4\x29\x85\x39\x2e\x5b\x80\xeb\xa7\x26\x71\x4a\x27\xc0\x44\x96\x9b\xf2\xe9\x46\x48\x92\x9b\x44\x2a\xf6\xa3\xb4\x86\xdb\xf7\xaf\xbf\xdc\xb6\xc0\x36\x3d\xd9\x08\x79\x9f\x30\x3d\x2f\x7d\xbb\x7d\x77\x71\x7d\xd3\x86\xf7\xe4\xb1\x46\x30\x41\x52\xd4\x19\x89\xb1\x05\x65\xf3\x7b\x97\x96\x4f\xaf\xaf\xae\xcf\x2e\xce\x03\xe4\xac\x9f\x6c\x1e\x04\x22\xd8\x14\xb5\x81\x29\xe3\x08\x42\x1a\x98\xca\x5c\x50\x20\x06\x32\x62\x12\x28\x8a\x28\x53\xf2\x3b\xc6\xe6\x92\x98\x64\xb5\x8a\xfe\x11\x6d\x03\x35\x00\xc9\x3b\x2f\x8a\x22\x5a\x92\x94\xaf\x56\xbf\xd9\x4f\xf6\x43\x09\x1d\xc1\x88\x9a\xf7\x41\x15\x10\x67\xa6\x1f\x62\x99\x04\x1d\xde\xd7\xa2\x88\xec\x13\x0e\xed\x5b\x68\xb4\xfb\xe0\x35\xca\xfb\xbb\x0e\x43\x5a\xe1\x3a\x03\x98\x4a\x05\x14\x33\x2e\x97\x29\x0a\xd3\x2e\x27\xdc\xbe\x37\x7d\x2e\x76\x15\xf0\x18\xa1\x51\x82\x0d\x99\xca\x85\x61\xe9\x3a\x9c\x3a\xcf\x32\xa9\x0c\x52\xb8\x5b\xc2\x45\x86\xc2\xad\xaa\x8c\x13\x33\x95\x2a\x6d\x17\x33\x0c\xab\x79\xc9\xeb\xb9\x13\x0f\x09\xd1\x10\x27\x52\xa3\x00\x02\x19\x51\x86\xc5\x39\x27\x6a\x4d\x64\x3d\xb5\xc4\x24\xb6\x32\xda\xc5\xed\x82\xd8\x3c\x78\x62\xe3\x5c\x6d\x6a\x96\x19\x9e\x80\x46\x03\x46\x82\x90\x14\xbf\xeb\xb6\x81\x0b\xb4\x6e\xa4\xbe\xb1\xea\x72\x93\xa0\x30\x2c\x76\xa9\x7c\x8e\xcb\x3a\xe6\xb1\x14\x53\x36\xcb\x15\xd2\xf6\x68\xf4\x41\x68\x95\xb0\xde\xf9\x7a\x12\xfb\xed\x5a\xe9\xd6\xbb\x44\x5f\xbe\x0e\xc3\x20\xff\x8a\x22\x22\x19\xb3\x7f\xad\x56\x27\x30\x55\x32\xad\xbe\xd2\x32\x57\x31\xfa\xb2\xed\x20\x28\xef\xb8\xd7\x63\xa5\xd1\x6c\x01\xe4\x26\x09\x13\x13\x0c\x11\x36\x14\x45\x11\xad\xff\xde\xf6\x68\xfd\x65\x98\xaa\xe1\x98\x8d\x32\xdf\x10\xc6\x91\xda\x95\x34\x43\xb7\x33\x3c\x59\x70\xda\xc1\xda\xb4\xf4\xb9\x4c\x4b\x1a\xd5\x82\xc5\xf8\xd2\x32\xa1\x52\x3e\xc5\xa3\xc1\x37\x8a\xbf\x36\x44\x95\x59\x20\x17\x29\x51\x3a\x21\x7c\x2b\x79\x32\x31\x95\x0e\x9a\xcb\x98\x70\x58\x10\x9e\xa3\x6e\x97\x3a\x10\xac\x25\xe9\xf9\x20\x98\x30\xa8\x04\xfa\xf6\xab\x60\xfb\x46\xfa\x57\xeb\x0d\x0d\x62\x99\x66\x1c\x6d\xb8\x75\x1e\xc7\xa8\xf5\x34\xe7\x7c\xd9\xce\x1c\x64\xda\x48\xfa\x56\x1a\x40\xa5\xa4\x82\x58\x21\x31\x76\xc3\xcd\x48\x3c\x27\x33\x84\x7b\x66\x92\xea\xb7\x14\xb5\x26\xb3\xad\xc1\x05\x22\x68\x6d\x27\xa9\xfb\xc1\x7e\xf0\xcd\xaa\xbd\x50\x85\x3a\xe5\xf6\xbb\x5f\xcc\xa7\x8c\x1d\xc2\xa1\xdd\x68\x42\x9d\x51\x39\x3f\xc8\x94\xdb\x91\xa7\xc3\x1d\x8d\xa6\x64\x29\x73\xa6\x21\x26\xd7\x20\xa7\xfb\xf6\x6d\x2f\xa4\xa1\xe3\x66\x14\x9b\xcd\x50\x1d\x62\xe8\x76\xa7\xea\xeb\xd4\x14\x91\x1e\xd2\xb3\x1d\xf9\xfa\x66\xf8\x3b\x26\xa8\xfd\xfb\x80\x59\x71\x77\xca\xae\xbd\x53\x4e\x6d\x77\x8a\x82\xa2\x88\x97\xd6\x94\x62\x76\x4e\x52\x5c\xad\x80\x32\x5a\x95\xc8\x6e\x8f\xb4\x5b\xe4\x7a\x87\x84\xab\x5c\xc0\xed\xa6\x93\xaa\x3b\xcc\x5b\x5b\x5d\x28\x4c\xe5\x02\x5d\x43\x45\x38\x5f\x56\x0d\x30\x52\x20\x5a\xa3\xf1\x14\x28\x3f\x83\x32\x4f\xc8\xb6\xf6\xc6\xa2\x88\x64\x6e\xb2\xdc\xac\x56\x10\x45\x91\xd7\x1f\x8f\x59\x07\x59\x99\x96\xfa\x52\x35\x1a\x75\x10\x3d\x58\x53\x7d\x09\xbd\xc6\x1d\xc4\xf5\x54\xef\xcb\xd9\x66\x17\x48\x57\xaf\xac\xa1\xb4\x6d\xf6\x1d\xf4\x0f\x67\x74\x2f\x66\x8f\x69\x23\xe9\xc5\xfb\x08\xfe\x22\x22\x46\xce\x2b\xf3\xce\x23\x24\xaf\x49\x07\x89\x35\x08\x3b\xa8\xf2\xdb\xb4\xf4\x1a\x9b\x87\xfc\xab\xdf\xd3\x6e\xf4\x80\xe8\xca\x9a\x2e\x8d\x0c\xe8\x37\xda\x0c\x7f\x5e\xaf\x6b\x84\xa7\x53\x70\x93\x8f\xdb\xa7\x6f\xa8\x75\xb7\xff\x43\xb7\x83\xb0\xd0\xec\x80\xde\x51\x46\x50\xe4\x78\x98\x9e\x6a\x3c\xa6\x50\x97\xf6\x5c\xa9\x8f\xc5\xf3\x7f\x17\xf2\x28\x9e\xfb\xef\x42\x46\xa4\xea\xeb\xd4\x9e\xbb\x90\xb1\xf9\x42\xdd\xdb\xff\x39\xd3\x88\x54\x8d\x4e\x7d\x3e\xbd\x3a\x3f\x3b\x7f\xfb\x12\x6e\x12\x84\x89\x3b\xb5\x9d\xc0\x97\xd3\x8f\x1f\xdc\x09\xb4\x58\x87\x14\x85\x61\xa6\x3c\x93\xa6\x98\x29\x8c\x89\x41\x1a\xc1\x25\x47\xa2\x11\x72\x8d\x30\xb1\x41\x9f\x00\x13\xda\x20\xb1\xb5\x3b\x50\xd4\xb1\x62\x77\x48\x2d\x8e\xce\x30\x66\xd3\xea\x6d\x86\xa7\xdb\xf8\x2f\x15\x85\x8e\x7b\x5d\x68\x1e\x70\xfc\xc7\xa3\x6c\xab\xa3\x9a\x0a\xd9\x84\x68\xb8\x43\x14\x0f\x6a\xa3\x75\x7f\xe6\xad\xae\x86\xc1\x35\x8a\xbb\xf4\xd4\xf7\x43\x15\xee\x86\xe9\x95\x39\xa6\xbc\x11\x64\xdd\x54\xcb\x65\x0c\x59\xc3\xb0\xbc\xb2\x9e\xf4\xa7\xbb\x6a\x1b\x00\xd8\x28\xf0\xea\x71\xc7\x3e\x54\xd8\x00\xa0\x46\x41\xa7\x4f\x4f\x2b\x86\x4a\x1a\x04\x15\x90\x38\x36\x15\x7a\x33\x5c\xdd\x58\x86\xe7\x8e\x7e\x88\x5d\x0b\xa0\xda\x3a\xb6\xd1\xaa\xee\x2f\x68\xce\xfb\xcd\xbd\xb3\xc8\x56\x91\xbd\x68\x03\x0c\x3b\x66\x89\x6b\x39\x7a\x91\x06\x1a\x77\xbc\xd1\x65\x62\x21\xe7\x58\x96\xd1\xae\x10\x4b\x50\x1c\xa8\x26\x3c\xb0\x08\x7f\x4d\xf5\x91\x08\x4a\x8c\x54\x4b\x98\x32\xe4\x14\xea\xa4\xfe\x09\x95\xb6\x61\xae\x6f\x24\x6a\xdf\x2b\xd9\xa1\x68\x7e\x69\x8f\x8d\xeb\xfb\x40\x64\xe1\x6a\x23\x1b\xb6\x38\x57\xca\xf6\xe1\x9b\x63\xdb\x85\x7b\x3a\x40\xec\xce\xf8\xc3\x22\xfb\x81\xc5\x28\x34\x8e\x14\xd9\x16\xb4\xb0\xc8\xd6\xc6\xfb\x8a\xec\x60\x7c\xbf\xfc\x1a\xb6\x28\x22\xee\x3e\x9e\xbd\x5a\xad\x6a\x16\x02\x0b\xc2\x19\x05\x29\x30\x40\x6a\x2f\xac\x46\x59\x29\xa6\x52\x2d\xaf\xd9\x0f\xb4\x9d\x38\x67\x29\x33\xda\x3a\x59\x5f\xa7\x03\x9d\xc8\x9c\x53\x3b\x38\x44\x94\xf7\x13\xec\xa2\xbe\x43\x73\x6f\x33\xd6\xf3\x17\x7f\x96\xcb\xf7\x8f\xe7\x2f\xda\xd5\x8e\x4a\xd1\x7c\x87\x8f\xa5\x28\x73\x33\x08\xfe\xd9\xb3\x12\xfe\xf7\x67\xf6\x9f\xe7\x6a\xdf\x98\x14\x8d\x4e\x70\x39\x1b\x1a\x23\x87\xff\xdc\x23\x7f\x24\x70\xff\xcc\x3e\x13\x6e\xbe\x95\x0c\xee\x4e\xdd\xa4\x8a\xdb\xc4\x32\x57\x27\x74\xdb\xcc\x4c\x03\x9b\x09\xa9\xb6\xfa\xca\x38\xc1\x78\xee\x36\x84\x90\x26\x76\x3f\xa4\xfd\x1d\xdd\xcc\xf2\xc3\xfa\x3a\x0a\x6f\x7f\x77\xab\x09\x75\x58\x5f\x77\x27\xed\x4a\xcd\xe5\xd2\x70\xe9\x34\x65\x46\xb8\xba\x78\x7d\x6b\x32\x21\x62\x46\xee\x38\x02\xd1\xee\x86\xea\xfd\x09\xdc\x27\x2c\x4e\xe0\x9e\x71\x6e\xd7\x4f\xcd\x1f\x92\xba\x47\xe4\x6a\x74\xab\xbc\x08\x2e\xa7\xe5\x7e\x15\xcd\x71\x59\x5e\x19\x6f\x91\xd5\xfc\x6c\x37\x6c\x8c\xca\x04\xe3\x6e\x1e\xf6\xde\xab\xac\x9f\x27\x59\xc6\xeb\xbb\xb9\xe5\xfd\xd0\xb2\x4f\x71\xaf\x95\xec\x26\x27\xb6\x5e\xd5\xb9\xeb\xf0\xc4\x94\x17\xdf\x37\x5f\xbf\x61\xb6\xb4\xff\x06\x54\xa2\x0b\x6b\x4a\x4c\x9c\x94\xe8\xdd\x4c\xf5\x55\xfb\x95\x23\x4b\x1f\xdc\xbc\xaf\xa8\xea\x2f\x2b\xa2\xb6\x17\x42\xbf\x84\x6b\xfe\xb5\xb3\x4d\xd4\xa0\xbf\x9c\xb4\x5a\x4a\x61\x67\xee\xe6\x34\xf1\x04\xb2\xcd\x69\x62\xf5\x3f\x2a\xea\xe3\xc4\x80\x45\xb4\x1f\xd2\x5e\x8e\x3e\x8c\xdd\x41\xdc\x1c\x85\xd2\x3a\x79\x74\xf4\xed\xe8\xdf\x00\x00\x00\xff\xff\xd4\x73\xd6\x86\xee\x35\x00\x00")
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x4d\x6f\xdb\x38\x13\xbe\xe7\x57\x0c\x72\xf1\x25\xd0\xdb\xf6\xc5\x02\x8b\xde\x82\xed\x57\xd0\x36\x09\x92\x6c\x8b\xa2\x5b\x20\xb4\x38\xb6\x58\x53\xa4\x40\x52\x0e\x5c\xc3\xff\x7d\x41\x51\xb2\x9d\x44\xa2\x28\x59\x76\x82\x62\x73\x72\x64\xce\xf3\x3c\x33\xfc\x1c\x6a\xfc\xfd\x08\x60\x79\x04\x00\x70\xcc\xe8\xf1\x6b\x38\xfe\x80\x9c\xcb\xe3\x13\xf7\xc8\x28\x22\x34\x27\x86\x49\x61\xbf\x3b\x15\x70\x7a\x79\x06\x89\xd4\x06\xd2\x5c\x1b\x18\x23\x64\x4a\xce\x19\x45\x1a\x1d\x1f\x01\xac\x4e\x1e\xc2\x7d\x66\x5a\x33\x31\x85\x38\xa5\x30\xc3\x45\x03\x70\xd5\x6a\x14\xa7\x74\x04\x4c\x64\xb9\x29\x5a\xd7\x42\x92\xdc\x24\x52\xb1\x5f\x85\x35\xdc\x7e\x7c\xfb\xed\xb6\x01\xb6\xae\x65\x2d\xe4\x5d\xc2\xf4\xac\xf0\xed\xf6\xc3\xc5\xf5\x4d\x13\xde\xa3\x66\xb5\x60\x82\xa4\xa8\x33\x12\x63\x03\xca\xe6\xfb\x36\x2d\x5f\xde\x5e\x5d\x9f\x5d\x9c\x07\xc8\x59\xb7\xac\xef\x04\x22\xd8\x04\xb5\x81\x09\xe3\x08\x42\x1a\x98\xc8\x5c\x50\x20\x06\x32\x62\x12\x58\x2e\xa3\x4c\xc9\x9f\x18\x9b\x4b\x62\x92\xd5\x2a\xfa\x47\x34\x75\x54\x0f\x24\xef\xb8\x58\x2e\xa3\x05\x49\xf9\x6a\xf5\x3f\xfb\xc9\x7e\x28\xa0\x23\x18\x50\xf3\x3e\xa8\x02\xe2\xcc\xf4\x7d\x2c\x93\xa0\xc3\xfb\xbe\x5c\x46\xb6\x85\x43\xfb\x11\x1a\xed\x2e\x78\xb5\xf2\xfe\xae\xc2\x90\x96\xb8\xce\x00\x26\x52\x01\xc5\x8c\xcb\x45\x8a\xc2\x34\xcb\x09\xb7\xef\x4c\x9f\x8b\x5d\x05\x3c\x44\xa8\x95\x60\x43\xa6\x72\x61\x58\xba\x0e\xa7\xce\xb3\x4c\x2a\x83\x14\xc6\x0b\xb8\xc8\x50\xb8\x59\x95\x71\x62\x26\x52\xa5\xcd\x62\xfa\x61\xd5\x4f\x79\x3d\x73\xe2\x21\x21\x1a\xe2\x44\x6a\x14\x40\x20\x23\xca\xb0\x38\xe7\x44\xad\x89\xac\xa7\x96\x98\xc4\x56\x46\xb3\xb8\x5d\x10\xeb\x3b\x4f\x6c\x9c\xab\x4c\xcd\x22\xc3\x13\xd0\x68\xc0\x48\x10\x92\xe2\x4f\xdd\xd4\x71\x81\xd6\xb5\xd4\x37\x56\x5d\x6e\x12\x14\x86\xc5\x6e\x29\x9f\xe1\xa2\x8a\x79\x2c\xc5\x84\x4d\x73\x85\xb4\x39\x1a\x5d\x10\x1a\x25\xac\x77\xbe\x8e\xc4\x7e\xbb\x46\xba\xf5\x2e\xd1\x95\xaf\xc5\x30\xc8\xbf\xe5\x32\x22\x19\xb3\xff\xad\x56\x27\x30\x51\x32\x2d\x1f\x69\x99\xab\x18\x7d\xab\x6d\x2f\x28\x6f\xbf\x57\x7d\xa5\xd1\x6c\x01\xe4\x26\x09\x13\x13\x0c\x11\xd6\x15\xcb\x65\xb4\xfe\x7f\xdb\xa3\xf5\xc3\x30\x55\xfd\x31\x6b\x65\xbe\x23\x8c\x23\xb5\x33\x69\x8a\x6e\x67\x78\x34\xe1\xb4\x83\xb5\xcb\xd2\xd7\x62\x59\xd2\xa8\xe6\x2c\xc6\xd7\x96\x09\x95\xf2\x29\x1e\x0c\xbe\x56\xfc\xb5\x21\xaa\x58\x05\x72\x91\x12\xa5\x13\xc2\xb7\x16\x4f\x26\x26\xd2\x41\x73\x19\x13\x0e\x73\xc2\x73\xd4\xcd\x52\x7b\x82\x35\x2c\x7a\x3e\x08\x26\x0c\x2a\x81\xbe\xfd\x2a\xd8\xbe\x96\xfe\xcd\x7a\x43\x83\x58\xa6\x19\x47\x1b\x6e\x9d\xc7\x31\x6a\x3d\xc9\x39\x5f\x34\x33\x07\x99\xd6\x92\xbe\x97\x06\x50\x29\xa9\x20\x56\x48\x8c\xdd\x70\x33\x12\xcf\xc8\x14\xe1\x8e\x99\xa4\xfc\x2e\x45\xad\xc9\x74\xab\x73\x81\x08\x5a\xd9\x49\xea\xbe\xb0\x1f\x7c\xa3\x6a\x2f\x54\xa1\x4e\xb9\xfd\xee\x37\xf3\x29\x63\x87\x70\x68\x37\x9a\x50\x67\x54\xce\x0f\x32\xe4\x76\xe4\x69\x71\x47\xa3\x29\x58\x8a\x35\xd3\x10\x93\x6b\x90\x93\x7d\xfb\xb6\x17\xd2\xd0\x7e\x33\x8a\x4d\xa7\xa8\x0e\xd1\x75\xbb\x53\x75\x75\x6a\x82\x48\x0f\xe9\xd9\x8e\x7c\x5d\x57\xf8\x31\x13\xd4\xfe\x7f\xc0\x55\x71\x77\xca\xb6\xbd\x53\x4e\x6c\x76\x8a\x82\xa2\x88\x17\xd6\x94\x62\x76\x4e\x52\x5c\xad\x80\x32\x5a\x1e\x91\xdd\x1e\x69\xb7\xc8\xf5\x0e\x09\x57\xb9\x80\xdb\x4d\x26\x55\x65\x98\xb7\xf6\x74\xa1\x30\x95\x73\x74\x09\x15\xe1\x7c\x51\x26\xc0\x48\x81\x68\x8d\xc6\x73\x40\x79\x0e\xca\x3c\x21\xdb\xda\x1b\x97\xcb\x48\xe6\x26\xcb\xcd\x6a\x05\x51\x14\x79\xfd\xf1\x98\xb5\x90\x15\xcb\x52\x57\xaa\x5a\xa3\x16\xa2\x7b\x73\xaa\x2b\xa1\xd7\xb8\x85\xb8\x1a\xea\x5d\x39\x9b\xec\x02\xe9\xaa\x99\xd5\x97\xb6\xc9\xbe\x85\xfe\xfe\x88\xee\xc4\xec\x31\xad\x25\xbd\xf8\x18\xc1\x5f\x44\xc4\xc8\x79\x69\xde\x7a\x85\xe4\x35\x69\x21\xb1\x06\x61\x17\x55\x7e\x9b\x86\x5c\x63\xd3\xc8\x3f\xfb\x3d\xe9\x46\x07\x88\xb6\x55\xd3\x2d\x23\x3d\xf2\x8d\x26\xc3\xe7\xeb\x75\x85\xf0\x78\x08\x6e\xd6\xe3\xe6\xe1\x1b\x6a\xdd\xee\x7f\xdf\xed\x20\x2c\x34\x3b\xa0\xb7\x1c\x23\x28\x72\x3c\x4c\x4e\x35\x1c\x53\xa8\x4b\x7b\x3e\xa9\x0f\xc5\xf3\x5f\x16\xf2\x20\x9e\xfb\xcf\x42\x06\xa4\xea\xea\xd4\x9e\xb3\x90\xa1\xf9\x42\xdd\xdb\xff\x3d\xd3\x80\x54\xb5\x4e\x7d\x3d\xbd\x3a\x3f\x3b\x7f\xff\x1a\x6e\x12\x84\x91\xbb\xb5\x1d\xc1\xb7\xd3\xcf\x9f\xdc\x0d\xb4\x58\x87\x14\x85\x61\xa6\xb8\x93\xa6\x98\x29\x8c\x89\x41\x1a\xc1\x25\x47\xa2\x11\x72\x8d\x30\xb2\x41\x1f\x01\x13\xda\x20\xb1\x67\x77\xa0\xa8\x63\xc5\xc6\x48\x2d\x8e\xce\x30\x66\x93\xf2\x6d\x86\x27\xdb\x78\x4a\x45\xa1\xfd\x5e\x1d\x34\x0f\xd8\xff\xc3\x51\x36\x9d\xa3\xea\x0e\xb2\x09\xd1\x30\x46\x14\xf7\xce\x46\xeb\xfc\xcc\x7b\xba\xea\x07\x57\x2b\xee\xd2\x73\xbe\xef\xab\x70\x37\x4c\xaf\xcc\x21\xe5\x0d\x20\xeb\xa6\x9c\x2e\x43\xc8\xea\x87\xe5\x95\xf5\x28\x3f\xdd\x55\x5b\x0f\xc0\x5a\x81\x57\x0f\x33\xf6\xbe\xc2\x7a\x00\xd5\x0a\x3a\x7d\x7c\x5b\xd1\x57\x52\x2f\xa8\x80\x85\x63\x73\x42\xaf\x87\xab\x12\xcb\xf0\xb5\xa3\x1b\x62\xdb\x04\x28\xb7\x8e\x6d\xb4\x32\xfb\x0b\x1a\xf3\x7e\x73\xef\x28\xb2\xa7\xc8\x4e\xb4\x01\x86\x2d\xa3\xc4\xa5\x1c\x9d\x48\x03\x8d\x5b\xde\xe8\x32\x31\x97\x33\x2c\x8e\xd1\xee\x20\x96\xa0\x38\xd0\x99\xf0\xc0\x22\xfc\x67\xaa\xcf\x44\x50\x62\xa4\x5a\xc0\x84\x21\xa7\x50\x2d\xea\x5f\x50\x69\x1b\xe6\xaa\x22\x51\xfb\x5e\xc9\xf6\x45\xf3\x4b\x7b\x68\x5c\xd5\x03\x91\xb9\x3b\x1b\xd9\xb0\xc5\xb9\x52\x36\x0f\xdf\x5c\xdb\xce\x5d\xeb\x00\xb1\x3b\xe3\xf7\x8b\xec\x27\x16\xa3\xd0\x38\x50\x64\x1b\xd0\xc2\x22\x5b\x19\xef\x2b\xb2\xbd\xf1\xfd\xf2\x2b\xd8\xe5\x32\xe2\xee\xe3\xd9\x9b\xd5\xaa\x62\x21\x30\x27\x9c\x51\x90\x02\x03\xa4\x76\xc2\xaa\x95\x95\x62\x2a\xd5\xe2\x9a\xfd\x42\x9b\x89\x73\x96\x32\xa3\xad\x93\x55\x39\x1d\xe8\x44\xe6\x9c\xda\xce\x21\xa2\xa8\x4f\xb0\x93\x7a\x8c\xe6\xce\xae\x58\x2f\x5f\xfd\x59\x4c\xdf\x3f\x5e\xbe\x6a\x56\x3b\x28\x45\x7d\x0d\x1f\x4b\x51\xe6\xa6\x17\xfc\x8b\x17\x05\xfc\xff\x5f\xd8\x3f\x4f\x69\xdf\x90\x14\xb5\x4e\x70\x39\xed\x1b\x23\x87\xff\xd2\x23\x7f\x20\x70\xff\xc8\x3e\x13\x6e\xbc\x15\x0c\xae\xa6\x6e\x54\xc6\x6d\x64\x99\xcb\x1b\xba\x6d\x66\xa6\x81\x4d\x85\x54\x5b\x79\x65\x9c\x60\x3c\x73\x1b\x42\x48\x12\xbb\x1f\xd2\xee\x8e\x6e\x46\xf9\x61\x7d\x1d\x84\xb7\xbb\xbb\xe5\x80\x3a\xac\xaf\xbb\x93\xb6\x2d\xcd\xc5\xd4\x70\xcb\x69\xca\x8c\x70\xe7\xe2\x75\xd5\x64\x42\xc4\x94\x8c\x39\x02\xd1\xae\x42\xf5\xee\x04\xee\x12\x16\x27\x70\xc7\x38\xb7\xf3\xa7\xe2\x0f\x59\xba\x07\xe4\xaa\x75\xab\x28\x04\x97\x93\x62\xbf\x8a\x66\xb8\x28\x4a\xc6\x1b\x64\xd5\xb7\x6d\x87\x8d\x51\x99\x60\xdc\x4d\x63\x6f\x5d\x65\xd5\x9e\x64\x19\xaf\x6a\x73\x8b\xfa\xd0\x22\x4f\x71\xaf\x95\xec\x26\x27\xb6\x5e\xd5\xb9\x72\x78\x62\x8a\xc2\xf7\xcd\xe3\x77\xcc\x1e\xed\x7f\x00\x95\xe8\xc2\x9a\x12\x13\x27\x05\x7a\x3b\x53\x55\x6a\xbf\x72\x64\xe9\xbd\xca\xfb\x92\xaa\x7a\x58\x12\x35\xbd\x10\xfa\x2d\x5c\xf3\xcf\x9d\x6d\xa2\x1a\xfd\xc5\xa0\xd5\x52\x0a\x3b\x72\x37\xb7\x89\x27\x90\x6d\x6e\x13\xcb\x5f\x54\x54\xd7\x89\x01\x93\x68\x3f\xa4\x9d\x1c\xbd\x1f\xbb\x83\xb8\x39\x08\x65\xe0\xbb\x47\x57\x26\x5a\x5c\x04\x33\xd4\xde\xd7\x82\x40\x73\x65\x33\xbf\x94\x08\x32\x45\xba\xfd\x22\x7d\x4f\x75\x33\xcf\x56\x6e\x7d\xfa\x5e\xfc\x4a\x67\xf3\xc3\x8a\x7b\x97\x00\x6e\x69\x2f\x6e\xda\x9d\x0f\x45\x3d\xf0\x76\xaa\x51\xf5\xe1\xe6\xa7\x47\x75\x93\x77\x8d\x33\xc6\xed\x3a\x03\xdf\x96\xf4\xf4\xba\x5a\xc2\x65\xea\xee\x87\x9e\x45\xc0\x9e\x4e\x59\x4b\xc8\xb6\xea\x84\xca\x8f\xcf\x25\x64\x4f\xa7\xcc\x86\xec\xe8\xe8\xc7\xd1\xbf\x01\x00\x00\xff\xff\x5f\x5a\x74\xc9\xe0\x3a\x00\x00")
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
 	return bindataRead(
@@ -129,7 +129,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 13806, mode: os.FileMode(420), modTime: time.Unix(1509045117, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 15072, mode: os.FileMode(420), modTime: time.Unix(1510298069, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -149,7 +149,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -169,7 +169,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -189,7 +189,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -209,7 +209,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -229,7 +229,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -249,7 +249,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -269,7 +269,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -289,7 +289,7 @@
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1505354770, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1501631495, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index d23dfab..b5cf545 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -330,6 +330,22 @@
   {
     "id": "WARNING: application in manifest file will soon be deprecated, please use project instead.\n",
     "translation": "WARNING: application in manifest file will soon be deprecated, please use project instead.\n"
+  },
+  {
+    "id": "Undeployment of deleted entities did not complete sucessfully during managed deployment. Run `wskdeploy undeploy` to remove partially deployed assets.\n",
+    "translation": "Undeployment of deleted entities did not complete sucessfully during managed deployment. Run `wskdeploy undeploy` to remove partially deployed assets.\n"
+  },
+  {
+    "id": "Found the action {{.action}} which is deleted from the current project {{.project}} in manifest file which is being undeployed.\n",
+    "translation": "Found the action {{.action}} which is deleted from the current project {{.project}} in manifest file which is being undeployed.\n"
+  },
+  {
+    "id": "Found the trigger {{.trigger}} which is deleted from the current project {{.project}} in manifest file which is being undeployed.\n",
+    "translation": "Found the trigger {{.trigger}} which is deleted from the current project {{.project}} in manifest file which is being undeployed.\n"
+  },
+  {
+    "id": "Found the package {{.package}} which is deleted from the current project {{.project}} in manifest file which is being undeployed.\n",
+    "translation": "Found the package {{.package}} which is deleted from the current project {{.project}} in manifest file which is being undeployed.\n"
   }
 
 ]
