diff --git a/installers/charm/lcm/src/charm.py b/installers/charm/lcm/src/charm.py
index 01ac0bf..b034624 100755
--- a/installers/charm/lcm/src/charm.py
+++ b/installers/charm/lcm/src/charm.py
@@ -32,7 +32,7 @@
 from opslib.osm.interfaces.http import HttpClient
 from opslib.osm.interfaces.kafka import KafkaClient
 from opslib.osm.interfaces.mongo import MongoClient
-from opslib.osm.pod import ContainerV3Builder, PodSpecV3Builder
+from opslib.osm.pod import ContainerV3Builder, PodRestartPolicy, PodSpecV3Builder
 from opslib.osm.validator import ModelValidator, validator
 
 
@@ -184,6 +184,17 @@
         # Create Builder for the PodSpec
         pod_spec_builder = PodSpecV3Builder()
 
+        # Add secrets to the pod
+        lcm_secret_name = f"{self.app.name}-lcm-secret"
+        pod_spec_builder.add_secret(
+            lcm_secret_name,
+            {
+                "uri": config.mongodb_uri or self.mongodb_client.connection_string,
+                "commonkey": config.database_commonkey,
+                "helm_ca_certs": config.vca_helm_ca_certs,
+            },
+        )
+
         # Build Container
         container_builder = ContainerV3Builder(
             self.app.name, image_info, config.image_pull_policy
@@ -204,32 +215,50 @@
                 "OSMLCM_MESSAGE_PORT": self.kafka_client.port,
                 # Database configuration
                 "OSMLCM_DATABASE_DRIVER": "mongo",
-                "OSMLCM_DATABASE_URI": config.mongodb_uri
-                or self.mongodb_client.connection_string,
-                "OSMLCM_DATABASE_COMMONKEY": config.database_commonkey,
                 # Storage configuration
                 "OSMLCM_STORAGE_DRIVER": "mongo",
                 "OSMLCM_STORAGE_PATH": "/app/storage",
                 "OSMLCM_STORAGE_COLLECTION": "files",
-                "OSMLCM_STORAGE_URI": config.mongodb_uri
-                or self.mongodb_client.connection_string,
                 "OSMLCM_VCA_STABLEREPOURL": config.vca_stablerepourl,
-                "OSMLCM_VCA_HELM_CA_CERTS": config.vca_helm_ca_certs,
             }
         )
+        container_builder.add_secret_envs(
+            secret_name=lcm_secret_name,
+            envs={
+                "OSMLCM_DATABASE_URI": "uri",
+                "OSMLCM_DATABASE_COMMONKEY": "commonkey",
+                "OSMLCM_STORAGE_URI": "uri",
+                "OSMLCM_VCA_HELM_CA_CERTS": "helm_ca_certs",
+            },
+        )
         if config.vca_host:
-            container_builder.add_envs(
+            vca_secret_name = f"{self.app.name}-vca-secret"
+            pod_spec_builder.add_secret(
+                vca_secret_name,
                 {
+                    "host": config.vca_host,
+                    "port": str(config.vca_port),
+                    "user": config.vca_user,
+                    "pubkey": config.vca_pubkey,
+                    "secret": config.vca_secret,
+                    "cacert": config.vca_cacert,
+                    "cloud": config.vca_cloud,
+                    "k8s_cloud": config.vca_k8s_cloud,
+                },
+            )
+            container_builder.add_secret_envs(
+                secret_name=vca_secret_name,
+                envs={
                     # VCA configuration
-                    "OSMLCM_VCA_HOST": config.vca_host,
-                    "OSMLCM_VCA_PORT": config.vca_port,
-                    "OSMLCM_VCA_USER": config.vca_user,
-                    "OSMLCM_VCA_PUBKEY": config.vca_pubkey,
-                    "OSMLCM_VCA_SECRET": config.vca_secret,
-                    "OSMLCM_VCA_CACERT": config.vca_cacert,
-                    "OSMLCM_VCA_CLOUD": config.vca_cloud,
-                    "OSMLCM_VCA_K8S_CLOUD": config.vca_k8s_cloud,
-                }
+                    "OSMLCM_VCA_HOST": "host",
+                    "OSMLCM_VCA_PORT": "port",
+                    "OSMLCM_VCA_USER": "user",
+                    "OSMLCM_VCA_PUBKEY": "pubkey",
+                    "OSMLCM_VCA_SECRET": "secret",
+                    "OSMLCM_VCA_CACERT": "cacert",
+                    "OSMLCM_VCA_CLOUD": "cloud",
+                    "OSMLCM_VCA_K8S_CLOUD": "k8s_cloud",
+                },
             )
             if config.vca_apiproxy:
                 container_builder.add_env("OSMLCM_VCA_APIPROXY", config.vca_apiproxy)
@@ -246,6 +275,11 @@
         # Add container to pod spec
         pod_spec_builder.add_container(container)
 
+        # Add restart policy
+        restart_policy = PodRestartPolicy()
+        restart_policy.add_secrets()
+        pod_spec_builder.set_restart_policy(restart_policy)
+
         return pod_spec_builder.build()
 
 
