diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5f01135c9b658a2dd147dc6d33ec909ce3eda2af..6061fd581f4983655c62aa43f092a19f5b08e90c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,16 @@
+### v0.4.0
+##### February 6, 2021
+
+#### :tada: Features
+
+- Add Nodeport support for Kubernetes service
+
+#### :beetle: Bug Fixes
+
+- Updated helm chart with latest CRD configuration
+- Optimized helm chart
+- RBAC issus fixed
+
 ### v0.3.0
 ##### Decemeber 30, 2020
 
diff --git a/Makefile b/Makefile
index 9d4795d837100332d15b7e2ca7ef8067c713f1b0..9423d295f2f6b30d12c6de842e76caff28d57c1f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 # Current Operator version
-VERSION ?= 0.0.1
+VERSION ?= 0.4.0
 # Default bundle image tag
 BUNDLE_IMG ?= controller-bundle:$(VERSION)
 # Options for 'bundle-build'
@@ -12,7 +12,7 @@ endif
 BUNDLE_METADATA_OPTS ?= $(BUNDLE_CHANNELS) $(BUNDLE_DEFAULT_CHANNEL)
 
 # Image URL to use all building/pushing image targets
-IMG ?= quay.io/opstree/redis-operator:v0.3.0
+IMG ?= quay.io/opstree/redis-operator:v0.4.0
 # Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
 CRD_OPTIONS ?= "crd:trivialVersions=true,preserveUnknownFields=false"
 
