Repository: IBM-Cloud/terraform-provider-ibm

Issue:
ibm_is_security_group_target should wait if target loadbalancer is in update_pending state
<!---
Please note the following potential times when an issue might be in Terraform core:

* [Configuration Language](https://www.terraform.io/docs/configuration/index.html) or resource ordering issues
* [State](https://www.terraform.io/docs/state/index.html) and [State Backend](https://www.terraform.io/docs/backends/index.html) issues
* [Provisioner](https://www.terraform.io/docs/provisioners/index.html) issues
* [Registry](https://registry.terraform.io/) issues
* Spans resources across multiple providers

If you are running into one of these scenarios, we recommend opening an issue in the [Terraform core repository](https://github.com/hashicorp/terraform/) instead.
--->

<!--- Please keep this note for the community --->

### Community Note

* Please vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request
* Please do not leave "+1" or other comments that do not add relevant new information or questions, they generate extra noise for issue followers and do not help prioritize the request
* If you are interested in working on this issue or have submitted a pull request, please leave a comment

<!--- Thank you for keeping this note for the community --->

### Terraform CLI and Terraform IBM Provider Version

<!--- Please run `terraform -v` to show the Terraform core version and provider version(s). If you are not running the latest version of Terraform or the provider, please upgrade because your issue may have already been fixed. [Terraform documentation on provider versioning](https://www.terraform.io/docs/configuration/providers.html#provider-versions). --->

### Affected Resource(s)

<!--- Please list the affected resources and data sources. --->

* ibm_is_security_group_target

### Terraform Configuration Files

<!--- Information about code formatting: https://help.github.com/articles/basic-writing-and-formatting-syntax/#quoting-code --->

Please include all Terraform configurations required to reproduce the bug. Bug reports without a functional reproduction may be closed without investigation.

Reproducible when the lb is in pending update state. 

![Image](https://github.com/user-attachments/assets/f0ef699d-6d7f-45d3-96d5-806f4adbb118)

This can for instance be reproduce by attaching 2 different SG to the same lb using ibm_is_security_group_target resource twice.

### Debug Output

<!---
Please provide a link to a GitHub Gist containing the complete debug output. Please do NOT paste the debug output in the issue; just paste a link to the Gist.

To obtain the debug output, see the [Terraform documentation on debugging](https://www.terraform.io/docs/internals/debugging.html).
--->

### Panic Output

<!--- If Terraform produced a panic, please provide a link to a GitHub Gist containing the output of the `crash.log`. --->

 Terraform apply |   [ERROR] Error while creating Security Group Target Binding The load balancer with ID 'xxxx-xxxx-xxxx' cannot be updated because its status is 'UPDATE_PENDING'.

### Expected Behavior

<!--- What should have happened? --->

ibm_is_security_group_target should wait until the lb is in state active up to a specific amount of time (eg: 5 minutes, 
should be configurable). on create and destroy.

### Actual Behavior

<!--- What actually happened? --->

error immediately raised: 
 Terraform apply |   [ERROR] Error while creating Security Group Target Binding The load balancer with ID 'xxxx-xxxx-xxxx' cannot be updated because its status is 'UPDATE_PENDING'.

### Steps to Reproduce

See above

<!--- Please list the steps required to reproduce the issue. --->

1. `terraform apply`

### Important Factoids

<!--- Are there anything atypical about your accounts that we should know? For example: Running in EC2 Classic? --->

### References

<!---
Information about referencing Github Issues: https://help.github.com/articles/basic-writing-and-formatting-syntax/#referencing-issues-and-pull-requests

Are there any other GitHub issues (open or closed) or pull requests that should be linked here? Vendor documentation? For example:
--->

Worked around (partially) the issue through a bash script at https://github.com/terraform-ibm-modules/terraform-ibm-base-ocp-vpc/blob/fe1a2c5565a8a288b026f800a83f048ec14ea6e6/main.tf#L610 . This is a workaround, and does not always work as using distinct resources in terraform definition. The workaround is also difficult to adapt on destroy path.

Discussion:

Solution patch:
diff --git a/go.mod b/go.mod
index 0ec47db72..12708ed98 100644
--- a/go.mod
+++ b/go.mod
@@ -43,7 +43,7 @@ require (
 	github.com/IBM/secrets-manager-go-sdk/v2 v2.0.10
 	github.com/IBM/vmware-go-sdk v0.1.3
 	github.com/IBM/vpc-beta-go-sdk v0.8.0
-	github.com/IBM/vpc-go-sdk v0.66.0
+	github.com/IBM/vpc-go-sdk v0.67.0
 	github.com/ScaleFT/sshkeys v0.0.0-20200327173127-6142f742bca5
 	github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2
 	github.com/akamai/AkamaiOPEN-edgegrid-golang/v5 v5.0.0
diff --git a/go.sum b/go.sum
index 1523a8d68..37e7db87d 100644
--- a/go.sum
+++ b/go.sum
@@ -178,6 +178,8 @@ github.com/IBM/vpc-beta-go-sdk v0.8.0 h1:cEPpv4iw3Ba5W2d0AWg3TIbKeJ8y1nPuUuibR5J
 github.com/IBM/vpc-beta-go-sdk v0.8.0/go.mod h1:hORgIyTFRzXrZIK9IohaWmCRBBlYiDRagsufi7M6akE=
 github.com/IBM/vpc-go-sdk v0.66.0 h1:S0HW+f6Qf6OLSGESQ7WRgWLq1bDgvs+vvOJ7AWgUMbw=
 github.com/IBM/vpc-go-sdk v0.66.0/go.mod h1:VL7sy61ybg6tvA60SepoQx7TFe20m7JyNUt+se2tHP4=
+github.com/IBM/vpc-go-sdk v0.67.0 h1:p8G5bqTUyVheBrJpT+pLpoZoA/Yu1R2xX4xJLM4tT9w=
+github.com/IBM/vpc-go-sdk v0.67.0/go.mod h1:VL7sy61ybg6tvA60SepoQx7TFe20m7JyNUt+se2tHP4=
 github.com/Logicalis/asn1 v0.0.0-20190312173541-d60463189a56 h1:vuquMR410psHNax14XKNWa0Ae/kYgWJcXi0IFuX60N0=
 github.com/Logicalis/asn1 v0.0.0-20190312173541-d60463189a56/go.mod h1:Zb3OT4l0mf7P/GOs2w2Ilj5sdm5Whoq3pa24dAEBHFc=
 github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline.go
index bcbd81473..fb0a7565c 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_definition.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_definition.go
index 69f757010..2f5c1e7a8 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_definition.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_definition.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_property.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_property.go
index 212587d8a..645014811 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_property.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_property.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger.go
index c6fe72e90..b7d7fd783 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_property.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_property.go
index 0dbb16dde..061d689ef 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_property.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_property.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline.go
index 628d96197..2bc030cb8 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
@@ -192,7 +192,6 @@ func ResourceIBMCdTektonPipeline() *schema.Resource {
 						},
 						"href": &schema.Schema{
 							Type:        schema.TypeString,
-							Optional:    true,
 							Computed:    true,
 							Description: "API URL for interacting with the definition.",
 						},
@@ -225,7 +224,6 @@ func ResourceIBMCdTektonPipeline() *schema.Resource {
 						},
 						"href": &schema.Schema{
 							Type:        schema.TypeString,
-							Optional:    true,
 							Computed:    true,
 							Description: "API URL for interacting with the property.",
 						},
@@ -287,7 +285,6 @@ func ResourceIBMCdTektonPipeline() *schema.Resource {
 						},
 						"href": &schema.Schema{
 							Type:        schema.TypeString,
-							Optional:    true,
 							Computed:    true,
 							Description: "API URL for interacting with the trigger. Only included when fetching the list of pipeline triggers.",
 						},
@@ -299,13 +296,11 @@ func ResourceIBMCdTektonPipeline() *schema.Resource {
 						},
 						"id": &schema.Schema{
 							Type:        schema.TypeString,
-							Optional:    true,
 							Computed:    true,
 							Description: "The Trigger ID.",
 						},
 						"properties": &schema.Schema{
 							Type:        schema.TypeList,
-							Optional:    true,
 							Computed:    true,
 							Description: "Optional trigger properties are used to override or supplement the pipeline properties when triggering a pipeline run.",
 							Elem: &schema.Resource{
@@ -325,7 +320,6 @@ func ResourceIBMCdTektonPipeline() *schema.Resource {
 									},
 									"href": &schema.Schema{
 										Type:        schema.TypeString,
-										Optional:    true,
 										Computed:    true,
 										Description: "API URL for interacting with the trigger property.",
 									},
@@ -548,7 +542,6 @@ func ResourceIBMCdTektonPipeline() *schema.Resource {
 						},
 						"webhook_url": &schema.Schema{
 							Type:        schema.TypeString,
-							Optional:    true,
 							Computed:    true,
 							Description: "Webhook URL that can be used to trigger pipeline runs.",
 						},
@@ -865,7 +858,9 @@ func resourceIBMCdTektonPipelineDelete(context context.Context, d *schema.Resour
 
 func ResourceIBMCdTektonPipelineMapToWorkerIdentity(modelMap map[string]interface{}) (*cdtektonpipelinev2.WorkerIdentity, error) {
 	model := &cdtektonpipelinev2.WorkerIdentity{}
-	model.ID = core.StringPtr(modelMap["id"].(string))
+	if modelMap["id"] != nil {
+		model.ID = core.StringPtr(modelMap["id"].(string))
+	}
 	return model, nil
 }
 
@@ -877,7 +872,9 @@ func ResourceIBMCdTektonPipelineWorkerToMap(model *cdtektonpipelinev2.Worker) (m
 	if model.Type != nil {
 		modelMap["type"] = *model.Type
 	}
-	modelMap["id"] = *model.ID
+	if model.ID != nil {
+		modelMap["id"] = *model.ID
+	}
 	return modelMap, nil
 }
 
@@ -1340,18 +1337,26 @@ func ResourceIBMCdTektonPipelineTektonPipelinePatchAsPatch(patchVals *cdtektonpi
 	path = "next_build_number"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["next_build_number"] = nil
+	} else if !exists {
+		delete(patch, "next_build_number")
 	}
 	path = "enable_notifications"
 	if _, exists := d.GetOkExists(path); d.HasChange(path) && !exists {
 		patch["enable_notifications"] = nil
+	} else if !exists {
+		delete(patch, "enable_notifications")
 	}
 	path = "enable_partial_cloning"
 	if _, exists := d.GetOkExists(path); d.HasChange(path) && !exists {
 		patch["enable_partial_cloning"] = nil
+	} else if !exists {
+		delete(patch, "enable_partial_cloning")
 	}
 	path = "worker"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["worker"] = nil
+	} else if !exists {
+		delete(patch, "worker")
 	}
 
 	return patch
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_definition.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_definition.go
index dbfa45eba..9728995ce 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_definition.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_definition.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
@@ -205,6 +205,10 @@ func resourceIBMCdTektonPipelineDefinitionRead(context context.Context, d *schem
 			return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_definition", "read", "set-href").GetDiag()
 		}
 	}
+	if err = d.Set("pipeline_id", parts[0]); err != nil {
+		err = fmt.Errorf("Error setting pipeline_id: %s", err)
+		return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_definition", "read", "set-pipeline_id").GetDiag()
+	}
 	if err = d.Set("definition_id", definition.ID); err != nil {
 		err = fmt.Errorf("Error setting definition_id: %s", err)
 		return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_definition", "read", "set-definition_id").GetDiag()
@@ -230,14 +234,10 @@ func resourceIBMCdTektonPipelineDefinitionUpdate(context context.Context, d *sch
 
 	replaceTektonPipelineDefinitionOptions.SetPipelineID(parts[0])
 	replaceTektonPipelineDefinitionOptions.SetDefinitionID(parts[1])
+	replaceTektonPipelineDefinitionOptions.SetPipelineID(d.Get("pipeline_id").(string))
 
 	hasChange := false
 
-	if d.HasChange("pipeline_id") {
-		errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+
-			" The resource must be re-created to update this property.", "pipeline_id")
-		return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_cd_tekton_pipeline_definition", "update", "pipeline_id-forces-new").GetDiag()
-	}
 	if d.HasChange("source") {
 		source, err := ResourceIBMCdTektonPipelineDefinitionMapToDefinitionSource(d.Get("source.0").(map[string]interface{}))
 		if err != nil {
@@ -246,7 +246,6 @@ func resourceIBMCdTektonPipelineDefinitionUpdate(context context.Context, d *sch
 		replaceTektonPipelineDefinitionOptions.SetSource(source)
 		hasChange = true
 	}
-
 	if hasChange {
 		_, _, err = cdTektonPipelineClient.ReplaceTektonPipelineDefinitionWithContext(context, replaceTektonPipelineDefinitionOptions)
 		if err != nil {
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_property.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_property.go
index fe561319a..0a1d84a9a 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_property.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_property.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
@@ -210,6 +210,10 @@ func resourceIBMCdTektonPipelinePropertyRead(context context.Context, d *schema.
 		return tfErr.GetDiag()
 	}
 
+	if err = d.Set("pipeline_id", parts[0]); err != nil {
+		err = fmt.Errorf("Error setting pipeline_id: %s", err)
+		return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_property", "read", "set-pipeline_id").GetDiag()
+	}
 	if err = d.Set("name", property.Name); err != nil {
 		err = fmt.Errorf("Error setting name: %s", err)
 		return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_property", "read", "set-name").GetDiag()
@@ -269,26 +273,12 @@ func resourceIBMCdTektonPipelinePropertyUpdate(context context.Context, d *schem
 
 	replaceTektonPipelinePropertyOptions.SetPipelineID(parts[0])
 	replaceTektonPipelinePropertyOptions.SetPropertyName(parts[1])
+	replaceTektonPipelinePropertyOptions.SetPipelineID(d.Get("pipeline_id").(string))
 	replaceTektonPipelinePropertyOptions.SetName(d.Get("name").(string))
 	replaceTektonPipelinePropertyOptions.SetType(d.Get("type").(string))
 
 	hasChange := false
 
-	if d.HasChange("pipeline_id") {
-		errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+
-			" The resource must be re-created to update this property.", "pipeline_id")
-		return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_cd_tekton_pipeline_property", "update", "pipeline_id-forces-new").GetDiag()
-	}
-	if d.HasChange("name") {
-		errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+
-			" The resource must be re-created to update this property.", "name")
-		return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_cd_tekton_pipeline_property", "update", "name-forces-new").GetDiag()
-	}
-	if d.HasChange("type") {
-		errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+
-			" The resource must be re-created to update this property.", "type")
-		return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_cd_tekton_pipeline_property", "update", "type-forces-new").GetDiag()
-	}
 	if d.HasChange("locked") {
 		replaceTektonPipelinePropertyOptions.SetLocked(d.Get("locked").(bool))
 		hasChange = true
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger.go
index 12cee1528..84a871389 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
@@ -264,7 +264,6 @@ func ResourceIBMCdTektonPipelineTrigger() *schema.Resource {
 						},
 						"href": &schema.Schema{
 							Type:        schema.TypeString,
-							Optional:    true,
 							Computed:    true,
 							Description: "API URL for interacting with the trigger property.",
 						},
@@ -497,6 +496,10 @@ func resourceIBMCdTektonPipelineTriggerRead(context context.Context, d *schema.R
 	}
 
 	trigger := triggerIntf.(*cdtektonpipelinev2.Trigger)
+	if err = d.Set("pipeline_id", parts[0]); err != nil {
+		err = fmt.Errorf("Error setting pipeline_id: %s", err)
+		return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_trigger", "read", "set-pipeline_id").GetDiag()
+	}
 	if err = d.Set("type", trigger.Type); err != nil {
 		err = fmt.Errorf("Error setting type: %s", err)
 		return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_trigger", "read", "set-type").GetDiag()
@@ -799,7 +802,9 @@ func resourceIBMCdTektonPipelineTriggerDelete(context context.Context, d *schema
 
 func ResourceIBMCdTektonPipelineTriggerMapToWorkerIdentity(modelMap map[string]interface{}) (*cdtektonpipelinev2.WorkerIdentity, error) {
 	model := &cdtektonpipelinev2.WorkerIdentity{}
-	model.ID = core.StringPtr(modelMap["id"].(string))
+	if modelMap["id"] != nil {
+		model.ID = core.StringPtr(modelMap["id"].(string))
+	}
 	return model, nil
 }
 
@@ -945,90 +950,130 @@ func ResourceIBMCdTektonPipelineTriggerTriggerPatchAsPatch(patchVals *cdtektonpi
 	path = "type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["type"] = nil
+	} else if !exists {
+		delete(patch, "type")
 	}
 	path = "name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["name"] = nil
+	} else if !exists {
+		delete(patch, "name")
 	}
 	path = "event_listener"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["event_listener"] = nil
+	} else if !exists {
+		delete(patch, "event_listener")
 	}
 	path = "tags"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["tags"] = nil
+	} else if !exists {
+		delete(patch, "tags")
 	}
 	path = "worker"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["worker"] = nil
+	} else if !exists {
+		delete(patch, "worker")
 	}
 	path = "max_concurrent_runs"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["max_concurrent_runs"] = nil
+	} else if !exists {
+		delete(patch, "max_concurrent_runs")
 	}
 	path = "enabled"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["enabled"] = nil
+	} else if !exists {
+		delete(patch, "enabled")
 	}
 	path = "secret"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["secret"] = nil
 	} else if exists && patch["secret"] != nil {
-		ResourceIBMCdTektonPipelineTriggerGenericSecretAsPatch(patch["secret"].(map[string]interface{}), d)
+		ResourceIBMCdTektonPipelineTriggerGenericSecretAsPatch(patch["secret"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "secret")
 	}
 	path = "cron"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["cron"] = nil
+	} else if !exists {
+		delete(patch, "cron")
 	}
 	path = "timezone"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["timezone"] = nil
+	} else if !exists {
+		delete(patch, "timezone")
 	}
 	path = "source"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["source"] = nil
+	} else if !exists {
+		delete(patch, "source")
 	}
 	path = "events"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["events"] = nil
+	} else if !exists {
+		delete(patch, "events")
 	}
 	path = "filter"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["filter"] = nil
+	} else if !exists {
+		delete(patch, "filter")
 	}
 	path = "favorite"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["favorite"] = nil
+	} else if !exists {
+		delete(patch, "favorite")
 	}
 	path = "enable_events_from_forks"
 	if _, exists := d.GetOkExists(path); d.HasChange(path) && !exists {
 		patch["enable_events_from_forks"] = nil
+	} else if !exists {
+		delete(patch, "enable_events_from_forks")
 	}
 
 	return patch
 }
 
-func ResourceIBMCdTektonPipelineTriggerGenericSecretAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIBMCdTektonPipelineTriggerGenericSecretAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "secret.0.type"
+	path = rootPath + ".type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["type"] = nil
+	} else if !exists {
+		delete(patch, "type")
 	}
-	path = "secret.0.value"
+	path = rootPath + ".value"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["value"] = nil
+	} else if !exists {
+		delete(patch, "value")
 	}
-	path = "secret.0.source"
+	path = rootPath + ".source"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["source"] = nil
+	} else if !exists {
+		delete(patch, "source")
 	}
-	path = "secret.0.key_name"
+	path = rootPath + ".key_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["key_name"] = nil
+	} else if !exists {
+		delete(patch, "key_name")
 	}
