diff --git a/installers/charm/bundles/osm/bundle.yaml b/installers/charm/bundles/osm/bundle.yaml
index fc3dbcb..54d9f59 100644
--- a/installers/charm/bundles/osm/bundle.yaml
+++ b/installers/charm/bundles/osm/bundle.yaml
@@ -29,25 +29,25 @@
     annotations:
       gui-x: 0
       gui-y: 1100
-  mariadb-k8s:
-    charm: 'cs:~charmed-osm/mariadb-k8s'
-    channel: 'stable'
-    scale: 1
-    series: kubernetes
-    storage:
-      database: 50M
-    options:
-      password: manopw
-      root_password: osm4u
-      user: mano
-      database: database
-      mysql_port: "3306"
-      query-cache-type: "OFF"
-      query-cache-size: 0
-      ha-mode: false
-    annotations:
-      gui-x: -500
-      gui-y: -400
+  # mariadb-k8s:
+  #   charm: 'cs:~charmed-osm/mariadb-k8s'
+  #   channel: 'stable'
+  #   scale: 1
+  #   series: kubernetes
+  #   storage:
+  #     database: 50M
+  #   options:
+  #     password: manopw
+  #     root_password: osm4u
+  #     user: mano
+  #     database: database
+  #     mysql_port: "3306"
+  #     query-cache-type: "OFF"
+  #     query-cache-size: 0
+  #     ha-mode: false
+  #   annotations:
+  #     gui-x: -500
+  #     gui-y: -400
   kafka-k8s:
     charm: 'cs:~charmed-osm/kafka-k8s'
     channel: 'stable'
@@ -118,6 +118,15 @@
     annotations:
       gui-x: 500
       gui-y: -400
+  ng-ui:
+    charm: '%(prefix)s/ng-ui%(suffix)s'
+    channel: '%(channel)s'
+    scale: 1
+    series: kubernetes
+    options:
+      port: 80
+      server_name: localhost
+      client_max_body_size: 15M
   lcm-k8s:
     charm: '%(prefix)s/lcm-k8s%(suffix)s'
     channel: '%(channel)s'
diff --git a/installers/charm/ng-ui/README.md b/installers/charm/ng-ui/README.md
index b4311e5..19d8227 100644
--- a/installers/charm/ng-ui/README.md
+++ b/installers/charm/ng-ui/README.md
@@ -11,4 +11,39 @@
 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #   See the License for the specific language governing permissions and
 #   limitations under the License. -->
-# NG-UI Charm
\ No newline at end of file
+
+# NG-UI Charm
+
+## How to deploy
+
+```bash
+juju deploy . # cs:~charmed-osm/ng-ui --channel edge
+juju relate ng-ui nbi-k8s
+```
+
+## How to scale
+
+```bash
+    juju scale-application ng-ui 3
+```
+
+## How to use certificates
+
+Generate your own certificate if you don't have one already:
+
+```bash
+sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl_certificate.key -out ssl_certificate.crt
+sudo chown $USER:$USER ssl_certificate.key
+juju attach-resource ng-ui ssl_certificate=ssl_certificate.crt
+juju attach-resource ng-ui ssl_certificate_key=ssl_certificate.key
+juju config ng-ui port 443
+```
+
+## Config Examples
+
+```bash
+juju config ng-ui image=opensourcemano/ng-ui:<tag>
+juju config ng-ui port=80
+juju config server_name=<name>
+juju config client_max_body_size=25M
+```
diff --git a/installers/charm/ng-ui/config.yaml b/installers/charm/ng-ui/config.yaml
index fccc787..7dd6d60 100644
--- a/installers/charm/ng-ui/config.yaml
+++ b/installers/charm/ng-ui/config.yaml
@@ -31,12 +31,4 @@
   client_max_body_size:
     description: Client maximum body size
     type: string
-    default: 15M
-  nbi_hostname:
-    description: NBI hostname
-    type: string
-    default: nbi-k8s
-  nbi_port:
-    description: NBI Port
-    type: int
-    default: 9999
+    default: 15M
\ No newline at end of file
diff --git a/installers/charm/ng-ui/files/default b/installers/charm/ng-ui/files/default
index 00c86fc..321435c 100644
--- a/installers/charm/ng-ui/files/default
+++ b/installers/charm/ng-ui/files/default
@@ -19,9 +19,12 @@
     root   /usr/share/nginx/html;
     index  index.html index.htm;
     client_max_body_size $client_max_body_size;
-
+    $ssl_crt
+    $ssl_crt_key
+    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
+    ssl_ciphers         HIGH:!aNULL:!MD5;
     location /osm {
-        proxy_pass http://$nbi_hostname:$nbi_port;
+        proxy_pass https://$nbi_host:$nbi_port;
         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
         proxy_set_header Accept-Encoding "";
     }
diff --git a/installers/charm/ng-ui/metadata.yaml b/installers/charm/ng-ui/metadata.yaml
index db13ba6..b096635 100644
--- a/installers/charm/ng-ui/metadata.yaml
+++ b/installers/charm/ng-ui/metadata.yaml
@@ -11,6 +11,7 @@
 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #   See the License for the specific language governing permissions and
 #   limitations under the License.
+
 name: ng-ui
 summary: A Next Generation UI charm for Opensource MANO
 description: |
@@ -21,6 +22,13 @@
 deployment:
   type: stateless
   service: cluster
-provides:
+requires:
   nbi:
     interface: osm-nbi