diff --git a/api/v1beta1/redis_types.go b/api/v1beta1/redis_types.go
index e915b850193a99ca5bccea91251db1ff9b2125e7..635a82d0bffe1a6970f041794c992f6f5b5a4338 100644
--- a/api/v1beta1/redis_types.go
+++ b/api/v1beta1/redis_types.go
@@ -55,8 +55,8 @@ type Storage struct {
 // RedisMaster interface will have the redis master configuration
 type RedisMaster struct {
 	Resources   Resources         `json:"resources,omitempty"`
-	RedisConfig map[string]string `json:"redisConfig"`
-	Service     Service           `json:"service"`
+	RedisConfig map[string]string `json:"redisConfig,omitempty"`
+	Service     Service           `json:"service,omitempty"`
 }
 
 // RedisExporter interface will have the information for redis exporter related stuff
@@ -78,8 +78,8 @@ type GlobalConfig struct {
 // RedisSlave interface will have the redis slave configuration
 type RedisSlave struct {
 	Resources   Resources         `json:"resources,omitempty"`
-	RedisConfig map[string]string `json:"redisConfig"`
-	Service     Service           `json:"service"`
+	RedisConfig map[string]string `json:"redisConfig,omitempty"`
+	Service     Service           `json:"service,omitempty"`
 }
 
 // ResourceDescription describes CPU and memory resources defined for a cluster.
diff --git a/helm-charts/redis-operator/Chart.yaml b/helm-charts/redis-operator/Chart.yaml
index dff5d045d9f6bdd00fbbeab8a4586247639699e1..ffe9691df1f663a83376b48ae99e6a1d31397ea9 100644
--- a/helm-charts/redis-operator/Chart.yaml
+++ b/helm-charts/redis-operator/Chart.yaml
@@ -1,13 +1,15 @@
 ---
-apiVersion: v1
+apiVersion: v2
+appVersion: "0.4.0"
 description: Provides easy redis setup definitions for Kubernetes services, and deployment.
 engine: gotpl
 maintainers:
-  - name: Opstree Solutions
+  - name: Abhishek Dubey
+  - name: Sandeep Rawat
 name: redis-operator
 sources:
   - https://github.com/OT-CONTAINER-KIT/redis-operator
-version: 0.2
+version: 0.4.0
 home: https://github.com/OT-CONTAINER-KIT/redis-operator
 icon: https://github.com/OT-CONTAINER-KIT/redis-operator/raw/master/static/redis-operator-logo.svg
 keywords:
diff --git a/helm-charts/redis-operator/templates/operator-deployment.yaml b/helm-charts/redis-operator/templates/operator-deployment.yaml
index 0fa5cd7d8bd9af5cf5323cfe4e21ca4a98f3f54b..16bf04cc13a670cd3899edf7e05f15255d62a944 100644
--- a/helm-charts/redis-operator/templates/operator-deployment.yaml
+++ b/helm-charts/redis-operator/templates/operator-deployment.yaml
@@ -3,8 +3,15 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: {{ .Values.redisOperator.name }}
+  labels:
+    control-plane: "{{ .Values.redisOperator.name }}"
+    app.kubernetes.io/name: {{ .Values.redisOperator.name }}
+    helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+    app.kubernetes.io/managed-by: {{ .Release.Service }}
+    app.kubernetes.io/instance: {{ .Release.Name }}
+    app.kubernetes.io/version: {{ .Chart.AppVersion }}
 spec:
-  replicas: 1
+  replicas: {{ .Values.replicas }}
   selector:
     matchLabels:
       name: {{ .Values.redisOperator.name }}
@@ -13,19 +20,17 @@ spec:
       labels:
         name: {{ .Values.redisOperator.name }}
     spec:
-      serviceAccountName: {{ .Values.redisOperator.name }}
       containers:
       - name: "{{ .Values.redisOperator.name }}"
         image: "{{ .Values.redisOperator.imageName }}:{{ .Values.redisOperator.imageTag }}"
         imagePullPolicy: {{ .Values.redisOperator.imagePullPolicy }}
-        env:
-          - name: WATCH_NAMESPACE
-            valueFrom:
-              fieldRef:
-                fieldPath: metadata.namespace
-          - name: POD_NAME
-            valueFrom:
-              fieldRef:
-                fieldPath: metadata.name
-          - name: OPERATOR_NAME
-            value: "{{ .Values.redisOperator.name }}"
+        command:
+        - /manager
+        args:
+        - --leader-elect
+{{- if .Values.resources }}
+        resources:
+{{ toYaml .Values.resources | indent 10 }}
+{{- end }}
+      serviceAccountName: "{{ .Values.serviceAccountName }}"
+      serviceAccount: "{{ .Values.serviceAccountName }}"
diff --git a/helm-charts/redis-operator/templates/role-binding.yaml b/helm-charts/redis-operator/templates/role-binding.yaml
index 70142a575bd55ba7be61f87c3075099b893bf4a6..0c45e5c9e913684cb8f2aa31196b46f5113fcc5c 100644
--- a/helm-charts/redis-operator/templates/role-binding.yaml
+++ b/helm-charts/redis-operator/templates/role-binding.yaml
@@ -1,12 +1,20 @@
 ---
 apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
+kind: ClusterRoleBinding
 metadata:
   name: {{ .Values.redisOperator.name }}
+  labels:
+    control-plane: "{{ .Values.redisOperator.name }}"
+    app.kubernetes.io/name: {{ .Values.redisOperator.name }}
+    helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+    app.kubernetes.io/managed-by: {{ .Release.Service }}
+    app.kubernetes.io/instance: {{ .Release.Name }}
+    app.kubernetes.io/version: {{ .Chart.AppVersion }}
 subjects:
 - kind: ServiceAccount
-  name: {{ .Values.redisOperator.name }}
+  name: {{ .Values.serviceAccountName }}
+  namespace: {{ .Release.Namespace }}
 roleRef:
-  kind: Role
-  name: {{ .Values.redisOperator.name }}
+  kind: ClusterRole
+  name: cluster-admin
   apiGroup: rbac.authorization.k8s.io
diff --git a/helm-charts/redis-operator/templates/role.yaml b/helm-charts/redis-operator/templates/role.yaml
deleted file mode 100644
index 4d4c75c524bdab073954e393f40c890f091bbece..0000000000000000000000000000000000000000
--- a/helm-charts/redis-operator/templates/role.yaml
+++ /dev/null
@@ -1,82 +0,0 @@
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  creationTimestamp: null
-  name: {{ .Values.redisOperator.name }}
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  - pods/exec
-  - services
-  - services/finalizers
-  - endpoints
-  - persistentvolumeclaims
-  - events
-  - configmaps
-  - secrets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - apps
-  resources:
-  - deployments
-  - daemonsets
-  - replicasets
-  - statefulsets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - monitoring.coreos.com
-  resources:
-  - servicemonitors
-  verbs:
-  - get
-  - create
-- apiGroups:
-  - apps
-  resourceNames:
-  - redis-operator
-  resources:
-  - deployments/finalizers
-  verbs:
-  - update
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  verbs:
-  - get
-- apiGroups:
-  - apps
-  resources:
-  - replicasets
-  - deployments
-  verbs:
-  - get
-- apiGroups:
-  - redis.opstreelabs.in
-  resources:
-  - '*'
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
diff --git a/helm-charts/redis-operator/templates/service-account.yaml b/helm-charts/redis-operator/templates/service-account.yaml
index aa2b6a2d6d33ca2342890a907ab0f1e09388dcc8..542716231818791323b4590785fdd6a7d9215662 100644
--- a/helm-charts/redis-operator/templates/service-account.yaml
+++ b/helm-charts/redis-operator/templates/service-account.yaml
@@ -3,3 +3,10 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: {{ .Values.redisOperator.name }}
+  labels:
+    control-plane: "{{ .Values.redisOperator.name }}"
+    app.kubernetes.io/name: {{ .Values.redisOperator.name }}
+    helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+    app.kubernetes.io/managed-by: {{ .Release.Service }}
+    app.kubernetes.io/instance: {{ .Release.Name }}
+    app.kubernetes.io/version: {{ .Chart.AppVersion }}
diff --git a/helm-charts/redis-operator/values.yaml b/helm-charts/redis-operator/values.yaml
index e4ad4b16737eaa7fef758c5f227c0eb01f796053..5f66ce264dfbfc87f9061ddc50967c604f73c48e 100644
--- a/helm-charts/redis-operator/values.yaml
+++ b/helm-charts/redis-operator/values.yaml
@@ -2,5 +2,17 @@
 redisOperator:
   name: redis-operator
   imageName: quay.io/opstree/redis-operator
-  imageTag: v0.2
+  imageTag: v0.4.0
   imagePullPolicy: Always
+
+resources:
+  limits:
+    cpu: 100m
+    memory: 100Mi
+  requests:
+    cpu: 100m
+    memory: 100Mi
+
+replicas: 1
+
+serviceAccountName: redis-operator
diff --git a/k8sutils/redis.go b/k8sutils/redis.go
index 5b1dcad73fe01681f4acc7be366d6d72ce006967..c88805a0d2ee5b5c4d367dcd3eee7c19c24716fb 100644
--- a/k8sutils/redis.go
+++ b/k8sutils/redis.go
@@ -155,7 +155,8 @@ func ExecuteCommand(cr *redisv1beta1.Redis, cmd []string) {
 
 	targetContainer := -1
 	for i, tr := range pod.Spec.Containers {
-		if tr.Name+"-master" == cr.ObjectMeta.Name+"-master" {
+		reqLogger.Info("Pod Counted successfully", "Count", i, "Container Name", tr.Name)
+		if tr.Name == cr.ObjectMeta.Name+"-master" {
 			targetContainer = i
 			break
 		}
diff --git a/k8sutils/services.go b/k8sutils/services.go
index 3090863db1e929162e74f740f1c2d52df74ec2c8..3f81d71271fc79eb6888745b8284304aef181530 100644
--- a/k8sutils/services.go
+++ b/k8sutils/services.go
@@ -57,6 +57,8 @@ func GenerateServiceDef(cr *redisv1beta1.Redis, labels map[string]string, portNu
 
 	if typeService == "LoadBalancer" {
 		serviceType = corev1.ServiceTypeLoadBalancer
+	} else if typeService == "NodePort" {
+		serviceType = corev1.ServiceTypeNodePort
 	} else {
 		serviceType = corev1.ServiceTypeClusterIP
 	}