diff --git a/apis/project.cattle.io/v3/pipeline_types.go b/apis/project.cattle.io/v3/pipeline_types.go
index f0c5fd74..54c9f7ed 100644
--- a/apis/project.cattle.io/v3/pipeline_types.go
+++ b/apis/project.cattle.io/v3/pipeline_types.go
@@ -149,7 +149,7 @@ type PipelineSpec struct {
 	TriggerWebhookTag  bool   `json:"triggerWebhookTag,omitempty" yaml:"triggerWebhookTag,omitempty"`
 
 	RepositoryURL            string `json:"repositoryUrl,omitempty" yaml:"repositoryUrl,omitempty"`
-	SourceCodeCredentialName string `json:"sourceCodeCredentialName,omitempty" yaml:"sourceCodeCredentialName,omitempty" norman:"type=reference[sourceCodeCredential]"`
+	SourceCodeCredentialName string `json:"sourceCodeCredentialName,omitempty" yaml:"sourceCodeCredentialName,omitempty" norman:"type=reference[sourceCodeCredential],noupdate"`
 }
 
 type PipelineConfig struct {
diff --git a/mapper/namespace_reference.go b/mapper/namespace_reference.go
index f6b8db10..428ce5d9 100644
--- a/mapper/namespace_reference.go
+++ b/mapper/namespace_reference.go
@@ -32,13 +32,10 @@ func (n *NamespaceReference) FromInternal(data map[string]interface{}) {
 
 func (n *NamespaceReference) ToInternal(data map[string]interface{}) error {
 	namespaceID, ok := data["namespaceId"]
-	if !ok {
-		return nil
-	}
 	for _, path := range n.fields {
 		convert.Transform(data, path, func(input interface{}) interface{} {
 			parts := strings.SplitN(convert.ToString(input), ":", 2)
-			if len(parts) == 2 && (parts[0] == namespaceID) {
+			if len(parts) == 2 && (!ok || parts[0] == namespaceID) {
 				return parts[1]
 			}
 			return input