+resources:
+  ssl_certificate:
+    type: file
+    filename: ssl_certificate.crt
+  ssl_certificate_key:
+    type: file
+    filename: ssl_certificate.key
\ No newline at end of file
diff --git a/installers/charm/ng-ui/src/charm.py b/installers/charm/ng-ui/src/charm.py
index 23d3161..7d46130 100755
--- a/installers/charm/ng-ui/src/charm.py
+++ b/installers/charm/ng-ui/src/charm.py
@@ -24,6 +24,8 @@
 from ops.model import (
     ActiveStatus,
     MaintenanceStatus,
+    BlockedStatus,
+    ModelError,
 )
 
 from glob import glob
@@ -39,24 +41,40 @@
     def __init__(self, framework, key):
         super().__init__(framework, key)
         self.state.set_default(spec=None)
+        self.state.set_default(nbi_host=None)
+        self.state.set_default(nbi_port=None)
 
         # Observe Charm related events
         self.framework.observe(self.on.config_changed, self.on_config_changed)
         self.framework.observe(self.on.start, self.on_start)
         self.framework.observe(self.on.upgrade_charm, self.on_upgrade_charm)
-        # self.framework.observe(
-        #     self.on.nbi_relation_joined, self.on_nbi_relation_joined
-        # )
+        self.framework.observe(
+            self.on.nbi_relation_changed, self.on_nbi_relation_changed
+        )
+
+        # SSL Certificate path
+        self.ssl_folder = "/certs"
+        self.ssl_crt = "{}/ssl_certificate.crt".format(self.ssl_folder)
+        self.ssl_key = "{}/ssl_certificate.key".format(self.ssl_folder)
 
     def _apply_spec(self):
         # Only apply the spec if this unit is a leader.
-        if not self.framework.model.unit.is_leader():
+        unit = self.model.unit
+        if not unit.is_leader():
+            unit.status = ActiveStatus("Ready")
             return
+        if not self.state.nbi_host or not self.state.nbi_port:
+            unit.status = MaintenanceStatus("Waiting for NBI")
+            return
+        unit.status = MaintenanceStatus("Applying new pod spec")
+
         new_spec = self.make_pod_spec()
         if new_spec == self.state.spec:
+            unit.status = ActiveStatus("Ready")
             return
         self.framework.model.pod.set_spec(new_spec)
         self.state.spec = new_spec
+        unit.status = ActiveStatus("Ready")
 
     def make_pod_spec(self):
         config = self.framework.model.config
@@ -78,14 +96,30 @@
                 "initialDelaySeconds": 45,
             },
         }
+
+        ssl_certificate = None
+        ssl_certificate_key = None
+        try:
+            ssl_certificate = self.model.resources.fetch("ssl_certificate")
+            ssl_certificate_key = self.model.resources.fetch("ssl_certificate_key")
+        except ModelError as e:
+            logger.info(e)
+
         config_spec = {
             "port": config["port"],
             "server_name": config["server_name"],
             "client_max_body_size": config["client_max_body_size"],
-            "nbi_hostname": config["nbi_hostname"],
-            "nbi_port": config["nbi_port"],
+            "nbi_host": self.state.nbi_host or config["nbi_host"],
+            "nbi_port": self.state.nbi_port or config["nbi_port"],
+            "ssl_crt": "",
+            "ssl_crt_key": "",
         }
 
+        if ssl_certificate and ssl_certificate_key:
+            config_spec["ssl_crt"] = "ssl_certificate {};".format(self.ssl_crt)
+            config_spec["ssl_crt_key"] = "ssl_certificate_key {};".format(self.ssl_key)
+            config_spec["port"] = "{} ssl".format(config_spec["port"])
+
         files = [
             {
                 "name": "configuration",
@@ -96,8 +130,22 @@
                     .substitute(config_spec)
                     for filename in glob("files/*")
                 },
-            },
+            }
         ]
+
+        if ssl_certificate and ssl_certificate_key:
+            files.append(
+                {
+                    "name": "ssl",
+                    "mountPath": self.ssl_folder,
+                    "files": {
+                        Path(filename)
+                        .name: Template(Path(filename).read_text())
+                        .substitute(config_spec)
+                        for filename in [ssl_certificate, ssl_certificate_key]
+                    },
+                }
+            )
         logger.debug(files)
         spec = {
             "version": 2,
@@ -116,17 +164,11 @@
 
     def on_config_changed(self, event):
         """Handle changes in configuration"""
-        unit = self.model.unit
-        unit.status = MaintenanceStatus("Applying new pod spec")
         self._apply_spec()
-        unit.status = ActiveStatus("Ready")
 
     def on_start(self, event):
         """Called when the charm is being installed"""
-        unit = self.model.unit
-        unit.status = MaintenanceStatus("Applying pod spec")
         self._apply_spec()
-        unit.status = ActiveStatus("Ready")
 
     def on_upgrade_charm(self, event):
         """Upgrade the charm."""
@@ -134,14 +176,20 @@
         unit.status = MaintenanceStatus("Upgrading charm")
         self.on_start(event)
 
-    # def on_nbi_relation_joined(self, event):
-    #     unit = self.model.unit
-    #     if not unit.is_leader():
-    #         return
-    #     config = self.framework.model.config
-    #     unit = MaintenanceStatus("Sending connection data")
+    def on_nbi_relation_changed(self, event):
+        unit = self.model.unit
+        if not unit.is_leader():
+            return
+        self.state.nbi_host = event.relation.data[event.unit].get("host")
+        self.state.nbi_port = event.relation.data[event.unit].get("port")
+        self._apply_spec()
 
-    #     unit = ActiveStatus("Ready")
+    def resource_get(self, resource_name: str) -> Path:
+        from pathlib import Path
+        from subprocess import run
+
+        result = run(["resource-get", resource_name], output=True, text=True)
+        return Path(result.stdout.strip())
 
 
 if __name__ == "__main__":