-	path = "secret.0.algorithm"
+	path = rootPath + ".algorithm"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["algorithm"] = nil
+	} else if !exists {
+		delete(patch, "algorithm")
 	}
 }
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_property.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_property.go
index 75ce3ad35..eb513347a 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_property.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_property.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline
@@ -228,6 +228,14 @@ func resourceIBMCdTektonPipelineTriggerPropertyRead(context context.Context, d *
 		return tfErr.GetDiag()
 	}
 
+	if err = d.Set("pipeline_id", parts[0]); err != nil {
+		err = fmt.Errorf("Error setting pipeline_id: %s", err)
+		return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_trigger_property", "read", "set-pipeline_id").GetDiag()
+	}
+	if err = d.Set("trigger_id", parts[1]); err != nil {
+		err = fmt.Errorf("Error setting trigger_id: %s", err)
+		return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_trigger_property", "read", "set-trigger_id").GetDiag()
+	}
 	if err = d.Set("name", triggerProperty.Name); err != nil {
 		err = fmt.Errorf("Error setting name: %s", err)
 		return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_cd_tekton_pipeline_trigger_property", "read", "set-name").GetDiag()
@@ -288,31 +296,13 @@ func resourceIBMCdTektonPipelineTriggerPropertyUpdate(context context.Context, d
 	replaceTektonPipelineTriggerPropertyOptions.SetPipelineID(parts[0])
 	replaceTektonPipelineTriggerPropertyOptions.SetTriggerID(parts[1])
 	replaceTektonPipelineTriggerPropertyOptions.SetPropertyName(parts[2])
+	replaceTektonPipelineTriggerPropertyOptions.SetPipelineID(d.Get("pipeline_id").(string))
+	replaceTektonPipelineTriggerPropertyOptions.SetTriggerID(d.Get("trigger_id").(string))
 	replaceTektonPipelineTriggerPropertyOptions.SetName(d.Get("name").(string))
 	replaceTektonPipelineTriggerPropertyOptions.SetType(d.Get("type").(string))
 
 	hasChange := false
 
-	if d.HasChange("pipeline_id") {
-		errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+
-			" The resource must be re-created to update this property.", "pipeline_id")
-		return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_cd_tekton_pipeline_trigger_property", "update", "pipeline_id-forces-new").GetDiag()
-	}
-	if d.HasChange("trigger_id") {
-		errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+
-			" The resource must be re-created to update this property.", "trigger_id")
-		return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_cd_tekton_pipeline_trigger_property", "update", "trigger_id-forces-new").GetDiag()
-	}
-	if d.HasChange("name") {
-		errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+
-			" The resource must be re-created to update this property.", "name")
-		return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_cd_tekton_pipeline_trigger_property", "update", "name-forces-new").GetDiag()
-	}
-	if d.HasChange("type") {
-		errMsg := fmt.Sprintf("Cannot update resource property \"%s\" with the ForceNew annotation."+
-			" The resource must be re-created to update this property.", "type")
-		return flex.DiscriminatedTerraformErrorf(nil, errMsg, "ibm_cd_tekton_pipeline_trigger_property", "update", "type-forces-new").GetDiag()
-	}
 	if d.HasChange("locked") {
 		replaceTektonPipelineTriggerPropertyOptions.SetLocked(d.Get("locked").(bool))
 		hasChange = true
diff --git a/ibm/service/cis/data_source_ibm_cis_rulesets.go b/ibm/service/cis/data_source_ibm_cis_rulesets.go
index f1e16dd73..12949a0b6 100644
--- a/ibm/service/cis/data_source_ibm_cis_rulesets.go
+++ b/ibm/service/cis/data_source_ibm_cis_rulesets.go
@@ -526,15 +526,10 @@ func flattenCISRulesetsRuleActionParameters(rulesetsRuleActionParameterObj *rule
 	if _, ok := actionParametersOutput["rulesets"]; ok {
 		resultOutput[CISRulesetList] = rulesetsRuleActionParameterObj.Rulesets
 	}
-	if val, ok := actionParametersOutput["response"]; ok {
-		response := map[string]interface{}{}
-
-		res, _ := json.Marshal(val)
-		json.Unmarshal(res, &response)
-
-		resultOutput[CISRulesetsRuleActionParametersResponse] = response
+	if _, ok := actionParametersOutput["response"]; ok {
+		flattenCISRulesetsRuleActionParameterResponse := flattenCISRulesetsRuleActionParameterResponse(rulesetsRuleActionParameterObj.Response)
+		resultOutput[CISRulesetsRuleActionParametersResponse] = []map[string]interface{}{flattenCISRulesetsRuleActionParameterResponse}
 	}
-
 	if _, ok := actionParametersOutput["overrides"]; ok {
 		flattenCISRulesetsRuleActionParameterOverrides := flattenCISRulesetsRuleActionParameterOverrides(rulesetsRuleActionParameterObj.Overrides)
 		resultOutput[CISRulesetOverrides] = []map[string]interface{}{flattenCISRulesetsRuleActionParameterOverrides}
@@ -543,6 +538,26 @@ func flattenCISRulesetsRuleActionParameters(rulesetsRuleActionParameterObj *rule
 	return resultOutput
 }
 
+func flattenCISRulesetsRuleActionParameterResponse(rulesetsRuleActionParameterResponseObj *rulesetsv1.ActionParametersResponse) map[string]interface{} {
+	actionParameterResponseOutput := map[string]interface{}{}
+	resultOutput := map[string]interface{}{}
+
+	res, _ := json.Marshal(rulesetsRuleActionParameterResponseObj)
+	json.Unmarshal(res, &actionParameterResponseOutput)
+
+	if val, ok := actionParameterResponseOutput["content"]; ok {
+		resultOutput[CISRulesetsRuleActionParametersResponseContent] = val.(string)
+	}
+	if val, ok := actionParameterResponseOutput["content_type"]; ok {
+		resultOutput[CISRulesetsRuleActionParametersResponseContentType] = val.(string)
+	}
+	if val, ok := actionParameterResponseOutput["status_code"]; ok {
+		resultOutput[CISRulesetsRuleActionParametersResponseStatusCode] = val.(float64)
+	}
+
+	return resultOutput
+}
+
 func flattenCISRulesetsRuleActionParameterOverrides(rulesetsRuleActionParameterOverridesObj *rulesetsv1.Overrides) map[string]interface{} {
 	actionParameterOverridesOutput := map[string]interface{}{}
 	resultOutput := map[string]interface{}{}
diff --git a/ibm/service/cis/resource_ibm_cis_ruleset.go b/ibm/service/cis/resource_ibm_cis_ruleset.go
index b2623ea72..cfd3b75b5 100644
--- a/ibm/service/cis/resource_ibm_cis_ruleset.go
+++ b/ibm/service/cis/resource_ibm_cis_ruleset.go
@@ -649,15 +649,11 @@ func expandCISRulesetsRulesActionParametersOverridesCategories(obj interface{})
 		category := response[CISRulesetOverridesCategoriesCategory].(string)
 		overrideRespObj := rulesetsv1.CategoriesOverride{
 			Category: &category,
+			Enabled:  &enabled,
 		}
-
 		if action != "" {
 			overrideRespObj.Action = &action
 		}
-		if enabled {
-			overrideRespObj.Enabled = &enabled
-		}
-
 		finalResponse = append(finalResponse, overrideRespObj)
 
 	}
@@ -677,14 +673,12 @@ func expandCISRulesetsRulesActionParametersOverridesRules(obj interface{}) []rul
 		score := int64(response[CISRulesetOverridesScoreThreshold].(int))
 
 		overrideRespObj := rulesetsv1.RulesOverride{
-			ID: &id,
+			ID:      &id,
+			Enabled: &enabled,
 		}
 		if action != "" {
 			overrideRespObj.Action = &action
 		}
-		if enabled {
-			overrideRespObj.Enabled = &enabled
-		}
 		if score != 0 {
 			overrideRespObj.ScoreThreshold = &score
 		}
diff --git a/ibm/service/kms/resource_ibm_kms_key.go b/ibm/service/kms/resource_ibm_kms_key.go
index 977db3182..a36da69b6 100644
--- a/ibm/service/kms/resource_ibm_kms_key.go
+++ b/ibm/service/kms/resource_ibm_kms_key.go
@@ -135,7 +135,7 @@ func ResourceIBMKmskey() *schema.Resource {
 			"expiration_date": {
 				Type:        schema.TypeString,
 				Optional:    true,
-				Description: "The date the key material expires. The date format follows RFC 3339. You can set an expiration date on any key on its creation. A key moves into the Deactivated state within one hour past its expiration date, if one is assigned. If you create a key without specifying an expiration date, the key does not expire",
+				Description: "The date and time that the key expires in the system, in RFC 3339 format (YYYY-MM-DD HH:MM:SS.SS, for example 2019-10-12T07:20:50.52Z). Use caution when setting an expiration date, as keys created with an expiration date automatically transition to the Deactivated state within one hour after expiration. In this state, the only allowed actions on the key are unwrap, rewrap, rotate, and delete. Deactivated keys cannot be used to encrypt (wrap) new data, even if rotated while deactivated. Rotation does not reset or extend the expiration date, nor does it allow the date to be changed. It is recommended that any data encrypted with an expiring or expired key be re-encrypted using a new customer root key (CRK) before the original CRK expires, to prevent service disruptions. Deleting and restoring a deactivated key does not move it back to the Active state. If the expiration_date attribute is omitted, the key does not expire.",
 				ForceNew:    true,
 			},
 			"instance_crn": {
diff --git a/ibm/service/kms/resource_ibm_kms_key_with_policy_overrides.go b/ibm/service/kms/resource_ibm_kms_key_with_policy_overrides.go
index 262aefd54..3f93e9cd0 100644
--- a/ibm/service/kms/resource_ibm_kms_key_with_policy_overrides.go
+++ b/ibm/service/kms/resource_ibm_kms_key_with_policy_overrides.go
@@ -113,7 +113,7 @@ func ResourceIBMKmsKeyWithPolicyOverrides() *schema.Resource {
 			"expiration_date": {
 				Type:        schema.TypeString,
 				Optional:    true,
-				Description: "The date the key material expires. The date format follows RFC 3339. You can set an expiration date on any key on its creation. A key moves into the Deactivated state within one hour past its expiration date, if one is assigned. If you create a key without specifying an expiration date, the key does not expire",
+				Description: "The date and time that the key expires in the system, in RFC 3339 format (YYYY-MM-DD HH:MM:SS.SS, for example 2019-10-12T07:20:50.52Z). Use caution when setting an expiration date, as keys created with an expiration date automatically transition to the Deactivated state within one hour after expiration. In this state, the only allowed actions on the key are unwrap, rewrap, rotate, and delete. Deactivated keys cannot be used to encrypt (wrap) new data, even if rotated while deactivated. Rotation does not reset or extend the expiration date, nor does it allow the date to be changed. It is recommended that any data encrypted with an expiring or expired key be re-encrypted using a new customer root key (CRK) before the original CRK expires, to prevent service disruptions. Deleting and restoring a deactivated key does not move it back to the Active state. If the expiration_date attribute is omitted, the key does not expire.",
 				ForceNew:    true,
 			},
 			"instance_crn": {
diff --git a/ibm/service/power/data_source_ibm_pi_cloud_connection.go b/ibm/service/power/data_source_ibm_pi_cloud_connection.go
index f877aac73..333d16f15 100644
--- a/ibm/service/power/data_source_ibm_pi_cloud_connection.go
+++ b/ibm/service/power/data_source_ibm_pi_cloud_connection.go
@@ -157,14 +157,14 @@ func dataSourceIBMPICloudConnectionRead(ctx context.Context, d *schema.ResourceD
 	d.Set(Arg_CloudInstanceID, cloudInstanceID)
 	d.Set(Arg_CloudConnectionName, cloudConnection.Name)
 
+	d.Set(Attr_ConnectionMode, cloudConnection.ConnectionMode)
 	d.Set(Attr_GlobalRouting, cloudConnection.GlobalRouting)
-	d.Set(Attr_Metered, cloudConnection.Metered)
 	d.Set(Attr_IBMIPAddress, cloudConnection.IbmIPAddress)
-	d.Set(Attr_UserIPAddress, cloudConnection.UserIPAddress)
-	d.Set(Attr_Status, cloudConnection.LinkStatus)
+	d.Set(Attr_Metered, cloudConnection.Metered)
 	d.Set(Attr_Port, cloudConnection.Port)
 	d.Set(Attr_Speed, cloudConnection.Speed)
-	d.Set(Attr_ConnectionMode, cloudConnection.ConnectionMode)
+	d.Set(Attr_Status, cloudConnection.LinkStatus)
+	d.Set(Attr_UserIPAddress, cloudConnection.UserIPAddress)
 	if cloudConnection.Networks != nil {
 		networks := make([]string, len(cloudConnection.Networks))
 		for i, ccNetwork := range cloudConnection.Networks {
@@ -183,7 +183,7 @@ func dataSourceIBMPICloudConnectionRead(ctx context.Context, d *schema.ResourceD
 	}
 	if cloudConnection.Vpc != nil {
 		d.Set(Attr_VPCEnabled, cloudConnection.Vpc.Enabled)
-		if cloudConnection.Vpc.Vpcs != nil && len(cloudConnection.Vpc.Vpcs) > 0 {
+		if len(cloudConnection.Vpc.Vpcs) > 0 {
 			vpcCRNs := make([]string, len(cloudConnection.Vpc.Vpcs))
 			for i, vpc := range cloudConnection.Vpc.Vpcs {
 				vpcCRNs[i] = *vpc.VpcID
diff --git a/ibm/service/power/data_source_ibm_pi_cloud_connections.go b/ibm/service/power/data_source_ibm_pi_cloud_connections.go
index 2e99b1ea9..cd98d96ec 100644
--- a/ibm/service/power/data_source_ibm_pi_cloud_connections.go
+++ b/ibm/service/power/data_source_ibm_pi_cloud_connections.go
@@ -172,7 +172,7 @@ func dataSourceIBMPICloudConnectionsRead(ctx context.Context, d *schema.Resource
 		}
 		if cloudConnection.Vpc != nil {
 			cc[Attr_VPCEnabled] = cloudConnection.Vpc.Enabled
-			if cloudConnection.Vpc.Vpcs != nil && len(cloudConnection.Vpc.Vpcs) > 0 {
+			if len(cloudConnection.Vpc.Vpcs) > 0 {
 				vpcCRNs := make([]string, len(cloudConnection.Vpc.Vpcs))
 				for i, vpc := range cloudConnection.Vpc.Vpcs {
 					vpcCRNs[i] = *vpc.VpcID
diff --git a/ibm/service/power/data_source_ibm_pi_instance_volumes.go b/ibm/service/power/data_source_ibm_pi_instance_volumes.go
index 385f0e579..52c55e585 100644
--- a/ibm/service/power/data_source_ibm_pi_instance_volumes.go
+++ b/ibm/service/power/data_source_ibm_pi_instance_volumes.go
@@ -153,7 +153,10 @@ func dataSourceIBMPIInstanceVolumesRead(ctx context.Context, d *schema.ResourceD
 
 	var clientgenU, _ = uuid.GenerateUUID()
 	d.SetId(clientgenU)
-	d.Set(Attr_BootVolumeID, *volumedata.Volumes[0].VolumeID)
+	if len(volumedata.Volumes) > 0 {
+		d.Set(Attr_BootVolumeID, *volumedata.Volumes[0].VolumeID)
+	}
+
 	d.Set(Attr_InstanceVolumes, flattenVolumesInstances(volumedata.Volumes, meta))
 
 	return nil
@@ -162,7 +165,6 @@ func dataSourceIBMPIInstanceVolumesRead(ctx context.Context, d *schema.ResourceD
 func flattenVolumesInstances(list []*models.VolumeReference, meta interface{}) []map[string]interface{} {
 	result := make([]map[string]interface{}, 0, len(list))
 	for _, i := range list {
-
 		l := map[string]interface{}{
 			Attr_Bootable:           *i.Bootable,
 			Attr_CreationDate:       i.CreationDate.String(),
@@ -191,7 +193,6 @@ func flattenVolumesInstances(list []*models.VolumeReference, meta interface{}) [
 		if len(i.ReplicationSites) > 0 {
 			l[Attr_ReplicationSites] = i.ReplicationSites
 		}
-
 		result = append(result, l)
 	}
 	return result
diff --git a/ibm/service/power/data_source_ibm_pi_volume_snapshot.go b/ibm/service/power/data_source_ibm_pi_volume_snapshot.go
index 481313356..6011c6d60 100644
--- a/ibm/service/power/data_source_ibm_pi_volume_snapshot.go
+++ b/ibm/service/power/data_source_ibm_pi_volume_snapshot.go
@@ -40,6 +40,7 @@ func DataSourceIBMPIVolumeSnapshot() *schema.Resource {
 			},
 			Attr_CRN: {
 				Computed:    true,
+				Deprecated:  "This field is deprecated.",
 				Description: "The CRN of the volume snapshot.",
 				Type:        schema.TypeString,
 			},
diff --git a/ibm/service/power/data_source_ibm_pi_volume_snapshots.go b/ibm/service/power/data_source_ibm_pi_volume_snapshots.go
index b648b0be2..e734135b7 100644
--- a/ibm/service/power/data_source_ibm_pi_volume_snapshots.go
+++ b/ibm/service/power/data_source_ibm_pi_volume_snapshots.go
@@ -41,6 +41,7 @@ func DataSourceIBMPIVolumeSnapshots() *schema.Resource {
 						},
 						Attr_CRN: {
 							Computed:    true,
+							Deprecated:  "This field is deprecated.",
 							Description: "The CRN of the volume snapshot.",
 							Type:        schema.TypeString,
 						},
diff --git a/ibm/service/power/resource_ibm_pi_capture.go b/ibm/service/power/resource_ibm_pi_capture.go
index 51e8af436..0a84310a4 100644
--- a/ibm/service/power/resource_ibm_pi_capture.go
+++ b/ibm/service/power/resource_ibm_pi_capture.go
@@ -12,7 +12,6 @@ import (
 	"time"
 
 	"github.com/IBM-Cloud/power-go-client/clients/instance"
-	st "github.com/IBM-Cloud/power-go-client/clients/instance"
 	"github.com/IBM-Cloud/power-go-client/power/client/p_cloud_images"
 	"github.com/IBM-Cloud/power-go-client/power/models"
 	"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
@@ -196,7 +195,7 @@ func resourceIBMPICaptureCreate(ctx context.Context, d *schema.ResourceData, met
 	}
 
 	if _, ok := d.GetOk(Arg_UserTags); ok && capturedestination != CloudStorage {
-		imageClient := st.NewIBMPIImageClient(ctx, sess, cloudInstanceID)
+		imageClient := instance.NewIBMPIImageClient(ctx, sess, cloudInstanceID)
 		imagedata, err := imageClient.Get(capturename)
 		if err != nil {
 			if strings.Contains(err.Error(), NotFound) {
diff --git a/ibm/service/power/resource_ibm_pi_cloud_connection.go b/ibm/service/power/resource_ibm_pi_cloud_connection.go
index f6eae4073..93c034b11 100644
--- a/ibm/service/power/resource_ibm_pi_cloud_connection.go
+++ b/ibm/service/power/resource_ibm_pi_cloud_connection.go
@@ -461,7 +461,7 @@ func resourceIBMPICloudConnectionRead(ctx context.Context, d *schema.ResourceDat
 	}
 	if cloudConnection.Vpc != nil {
 		d.Set(Arg_CloudConnectionVPCEnabled, cloudConnection.Vpc.Enabled)
-		if cloudConnection.Vpc.Vpcs != nil && len(cloudConnection.Vpc.Vpcs) > 0 {
+		if len(cloudConnection.Vpc.Vpcs) > 0 {
 			vpcCRNs := make([]string, len(cloudConnection.Vpc.Vpcs))
 			for i, vpc := range cloudConnection.Vpc.Vpcs {
 				vpcCRNs[i] = *vpc.VpcID
diff --git a/ibm/service/power/resource_ibm_pi_host.go b/ibm/service/power/resource_ibm_pi_host.go
index 35a752178..d1bf3a89e 100644
--- a/ibm/service/power/resource_ibm_pi_host.go
+++ b/ibm/service/power/resource_ibm_pi_host.go
@@ -282,7 +282,7 @@ func resourceIBMPIHostRead(ctx context.Context, d *schema.ResourceData, meta int
 	if host.SysType != "" {
 		d.Set(Attr_SysType, host.SysType)
 	}
-	d.Set(Arg_Host, flattenHostArgumentToList(d, meta))
+	d.Set(Arg_Host, flattenHostArgumentToList(d))
 
 	return nil
 }
@@ -447,7 +447,7 @@ func isIBMPIHostRefreshFunc(client *instance.IBMPIHostGroupsClient, id string) r
 	}
 }
 
-func flattenHostArgumentToList(d *schema.ResourceData, meta interface{}) []map[string]interface{} {
+func flattenHostArgumentToList(d *schema.ResourceData) []map[string]interface{} {
 	hostListType := make([]map[string]interface{}, 0)
 	h := map[string]interface{}{}
 	if v, ok := d.GetOk(Attr_DisplayName); ok {
diff --git a/ibm/service/power/resource_ibm_pi_image.go b/ibm/service/power/resource_ibm_pi_image.go
index fdc47a362..723a5bc72 100644
--- a/ibm/service/power/resource_ibm_pi_image.go
+++ b/ibm/service/power/resource_ibm_pi_image.go
@@ -454,7 +454,7 @@ func isWaitForIBMPIImageAvailable(ctx context.Context, client *instance.IBMPIIma
 	stateConf := &retry.StateChangeConf{
 		Pending:    []string{State_Retry, State_Queued},
 		Target:     []string{State_Active},
-		Refresh:    isIBMPIImageRefreshFunc(ctx, client, id),
+		Refresh:    isIBMPIImageRefreshFunc(client, id),
 		Timeout:    timeout,
 		Delay:      20 * time.Second,
 		MinTimeout: 10 * time.Second,
@@ -463,7 +463,7 @@ func isWaitForIBMPIImageAvailable(ctx context.Context, client *instance.IBMPIIma
 	return stateConf.WaitForStateContext(ctx)
 }
 
-func isIBMPIImageRefreshFunc(ctx context.Context, client *instance.IBMPIImageClient, id string) retry.StateRefreshFunc {
+func isIBMPIImageRefreshFunc(client *instance.IBMPIImageClient, id string) retry.StateRefreshFunc {
 
 	log.Printf("Calling the isIBMPIImageRefreshFunc Refresh Function....")
 	return func() (interface{}, string, error) {
diff --git a/ibm/service/power/resource_ibm_pi_network.go b/ibm/service/power/resource_ibm_pi_network.go
index c954f1172..9da7ec6af 100644
--- a/ibm/service/power/resource_ibm_pi_network.go
+++ b/ibm/service/power/resource_ibm_pi_network.go
@@ -19,7 +19,6 @@ import (
 	"github.com/apparentlymart/go-cidr/cidr"
 	"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
-	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
@@ -504,7 +503,7 @@ func isWaitForIBMPINetworkDeleted(ctx context.Context, client *instance.IBMPINet
 	return stateConf.WaitForStateContext(ctx)
 }
 
-func isIBMPINetworkRefreshDeleteFunc(client *instance.IBMPINetworkClient, id string) resource.StateRefreshFunc {
+func isIBMPINetworkRefreshDeleteFunc(client *instance.IBMPINetworkClient, id string) retry.StateRefreshFunc {
 	return func() (interface{}, string, error) {
 		network, err := client.Get(id)
 		if err != nil {
diff --git a/ibm/service/vpc/data_source_ibm_is_lb_listener_policy.go b/ibm/service/vpc/data_source_ibm_is_lb_listener_policy.go
index 90ba7066f..46e607024 100644
--- a/ibm/service/vpc/data_source_ibm_is_lb_listener_policy.go
+++ b/ibm/service/vpc/data_source_ibm_is_lb_listener_policy.go
@@ -101,7 +101,7 @@ func DataSourceIBMISLBListenerPolicy() *schema.Resource {
 			"target": &schema.Schema{
 				Type:        schema.TypeList,
 				Computed:    true,
-				Description: "- If `action` is `forward`, the response is a `LoadBalancerPoolReference`- If `action` is `redirect`, the response is a `LoadBalancerListenerPolicyRedirectURL`- If `action` is `https_redirect`, the response is a `LoadBalancerListenerHTTPSRedirect`.",
+				Description: "- If `action` is `forward` or `forward_to_pool`, the response is a `LoadBalancerPoolReference`- If `action` is `forward_to_listener`, specify a `LoadBalancerListenerIdentity` in this load balancer to forward to. -  If `action` is `redirect`, the response is a `LoadBalancerListenerPolicyRedirectURL`- If `action` is `https_redirect`, the response is a `LoadBalancerListenerHTTPSRedirect`.",
 				Elem: &schema.Resource{
 					Schema: map[string]*schema.Schema{
 						"deleted": &schema.Schema{
@@ -126,12 +126,12 @@ func DataSourceIBMISLBListenerPolicy() *schema.Resource {
 						"id": &schema.Schema{
 							Type:        schema.TypeString,
 							Computed:    true,
-							Description: "The unique identifier for this load balancer pool.",
+							Description: "The unique identifier for this load balancer pool or load balancer listener",
 						},
 						"name": &schema.Schema{
 							Type:        schema.TypeString,
 							Computed:    true,
-							Description: "The user-defined name for this load balancer pool.",
+							Description: "The user-defined name for this load balancer pool or load balancer listener.",
 						},
 						"http_status_code": &schema.Schema{
 							Type:        schema.TypeInt,
diff --git a/ibm/service/vpc/resource_ibm_is_instance.go b/ibm/service/vpc/resource_ibm_is_instance.go
index 7afa36ab5..df49a97dd 100644
--- a/ibm/service/vpc/resource_ibm_is_instance.go
+++ b/ibm/service/vpc/resource_ibm_is_instance.go
@@ -6743,27 +6743,6 @@ func instanceUpdate(d *schema.ResourceData, meta interface{}) error {
 
 	}
 
-	if d.HasChange(isInstanceTotalVolumeBandwidth) && !d.IsNewResource() {
-		totalVolBandwidth := int64(d.Get(isInstanceTotalVolumeBandwidth).(int))
-		updnetoptions := &vpcv1.UpdateInstanceOptions{
-			ID: &id,
-		}
-
-		instancePatchModel := &vpcv1.InstancePatch{
-			TotalVolumeBandwidth: &totalVolBandwidth,
-		}
-		instancePatch, err := instancePatchModel.AsPatch()
-		if err != nil {
-			return fmt.Errorf("[ERROR] Error calling asPatch with total volume bandwidth for InstancePatch: %s", err)
-		}
-		updnetoptions.InstancePatch = instancePatch
-
-		_, _, err = instanceC.UpdateInstance(updnetoptions)
-		if err != nil {
-			return err
-		}
-	}
-
 	if (d.HasChange(isInstanceName) || d.HasChange("confidential_compute_mode") || d.HasChange("enable_secure_boot")) && !d.IsNewResource() {
 		restartNeeded := false
 		serverstopped := false
@@ -7006,6 +6985,26 @@ func instanceUpdate(d *schema.ResourceData, meta interface{}) error {
 		}
 
 	}
+	if d.HasChange(isInstanceTotalVolumeBandwidth) && !d.IsNewResource() {
+		totalVolBandwidth := int64(d.Get(isInstanceTotalVolumeBandwidth).(int))
+		updnetoptions := &vpcv1.UpdateInstanceOptions{
+			ID: &id,
+		}
+
+		instancePatchModel := &vpcv1.InstancePatch{
+			TotalVolumeBandwidth: &totalVolBandwidth,
+		}
+		instancePatch, err := instancePatchModel.AsPatch()
+		if err != nil {
+			return fmt.Errorf("[ERROR] Error calling asPatch with total volume bandwidth for InstancePatch: %s", err)
+		}
+		updnetoptions.InstancePatch = instancePatch
+
+		_, _, err = instanceC.UpdateInstance(updnetoptions)
+		if err != nil {
+			return err
+		}
+	}
 
 	getinsOptions := &vpcv1.GetInstanceOptions{
 		ID: &id,
diff --git a/ibm/service/vpc/resource_ibm_is_lb_listener_policy.go b/ibm/service/vpc/resource_ibm_is_lb_listener_policy.go
index 8e11b8d77..3d5d4c177 100644
--- a/ibm/service/vpc/resource_ibm_is_lb_listener_policy.go
+++ b/ibm/service/vpc/resource_ibm_is_lb_listener_policy.go
@@ -133,6 +133,17 @@ func ResourceIBMISLBListenerPolicy() *schema.Resource {
 				ForceNew:     true,
 				ValidateFunc: validate.InvokeValidator("ibm_is_lb_listener_policy", isLBListenerPolicyAction),
 				Description:  "Policy Action",
+				DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
+					// Suppress the change if the old value is 'forward' and new value is 'forward_to_pool'
+					if old == "forward" && new == "forward_to_pool" {
+						return true
+					}
+					// Suppress the change if the old value is 'forward_to_pool' and new value is 'forward'
+					if old == "forward_to_pool" && new == "forward" {
+						return true
+					}
+					return false
+				},
 			},
 
 			isLBListenerPolicyPriority: {
@@ -360,7 +371,7 @@ func ResourceIBMISLBListenerPolicy() *schema.Resource {
 func ResourceIBMISLBListenerPolicyValidator() *validate.ResourceValidator {
 
 	validateSchema := make([]validate.ValidateSchema, 0)
-	action := "forward, redirect, reject, https_redirect"
+	action := "forward,forward_to_pool,forward_to_listener,redirect,reject,https_redirect"
 	validateSchema = append(validateSchema,
 		validate.ValidateSchema{
 			Identifier:                 isLBListenerPolicyName,
@@ -394,6 +405,9 @@ func resourceIBMISLBListenerPolicyCreate(context context.Context, d *schema.Reso
 	}
 
 	action := d.Get(isLBListenerPolicyAction).(string)
+	if action == "forward" {
+		action = "forward_to_pool"
+	}
 	priority := int64(d.Get(isLBListenerPolicyPriority).(int))
 
 	//user-defined name for this policy.
@@ -464,7 +478,7 @@ func lbListenerPolicyCreate(d *schema.ResourceData, meta interface{}, lbID, list
 		}
 
 	} else {
-		if actionChk.(string) == "forward" {
+		if actionChk.(string) == "forward" || actionChk.(string) == "forward_to_pool" {
 			if targetIDSet {
 
 				//User can set the poolId as combination of lbID/poolID, if so parse the string & get the poolID
@@ -472,12 +486,24 @@ func lbListenerPolicyCreate(d *schema.ResourceData, meta interface{}, lbID, list
 				if err != nil {
 					return diag.FromErr(err)
 				}
-
 				target = &vpcv1.LoadBalancerListenerPolicyTargetPrototypeLoadBalancerPoolIdentity{
 					ID: &id,
 				}
 			} else {
-				return diag.FromErr(fmt.Errorf("When action is forward please specify target_id"))
+				return diag.FromErr(fmt.Errorf("when action is forward or forward_to_pool please specify target_id"))
+			}
+		} else if actionChk.(string) == "forward_to_listener" {
+			if targetIDSet {
+				//user can set listener id as combination of lbID/listenerID, parse and get the listenerID
+				listenerID, err := getListenerID(d.Get(isLBListenerPolicyListenerID).(string))
+				if err != nil {
+					return diag.FromErr(err)
+				}
+				target = &vpcv1.LoadBalancerListenerPolicyTargetPrototypeLoadBalancerListenerIdentity{
+					ID: &listenerID,
+				}
+			} else {
+				return diag.FromErr(fmt.Errorf("when action is  forward_to_listener please specify listener id"))
 			}
 		} else if actionChk.(string) == "redirect" {
 
@@ -794,9 +820,9 @@ func lbListenerPolicyUpdate(d *schema.ResourceData, meta interface{}, lbID, list
 		hasChanged = true
 
 	} else {
-
+		actionChk := (d.Get(isLBListenerPolicyAction).(string))
 		//If Action is forward and TargetID is changed, set the target to pool ID
-		if d.Get(isLBListenerPolicyAction).(string) == "forward" && d.HasChange(isLBListenerPolicyTargetID) {
+		if (actionChk == "forward" || actionChk == "forward_to_pool") && d.HasChange(isLBListenerPolicyTargetID) {
 
 			//User can set the poolId as combination of lbID/poolID, if so parse the string & get the poolID
 			id, err := getPoolID(d.Get(isLBListenerPolicyTargetID).(string))
@@ -809,6 +835,15 @@ func lbListenerPolicyUpdate(d *schema.ResourceData, meta interface{}, lbID, list
 
 			loadBalancerListenerPolicyPatchModel.Target = target
 			hasChanged = true
+		} else if actionChk == "forward_to_listener" && d.HasChange(isLBListenerPolicyTargetID) {
+			//User can set listener id as combination of lbID/listenerID, parse and get the listenerID
+			listenerID, err := getListenerID(d.Get(isLBListenerPolicyListenerID).(string))
+			if err != nil {
+				return diag.FromErr(err)
+			}
+			target = &vpcv1.LoadBalancerListenerPolicyTargetPatchLoadBalancerListenerIdentity{
+				ID: &listenerID,
+			}
 		} else if d.Get(isLBListenerPolicyAction).(string) == "redirect" {
 			//if Action is redirect and either status code or URL chnaged, set accordingly
 			//LoadBalancerListenerPolicyPatchTargetLoadBalancerListenerPolicyRedirectURLPatch
@@ -1104,12 +1139,19 @@ func lbListenerPolicyGet(d *schema.ResourceData, meta interface{}, lbID, listene
 				return diag.FromErr(fmt.Errorf("Error setting target: %s", err))
 			}
 		} else {
-			if *(policy.Action) == "forward" {
+			if *(policy.Action) == "forward" || *(policy.Action) == "forward_to_pool" {
 				if reflect.TypeOf(policy.Target).String() == "*vpcv1.LoadBalancerListenerPolicyTargetLoadBalancerPoolReference" {
 					target, ok := policy.Target.(*vpcv1.LoadBalancerListenerPolicyTargetLoadBalancerPoolReference)
 					if ok {
 						d.Set(isLBListenerPolicyTargetID, target.ID)
 					}
+				} else if *(policy.Action) == "forward_to_listener" {
+					if reflect.TypeOf(policy.Target).String() == "*vpcv1.LoadBalancerListenerPolicyTargetLoadBalancerListenerReference" {
+						target, ok := policy.Target.(*vpcv1.LoadBalancerListenerPolicyTargetLoadBalancerListenerReference)
+						if ok {
+							d.Set(isLBListenerPolicyTargetID, target.ID)
+						}
+					}
 				}
 
 			} else if *(policy.Action) == "redirect" {
diff --git a/ibm/service/vpc/resource_ibm_is_lb_listener_policy_rule.go b/ibm/service/vpc/resource_ibm_is_lb_listener_policy_rule.go
index 195b8bece..e6016025e 100644
--- a/ibm/service/vpc/resource_ibm_is_lb_listener_policy_rule.go
+++ b/ibm/service/vpc/resource_ibm_is_lb_listener_policy_rule.go
@@ -163,7 +163,7 @@ func ResourceIBMISLBListenerPolicyRuleValidator() *validate.ResourceValidator {
 
 	validateSchema := make([]validate.ValidateSchema, 0)
 	condition := "contains, equals, matches_regex"
-	ruletype := "header, hostname, path, body, query"
+	ruletype := "header, hostname, path, body, query, sni_hostname"
 	validateSchema = append(validateSchema,
 		validate.ValidateSchema{
 			Identifier:                 isLBListenerPolicyRulecondition,
diff --git a/ibm/service/vpc/resource_ibm_is_security_group_target.go b/ibm/service/vpc/resource_ibm_is_security_group_target.go
index 43f6a5754..7e88c6b0a 100644
--- a/ibm/service/vpc/resource_ibm_is_security_group_target.go
+++ b/ibm/service/vpc/resource_ibm_is_security_group_target.go
@@ -111,9 +111,28 @@ func resourceIBMISSecurityGroupTargetCreate(d *schema.ResourceData, meta interfa
 	createSecurityGroupTargetBindingOptions := &vpcv1.CreateSecurityGroupTargetBindingOptions{}
 	createSecurityGroupTargetBindingOptions.SecurityGroupID = &securityGroupID
 	createSecurityGroupTargetBindingOptions.ID = &targetID
+	isSGTargetPrefixKey := "security_group_key_" + targetID
+	conns.IbmMutexKV.Lock(isSGTargetPrefixKey)
+	defer conns.IbmMutexKV.Unlock(isSGTargetPrefixKey)
 
 	sg, response, err := sess.CreateSecurityGroupTargetBinding(createSecurityGroupTargetBindingOptions)
 	if err != nil || sg == nil {
+
+		if strings.Contains(strings.ToLower(err.Error()), "load balancer") && ((strings.Contains(strings.ToUpper(err.Error()), "UPDATE_PENDING")) || (strings.Contains(strings.ToUpper(err.Error()), "CREATE_PENDING"))) {
+			log.Printf("[INFO] Load balancer with ID '%s' is in UPDATE_PENDING state. Waiting for it to become available before retrying...", targetID)
+
+			// Wait for the load balancer to become available
+			_, waitErr := isWaitForSGTargetLBAvailable(sess, targetID, d.Timeout(schema.TimeoutCreate))
+			if waitErr != nil {
+				return fmt.Errorf("[ERROR] Error waiting for load balancer to become available while creating Security Group Target Binding: %s", waitErr)
+			}
+
+			sg, response, err = sess.CreateSecurityGroupTargetBinding(createSecurityGroupTargetBindingOptions)
+			// Check for errors after the initial attempt or retry
+			if err != nil || sg == nil {
+				return fmt.Errorf("[ERROR] Error while creating Security Group Target Binding %s\n%s", err, response)
+			}
+		}
 		return fmt.Errorf("[ERROR] Error while creating Security Group Target Binding %s\n%s", err, response)
 	}
 	sgtarget := sg.(*vpcv1.SecurityGroupTargetReference)
@@ -125,7 +144,7 @@ func resourceIBMISSecurityGroupTargetCreate(d *schema.ResourceData, meta interfa
 		if errsgt != nil {
 			return errsgt
 		}
-	} else if crn != nil && *crn != "" && strings.Contains(*crn, "virtual_network_interfaces") {
+	} else if crn != nil && *crn != "" && strings.Contains(*crn, "virtual-network-interface") {
 		vpcClient, err := meta.(conns.ClientSession).VpcV1API()
 		if err != nil {
 			return err
@@ -206,6 +225,10 @@ func resourceIBMISSecurityGroupTargetDelete(d *schema.ResourceData, meta interfa
 		}
 		return fmt.Errorf("[ERROR] Error Getting Security Group Targets (%s): %s\n%s", securityGroupID, err, response)
 	}
+	// Acquire a lock based on the target ID to prevent simultaneous delete on same target
+	isSGTargetPrefixKey := "security_group_key_" + securityGroupTargetID
+	conns.IbmMutexKV.Lock(isSGTargetPrefixKey)
+	defer conns.IbmMutexKV.Unlock(isSGTargetPrefixKey)
 
 	deleteSecurityGroupTargetBindingOptions := sess.NewDeleteSecurityGroupTargetBindingOptions(securityGroupID, securityGroupTargetID)
 	response, err = sess.DeleteSecurityGroupTargetBinding(deleteSecurityGroupTargetBindingOptions)
@@ -369,3 +392,38 @@ func isVNISgTargetRefreshFunc(vpcClient *vpcv1.VpcV1, vniId string) resource.Sta
 		return vni, *vni.LifecycleState, nil
 	}
 }
+
+// New function to wait for a load balancer to become available before attaching a security group
+func isWaitForSGTargetLBAvailable(sess *vpcv1.VpcV1, lbId string, timeout time.Duration) (interface{}, error) {
+	log.Printf("Waiting for load balancer (%s) to be available before attaching security group.", lbId)
+
+	stateConf := &resource.StateChangeConf{
+		Pending:    []string{"retry", isLBProvisioning, "update_pending"},
+		Target:     []string{isLBProvisioningDone, ""},
+		Refresh:    isSGTargetLBRefreshFunc(sess, lbId),
+		Timeout:    timeout,
+		Delay:      10 * time.Second,
+		MinTimeout: 10 * time.Second,
+	}
+
+	return stateConf.WaitForState()
+}
+
+// Refresh function for checking load balancer status before security group attachment
+func isSGTargetLBRefreshFunc(sess *vpcv1.VpcV1, lbId string) resource.StateRefreshFunc {
+	return func() (interface{}, string, error) {
+		getlboptions := &vpcv1.GetLoadBalancerOptions{
+			ID: &lbId,
+		}
+		lb, response, err := sess.GetLoadBalancer(getlboptions)
+		if err != nil {
+			return nil, "", fmt.Errorf("[ERROR] Error Getting Load Balancer : %s\n%s", err, response)
+		}
+
+		if *lb.ProvisioningStatus == "active" || *lb.ProvisioningStatus == "failed" {
+			return lb, isLBProvisioningDone, nil
+		}
+
+		return lb, isLBProvisioning, nil
+	}
+}
diff --git a/website/docs/d/is_lb_listener_policy.html.markdown b/website/docs/d/is_lb_listener_policy.html.markdown
index 68d98b9a1..29d56f8cf 100644
--- a/website/docs/d/is_lb_listener_policy.html.markdown
+++ b/website/docs/d/is_lb_listener_policy.html.markdown
@@ -52,7 +52,7 @@ Nested scheme for `rules`:
 	- `href` - (String) The rule's canonical URL.
 	- `id` - (String) The rule's unique identifier.
 
-- `target` - (List) - If `action` is `forward`, the response is a `LoadBalancerPoolReference`- If `action` is `redirect`, the response is a `LoadBalancerListenerPolicyRedirectURL`- If `action` is `https_redirect`, the response is a `LoadBalancerListenerHTTPSRedirect`.
+- `target` - (List) -If `action` is `forward_to_pool`, the response is a `LoadBalancerPoolReference`-If `action` is `forward_to_listener`, specify a `LoadBalancerListenerIdentity` in this load balancer to forward to.`- If `action` is `redirect`, the response is a `LoadBalancerListenerPolicyRedirectURL`- If `action` is `https_redirect`, the response is a `LoadBalancerListenerHTTPSRedirect`.
 Nested scheme for `target`:
 	- `deleted` - (List) If present, this property indicates the referenced resource has been deleted and provides some supplementary information.
 	Nested scheme for `deleted`:
diff --git a/website/docs/d/is_lb_listener_policy_rule.html.markdown b/website/docs/d/is_lb_listener_policy_rule.html.markdown
index 2267bb103..8a60de9c3 100644
--- a/website/docs/d/is_lb_listener_policy_rule.html.markdown
+++ b/website/docs/d/is_lb_listener_policy_rule.html.markdown
@@ -38,7 +38,7 @@ In addition to all argument references listed, you can access the following attr
 
 - `created_at` - (String) The date and time that this rule was created.
 
-- `field` - (String) The field. This is applicable to `header`, `query`, and `body` rule types.If the rule type is `header`, this property is required.If the rule type is `query`, this is optional. If specified and the rule condition is not`matches_regex`, the value must be percent-encoded.If the rule type is `body`, this is optional.
+- `field` - (String) The field. This is applicable to `header`, `query`,`body` and `sni_hostname` rule types.If the rule type is `header`, this property is required.If the rule type is `query`, this is optional. If specified and the rule condition is not`matches_regex`, the value must be percent-encoded.If the rule type is `body`, this is optional.
 
 - `href` - (String) The rule's canonical URL.
 
diff --git a/website/docs/d/pi_volume_snapshot.html.markdown b/website/docs/d/pi_volume_snapshot.html.markdown
index 32730a7d1..e3ae10d62 100644
--- a/website/docs/d/pi_volume_snapshot.html.markdown
+++ b/website/docs/d/pi_volume_snapshot.html.markdown
@@ -47,7 +47,7 @@ You can specify the following arguments for this data source.
 In addition to all argument reference list, you can access the following attribute references after your data source is created.
 
 - `creation_date` - (String) The date and time when the volume snapshot was created.
-- `crn` - (String) The CRN for this resource.
+- `crn` - (Deprecated, String) The CRN for this resource.
 - `id` - (String) The unique identifier of the volume snapshot.
 - `name` - (String) The volume snapshot name.
 - `size` - (Float) The size of the volume snapshot, in gibibytes (GiB).
diff --git a/website/docs/d/pi_volume_snapshots.html.markdown b/website/docs/d/pi_volume_snapshots.html.markdown
index 2f24a14f7..06673b7ef 100644
--- a/website/docs/d/pi_volume_snapshots.html.markdown
+++ b/website/docs/d/pi_volume_snapshots.html.markdown
@@ -48,7 +48,7 @@ In addition to all argument reference list, you can access the following attribu
 
   Nested schema for `volume_snapshots`:
   - `creation_date` - (String) The date and time when the volume snapshot was created.
-  - `crn` - (String) The CRN of the volume snapshot.
+  - `crn` - (Deprecated, String) The CRN of the volume snapshot.
   - `id` - (String) The volume snapshot UUID.
   - `name` - (String) The volume snapshot name.
   - `size` - (Float) The size of the volume snapshot, in gibibytes (GiB).
diff --git a/website/docs/r/is_lb_listener_policy.html.markdown b/website/docs/r/is_lb_listener_policy.html.markdown
index bee5d9230..ad5153502 100644
--- a/website/docs/r/is_lb_listener_policy.html.markdown
+++ b/website/docs/r/is_lb_listener_policy.html.markdown
@@ -119,7 +119,7 @@ resource "ibm_is_lb_listener_policy" "example" {
 }
 ```
 
-###  Creating a load balancer listener policy for a `forward` action.
+###  Creating a load balancer listener policy for a `forward_to_pool` action.
 
 
 ```terraform
@@ -148,7 +148,7 @@ resource "ibm_is_lb_pool" "example" {
 resource "ibm_is_lb_listener_policy" "example" {
   lb       = ibm_is_lb.example.id
   listener = ibm_is_lb_listener.example.listener_id
-  action   = "forward"
+  action   = "forward_to_pool"
   priority = 3
   name     = "example-listener"
   target {
@@ -156,6 +156,40 @@ resource "ibm_is_lb_listener_policy" "example" {
   }
 }
 ```
+
+###  Creating a load balancer listener policy for a `forward_to_listener` action.
+
+
+```terraform
+resource "ibm_is_lb" "example" {
+  name    = "example-lb"
+  subnets = [ibm_is_subnet.example.id]
+}
+
+resource "ibm_is_lb_listener" "example" {
+  lb       = ibm_is_lb.example.id
+  port     = "9086"
+  protocol = "http"
+}
+
+resource "ibm_is_lb_listener" "example1" {
+  lb       = ibm_is_lb.example.id
+  port     = "9087"
+  protocol = "tcp"
+}
+
+resource "ibm_is_lb_listener_policy" "example" {
+  lb       = ibm_is_lb.example.id
+  listener = ibm_is_lb_listener.example.listener_id
+  action   = "forward_to_listener"
+  priority = 2
+  name     = "example-listener"
+  target {
+    id = ibm_is_lb_listener.example1.listener_id
+  }
+}
+```
+
 ## Timeouts
 The `ibm_is_lb_listener_policy` resource provides the following [Timeouts](https://www.terraform.io/docs/language/resources/syntax.html) configuration options:
 
@@ -167,7 +201,7 @@ The `ibm_is_lb_listener_policy` resource provides the following [Timeouts](https
 ## Argument reference
 Review the argument references that you can specify for your resource. 
 
-- `action` - (Required, Forces new resource, String) The action that you want to specify for your policy. Supported values are `forward`, `redirect`, `reject`, and `https_redirect`.
+- `action` - (Required, Forces new resource, String) The action that you want to specify for your policy. Supported values are `forward_to_pool`,`forward_to_listener`, `redirect`, `reject`, and `https_redirect`.
 - `lb` - (Required, Forces new resource, String) The ID of the load balancer for which you want to create a load balancer listener policy. 
 - `listener` - (Required, Forces new resource, String) The ID of the load balancer listener.
 - `name` - (Optional, String) The name for the load balancer policy. Names must be unique within a load balancer listener.
@@ -179,7 +213,7 @@ Review the argument references that you can specify for your resource.
   - `type` - (Required, String) The data type where you want to apply the rule condition. Supported values are `header`, `hostname`,  and `path`.
   - `value`- (Required, Integer) The value that must be found in the HTTP header, hostname or path to apply the load balancer listener rule. The value that you define can be between 1 and 128 characters long.
   - `field`- (Required, Integer) If you selected `header` as the data type where you want to apply the rule condition, enter the name of the HTTP header that you want to check. The name of the header can be between 1 and 128 characters long.
-- `target_id` - (Optional, Integer) When `action` is set to **forward**, specify the ID of the load balancer pool that the load balancer forwards network traffic to.
+- `target_id` - (Optional, Integer) When `action` is set to **forward_to_pool**, specify the ID of the load balancer pool that the load balancer forwards network traffic to. or When `action` is set to **forward_to_listener**, specify the ID of the load balancer listener that the load balancer forwards network traffic to.
 - `target_http_status_code` - (Optional, Integer) When `action` is set to **redirect**, specify the HTTP response code that must be returned in the redirect response. Supported values are `301`, `302`, `303`, `307`, and `308`. 
 - `target_url` - (Optional, Integer) When `action` is set to **redirect**, specify the URL that is used in the redirect response.
 - `target_https_redirect_listener` - (Optional, String) When `action` is set to **https_redirect**, specify the ID of the listener that will be set as http redirect target.
@@ -188,7 +222,7 @@ Review the argument references that you can specify for your resource.
 
 ~> **Note:** `target_id`, `target_http_status_code`, `target_url`, `target_https_redirect_listener`, `target_https_redirect_status_code`, `target_https_redirect_uri` are deprecated and will be removed soon. Please use `target` instead.
 
-- `target` - (Optional, List) - If `action` is `forward`, the response is a `LoadBalancerPoolReference`- If `action` is `redirect`, the response is a `LoadBalancerListenerPolicyRedirectURL`- If `action` is `https_redirect`, the response is a `LoadBalancerListenerHTTPSRedirect`.
+- `target` - (Optional, List) - If `action` is `forward_to_pool`, the response is a `LoadBalancerPoolReference`-If `action` is `forward_to_listener`, specify a `LoadBalancerListenerIdentity` in this load balancer to forward to.- If `action` is `redirect`, the response is a `LoadBalancerListenerPolicyRedirectURL`- If `action` is `https_redirect`, the response is a `LoadBalancerListenerHTTPSRedirect`.
     Nested schema for **target**:
 	- `deleted` - (Computed, List) If present, this property indicates the referenced resource has been deleted, and providessome supplementary information.
 	  Nested schema for **deleted**:
@@ -213,7 +247,7 @@ Review the argument references that you can specify for your resource.
       **&#x2022;** query (default: '') </br>
 
 	  
-~> **Note:** When action is `forward`, `target.id` should specify which pool the load balancer forwards the traffic to.
+~> **Note:** When `action` is set to **forward_to_pool**, specify the ID of the load balancer pool that the load balancer forwards network traffic to. or When `action` is set to **forward_to_listener**, specify the ID of the load balancer listener that the load balancer forwards network traffic to.
 When action is `redirect`, `target.url` should specify the `url` and `target.http_status_code` to specify the code used in the redirect response.
 When action is `https_redirect`, `target.listener.id` should specify the ID of the listener, `target.http_status_code` to specify the code used in the redirect response and `target.uri` to specify the target URI where traffic will be redirected.
 Network load balancer does not support `ibm_is_lb_listener_policy`.
diff --git a/website/docs/r/is_lb_listener_policy_rule.html.markdown b/website/docs/r/is_lb_listener_policy_rule.html.markdown
index dd94f25a3..6ed6e361b 100644
--- a/website/docs/r/is_lb_listener_policy_rule.html.markdown
+++ b/website/docs/r/is_lb_listener_policy_rule.html.markdown
@@ -62,6 +62,48 @@ resource "ibm_is_lb_listener_policy_rule" "example" {
 }
 ```
 
+### Create load load balancer listener policy rule , with sni_hostname .
+
+```terraform
+resource "ibm_is_lb" "example" {
+  name    = "example-lb"
+  subnets = [ibm_is_subnet.example.id]
+}
+
+resource "ibm_is_lb_listener" "example" {
+  lb       = ibm_is_lb.example.id
+  port     = "9086"
+  protocol = "http"
+}
+resource "ibm_is_lb_listener_policy" "example" {
+  lb                      = ibm_is_lb.example.id
+  listener                = ibm_is_lb_listener.example.listener_id
+  action                  = "redirect"
+  priority                = 2
+  name                    = "example-listener"
+  target_http_status_code = 302
+  target_url              = "https://www.redirect.com"
+  rules {
+    condition = "contains"
+    type      = "header"
+    field     = "1"
+    value     = "2"
+  }
+}
+
+resource "ibm_is_lb_listener_policy_rule" "example" {
+  lb        = ibm_is_lb.example.id
+  listener  = ibm_is_lb_listener.example.listener_id
+  policy    = ibm_is_lb_listener_policy.example.policy_id
+  condition = "equals"
+  type      = "sni_hostname"
+  field     = "MY-APP-HEADER"
+  value     = "New-value"
+}
+```
+
+
+
 ## Timeouts
 The `ibm_is_lb_listener_policy` rule provides the following [Timeouts](https://www.terraform.io/docs/language/resources/syntax.html) configuration options:
 
@@ -77,7 +119,7 @@ Review the argument references that you can specify for your resource.
 - `lb` - (Required, Forces new resource, String) The ID of the load balancer for which you want to create a listener policy rule.
 - `listener` - (Required, Forces new resource, String) The ID of the load balancer listener for which you want to create a policy rule. 
 - `policy` - (Required, Forces new resource, String) The ID of the load balancer listener policy for which you want to create a policy rule. 
-- `type` - (Required, String) The object where you want to apply the rule. Supported values are `header`, `hostname`, and `path`.
+- `type` - (Required, String) The object where you want to apply the rule. Supported values are `header`, `hostname`,`sni_hostname` and `path`.
 - `value` - (Required, String) The value that must match the rule condition. The value can be between 1 and 128 characters long. No.
 
 ## Attribute reference
diff --git a/website/docs/r/kms_key.html.markdown b/website/docs/r/kms_key.html.markdown
index e953c0903..0aa570655 100644
--- a/website/docs/r/kms_key.html.markdown
+++ b/website/docs/r/kms_key.html.markdown
@@ -140,7 +140,7 @@ Review the argument references that you can specify for your resource.
 
 - `endpoint_type` - (Optional, String) The type of the public or private endpoint to be used for creating keys.
 - `encrypted_nonce` - (Optional, Forces new resource, String) The encrypted nonce value that verifies your request to import a key to Key Protect. This value must be encrypted by using the key that you want to import to the service. To retrieve a nonce, use the `ibmcloud kp import-token get` command. Then, encrypt the value by running `ibmcloud kp import-token encrypt-nonce`. Only for imported root key.
-- `expiration_date` - (Optional, Forces new resource, String)  Expiry date of the key material. The date format follows with RFC 3339. You can set an expiration date on any key on its creation. A key moves into the deactivated state within one hour past its expiration date, if one is assigned. If you create a key without specifying an expiration date, the key does not expire. For example, `2018-12-01T23:20:50Z`.
+- `expiration_date` - (Optional, Forces new resource, String)  The date and time that the key expires in the system, in RFC 3339 format (YYYY-MM-DD HH:MM:SS.SS, for example 2019-10-12T07:20:50.52Z). Use caution when setting an expiration date, as keys created with an expiration date automatically transition to the _Deactivated_ state within one hour after expiration. In this state, the only allowed actions on the key are unwrap, rewrap, rotate, and delete. Deactivated keys cannot be used to encrypt (wrap) new data, even if rotated while deactivated. Rotation does not reset or extend the expiration date, nor does it allow the date to be changed. It is recommended that any data encrypted with an expiring or expired key be re-encrypted using a new customer root key (CRK) before the original CRK expires, to prevent service disruptions. Deleting and restoring a deactivated key does not move it back to the _Active_ state. If the expiration_date attribute is omitted, the key does not expire.
 - `force_delete` - (Optional, Bool) If set to **true**, Key Protect forces the deletion of a root or standard key, even if this key is still in use, such as to protect an IBM Cloud Object Storage bucket. Note that the key cannot be deleted if the protected cloud resource is set up with a retention policy. Successful deletion includes the removal of any registrations that are associated with the key. Default value is **false**. **Note** Before Terraform destroy if `force_delete` flag is introduced after provisioning keys, a Terraform apply must be done before Terraform destroy for `force_delete` flag to take effect.
 - `instance_id` - (Required, Forces new resource, String) The HPCS or key-protect instance ID.
 - `iv_value` - (Optional, Forces new resource, String)  Used with import tokens. The initialization vector (IV) that is generated when you encrypt a nonce. The IV value is required to decrypt the encrypted nonce value that you provide when you make a key import request to the service. To generate an IV, encrypt the nonce by running `ibmcloud kp import-token encrypt-nonce`. Only for imported root key.



Test patch:
diff --git a/ibm/acctest/acctest.go b/ibm/acctest/acctest.go
index c78802aa6..18f43e8be 100644
--- a/ibm/acctest/acctest.go
+++ b/ibm/acctest/acctest.go
@@ -240,6 +240,7 @@ var (
 	Pi_replication_volume_name        string
 	Pi_resource_group_id              string
 	Pi_sap_image                      string
+	Pi_sap_profile_id                 string
 	Pi_shared_processor_pool_id       string
 	Pi_snapshot_id                    string
 	Pi_spp_placement_group_id         string
@@ -254,7 +255,6 @@ var (
 	Pi_volume_onboarding_id           string
 	Pi_volume_onboarding_source_crn   string
 	PiCloudConnectionName             string
-	PiSAPProfileID                    string
 	PiStoragePool                     string
 	PiStorageType                     string
 )
@@ -1270,9 +1270,9 @@ func init() {
 		fmt.Println("[INFO] Set the environment variable PI_CLOUD_CONNECTION_NAME for testing ibm_pi_cloud_connection resource else it is set to default value 'terraform-test-power'")
 	}
 
-	PiSAPProfileID = os.Getenv("PI_SAP_PROFILE_ID")
-	if PiSAPProfileID == "" {
-		PiSAPProfileID = "terraform-test-power"
+	Pi_sap_profile_id = os.Getenv("PI_SAP_PROFILE_ID")
+	if Pi_sap_profile_id == "" {
+		Pi_sap_profile_id = "terraform-test-power"
 		fmt.Println("[INFO] Set the environment variable PI_SAP_PROFILE_ID for testing ibm_pi_sap_profile resource else it is set to default value 'terraform-test-power'")
 	}
 
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_definition_test.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_definition_test.go
index 670dec155..9c0bf5245 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_definition_test.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_definition_test.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline_test
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_property_test.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_property_test.go
index 3a5ead568..a6d0a29a1 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_property_test.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_property_test.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline_test
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_test.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_test.go
index b4470a7a0..997ba7fae 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_test.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_test.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline_test
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_property_test.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_property_test.go
index e933ce643..a2e2e4441 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_property_test.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_property_test.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline_test
diff --git a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_test.go b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_test.go
index 8011d14de..02edf069e 100644
--- a/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_test.go
+++ b/ibm/service/cdtektonpipeline/data_source_ibm_cd_tekton_pipeline_trigger_test.go
@@ -1,8 +1,8 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 /*
- * IBM OpenAPI Terraform Generator Version: 3.95.2-120e65bc-20240924-152329
+ * IBM OpenAPI Terraform Generator Version: 3.103.0-e8b84313-20250402-201816
  */
 
 package cdtektonpipeline_test
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_definition_test.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_definition_test.go
index dbd806fa2..3e347c7c6 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_definition_test.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_definition_test.go
@@ -1,4 +1,4 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 package cdtektonpipeline_test
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_property_test.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_property_test.go
index 4e01f29cb..5d398cad3 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_property_test.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_property_test.go
@@ -1,4 +1,4 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 package cdtektonpipeline_test
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_test.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_test.go
index ea46759a9..0be4f6b01 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_test.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_test.go
@@ -1,4 +1,4 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 package cdtektonpipeline_test
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_property_test.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_property_test.go
index c54609020..80ce70cfc 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_property_test.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_property_test.go
@@ -1,4 +1,4 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 package cdtektonpipeline_test
diff --git a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_test.go b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_test.go
index 9013279f9..a9e5ba8d3 100644
--- a/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_test.go
+++ b/ibm/service/cdtektonpipeline/resource_ibm_cd_tekton_pipeline_trigger_test.go
@@ -1,4 +1,4 @@
-// Copyright IBM Corp. 2024 All Rights Reserved.
+// Copyright IBM Corp. 2025 All Rights Reserved.
 // Licensed under the Mozilla Public License v2.0
 
 package cdtektonpipeline_test
diff --git a/ibm/service/power/data_source_ibm_pi_instance_volumes_test.go b/ibm/service/power/data_source_ibm_pi_instance_volumes_test.go
index 10543c5a6..e5f184da5 100644
--- a/ibm/service/power/data_source_ibm_pi_instance_volumes_test.go
+++ b/ibm/service/power/data_source_ibm_pi_instance_volumes_test.go
@@ -9,18 +9,16 @@ import (
 
 	acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest"
 
-	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
 )
 
 func TestAccIBMPIVolumesDataSource_basic(t *testing.T) {
-	name := fmt.Sprintf("tf-pi-volume-%d", acctest.RandIntRange(10, 100))
 	resource.Test(t, resource.TestCase{
 		PreCheck:  func() { acc.TestAccPreCheck(t) },
 		Providers: acc.TestAccProviders,
 		Steps: []resource.TestStep{
 			{
-				Config: testAccCheckIBMPIVolumesDataSourceConfig(name),
+				Config: testAccCheckIBMPIVolumesDataSourceConfig(),
 				Check: resource.ComposeTestCheckFunc(
 					resource.TestCheckResourceAttrSet("data.ibm_pi_instance_volumes.testacc_ds_volumes", "id"),
 				),
@@ -29,7 +27,7 @@ func TestAccIBMPIVolumesDataSource_basic(t *testing.T) {
 	})
 }
 
-func testAccCheckIBMPIVolumesDataSourceConfig(name string) string {
+func testAccCheckIBMPIVolumesDataSourceConfig() string {
 	return fmt.Sprintf(`
 		data "ibm_pi_instance_volumes" "testacc_ds_volumes" {
 			pi_instance_name = "%s"
diff --git a/ibm/service/power/data_source_ibm_pi_sap_profile_test.go b/ibm/service/power/data_source_ibm_pi_sap_profile_test.go
index dc4026bdf..326fc39ae 100644
--- a/ibm/service/power/data_source_ibm_pi_sap_profile_test.go
+++ b/ibm/service/power/data_source_ibm_pi_sap_profile_test.go
@@ -21,7 +21,7 @@ func TestAccIBMPISAPProfileDataSourceBasic(t *testing.T) {
 				Config: testAccCheckIBMPISAPProfileDataSourceConfig(),
 				Check: resource.ComposeTestCheckFunc(
 					resource.TestCheckResourceAttrSet("data.ibm_pi_sap_profile.test", "id"),
-					resource.TestCheckResourceAttr("data.ibm_pi_sap_profile.test", "id", acc.PiSAPProfileID),
+					resource.TestCheckResourceAttr("data.ibm_pi_sap_profile.test", "id", acc.Pi_sap_profile_id),
 				),
 			},
 		},
@@ -33,5 +33,5 @@ func testAccCheckIBMPISAPProfileDataSourceConfig() string {
 		data "ibm_pi_sap_profile" "test" {
 			pi_cloud_instance_id = "%s"
 			pi_sap_profile_id = "%s"
-		}`, acc.Pi_cloud_instance_id, acc.PiSAPProfileID)
+		}`, acc.Pi_cloud_instance_id, acc.Pi_sap_profile_id)
 }
diff --git a/ibm/service/power/resource_ibm_pi_capture_test.go b/ibm/service/power/resource_ibm_pi_capture_test.go
index 6a3a3081f..b2f27e5b3 100644
--- a/ibm/service/power/resource_ibm_pi_capture_test.go
+++ b/ibm/service/power/resource_ibm_pi_capture_test.go
@@ -38,6 +38,7 @@ func TestAccIBMPICaptureBasic(t *testing.T) {
 		},
 	})
 }
+
 func TestAccIBMPICaptureWithVolume(t *testing.T) {
 	captureRes := "ibm_pi_capture.capture_instance"
 	name := fmt.Sprintf("tf-pi-capture-%d", acctest.RandIntRange(10, 100))
diff --git a/ibm/service/power/resource_ibm_pi_placement_group_test.go b/ibm/service/power/resource_ibm_pi_placement_group_test.go
index 1f53ad8fd..9ca3a047e 100644
--- a/ibm/service/power/resource_ibm_pi_placement_group_test.go
+++ b/ibm/service/power/resource_ibm_pi_placement_group_test.go
@@ -65,7 +65,7 @@ func TestAccIBMPIPlacementGroupBasic(t *testing.T) {
 				),
 			},
 			{
-				Config: testAccCheckIBMPICreateInstanceInPlacementGroup(name, policy, "tinytest-1x4"),
+				Config: testAccCheckIBMPICreateInstanceInPlacementGroup(name, policy),
 				Check: resource.ComposeTestCheckFunc(
 					resource.TestCheckResourceAttrSet(
 						"ibm_pi_instance.power_instance", "pi_placement_group_id"),
@@ -79,9 +79,9 @@ func TestAccIBMPIPlacementGroupBasic(t *testing.T) {
 				ExpectNonEmptyPlan: true,
 			},
 			{
-				Config: testAccCheckIBMPIDeletePlacementGroup(name, policy, "tinytest-1x4"),
+				Config: testAccCheckIBMPIDeletePlacementGroup(name, policy),
 				Check: resource.ComposeTestCheckFunc(
-					testAccCheckIBMPIPlacementGroupDelete("ibm_pi_placement_group.power_placement_group", "ibm_pi_instance.power_instance", "ibm_pi_instance.power_instance_in_pg"),
+					testAccCheckIBMPIPlacementGroupDelete("ibm_pi_instance.power_instance", "ibm_pi_instance.power_instance_in_pg"),
 				),
 			},
 		},
@@ -304,7 +304,7 @@ func testAccCheckIBMPIPlacementGroupMemberExistsFromInstanceCreate(n string, ins
 	}
 }
 
-func testAccCheckIBMPIPlacementGroupDelete(n string, inst string, newInstance string) resource.TestCheckFunc {
+func testAccCheckIBMPIPlacementGroupDelete(inst string, newInstance string) resource.TestCheckFunc {
 	return func(s *terraform.State) error {
 		sess, err := acc.TestAccProvider.Meta().(conns.ClientSession).IBMPISession()
 		if err != nil {
@@ -484,7 +484,7 @@ func testAccCheckIBMPIPlacementGroupRemoveMemberConfig(name string, policy strin
 		}`, acc.Pi_cloud_instance_id, name, policy, acc.Pi_image, acc.Pi_network_name)
 }
 
-func testAccCheckIBMPICreateInstanceInPlacementGroup(name string, policy string, sapProfile string) string {
+func testAccCheckIBMPICreateInstanceInPlacementGroup(name string, policy string) string {
 	return fmt.Sprintf(`
 		resource "ibm_pi_key" "key" {
 			pi_cloud_instance_id = "%[1]s"
@@ -546,10 +546,10 @@ func testAccCheckIBMPICreateInstanceInPlacementGroup(name string, policy string,
 			pi_cloud_instance_id      = "%[1]s"
 			pi_placement_group_name   = "%[2]s-2"
 			pi_placement_group_policy = "%[3]s"
-		}`, acc.Pi_cloud_instance_id, name, policy, acc.Pi_image, sapProfile, acc.Pi_sap_image, acc.Pi_network_name)
+		}`, acc.Pi_cloud_instance_id, name, policy, acc.Pi_image, acc.Pi_sap_profile_id, acc.Pi_sap_image, acc.Pi_network_name)
 }
 
-func testAccCheckIBMPIDeletePlacementGroup(name string, policy string, sapProfile string) string {
+func testAccCheckIBMPIDeletePlacementGroup(name string, policy string) string {
 	return fmt.Sprintf(`
 		resource "ibm_pi_key" "key" {
 			pi_cloud_instance_id = "%[1]s"
@@ -608,5 +608,5 @@ func testAccCheckIBMPIDeletePlacementGroup(name string, policy string, sapProfil
 			pi_cloud_instance_id      = "%[1]s"
 			pi_placement_group_name   = "%[2]s-2"
 			pi_placement_group_policy = "%[3]s"
-		}`, acc.Pi_cloud_instance_id, name, policy, acc.Pi_image, sapProfile, acc.Pi_sap_image, acc.Pi_network_name)
+		}`, acc.Pi_cloud_instance_id, name, policy, acc.Pi_image, acc.Pi_sap_profile_id, acc.Pi_sap_image, acc.Pi_network_name)
 }
diff --git a/ibm/service/power/resource_ibm_pi_spp_placement_group_test.go b/ibm/service/power/resource_ibm_pi_spp_placement_group_test.go
index 2fa85c3fc..04a01f6a9 100644
--- a/ibm/service/power/resource_ibm_pi_spp_placement_group_test.go
+++ b/ibm/service/power/resource_ibm_pi_spp_placement_group_test.go
@@ -80,7 +80,7 @@ func TestAccIBMPISPPPlacementGroupBasic(t *testing.T) {
 			{
 				Config: testAccCheckIBMPIDeleteSPPPlacementGroup(name, policy),
 				Check: resource.ComposeTestCheckFunc(
-					testAccCheckIBMPISPPPlacementGroupDelete("ibm_pi_spp_placement_group.spp_placement_group_another", "ibm_pi_shared_processor_pool.spp_pool", "ibm_pi_shared_processor_pool.spp_pool_2"),
+					testAccCheckIBMPISPPPlacementGroupDelete("ibm_pi_shared_processor_pool.spp_pool", "ibm_pi_shared_processor_pool.spp_pool_2"),
 				),
 			},
 			{
@@ -94,7 +94,6 @@ func TestAccIBMPISPPPlacementGroupBasic(t *testing.T) {
 }
 
 func testAccCheckIBMPISPPPlacementGroupDestroy(s *terraform.State) error {
-
 	sess, err := acc.TestAccProvider.Meta().(conns.ClientSession).IBMPISession()
 	if err != nil {
 		return err
@@ -114,6 +113,7 @@ func testAccCheckIBMPISPPPlacementGroupDestroy(s *terraform.State) error {
 
 	return nil
 }
+
 func testAccCheckIBMPISPPPlacementGroupExists(n string) resource.TestCheckFunc {
 	return func(s *terraform.State) error {
 
@@ -296,7 +296,7 @@ func testAccCheckIBMPISPPPlacementGroupMemberExistsFromSPPCreate(n string, pool
 	}
 }
 
-func testAccCheckIBMPISPPPlacementGroupDelete(n string, pool string, newPool string) resource.TestCheckFunc {
+func testAccCheckIBMPISPPPlacementGroupDelete(pool string, newPool string) resource.TestCheckFunc {
 	return func(s *terraform.State) error {
 		sess, err := acc.TestAccProvider.Meta().(conns.ClientSession).IBMPISession()
 		if err != nil {
@@ -654,5 +654,5 @@ func testAccCheckIBMPICreateSAPInstanceWithSPP(name string, policy string) strin
 			}
 			pi_health_status		= "OK"
 			pi_shared_processor_pool = ibm_pi_shared_processor_pool.spp_pool_2.pi_shared_processor_pool_name
-		}`, acc.Pi_cloud_instance_id, name, policy, acc.Pi_image, acc.Pi_network_name, acc.Pi_sap_image, acc.PiSAPProfileID)
+		}`, acc.Pi_cloud_instance_id, name, policy, acc.Pi_image, acc.Pi_network_name, acc.Pi_sap_image, acc.Pi_sap_profile_id)
 }
diff --git a/ibm/service/vpc/resource_ibm_is_instance_test.go b/ibm/service/vpc/resource_ibm_is_instance_test.go
index 9dc175311..0d02b947b 100644
--- a/ibm/service/vpc/resource_ibm_is_instance_test.go
+++ b/ibm/service/vpc/resource_ibm_is_instance_test.go
@@ -4232,3 +4232,96 @@ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCKVmnMOlHKcZK8tpt3MP1lqOLAcqcJzhsvJcjscgVE
 		},
 	})
 }
+
+func TestAccIBMISInstance_ProfileAndBandwidthUpdate(t *testing.T) {
+	var instance string
+	vpcname := fmt.Sprintf("tf-vpc-%d", acctest.RandIntRange(10, 100))
+	name := fmt.Sprintf("tf-instance-%d", acctest.RandIntRange(10, 100))
+	subnetname := fmt.Sprintf("tf-subnet-%d", acctest.RandIntRange(10, 100))
+	publicKey := strings.TrimSpace(`
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCKVmnMOlHKcZK8tpt3MP1lqOLAcqcJzhsvJcjscgVERRN7/9484SOBJ3HSKxxNG5JN8owAjy5f9yYwcUg+JaUVuytn5Pv3aeYROHGGg+5G346xaq3DAwX6Y5ykr2fvjObgncQBnuU5KHWCECO/4h8uWuwh/kfniXPVjFToc+gnkqA+3RKpAecZhFXwfalQ9mMuYGFxn+fwn8cYEApsJbsEmb0iJwPiZ5hjFC8wREuiTlhPHDgkBLOiycd20op2nXzDbHfCHInquEe/gYxEitALONxm0swBOwJZwlTDOB7C6y2dzlrtxr1L59m7pCkWI4EtTRLvleehBoj3u7jB4usR
+`)
+	sshname := fmt.Sprintf("tf-ssh-%d", acctest.RandIntRange(10, 100))
+	initialProfile := "cx2-4x8"   // Initial profile
+	updatedProfile := "cx2-48x96" // Updated profile
+	initialBandwidth := 2000      // Initial bandwidth
+	updatedBandwidth := 20000     // Updated bandwidth
+	prefix := fmt.Sprintf("tf-prefix-%d", acctest.RandIntRange(10, 100))
+
+	resource.Test(t, resource.TestCase{
+		PreCheck:     func() { acc.TestAccPreCheck(t) },
+		Providers:    acc.TestAccProviders,
+		CheckDestroy: testAccCheckIBMISInstanceDestroy,
+		Steps: []resource.TestStep{
+			// Step 1: Create instance with initial profile and bandwidth
+			{
+				Config: testAccCheckIBMISInstanceConfigWithProfileAndBandwidth(
+					vpcname, subnetname, sshname, publicKey, name, prefix, initialProfile, initialBandwidth),
+				Check: resource.ComposeTestCheckFunc(
+					testAccCheckIBMISInstanceExists("ibm_is_instance.testacc_instance", instance),
+					resource.TestCheckResourceAttr(
+						"ibm_is_instance.testacc_instance", "name", name),
+					resource.TestCheckResourceAttr(
+						"ibm_is_instance.testacc_instance", "profile", initialProfile),
+					resource.TestCheckResourceAttr(
+						"ibm_is_instance.testacc_instance", "total_volume_bandwidth", fmt.Sprintf("%d", initialBandwidth)),
+					resource.TestCheckResourceAttr(
+						"ibm_is_instance.testacc_instance", "zone", acc.ISZoneName),
+				),
+			},
+			// Step 2: Update both profile and bandwidth in a single operation
+			{
+				Config: testAccCheckIBMISInstanceConfigWithProfileAndBandwidth(
+					vpcname, subnetname, sshname, publicKey, name, prefix, updatedProfile, updatedBandwidth),
+				Check: resource.ComposeTestCheckFunc(
+					testAccCheckIBMISInstanceExists("ibm_is_instance.testacc_instance", instance),
+					resource.TestCheckResourceAttr(
+						"ibm_is_instance.testacc_instance", "name", name),
+					resource.TestCheckResourceAttr(
+						"ibm_is_instance.testacc_instance", "profile", updatedProfile),
+					resource.TestCheckResourceAttr(
+						"ibm_is_instance.testacc_instance", "total_volume_bandwidth", fmt.Sprintf("%d", updatedBandwidth)),
+					resource.TestCheckResourceAttr(
+						"ibm_is_instance.testacc_instance", "zone", acc.ISZoneName),
+				),
+			},
+		},
+	})
+}
+
+// Configuration function that allows specifying both profile and bandwidth with primary network attachment
+func testAccCheckIBMISInstanceConfigWithProfileAndBandwidth(vpcname, subnetname, sshname, publicKey, name, prefix, profile string, bandwidth int) string {
+	return fmt.Sprintf(`
+	resource "ibm_is_vpc" "testacc_vpc" {
+		name = "%s"
+	}
+	  
+	resource "ibm_is_subnet" "testacc_subnet" {
+		name            = "%s"
+		vpc             = ibm_is_vpc.testacc_vpc.id
+		zone            = "%s"
+		ipv4_cidr_block = "%s"
+	}
+	  
+	resource "ibm_is_ssh_key" "testacc_sshkey" {
+		name       = "%s"
+		public_key = "%s"
+	}
+	  
+	resource "ibm_is_instance" "testacc_instance" {
+		name    = "%s"
+		image   = "%s"
+		profile = "%s"
+		total_volume_bandwidth = %d
+		primary_network_attachment {
+			name = "%s-pna"
+			virtual_network_interface {
+				subnet = ibm_is_subnet.testacc_subnet.id
+			}
+		}
+		vpc  = ibm_is_vpc.testacc_vpc.id
+		zone = "%s"
+		keys = [ibm_is_ssh_key.testacc_sshkey.id]
+		wait_before_delete = false
+	}`, vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, sshname, publicKey, name, acc.IsImage, profile, bandwidth, prefix, acc.ISZoneName)
+}
diff --git a/ibm/service/vpc/resource_ibm_is_lb_listener_policy_rule_test.go b/ibm/service/vpc/resource_ibm_is_lb_listener_policy_rule_test.go
index 95eefaa8c..706272398 100644
--- a/ibm/service/vpc/resource_ibm_is_lb_listener_policy_rule_test.go
+++ b/ibm/service/vpc/resource_ibm_is_lb_listener_policy_rule_test.go
@@ -27,8 +27,10 @@ func TestAccIBMISLBListenerPolicyRule_basic(t *testing.T) {
 	//lblistenerpolicyname2 := fmt.Sprintf("tflblisuat-listener-policy-%d", acctest.RandIntRange(10, 100))
 	lblistenerpolicyRuleField1 := fmt.Sprintf("tflblipolicy-rule-field-%d", acctest.RandIntRange(10, 100))
 	lblistenerpolicyRuleField2 := fmt.Sprintf("tflblipolicy-rule-field-%d", acctest.RandIntRange(10, 100))
+	lblistenerpolicyRuleField3 := fmt.Sprintf("tflblipolicy-rule-field-%d", acctest.RandIntRange(10, 100))
 	lblistenerpolicyRuleValue1 := fmt.Sprintf("tflblipolicy-rule-value-%d", acctest.RandIntRange(10, 100))
 	lblistenerpolicyRuleValue2 := fmt.Sprintf("tflblipolicy-rule-value-%d", acctest.RandIntRange(10, 100))
+	lblistenerpolicyRuleValue3 := fmt.Sprintf("tflblipolicy-rule-value-%d", acctest.RandIntRange(10, 100))
 
 	priority := "1"
 	protocol := "http"
@@ -38,6 +40,7 @@ func TestAccIBMISLBListenerPolicyRule_basic(t *testing.T) {
 	condition := "equals"
 	typeh := "header"
 	typeb := "body"
+	typeSni := "sni_hostname"
 
 	resource.Test(t, resource.TestCase{
 		PreCheck:     func() { acc.TestAccPreCheck(t) },
@@ -57,6 +60,19 @@ func TestAccIBMISLBListenerPolicyRule_basic(t *testing.T) {
 				),
 			},
 
+			{
+				Config: testAccCheckIBMISLBListenerPolicySniRuleConfig(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, lbname, port, protocol, lblistenerpolicyname, action, priority, condition, typeSni, lblistenerpolicyRuleField1, lblistenerpolicyRuleValue1),
+				Check: resource.ComposeTestCheckFunc(
+					testAccCheckIBMISLBListenerPolicyRuleExists("ibm_is_lb_listener_policy_rule.testacc_lb_listener_policy_rule", ruleID),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb.testacc_LB", "name", lbname),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy_rule.testacc_lb_listener_policy_rule", "field", lblistenerpolicyRuleField3),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy_rule.testacc_lb_listener_policy_rule", "value", lblistenerpolicyRuleValue3),
+				),
+			},
+
 			{
 				Config: testAccCheckIBMISLBListenerPolicyRuleConfigUpdate(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, lbname, port, protocol, lblistenerpolicyname, priority, condition, typeb, lblistenerpolicyRuleField2, lblistenerpolicyRuleValue2),
 				Check: resource.ComposeTestCheckFunc(
@@ -263,3 +279,59 @@ func testAccCheckIBMISLBListenerPolicyRuleConfigUpdate(vpcname, subnetname, zone
 }`, vpcname, subnetname, zone, cidr, lbname, port, protocol, priority, lblistenerpolicyname, condition, types, field, value)
 
 }
+
+func testAccCheckIBMISLBListenerPolicySniRuleConfig(vpcname, subnetname, zone, cidr, lbname, port, protocol, lblistenerpolicyname, action, priority, condition, types, field, value string) string {
+	return fmt.Sprintf(`
+	resource "ibm_is_vpc" "testacc_vpc" {
+		name = "%s"
+	}
+
+	resource "ibm_is_subnet" "testacc_subnet" {
+		name = "%s"
+		vpc = ibm_is_vpc.testacc_vpc.id
+		zone = "%s"
+		ipv4_cidr_block = "%s"
+	}
+	resource "ibm_is_lb" "testacc_LB" {
+		name = "%s"
+		subnets = [ibm_is_subnet.testacc_subnet.id]
+	}
+	resource "ibm_is_lb_listener" "testacc_lb_listener" {
+		lb = ibm_is_lb.testacc_LB.id
+		default_pool = ibm_is_lb_pool.testacc_pool.pool_id
+		port = %s
+		protocol = "%s"
+	}
+
+	resource "ibm_is_lb_pool" "testacc_pool" {
+		name           = "test"
+		lb             = ibm_is_lb.testacc_LB.id
+		algorithm      = "round_robin"
+		protocol       = "http"
+		health_delay   = 60
+		health_retries = 5
+		health_timeout = 30
+		health_type    = "http"
+	}
+
+
+	resource "ibm_is_lb_listener_policy" "testacc_lb_listener_policy" {
+        lb = ibm_is_lb.testacc_LB.id
+        listener = ibm_is_lb_listener.testacc_lb_listener.listener_id
+        action = "%s"
+		priority = %s
+		name = "%s"
+		target_id = ibm_is_lb_pool.testacc_pool.pool_id
+	}
+
+
+	resource "ibm_is_lb_listener_policy_rule" "testacc_lb_listener_policy_rule" {
+		lb        = ibm_is_lb.testacc_LB.id
+		listener  = ibm_is_lb_listener.testacc_lb_listener.listener_id
+		policy    = ibm_is_lb_listener_policy.testacc_lb_listener_policy.policy_id
+		condition = "%s"
+		type      = "%s"
+		field     = "%s"
+		value     = "%s"
+}`, vpcname, subnetname, zone, cidr, lbname, port, protocol, action, priority, lblistenerpolicyname, condition, types, field, value)
+}
diff --git a/ibm/service/vpc/resource_ibm_is_lb_listener_policy_test.go b/ibm/service/vpc/resource_ibm_is_lb_listener_policy_test.go
index 89823aa52..834d27258 100644
--- a/ibm/service/vpc/resource_ibm_is_lb_listener_policy_test.go
+++ b/ibm/service/vpc/resource_ibm_is_lb_listener_policy_test.go
@@ -31,6 +31,8 @@ func TestAccIBMISLBListenerPolicy_basic(t *testing.T) {
 	port := "8080"
 	action := "forward"
 	priority2 := "2"
+	actionPool := "forward_to_pool"
+	actionListener := "forward_to_listener"
 
 	resource.Test(t, resource.TestCase{
 		PreCheck:     func() { acc.TestAccPreCheck(t) },
@@ -50,6 +52,32 @@ func TestAccIBMISLBListenerPolicy_basic(t *testing.T) {
 						"ibm_is_lb_listener_policy.testacc_lb_listener_policy", "priority", priority1),
 				),
 			},
+			{
+				Config: testAccCheckIBMISLBListenerPolicyConfig(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, lbname, port, protocol, lblistenerpolicyname1, actionPool, priority1),
+				Check: resource.ComposeTestCheckFunc(
+					testAccCheckIBMISLBListenerPolicyExists("ibm_is_lb_listener_policy.testacc_lb_listener_policy", policyID),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb.testacc_LB", "name", lbname),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy.testacc_lb_listener_policy", "name", lblistenerpolicyname1),
+
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy.testacc_lb_listener_policy", "priority", priority1),
+				),
+			},
+			{
+				Config: testAccCheckIBMISLBListenerPolicyConfig(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, lbname, port, protocol, lblistenerpolicyname1, actionListener, priority1),
+				Check: resource.ComposeTestCheckFunc(
+					testAccCheckIBMISLBListenerPolicyExists("ibm_is_lb_listener_policy.testacc_lb_listener_policy", policyID),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb.testacc_LB", "name", lbname),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy.testacc_lb_listener_policy", "name", lblistenerpolicyname1),
+
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy.testacc_lb_listener_policy", "priority", priority1),
+				),
+			},
 
 			{
 				Config: testAccCheckIBMISLBListenerPolicyConfigUpdate(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, lbname, port, protocol, lblistenerpolicyname2, priority2, action),
@@ -65,6 +93,77 @@ func TestAccIBMISLBListenerPolicy_basic(t *testing.T) {
 	})
 }
 
+func TestAccIBMISLBListenerPoolPolicy(t *testing.T) {
+	var policyID string
+	vpcname := fmt.Sprintf("tflblisuat-vpc-%d", acctest.RandIntRange(10, 100))
+	subnetname := fmt.Sprintf("tflblisuat-subnet-%d", acctest.RandIntRange(10, 100))
+	lbname := fmt.Sprintf("tflblisuat%d", acctest.RandIntRange(10, 100))
+	lblistenerpolicyname1 := fmt.Sprintf("tflblisuat-listener-policy-%d", acctest.RandIntRange(10, 100))
+
+	priority1 := "1"
+	protocol := "http"
+	port := "8080"
+	actionPool := "forward_to_pool"
+	// actionListener := "forward_to_listener"
+
+	resource.Test(t, resource.TestCase{
+		PreCheck:     func() { acc.TestAccPreCheck(t) },
+		Providers:    acc.TestAccProviders,
+		CheckDestroy: testAccCheckIBMISLBListenerPolicyDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccCheckIBMISLBListenerPoolPolicyConfig(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, lbname, port, protocol, lblistenerpolicyname1, actionPool, priority1),
+				Check: resource.ComposeTestCheckFunc(
+					testAccCheckIBMISLBListenerPolicyExists("ibm_is_lb_listener_policy.testacc_lb_listener_policy", policyID),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb.testacc_LB", "name", lbname),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy.testacc_lb_listener_policy", "name", lblistenerpolicyname1),
+
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy.testacc_lb_listener_policy", "priority", priority1),
+				),
+			},
+		},
+	})
+}
+
+func TestAccIBMISLBListenerListenerPolicy(t *testing.T) {
+	var policyID string
+	vpcname := fmt.Sprintf("tflblisuat-vpc-%d", acctest.RandIntRange(10, 100))
+	subnetname := fmt.Sprintf("tflblisuat-subnet-%d", acctest.RandIntRange(10, 100))
+	lbname := fmt.Sprintf("tflblisuat%d", acctest.RandIntRange(10, 100))
+	lblistenerpolicyname1 := fmt.Sprintf("tflblisuat-listener-policy-%d", acctest.RandIntRange(10, 100))
+
+	priority1 := "1"
+	protocol := "http"
+	port := "8080"
+	protocol1 := "tcp"
+	port1 := "8081"
+	actionlistener := "forward_to_listener"
+
+	resource.Test(t, resource.TestCase{
+		PreCheck:     func() { acc.TestAccPreCheck(t) },
+		Providers:    acc.TestAccProviders,
+		CheckDestroy: testAccCheckIBMISLBListenerPolicyDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccCheckIBMISLBListenerListenerPolicyConfig(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, lbname, port, protocol, port1, protocol1, lblistenerpolicyname1, actionlistener, priority1),
+				Check: resource.ComposeTestCheckFunc(
+					testAccCheckIBMISLBListenerPolicyExists("ibm_is_lb_listener_policy.testacc_lb_listener_policy", policyID),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb.testacc_LB", "name", lbname),
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy.testacc_lb_listener_policy", "name", lblistenerpolicyname1),
+
+					resource.TestCheckResourceAttr(
+						"ibm_is_lb_listener_policy.testacc_lb_listener_policy", "priority", priority1),
+				),
+			},
+		},
+	})
+}
+
 func TestAccIBMISLBListenerPolicyRedirect_basic(t *testing.T) {
 	var policyID string
 	vpcname := fmt.Sprintf("tflblisuat-vpc-%d", acctest.RandIntRange(10, 100))
@@ -431,6 +530,91 @@ func testAccCheckIBMISLBListenerPolicyConfig(vpcname, subnetname, zone, cidr, lb
 
 }
 
+func testAccCheckIBMISLBListenerPoolPolicyConfig(vpcname, subnetname, zone, cidr, lbname, port, protocol, lblistenerpolicyname, action, priority string) string {
+	return fmt.Sprintf(`
+	resource "ibm_is_vpc" "testacc_vpc" {
+		name = "%s"
+	  }
+
+	  resource "ibm_is_subnet" "testacc_subnet" {
+		name            = "%s"
+		vpc             = ibm_is_vpc.testacc_vpc.id
+		zone            = "%s"
+		ipv4_cidr_block = "%s"
+	  }
+	  resource "ibm_is_lb" "testacc_LB" {
+		name    = "%s"
+		subnets = [ibm_is_subnet.testacc_subnet.id]
+	  }
+	  resource "ibm_is_lb_listener" "testacc_lb_listener" {
+		lb           = ibm_is_lb.testacc_LB.id
+		default_pool = ibm_is_lb_pool.testacc_pool.pool_id
+		port         = %s
+		protocol     = "%s"
+	  }
+	  resource "ibm_is_lb_pool" "testacc_pool" {
+		name           = "test"
+		lb             = ibm_is_lb.testacc_LB.id
+		algorithm      = "round_robin"
+		protocol       = "http"
+		health_delay   = 60
+		health_retries = 5
+		health_timeout = 30
+		health_type    = "http"
+	  }
+
+	  resource "ibm_is_lb_listener_policy" "testacc_lb_listener_policy" {
+		lb        = ibm_is_lb.testacc_LB.id
+		listener  = ibm_is_lb_listener.testacc_lb_listener.listener_id
+		action    = "%s"
+		priority  = %s
+		name      = "%s"
+		target_id = ibm_is_lb_pool.testacc_pool.pool_id
+
+}`, vpcname, subnetname, zone, cidr, lbname, port, protocol, action, priority, lblistenerpolicyname)
+
+}
+
+func testAccCheckIBMISLBListenerListenerPolicyConfig(vpcname, subnetname, zone, cidr, lbname, port, protocol, port1, protocol1, lblistenerpolicyname, action, priority string) string {
+	return fmt.Sprintf(`
+	resource "ibm_is_vpc" "testacc_vpc" {
+		name = "%s"
+	  }
+
+	  resource "ibm_is_subnet" "testacc_subnet" {
+		name            = "%s"
+		vpc             = ibm_is_vpc.testacc_vpc.id
+		zone            = "%s"
+		ipv4_cidr_block = "%s"
+	  }
+	  resource "ibm_is_lb" "testacc_LB" {
+		name    = "%s"
+		subnets = [ibm_is_subnet.testacc_subnet.id]
+	  }
+	  resource "ibm_is_lb_listener" "testacc_lb_listener" {
+		lb           = ibm_is_lb.testacc_LB.id
+		port         = %s
+		protocol     = "%s"
+	  }
+
+	  resource "ibm_is_lb_listener" "testacc_lb_listener1" {
+ 		 lb       = ibm_is_lb.testacc_LB.id
+		 port     = %s
+		 protocol = "%s"
+      }
+
+	  resource "ibm_is_lb_listener_policy" "testacc_lb_listener_policy" {
+		lb        = ibm_is_lb.testacc_LB.id
+		listener  = ibm_is_lb_listener.testacc_lb_listener.listener_id
+		action    = "%s"
+		priority  = %s
+		name      = "%s"
+		target_id = ibm_is_lb_listener.testacc_lb_listener1.listener_id
+
+}`, vpcname, subnetname, zone, cidr, lbname, port, protocol, port1, protocol1, action, priority, lblistenerpolicyname)
+
+}
+
 func testAccCheckIBMISLBListenerPolicyConfigUpdate(vpcname, subnetname, zone, cidr, lbname, port, protocol, lblistenerpolicyname, priority, action string) string {
 
 	return fmt.Sprintf(`
diff --git a/ibm/service/vpc/resource_ibm_is_security_group_target_test.go b/ibm/service/vpc/resource_ibm_is_security_group_target_test.go
index 8d71e8b5d..e245fe6fd 100644
--- a/ibm/service/vpc/resource_ibm_is_security_group_target_test.go
+++ b/ibm/service/vpc/resource_ibm_is_security_group_target_test.go
@@ -143,3 +143,99 @@ resource "ibm_is_security_group_target" "testacc_security_group_target" {
   }`, vpcname, subnetname, zoneName, cidr, name, lbname)
 
 }
+
+func TestAccIBMISSecurityGroupTarget_UpdatePendingRetry(t *testing.T) {
+	var securityGroup1, securityGroup2 string
+
+	vpcname := fmt.Sprintf("tfsg-vpc-%d", acctest.RandIntRange(10, 100))
+	subnetname := fmt.Sprintf("tfsg-subnet-%d", acctest.RandIntRange(10, 100))
+	lbname := fmt.Sprintf("tfsg-lb-%d", acctest.RandIntRange(10, 100))
+	sg1name := fmt.Sprintf("tfsg-one-%d", acctest.RandIntRange(10, 100))
+	sg2name := fmt.Sprintf("tfsg-two-%d", acctest.RandIntRange(10, 100))
+
+	resource.Test(t, resource.TestCase{
+		PreCheck:     func() { acc.TestAccPreCheck(t) },
+		Providers:    acc.TestAccProviders,
+		CheckDestroy: testAccCheckIBMISSecurityGroupTargetDestroy,
+		Steps: []resource.TestStep{
+			// Create first security group target binding
+			{
+				Config: testAccCheckIBMISsecurityGroupTargetConfig(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, lbname, sg1name),
+				Check: resource.ComposeTestCheckFunc(
+					testAccCheckIBMISSecurityGroupTargetExists("ibm_is_security_group_target.testacc_security_group_target", &securityGroup1),
+					resource.TestCheckResourceAttr(
+						"ibm_is_security_group_target.testacc_security_group_target", "name", lbname),
+					resource.TestCheckResourceAttrSet(
+						"ibm_is_security_group_target.testacc_security_group_target", "security_group"),
+					resource.TestCheckResourceAttrSet(
+						"ibm_is_security_group_target.testacc_security_group_target", "target"),
+					resource.TestCheckResourceAttrSet(
+						"ibm_is_security_group_target.testacc_security_group_target", "crn"),
+					resource.TestCheckResourceAttrSet(
+						"ibm_is_security_group_target.testacc_security_group_target", "resource_type"),
+				),
+			},
+			// Create second security group target binding for the same LB - should trigger UPDATE_PENDING condition
+			{
+				Config: testAccCheckIBMISsecurityGroupTargetDualConfig(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, lbname, sg1name, sg2name),
+				Check: resource.ComposeTestCheckFunc(
+					testAccCheckIBMISSecurityGroupTargetExists("ibm_is_security_group_target.testacc_security_group_target", &securityGroup1),
+					testAccCheckIBMISSecurityGroupTargetExists("ibm_is_security_group_target.testacc_security_group_target2", &securityGroup2),
+					resource.TestCheckResourceAttr(
+						"ibm_is_security_group_target.testacc_security_group_target", "name", lbname),
+					resource.TestCheckResourceAttr(
+						"ibm_is_security_group_target.testacc_security_group_target2", "name", lbname),
+					resource.TestCheckResourceAttrSet(
+						"ibm_is_security_group_target.testacc_security_group_target2", "security_group"),
+					resource.TestCheckResourceAttrSet(
+						"ibm_is_security_group_target.testacc_security_group_target2", "target"),
+					resource.TestCheckResourceAttrSet(
+						"ibm_is_security_group_target.testacc_security_group_target2", "crn"),
+					resource.TestCheckResourceAttrSet(
+						"ibm_is_security_group_target.testacc_security_group_target2", "resource_type"),
+				),
+			},
+		},
+	})
+}
+
+// Config for dual security groups attached to the same load balancer
+func testAccCheckIBMISsecurityGroupTargetDualConfig(vpcname, subnetname, zoneName, cidr, lbname, sg1name, sg2name string) string {
+	return fmt.Sprintf(`
+		resource "ibm_is_vpc" "testacc_vpc" {
+			name = "%s"
+		}
+
+		resource "ibm_is_subnet" "testacc_subnet" {
+			name = "%s"
+			vpc = ibm_is_vpc.testacc_vpc.id
+			zone = "%s"
+			ipv4_cidr_block = "%s"
+		}
+
+		resource "ibm_is_security_group" "testacc_security_group_one" {
+			name = "%s"
+			vpc = ibm_is_vpc.testacc_vpc.id
+		}
+
+		resource "ibm_is_security_group" "testacc_security_group_two" {
+			name = "%s"
+			vpc = ibm_is_vpc.testacc_vpc.id
+		}
+
+		resource "ibm_is_lb" "testacc_LB" {
+			name = "%s"
+			subnets = [ibm_is_subnet.testacc_subnet.id]
+		}
+
+		resource "ibm_is_security_group_target" "testacc_security_group_target" {
+			security_group = ibm_is_security_group.testacc_security_group_one.id
+			target = ibm_is_lb.testacc_LB.id
+		}
+
+		resource "ibm_is_security_group_target" "testacc_security_group_target2" {
+			security_group = ibm_is_security_group.testacc_security_group_two.id
+			target = ibm_is_lb.testacc_LB.id
+		}`,
+		vpcname, subnetname, zoneName, cidr, sg1name, sg2name, lbname)
+}