Repository: redhat-developer/service-binding-operator
Pull request #504 (2020-06-04 08:24:20)

make leader-with-lease as an option of deployment
### Motivation

 Per issue https://github.com/redhat-developer/service-binding-operator/issues/488 
### Changes
Make changes per 
https://github.com/operator-framework/operator-sdk/blob/c93321571d8300bb1f60f548de12e83f05d2d267/doc/user-guide.md#leader-for-life
https://github.com/operator-framework/operator-sdk/blob/c93321571d8300bb1f60f548de12e83f05d2d267/doc/user-guide.md#leader-with-lease

No change in deployment yaml , so by default the `leader-for-life` will be used. 
`leader-with-lease` is enabled only when the environment variable SERVICE_BINDING_OPERATOR_LEADER_ELECTION_OPTION is set to `leader-with-lease` explicitly 

### Testing

There is no main_test.go ..  So I didn't add test case for this yet. 

For further more details refer the CONTRIBUTING.md

openshift-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by:
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **otaviof**
You can assign the PR to them by writing `/assign @otaviof` in a comment when ready.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=redhat-developer%2Fservice-binding-operator).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/redhat-developer/service-binding-operator/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["otaviof"]} -->
openshift-ci-robot: Hi @cdlliuy. Thanks for your PR.

I'm waiting for a [redhat-developer](https://github.com/orgs/redhat-developer/people) member to verify that this patch is reasonable to test. If it is, they should reply with `/ok-to-test` on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should [join the org](https://github.com/orgs/redhat-developer/people) to skip this step.

Once the patch is verified, the new status will be reflected by the `ok-to-test` label.

I understand the commands that are listed [here](https://go.k8s.io/bot-commands?repo=redhat-developer%2Fservice-binding-operator).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>

DhritiShikhar: /ok-to-test
codecov[bot]: # [Codecov](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504?src=pr&el=h1) Report
> Merging [#504](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504?src=pr&el=desc) into [master](https://codecov.io/gh/redhat-developer/service-binding-operator/commit/37de16ca5769fbfc451a197e503c991aab68b525&el=desc) will **not change** coverage.
> The diff coverage is `78.43%`.

[![Impacted file tree graph](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504/graphs/tree.svg?width=650&height=150&src=pr&token=CICBeVWlrC)](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master     #504   +/-   ##
=======================================
  Coverage   63.44%   63.44%           
=======================================
  Files          27       27           
  Lines        1789     1789           
=======================================
  Hits         1135     1135           
  Misses        488      488           
  Partials      166      166           
```


| [Impacted Files](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pkg/controller/servicebindingrequest/controller.go](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504/diff?src=pr&el=tree#diff-cGtnL2NvbnRyb2xsZXIvc2VydmljZWJpbmRpbmdyZXF1ZXN0L2NvbnRyb2xsZXIuZ28=) | `0.00% <ø> (ø)` | |
| [.../controller/servicebindingrequest/servicebinder.go](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504/diff?src=pr&el=tree#diff-cGtnL2NvbnRyb2xsZXIvc2VydmljZWJpbmRpbmdyZXF1ZXN0L3NlcnZpY2ViaW5kZXIuZ28=) | `64.37% <33.33%> (ø)` | |
| [pkg/controller/servicebindingrequest/binder.go](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504/diff?src=pr&el=tree#diff-cGtnL2NvbnRyb2xsZXIvc2VydmljZWJpbmRpbmdyZXF1ZXN0L2JpbmRlci5nbw==) | `64.61% <80.85%> (ø)` | |
| [pkg/controller/servicebindingrequest/reconciler.go](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504/diff?src=pr&el=tree#diff-cGtnL2NvbnRyb2xsZXIvc2VydmljZWJpbmRpbmdyZXF1ZXN0L3JlY29uY2lsZXIuZ28=) | `61.44% <100.00%> (ø)` | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504?src=pr&el=footer). Last update [c2884dd...7933e30](https://codecov.io/gh/redhat-developer/service-binding-operator/pull/504?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

Avni-Sharma: I am receiving an error when I set the env var,
```
2020-06-05T11:28:16.488+0530	ERROR	main	Error on creating a new manager instance	{"error": "unable to find leader election namespace: not running in-cluster, please specify LeaderElectionNamespace"}
```

When the env var isn't set, the operator works

Patch:
diff --git a/cmd/manager/main.go b/cmd/manager/main.go
index 5564a514..1de0ebdd 100644
--- a/cmd/manager/main.go
+++ b/cmd/manager/main.go
@@ -53,11 +53,16 @@ func getOperatorName() string {
 	return "service-binding-operator"
 }
 
-// isLeaderElectionEnabled based on environment variable SERVICE_BINDING_OPERATOR_DISABLE_ELECTION.
+// isLeaderElectionEnabled based on environment variable SERVICE_BINDING_OPERATOR_DISABLE_ELECTION. By default, it is enabled.
 func isLeaderElectionEnabled() bool {
 	return os.Getenv("SERVICE_BINDING_OPERATOR_DISABLE_ELECTION") == ""
 }
 
+// isLeaderWithLeaseEnabled based on environment variable SERVICE_BINDING_OPERATOR_LEADER_ELECTION_OPTION. By default, it is leader-for-life.
+func isLeaderWithLeaseEnabled() bool {
+	return os.Getenv("SERVICE_BINDING_OPERATOR_LEADER_ELECTION_OPTION") == "leader-with-lease"
+}
+
 func main() {
 	pflag.CommandLine.AddFlagSet(zap.FlagSet())
 	pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
@@ -81,23 +86,36 @@ func main() {
 
 	ctx := context.TODO()
 
+	opts := manager.Options{
+		Namespace:          namespace,
+		MetricsBindAddress: fmt.Sprintf("%s:%d", metricsHost, metricsPort),
+	}
+
 	// FIXME: is there a way to tell k8s-client that is not running in-cluster?
 	if isLeaderElectionEnabled() {
-		// Become the leader before proceeding
-		err = leader.Become(ctx, fmt.Sprintf("%s-lock", getOperatorName()))
-		if err != nil {
-			mainLog.Error(err, "Failed to become the leader")
-			os.Exit(1)
+		if !isLeaderWithLeaseEnabled() {
+			// Become the leader before proceeding
+			err = leader.Become(ctx, fmt.Sprintf("%s-lock", getOperatorName()))
+			if err != nil {
+				mainLog.Error(err, "Failed to become the leader")
+				os.Exit(1)
+			}
+		} else {
+			leaderNS := os.Getenv("SERVICE_BINDING_OPERATOR_LEADER_ELECTION_NAMESPACE")
+			opts = manager.Options{
+				Namespace:               namespace,
+				MetricsBindAddress:      fmt.Sprintf("%s:%d", metricsHost, metricsPort),
+				LeaderElection:          true,
+				LeaderElectionID:        getOperatorName(),
+				LeaderElectionNamespace: leaderNS,
+			}
 		}
 	} else {
 		mainLog.Warning("Leader election is disabled")
 	}
 
 	// Create a new Cmd to provide shared dependencies and start components
-	mgr, err := manager.New(cfg, manager.Options{
-		Namespace:          namespace,
-		MetricsBindAddress: fmt.Sprintf("%s:%d", metricsHost, metricsPort),
-	})
+	mgr, err := manager.New(cfg, opts)
 	if err != nil {
 		mainLog.Error(err, "Error on creating a new manager instance")
 		os.Exit(1)
diff --git a/deploy/crds/apps.openshift.io_servicebindingrequests_crd.yaml b/deploy/crds/apps.openshift.io_servicebindingrequests_crd.yaml
index e1d738ee..818d87ae 100644
--- a/deploy/crds/apps.openshift.io_servicebindingrequests_crd.yaml
+++ b/deploy/crds/apps.openshift.io_servicebindingrequests_crd.yaml
@@ -116,6 +116,8 @@ spec:
                   type: string
                 envVarPrefix:
                   type: string
+                id:
+                  type: string
               required:
               - group
               - kind
@@ -142,6 +144,8 @@ spec:
                     type: string
                   envVarPrefix:
                     type: string
+                  id:
+                    type: string
                 required:
                 - group
                 - kind
diff --git a/pkg/apis/apps/v1alpha1/servicebindingrequest_types.go b/pkg/apis/apps/v1alpha1/servicebindingrequest_types.go
index f6887015..321ae486 100644
--- a/pkg/apis/apps/v1alpha1/servicebindingrequest_types.go
+++ b/pkg/apis/apps/v1alpha1/servicebindingrequest_types.go
@@ -65,6 +65,7 @@ type BackingServiceSelector struct {
 	// +optional
 	Namespace    *string `json:"namespace,omitempty"`
 	EnvVarPrefix *string `json:"envVarPrefix,omitempty"`
+	Id           *string `json:"id,omitempty"`
 }
 
 // BoundApplication defines the application workloads to which the binding secret has
diff --git a/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go
index e00095f5..2ddc6224 100644
--- a/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go
@@ -58,6 +58,16 @@ func (in *BackingServiceSelector) DeepCopyInto(out *BackingServiceSelector) {
 		*out = new(string)
 		**out = **in
 	}
+	if in.EnvVarPrefix != nil {
+		in, out := &in.EnvVarPrefix, &out.EnvVarPrefix
+		*out = new(string)
+		**out = **in
+	}
+	if in.Id != nil {
+		in, out := &in.Id, &out.Id
+		*out = new(string)
+		**out = **in
+	}
 	return
 }
 
diff --git a/pkg/controller/servicebindingrequest/annotations.go b/pkg/controller/servicebindingrequest/annotations.go
index 08e92aee..12d57750 100644
--- a/pkg/controller/servicebindingrequest/annotations.go
+++ b/pkg/controller/servicebindingrequest/annotations.go
@@ -38,11 +38,11 @@ func extractSBRNamespacedName(data map[string]string) types.NamespacedName {
 	return namespacedName
 }
 
-// GetSBRNamespacedNameFromObject returns a types.NamespacedName if the required service binding
+// getSBRNamespacedNameFromObject returns a types.NamespacedName if the required service binding
 // request annotations are present in the given runtime.Object, empty otherwise. When annotations are
 // not present, it checks if the object is an actual SBR, returning the details when positive. An
 // error can be returned in the case the object can't be decoded.
-func GetSBRNamespacedNameFromObject(obj runtime.Object) (types.NamespacedName, error) {
+func getSBRNamespacedNameFromObject(obj runtime.Object) (types.NamespacedName, error) {
 	sbrNamespacedName := types.NamespacedName{}
 	data, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
 	if err != nil {
@@ -59,14 +59,14 @@ func GetSBRNamespacedNameFromObject(obj runtime.Object) (types.NamespacedName, e
 		"SBR.NamespacedName", sbrNamespacedName.String(),
 	)
 
-	if IsNamespacedNameEmpty(sbrNamespacedName) {
+	if isNamespacedNameEmpty(sbrNamespacedName) {
 		log.Debug("SBR information not present in annotations, continue inspecting object")
 	} else {
 		log.Trace("SBR information found in annotations, returning it")
 		return sbrNamespacedName, nil
 	}
 
-	if u.GroupVersionKind() == v1alpha1.SchemeGroupVersion.WithKind(ServiceBindingRequestKind) {
+	if u.GroupVersionKind() == v1alpha1.SchemeGroupVersion.WithKind(serviceBindingRequestKind) {
 		log.Debug("Object is a SBR, returning its namespaced name")
 		sbrNamespacedName.Namespace = u.GetNamespace()
 		sbrNamespacedName.Name = u.GetName()
@@ -100,8 +100,8 @@ func updateUnstructuredObj(client dynamic.Interface, obj *unstructured.Unstructu
 	return err
 }
 
-// SetSBRAnnotations set annotations to include SBR information and return a new object.
-func SetSBRAnnotations(namespacedName types.NamespacedName,
+// setSBRAnnotations set annotations to include SBR information and return a new object.
+func setSBRAnnotations(namespacedName types.NamespacedName,
 	obj *unstructured.Unstructured) *unstructured.Unstructured {
 	newObj := obj.DeepCopy()
 	annotations := newObj.GetAnnotations()
@@ -114,15 +114,15 @@ func SetSBRAnnotations(namespacedName types.NamespacedName,
 	return newObj
 }
 
-// SetAndUpdateSBRAnnotations update existing annotations to include operator's. The annotations added are
+// setAndUpdateSBRAnnotations update existing annotations to include operator's. The annotations added are
 // referring to a existing SBR namespaced name.
-func SetAndUpdateSBRAnnotations(
+func setAndUpdateSBRAnnotations(
 	client dynamic.Interface,
 	namespacedName types.NamespacedName,
 	objs []*unstructured.Unstructured,
 ) error {
 	for _, obj := range objs {
-		newObj := SetSBRAnnotations(namespacedName, obj)
+		newObj := setSBRAnnotations(namespacedName, obj)
 		equal, err := nestedMapComparison(obj, newObj, []string{"metadata", "annotations"}...)
 		if err != nil {
 			return err
@@ -136,8 +136,8 @@ func SetAndUpdateSBRAnnotations(
 	return nil
 }
 
-// RemoveSBRAnnotations removes SBR related annotations and return a new object.
-func RemoveSBRAnnotations(obj *unstructured.Unstructured) *unstructured.Unstructured {
+// removeSBRAnnotations removes SBR related annotations and return a new object.
+func removeSBRAnnotations(obj *unstructured.Unstructured) *unstructured.Unstructured {
 	newObj := obj.DeepCopy()
 	annotations := newObj.GetAnnotations()
 	if annotations == nil {
@@ -149,11 +149,11 @@ func RemoveSBRAnnotations(obj *unstructured.Unstructured) *unstructured.Unstruct
 	return newObj
 }
 
-// RemoveAndUpdateSBRAnnotations removes SBR related annotations from all the objects and updates them using
+// removeAndUpdateSBRAnnotations removes SBR related annotations from all the objects and updates them using
 // the given client.
-func RemoveAndUpdateSBRAnnotations(client dynamic.Interface, objs []*unstructured.Unstructured) error {
+func removeAndUpdateSBRAnnotations(client dynamic.Interface, objs []*unstructured.Unstructured) error {
 	for _, obj := range objs {
-		newObj := RemoveSBRAnnotations(obj)
+		newObj := removeSBRAnnotations(obj)
 		equal, err := nestedMapComparison(obj, newObj, []string{"metadata", "annotations"}...)
 		if err != nil {
 			return err
diff --git a/pkg/controller/servicebindingrequest/annotations/annotations.go b/pkg/controller/servicebindingrequest/annotations/annotations.go
index 0492091d..f4c4ace4 100644
--- a/pkg/controller/servicebindingrequest/annotations/annotations.go
+++ b/pkg/controller/servicebindingrequest/annotations/annotations.go
@@ -30,8 +30,8 @@ var supportedBindingTypes = map[bindingType]bool{
 // ConfigMap and Secret resources keep user data.
 var dataPath = "data"
 
-// Result contains data that has been collected by an annotation handler.
-type Result struct {
+// result contains data that has been collected by an annotation handler.
+type result struct {
 	// Data contains the annotation data collected by an annotation handler inside a deep structure
 	// with its root being the value specified in the Path field.
 	Data map[string]interface{}
@@ -42,21 +42,21 @@ type Result struct {
 	Path string
 }
 
-// Handler should be implemented by types that want to offer a mechanism to provide binding data to
+// handler should be implemented by types that want to offer a mechanism to provide binding data to
 // the system.
-type Handler interface {
+type handler interface {
 	// Handle returns binding data.
-	Handle() (Result, error)
+	Handle() (result, error)
 }
 
-type ErrHandlerNotFound string
+type errHandlerNotFound string
 
-func (e ErrHandlerNotFound) Error() string {
+func (e errHandlerNotFound) Error() string {
 	return fmt.Sprintf("could not find handler for annotation value %q", string(e))
 }
 
 func IsErrHandlerNotFound(err error) bool {
-	_, ok := err.(ErrHandlerNotFound)
+	_, ok := err.(errHandlerNotFound)
 	return ok
 }
 
@@ -69,7 +69,7 @@ func BuildHandler(
 	annotationKey string,
 	annotationValue string,
 	restMapper meta.RESTMapper,
-) (Handler, error) {
+) (handler, error) {
 	bindingInfo, err := NewBindingInfo(annotationKey, annotationValue)
 	if err != nil {
 		return nil, err
@@ -78,13 +78,13 @@ func BuildHandler(
 	val := bindingInfo.Value
 
 	switch {
-	case IsAttribute(val):
-		return NewAttributeHandler(bindingInfo, *obj), nil
-	case IsSecret(val):
-		return NewSecretHandler(kubeClient, bindingInfo, *obj, restMapper)
-	case IsConfigMap(val):
-		return NewConfigMapHandler(kubeClient, bindingInfo, *obj, restMapper)
+	case isAttribute(val):
+		return newAttributeHandler(bindingInfo, *obj), nil
+	case isSecret(val):
+		return newSecretHandler(kubeClient, bindingInfo, *obj, restMapper)
+	case isConfigMap(val):
+		return newConfigMapHandler(kubeClient, bindingInfo, *obj, restMapper)
 	default:
-		return nil, ErrHandlerNotFound(val)
+		return nil, errHandlerNotFound(val)
 	}
 }
diff --git a/pkg/controller/servicebindingrequest/annotations/attribute.go b/pkg/controller/servicebindingrequest/annotations/attribute.go
index 04136402..2d1a27ee 100644
--- a/pkg/controller/servicebindingrequest/annotations/attribute.go
+++ b/pkg/controller/servicebindingrequest/annotations/attribute.go
@@ -7,10 +7,10 @@ import (
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 )
 
-const AttributeValue = "binding:env:attribute"
+const attributeValue = "binding:env:attribute"
 
-// AttributeHandler handles "binding:env:attribute" annotations.
-type AttributeHandler struct {
+// attributeHandler handles "binding:env:attribute" annotations.
+type attributeHandler struct {
 	// inputPath is the path that should be extracted from the resource. Required.
 	inputPath string
 	// outputPath is the path the extracted data should be placed under in the
@@ -22,30 +22,30 @@ type AttributeHandler struct {
 
 // Handle returns a unstructured object according to the "binding:env:attribute"
 // annotation strategy.
-func (h *AttributeHandler) Handle() (Result, error) {
+func (h *attributeHandler) Handle() (result, error) {
 	val, _, err := nested.GetValue(h.resource.Object, h.inputPath, h.outputPath)
 	if err != nil {
-		return Result{}, err
+		return result{}, err
 	}
-	return Result{
+	return result{
 		Data: val,
 	}, nil
 }
 
 // IsAttribute returns true if the annotation value should trigger the attribute
 // handler.
-func IsAttribute(s string) bool {
-	return AttributeValue == s
+func isAttribute(s string) bool {
+	return attributeValue == s
 }
 
 // NewAttributeHandler constructs an AttributeHandler.
-func NewAttributeHandler(
-	bindingInfo *BindingInfo,
+func newAttributeHandler(
+	bi *bindingInfo,
 	resource unstructured.Unstructured,
-) *AttributeHandler {
-	outputPath := bindingInfo.SourcePath
-	if len(bindingInfo.ResourceReferencePath) > 0 {
-		outputPath = bindingInfo.ResourceReferencePath
+) *attributeHandler {
+	outputPath := bi.SourcePath
+	if len(bi.ResourceReferencePath) > 0 {
+		outputPath = bi.ResourceReferencePath
 	}
 
 	// the current implementation removes "status." and "spec." from fields exported through
@@ -56,8 +56,8 @@ func NewAttributeHandler(
 		}
 	}
 
-	return &AttributeHandler{
-		inputPath:  bindingInfo.SourcePath,
+	return &attributeHandler{
+		inputPath:  bi.SourcePath,
 		outputPath: outputPath,
 		resource:   resource,
 	}
diff --git a/pkg/controller/servicebindingrequest/annotations/bindinginfo.go b/pkg/controller/servicebindingrequest/annotations/bindinginfo.go
index a25e1b0d..0617dfc8 100644
--- a/pkg/controller/servicebindingrequest/annotations/bindinginfo.go
+++ b/pkg/controller/servicebindingrequest/annotations/bindinginfo.go
@@ -10,8 +10,8 @@ const (
 	ServiceBindingOperatorAnnotationPrefix = "servicebindingoperator.redhat.io/"
 )
 
-// BindingInfo represents the pieces of a binding as parsed from an annotation.
-type BindingInfo struct {
+// bindingInfo represents the pieces of a binding as parsed from an annotation.
+type bindingInfo struct {
 	// ResourceReferencePath is the field in the Backing Service CR referring to a bindable property, either
 	// embedded or a reference to a related object..
 	ResourceReferencePath string
@@ -28,7 +28,7 @@ var ErrInvalidAnnotationName = errors.New("invalid annotation name")
 var ErrEmptyAnnotationName = errors.New("empty annotation name")
 
 // NewBindingInfo parses the encoded in the annotation name, returning its parts.
-func NewBindingInfo(name string, value string) (*BindingInfo, error) {
+func NewBindingInfo(name string, value string) (*bindingInfo, error) {
 	// do not process unknown annotations
 	if !strings.HasPrefix(name, ServiceBindingOperatorAnnotationPrefix) {
 		return nil, ErrInvalidAnnotationPrefix
@@ -49,7 +49,7 @@ func NewBindingInfo(name string, value string) (*BindingInfo, error) {
 		sourcePath = parts[1]
 	}
 
-	return &BindingInfo{
+	return &bindingInfo{
 		ResourceReferencePath: resourceReferencePath,
 		SourcePath:            sourcePath,
 		Descriptor:            strings.Join([]string{value, sourcePath}, ":"),
diff --git a/pkg/controller/servicebindingrequest/annotations/configmap.go b/pkg/controller/servicebindingrequest/annotations/configmap.go
index 47ce0dde..72efbabf 100644
--- a/pkg/controller/servicebindingrequest/annotations/configmap.go
+++ b/pkg/controller/servicebindingrequest/annotations/configmap.go
@@ -7,24 +7,24 @@ import (
 	"k8s.io/client-go/dynamic"
 )
 
-const ConfigMapValue = "binding:env:object:configmap"
+const configMapValue = "binding:env:object:configmap"
 
 // IsConfigMap returns true if the annotation value should trigger config map handler.
-func IsConfigMap(s string) bool {
-	return ConfigMapValue == s
+func isConfigMap(s string) bool {
+	return configMapValue == s
 }
 
 // NewConfigMapHandler constructs an annotation handler that can extract related data from config
 // maps.
-func NewConfigMapHandler(
+func newConfigMapHandler(
 	client dynamic.Interface,
-	bindingInfo *BindingInfo,
+	bi *bindingInfo,
 	resource unstructured.Unstructured,
 	restMapper meta.RESTMapper,
-) (Handler, error) {
+) (handler, error) {
 	return NewResourceHandler(
 		client,
-		bindingInfo,
+		bi,
 		resource,
 		schema.GroupVersionResource{
 			Version:  "v1",
diff --git a/pkg/controller/servicebindingrequest/annotations/errors.go b/pkg/controller/servicebindingrequest/annotations/errors.go
index a9479581..58a3770a 100644
--- a/pkg/controller/servicebindingrequest/annotations/errors.go
+++ b/pkg/controller/servicebindingrequest/annotations/errors.go
@@ -5,22 +5,22 @@ import (
 	"fmt"
 )
 
-type InvalidArgumentErr string
+type invalidArgumentErr string
 
-func (e InvalidArgumentErr) Error() string {
+func (e invalidArgumentErr) Error() string {
 	return fmt.Sprintf("invalid argument value for path %q", string(e))
 }
 
-var ResourceNameFieldNotFoundErr = errors.New("secret name field not found")
+var resourceNameFieldNotFoundErr = errors.New("secret name field not found")
 
-type UnknownBindingTypeErr string
+type unknownBindingTypeErr string
 
-func (e UnknownBindingTypeErr) Error() string {
+func (e unknownBindingTypeErr) Error() string {
 	return string(e) + " is not supported"
 }
 
-type ErrInvalidBindingValue string
+type errInvalidBindingValue string
 
-func (e ErrInvalidBindingValue) Error() string {
+func (e errInvalidBindingValue) Error() string {
 	return fmt.Sprintf("invalid binding value %q", string(e))
 }
diff --git a/pkg/controller/servicebindingrequest/annotations/resource.go b/pkg/controller/servicebindingrequest/annotations/resource.go
index e4a14ad5..619a18e4 100644
--- a/pkg/controller/servicebindingrequest/annotations/resource.go
+++ b/pkg/controller/servicebindingrequest/annotations/resource.go
@@ -14,10 +14,10 @@ import (
 	"github.com/redhat-developer/service-binding-operator/pkg/controller/servicebindingrequest/nested"
 )
 
-// ResourceHandler handles annotations related to external resources.
-type ResourceHandler struct {
+// resourceHandler handles annotations related to external resources.
+type resourceHandler struct {
 	// bindingInfo contains the binding details related to the annotation handler.
-	bindingInfo *BindingInfo
+	bindingInfo *bindingInfo
 	// client is the client used to retrieve a related secret.
 	client dynamic.Interface
 	// relatedGroupVersionResource is the related resource GVR, used to retrieve the related resource
@@ -41,20 +41,20 @@ type ResourceHandler struct {
 
 // discoverRelatedResourceName returns the resource name referenced by the handler. Can return an
 // error in the case the expected information doesn't exist in the handler's resource object.
-func discoverRelatedResourceName(obj map[string]interface{}, bindingInfo *BindingInfo) (string, error) {
+func discoverRelatedResourceName(obj map[string]interface{}, bi *bindingInfo) (string, error) {
 	resourceNameValue, ok, err := unstructured.NestedFieldCopy(
 		obj,
-		strings.Split(bindingInfo.ResourceReferencePath, ".")...,
+		strings.Split(bi.ResourceReferencePath, ".")...,
 	)
 	if !ok {
-		return "", ResourceNameFieldNotFoundErr
+		return "", resourceNameFieldNotFoundErr
 	}
 	if err != nil {
 		return "", err
 	}
 	name, ok := resourceNameValue.(string)
 	if !ok {
-		return "", InvalidArgumentErr(bindingInfo.ResourceReferencePath)
+		return "", invalidArgumentErr(bi.ResourceReferencePath)
 	}
 	return name, nil
 }
@@ -64,12 +64,12 @@ func discoverBindingType(val string) (bindingType, error) {
 	re := regexp.MustCompile("^binding:(.*?):.*$")
 	parts := re.FindStringSubmatch(val)
 	if len(parts) == 0 {
-		return "", ErrInvalidBindingValue(val)
+		return "", errInvalidBindingValue(val)
 	}
 	t := bindingType(parts[1])
 	_, ok := supportedBindingTypes[t]
 	if !ok {
-		return "", UnknownBindingTypeErr(t)
+		return "", unknownBindingTypeErr(t)
 	}
 	return t, nil
 }
@@ -83,10 +83,10 @@ func discoverBindingType(val string) (bindingType, error) {
 //
 // In the case the resource reference and source paths are different, the source path is appended to
 // the resulting slice.
-func getInputPathFields(bindingInfo *BindingInfo, inputPathPrefix *string) []string {
+func getInputPathFields(bi *bindingInfo, inputPathPrefix *string) []string {
 	inputPathFields := []string{}
-	if bindingInfo.ResourceReferencePath != bindingInfo.SourcePath {
-		inputPathFields = append(inputPathFields, bindingInfo.SourcePath)
+	if bi.ResourceReferencePath != bi.SourcePath {
+		inputPathFields = append(inputPathFields, bi.SourcePath)
 	}
 	if inputPathPrefix != nil && len(*inputPathPrefix) > 0 {
 		inputPathFields = append([]string{*inputPathPrefix}, inputPathFields...)
@@ -95,7 +95,7 @@ func getInputPathFields(bindingInfo *BindingInfo, inputPathPrefix *string) []str
 }
 
 // Handle returns the value for an external resource strategy.
-func (h *ResourceHandler) Handle() (Result, error) {
+func (h *resourceHandler) Handle() (result, error) {
 	ns := h.resource.GetNamespace()
 	resource, err := h.
 		client.
@@ -103,16 +103,16 @@ func (h *ResourceHandler) Handle() (Result, error) {
 		Namespace(ns).
 		Get(h.relatedResourceName, metav1.GetOptions{})
 	if err != nil {
-		return Result{}, err
+		return result{}, err
 	}
 
 	inputPathFields := getInputPathFields(h.bindingInfo, h.inputPathRoot)
 	val, ok, err := unstructured.NestedFieldCopy(resource.Object, inputPathFields...)
 	if !ok {
-		return Result{}, InvalidArgumentErr(strings.Join(inputPathFields, ", "))
+		return result{}, invalidArgumentErr(strings.Join(inputPathFields, ", "))
 	}
 	if err != nil {
-		return Result{}, err
+		return result{}, err
 	}
 
 	if mapVal, ok := val.(map[string]interface{}); ok {
@@ -120,7 +120,7 @@ func (h *ResourceHandler) Handle() (Result, error) {
 		for k, v := range mapVal {
 			decodedVal, err := h.stringValue(v)
 			if err != nil {
-				return Result{}, err
+				return result{}, err
 			}
 			tmpVal[k] = decodedVal
 		}
@@ -128,19 +128,19 @@ func (h *ResourceHandler) Handle() (Result, error) {
 	} else {
 		val, err = h.stringValue(val)
 		if err != nil {
-			return Result{}, err
+			return result{}, err
 		}
 	}
 
 	typ, err := discoverBindingType(h.bindingInfo.Value)
 	if err != nil {
-		return Result{}, err
+		return result{}, err
 	}
 
 	// get resource's kind.
 	gvk, err := h.restMapper.KindFor(h.relatedGroupVersionResource)
 	if err != nil {
-		return Result{}, err
+		return result{}, err
 	}
 
 	// prefix the output path with the kind of the resource.
@@ -149,7 +149,7 @@ func (h *ResourceHandler) Handle() (Result, error) {
 		h.bindingInfo.SourcePath,
 	}, ".")
 
-	return Result{
+	return result{
 		Data: nested.ComposeValue(val, nested.NewPath(outputPath)),
 		Type: typ,
 		Path: outputPath,
@@ -168,35 +168,35 @@ func stringValue(v interface{}) (string, error) {
 // NewSecretHandler constructs a SecretHandler.
 func NewResourceHandler(
 	client dynamic.Interface,
-	bindingInfo *BindingInfo,
+	bi *bindingInfo,
 	resource unstructured.Unstructured,
 	relatedGroupVersionResource schema.GroupVersionResource,
 	inputPathPrefix *string,
 	restMapper meta.RESTMapper,
-) (*ResourceHandler, error) {
+) (*resourceHandler, error) {
 	if client == nil {
-		return nil, InvalidArgumentErr("client")
+		return nil, invalidArgumentErr("client")
 	}
 
-	if bindingInfo == nil {
-		return nil, InvalidArgumentErr("bindingInfo")
+	if bi == nil {
+		return nil, invalidArgumentErr("bi")
 	}
 
-	if len(bindingInfo.SourcePath) == 0 {
-		return nil, InvalidArgumentErr("bindingInfo.Path")
+	if len(bi.SourcePath) == 0 {
+		return nil, invalidArgumentErr("bi.Path")
 	}
 
-	if len(bindingInfo.ResourceReferencePath) == 0 {
-		return nil, InvalidArgumentErr("bindingInfo.ResourceReferencePath")
+	if len(bi.ResourceReferencePath) == 0 {
+		return nil, invalidArgumentErr("bi.ResourceReferencePath")
 	}
 
-	relatedResourceName, err := discoverRelatedResourceName(resource.Object, bindingInfo)
+	relatedResourceName, err := discoverRelatedResourceName(resource.Object, bi)
 	if err != nil {
 		return nil, err
 	}
 
-	return &ResourceHandler{
-		bindingInfo:                 bindingInfo,
+	return &resourceHandler{
+		bindingInfo:                 bi,
 		client:                      client,
 		inputPathRoot:               inputPathPrefix,
 		relatedGroupVersionResource: relatedGroupVersionResource,
diff --git a/pkg/controller/servicebindingrequest/annotations/secret.go b/pkg/controller/servicebindingrequest/annotations/secret.go
index 428a3094..efbdd951 100644
--- a/pkg/controller/servicebindingrequest/annotations/secret.go
+++ b/pkg/controller/servicebindingrequest/annotations/secret.go
@@ -10,12 +10,12 @@ import (
 	"k8s.io/client-go/dynamic"
 )
 
-const SecretValue = "binding:env:object:secret"
-const VolumeMountSecretValue = "binding:volumemount:secret"
+const secretValue = "binding:env:object:secret"
+const volumeMountSecretValue = "binding:volumemount:secret"
 
 // IsSecret returns true if the annotation value should trigger the secret handler.
-func IsSecret(s string) bool {
-	return SecretValue == s || VolumeMountSecretValue == s
+func isSecret(s string) bool {
+	return secretValue == s || volumeMountSecretValue == s
 }
 
 // decodeBase64String asserts whether val is a string and returns its decoded value.
@@ -32,15 +32,15 @@ func base64StringValue(v interface{}) (string, error) {
 }
 
 // NewSecretHandler constructs a SecretHandler.
-func NewSecretHandler(
+func newSecretHandler(
 	client dynamic.Interface,
-	bindingInfo *BindingInfo,
+	bi *bindingInfo,
 	resource unstructured.Unstructured,
 	restMapper meta.RESTMapper,
-) (Handler, error) {
+) (handler, error) {
 	h, err := NewResourceHandler(
 		client,
-		bindingInfo,
+		bi,
 		resource,
 		schema.GroupVersionResource{
 			Version:  "v1",
diff --git a/pkg/controller/servicebindingrequest/binder.go b/pkg/controller/servicebindingrequest/binder.go
index cee58407..fc551069 100644
--- a/pkg/controller/servicebindingrequest/binder.go
+++ b/pkg/controller/servicebindingrequest/binder.go
@@ -32,52 +32,52 @@ var (
 	volumesPath = []string{"spec", "template", "spec", "volumes"}
 )
 
-// ChangeTriggerEnv hijacking environment in order to trigger a change
-const ChangeTriggerEnv = "ServiceBindingOperatorChangeTriggerEnvVar"
+// changeTriggerEnv hijacking environment in order to trigger a change
+const changeTriggerEnv = "ServiceBindingOperatorChangeTriggerEnvVar"
 
-// Binder executes the "binding" act of updating different application kinds to use intermediary
+// binder executes the "binding" act of updating different application kinds to use intermediary
 // secret. Those secrets should be offered as environment variables.
-type Binder struct {
+type binder struct {
 	ctx        context.Context                 // request context
 	dynClient  dynamic.Interface               // kubernetes dynamic api client
 	sbr        *v1alpha1.ServiceBindingRequest // instantiated service binding request
 	volumeKeys []string                        // list of key names used in volume mounts
-	modifier   ExtraFieldsModifier             // extra modifier for CRDs before updating
+	modifier   extraFieldsModifier             // extra modifier for CRDs before updating
 	restMapper meta.RESTMapper                 // RESTMapper to convert GVR from GVK
 	logger     *log.Log                        // logger instance
 }
 
-// ExtraFieldsModifier is useful for updating backend service which requires additional changes besides
+// extraFieldsModifier is useful for updating backend service which requires additional changes besides
 // env/volumes updating. eg. for knative service we need to remove or update `spec.template.metadata.name`
 // from service template before updating otherwise it will be rejected.
-type ExtraFieldsModifier interface {
+type extraFieldsModifier interface {
 	ModifyExtraFields(u *unstructured.Unstructured) error
 }
 
-// ExtraFieldsModifierFunc func receiver type for ExtraFieldsModifier
-type ExtraFieldsModifierFunc func(u *unstructured.Unstructured) error
+// extraFieldsModifierFunc func receiver type for ExtraFieldsModifier
+type extraFieldsModifierFunc func(u *unstructured.Unstructured) error
 
 // ModifyExtraFields implements ExtraFieldsModifier interface
-func (f ExtraFieldsModifierFunc) ModifyExtraFields(u *unstructured.Unstructured) error {
+func (f extraFieldsModifierFunc) ModifyExtraFields(u *unstructured.Unstructured) error {
 	return f(u)
 }
 
-var EmptyApplicationSelectorErr = errors.New("application ResourceRef or MatchLabel not found")
-var ApplicationNotFound = errors.New("Application is already deleted")
+var emptyApplicationSelectorErr = errors.New("application ResourceRef or MatchLabel not found")
+var applicationNotFound = errors.New("Application is already deleted")
 
 // search objects based in Kind/APIVersion, which contain the labels defined in ApplicationSelector.
-func (b *Binder) search() (*unstructured.UnstructuredList, error) {
+func (b *binder) search() (*unstructured.UnstructuredList, error) {
 	// If Application name is present
 	if b.sbr.Spec.ApplicationSelector.ResourceRef != "" {
 		return b.getApplicationByName()
 	} else if b.sbr.Spec.ApplicationSelector.LabelSelector != nil {
 		return b.getApplicationByLabelSelector()
 	} else {
-		return nil, EmptyApplicationSelectorErr
+		return nil, emptyApplicationSelectorErr
 	}
 }
 
-func (b *Binder) getApplicationByName() (*unstructured.UnstructuredList, error) {
+func (b *binder) getApplicationByName() (*unstructured.UnstructuredList, error) {
 	ns := b.sbr.GetNamespace()
 	gvr := schema.GroupVersionResource{
 		Group:    b.sbr.Spec.ApplicationSelector.GroupVersionResource.Group,
@@ -94,7 +94,7 @@ func (b *Binder) getApplicationByName() (*unstructured.UnstructuredList, error)
 	return objList, nil
 }
 
-func (b *Binder) getApplicationByLabelSelector() (*unstructured.UnstructuredList, error) {
+func (b *binder) getApplicationByLabelSelector() (*unstructured.UnstructuredList, error) {
 	ns := b.sbr.GetNamespace()
 	gvr := schema.GroupVersionResource{
 		Group:    b.sbr.Spec.ApplicationSelector.GroupVersionResource.Group,
@@ -110,7 +110,7 @@ func (b *Binder) getApplicationByLabelSelector() (*unstructured.UnstructuredList
 
 // extractSpecVolumes based on volume path, extract it unstructured. It can return error on trying
 // to find data in informed Unstructured object.
-func (b *Binder) extractSpecVolumes(obj *unstructured.Unstructured) ([]interface{}, error) {
+func (b *binder) extractSpecVolumes(obj *unstructured.Unstructured) ([]interface{}, error) {
 	log := b.logger.WithValues("Volumes.NestedPath", volumesPath)
 	log.Debug("Reading volumes definitions...")
 	volumes, _, err := unstructured.NestedSlice(obj.Object, volumesPath...)
@@ -121,7 +121,7 @@ func (b *Binder) extractSpecVolumes(obj *unstructured.Unstructured) ([]interface
 }
 
 // updateSpecVolumes execute the inspection and update "volumes" entries in informed spec.
-func (b *Binder) updateSpecVolumes(
+func (b *binder) updateSpecVolumes(
 	obj *unstructured.Unstructured,
 ) (*unstructured.Unstructured, error) {
 	volumes, err := b.extractSpecVolumes(obj)
@@ -142,7 +142,7 @@ func (b *Binder) updateSpecVolumes(
 // removeSpecVolumes based on extract volume subset, removing volume bind volume entry. It can return
 // error on navigating though unstructured object, or in the case of having issues to edit
 // unstructured resource.
-func (b *Binder) removeSpecVolumes(
+func (b *binder) removeSpecVolumes(
 	obj *unstructured.Unstructured,
 ) (*unstructured.Unstructured, error) {
 	volumes, err := b.extractSpecVolumes(obj)
@@ -158,7 +158,7 @@ func (b *Binder) removeSpecVolumes(
 
 // updateVolumes inspect informed list assuming as []corev1.Volume, and if binding volume is already
 // defined just return the same list, otherwise, appending the binding volume.
-func (b *Binder) updateVolumes(volumes []interface{}) ([]interface{}, error) {
+func (b *binder) updateVolumes(volumes []interface{}) ([]interface{}, error) {
 	name := b.sbr.GetName()
 	log := b.logger
 
@@ -197,7 +197,7 @@ func (b *Binder) updateVolumes(volumes []interface{}) ([]interface{}, error) {
 }
 
 // removeVolumes remove the bind volumes from informed list of unstructured volumes.
-func (b *Binder) removeVolumes(volumes []interface{}) []interface{} {
+func (b *binder) removeVolumes(volumes []interface{}) []interface{} {
 	name := b.sbr.GetName()
 	var cleanVolumes []interface{}
 	for _, v := range volumes {
@@ -210,7 +210,7 @@ func (b *Binder) removeVolumes(volumes []interface{}) []interface{} {
 }
 
 // extractSpecContainers search for
-func (b *Binder) extractSpecContainers(obj *unstructured.Unstructured) ([]interface{}, error) {
+func (b *binder) extractSpecContainers(obj *unstructured.Unstructured) ([]interface{}, error) {
 	log := b.logger.WithValues("Containers.NestedPath", containersPath)
 
 	containers, found, err := unstructured.NestedSlice(obj.Object, containersPath...)
@@ -227,7 +227,7 @@ func (b *Binder) extractSpecContainers(obj *unstructured.Unstructured) ([]interf
 }
 
 // updateSpecContainers extract containers from object, and trigger update.
-func (b *Binder) updateSpecContainers(
+func (b *binder) updateSpecContainers(
 	obj *unstructured.Unstructured,
 ) (*unstructured.Unstructured, error) {
 	containers, err := b.extractSpecContainers(obj)
@@ -246,7 +246,7 @@ func (b *Binder) updateSpecContainers(
 // removeSpecContainers find and edit containers resource subset, removing bind related entries
 // from the object. It can return error on extracting data, editing steps and final editing of to be
 // returned object.
-func (b *Binder) removeSpecContainers(
+func (b *binder) removeSpecContainers(
 	obj *unstructured.Unstructured,
 ) (*unstructured.Unstructured, error) {
 	containers, err := b.extractSpecContainers(obj)
@@ -263,7 +263,7 @@ func (b *Binder) removeSpecContainers(
 }
 
 // updateContainers execute the update command per container found.
-func (b *Binder) updateContainers(containers []interface{}) ([]interface{}, error) {
+func (b *binder) updateContainers(containers []interface{}) ([]interface{}, error) {
 	var err error
 
 	for i, container := range containers {
@@ -281,7 +281,7 @@ func (b *Binder) updateContainers(containers []interface{}) ([]interface{}, erro
 }
 
 // removeContainers execute removal of binding related entries in containers.
-func (b *Binder) removeContainers(containers []interface{}) ([]interface{}, error) {
+func (b *binder) removeContainers(containers []interface{}) ([]interface{}, error) {
 	var err error
 
 	for i, container := range containers {
@@ -298,7 +298,7 @@ func (b *Binder) removeContainers(containers []interface{}) ([]interface{}, erro
 }
 
 // appendEnvVar append a single environment variable onto informed "EnvVar" instance.
-func (b *Binder) appendEnvVar(
+func (b *binder) appendEnvVar(
 	envList []corev1.EnvVar,
 	envParam string,
 	envValue string,
@@ -325,7 +325,7 @@ func (b *Binder) appendEnvVar(
 
 // appendEnvFrom based on secret name and list of EnvFromSource instances, making sure secret is
 // part of the list or appended.
-func (b *Binder) appendEnvFrom(envList []corev1.EnvFromSource, secret string) []corev1.EnvFromSource {
+func (b *binder) appendEnvFrom(envList []corev1.EnvFromSource, secret string) []corev1.EnvFromSource {
 	for _, env := range envList {
 		if env.SecretRef.Name == secret {
 			b.logger.Debug("Directive 'envFrom' is already present!")
@@ -345,7 +345,7 @@ func (b *Binder) appendEnvFrom(envList []corev1.EnvFromSource, secret string) []
 }
 
 // removeEnvFrom remove bind related entry from slice of "EnvFromSource".
-func (b *Binder) removeEnvFrom(envList []corev1.EnvFromSource, secret string) []corev1.EnvFromSource {
+func (b *binder) removeEnvFrom(envList []corev1.EnvFromSource, secret string) []corev1.EnvFromSource {
 	var cleanEnvList []corev1.EnvFromSource
 	for _, env := range envList {
 		if env.SecretRef.Name != secret {
@@ -357,7 +357,7 @@ func (b *Binder) removeEnvFrom(envList []corev1.EnvFromSource, secret string) []
 
 // containerFromUnstructured based on informed unstructured corev1.Container, convert it back to the
 // original type. It can return errors on the process.
-func (b *Binder) containerFromUnstructured(container interface{}) (*corev1.Container, error) {
+func (b *binder) containerFromUnstructured(container interface{}) (*corev1.Container, error) {
 	c := &corev1.Container{}
 	u := container.(map[string]interface{})
 	err := runtime.DefaultUnstructuredConverter.FromUnstructured(u, c)
@@ -368,7 +368,7 @@ func (b *Binder) containerFromUnstructured(container interface{}) (*corev1.Conta
 }
 
 // updateContainer execute the update of a single container, adding binding items.
-func (b *Binder) updateContainer(container interface{}) (map[string]interface{}, error) {
+func (b *binder) updateContainer(container interface{}) (map[string]interface{}, error) {
 	c, err := b.containerFromUnstructured(container)
 	if err != nil {
 		return nil, err
@@ -380,7 +380,7 @@ func (b *Binder) updateContainer(container interface{}) (map[string]interface{},
 	// add a special environment variable that is only used to trigger a change in the declaration,
 	// attempting to force a side effect (in case of a Deployment, it would result in its Pods to be
 	// restarted)
-	c.Env = b.appendEnvVar(c.Env, ChangeTriggerEnv, time.Now().Format(time.RFC3339))
+	c.Env = b.appendEnvVar(c.Env, changeTriggerEnv, time.Now().Format(time.RFC3339))
 
 	if len(b.volumeKeys) > 0 {
 		// and adding volume mount entries
@@ -391,7 +391,7 @@ func (b *Binder) updateContainer(container interface{}) (map[string]interface{},
 }
 
 // removeContainer execute the update of single container to remove binding items.
-func (b *Binder) removeContainer(container interface{}) (map[string]interface{}, error) {
+func (b *binder) removeContainer(container interface{}) (map[string]interface{}, error) {
 	c, err := b.containerFromUnstructured(container)
 	if err != nil {
 		return nil, err
@@ -409,7 +409,7 @@ func (b *Binder) removeContainer(container interface{}) (map[string]interface{},
 }
 
 // appendVolumeMounts append the binding volume in the template level.
-func (b *Binder) appendVolumeMounts(volumeMounts []corev1.VolumeMount) []corev1.VolumeMount {
+func (b *binder) appendVolumeMounts(volumeMounts []corev1.VolumeMount) []corev1.VolumeMount {
 	name := b.sbr.GetName()
 	mountPath := b.sbr.Spec.MountPathPrefix
 	if mountPath == "" {
@@ -430,7 +430,7 @@ func (b *Binder) appendVolumeMounts(volumeMounts []corev1.VolumeMount) []corev1.
 
 // removeVolumeMounts from informed slice of corev1.VolumeMount, make sure all binding related
 // entries won't be part of returned slice.
-func (b *Binder) removeVolumeMounts(volumeMounts []corev1.VolumeMount) []corev1.VolumeMount {
+func (b *binder) removeVolumeMounts(volumeMounts []corev1.VolumeMount) []corev1.VolumeMount {
 	var cleanVolumeMounts []corev1.VolumeMount
 	name := b.sbr.GetName()
 	for _, v := range volumeMounts {
@@ -471,7 +471,7 @@ func nestedMapComparison(a, b *unstructured.Unstructured, fields ...string) (boo
 // update the list of objects informed as unstructured, looking for "containers" entry. This method
 // loops over each container to inspect "envFrom" and append the intermediary secret, having the same
 // name than original ServiceBindingRequest.
-func (b *Binder) update(objs *unstructured.UnstructuredList) ([]*unstructured.Unstructured, error) {
+func (b *binder) update(objs *unstructured.UnstructuredList) ([]*unstructured.Unstructured, error) {
 	updatedObjs := []*unstructured.Unstructured{}
 
 	for _, obj := range objs.Items {
@@ -482,7 +482,7 @@ func (b *Binder) update(objs *unstructured.UnstructuredList) ([]*unstructured.Un
 		log.Debug("Inspecting object...")
 
 		sbrNamespacedName := types.NamespacedName{Namespace: b.sbr.GetNamespace(), Name: b.sbr.GetName()}
-		updatedObj = SetSBRAnnotations(sbrNamespacedName, updatedObj)
+		updatedObj = setSBRAnnotations(sbrNamespacedName, updatedObj)
 
 		updatedObj, err := b.updateSpecContainers(updatedObj)
 		if err != nil {
@@ -530,7 +530,7 @@ func (b *Binder) update(objs *unstructured.UnstructuredList) ([]*unstructured.Un
 }
 
 // remove attempts to update each given object without any service binding related information.
-func (b *Binder) remove(objs *unstructured.UnstructuredList) error {
+func (b *binder) remove(objs *unstructured.UnstructuredList) error {
 	for _, obj := range objs.Items {
 		name := obj.GetName()
 		logger := b.logger.WithValues("Obj.Name", name, "Obj.Kind", obj.GetKind())
@@ -539,7 +539,7 @@ func (b *Binder) remove(objs *unstructured.UnstructuredList) error {
 		if err != nil {
 			return err
 		}
-		updatedObj = RemoveSBRAnnotations(updatedObj)
+		updatedObj = removeSBRAnnotations(updatedObj)
 
 		if len(b.volumeKeys) > 0 {
 			if updatedObj, err = b.removeSpecVolumes(updatedObj); err != nil {
@@ -566,11 +566,11 @@ func (b *Binder) remove(objs *unstructured.UnstructuredList) error {
 	return nil
 }
 
-// Unbind select objects subject to binding, and proceed with "remove", which will unbind objects.
-func (b *Binder) Unbind() error {
+// unbind select objects subject to binding, and proceed with "remove", which will unbind objects.
+func (b *binder) unbind() error {
 	objs, err := b.search()
 	if err != nil {
-		if errors.Is(err, ApplicationNotFound) {
+		if errors.Is(err, applicationNotFound) {
 			return nil
 		}
 		return err
@@ -578,12 +578,12 @@ func (b *Binder) Unbind() error {
 	return b.remove(objs)
 }
 
-// Bind resources to intermediary secret, by searching informed ResourceKind containing the labels
+// bind resources to intermediary secret, by searching informed ResourceKind containing the labels
 // in ApplicationSelector, and then updating spec.
-func (b *Binder) Bind() ([]*unstructured.Unstructured, error) {
+func (b *binder) bind() ([]*unstructured.Unstructured, error) {
 	objs, err := b.search()
 	if err != nil {
-		if errors.Is(err, ApplicationNotFound) {
+		if errors.Is(err, applicationNotFound) {
 			return nil, nil
 		}
 		return nil, err
@@ -591,19 +591,19 @@ func (b *Binder) Bind() ([]*unstructured.Unstructured, error) {
 	return b.update(objs)
 }
 
-// NewBinder returns a new Binder instance.
-func NewBinder(
+// newBinder returns a new Binder instance.
+func newBinder(
 	ctx context.Context,
 	dynClient dynamic.Interface,
 	sbr *v1alpha1.ServiceBindingRequest,
 	volumeKeys []string,
 	restMapper meta.RESTMapper,
-) *Binder {
+) *binder {
 
 	logger := log.NewLog("binder")
-	modifier := extraFieldsModifier(logger, sbr)
+	modifier := buildExtraFieldsModifier(logger, sbr)
 
-	return &Binder{
+	return &binder{
 		ctx:        ctx,
 		dynClient:  dynClient,
 		sbr:        sbr,
@@ -614,13 +614,13 @@ func NewBinder(
 	}
 }
 
-func extraFieldsModifier(logger *log.Log, sbr *v1alpha1.ServiceBindingRequest) ExtraFieldsModifier {
+func buildExtraFieldsModifier(logger *log.Log, sbr *v1alpha1.ServiceBindingRequest) extraFieldsModifier {
 	gvr := sbr.Spec.ApplicationSelector.GroupVersionResource
 	ksvcgvr := knativev1.SchemeGroupVersion.WithResource("services")
 	switch gvr.String() {
 	case ksvcgvr.String():
 		pathToRevisionName := "spec.template.metadata.name"
-		return ExtraFieldsModifierFunc(func(u *unstructured.Unstructured) error {
+		return extraFieldsModifierFunc(func(u *unstructured.Unstructured) error {
 			revisionName, ok, err := unstructured.NestedString(u.Object, strings.Split(pathToRevisionName, ".")...)
 			if err == nil && ok {
 				logger.Info("remove revision in knative service template", "name", revisionName)
diff --git a/pkg/controller/servicebindingrequest/common.go b/pkg/controller/servicebindingrequest/common.go
index 1cc9925b..d89dd6ef 100644
--- a/pkg/controller/servicebindingrequest/common.go
+++ b/pkg/controller/servicebindingrequest/common.go
@@ -8,64 +8,62 @@ import (
 )
 
 const (
-	// ServiceBindingRequestResource the name of ServiceBindingRequest resource.
-	ServiceBindingRequestResource = "servicebindingrequests"
-	// ServiceBindingRequestKind defines the name of the CRD kind.
-	ServiceBindingRequestKind = "ServiceBindingRequest"
-	// DeploymentConfigKind defines the name of DeploymentConfig kind.
-	DeploymentConfigKind = "DeploymentConfig"
-	// ClusterServiceVersionKind the name of ClusterServiceVersion kind.
-	ClusterServiceVersionKind = "ClusterServiceVersion"
-	// SecretResource defines the resource name for Secrets.
-	SecretResource = "secrets"
-	// SecretKind defines the name of Secret kind.
-	SecretKind = "Secret"
+	// serviceBindingRequestResource the name of ServiceBindingRequest resource.
+	serviceBindingRequestResource = "servicebindingrequests"
+	// serviceBindingRequestKind defines the name of the CRD kind.
+	serviceBindingRequestKind = "ServiceBindingRequest"
+	// clusterServiceVersionKind the name of ClusterServiceVersion kind.
+	clusterServiceVersionKind = "ClusterServiceVersion"
+	// secretResource defines the resource name for Secrets.
+	secretResource = "secrets"
+	// secretKind defines the name of Secret kind.
+	secretKind = "Secret"
 )
 
-// RequeueOnNotFound inspect error, if not-found then returns Requeue, otherwise expose the error.
-func RequeueOnNotFound(err error, requeueAfter int64) (reconcile.Result, error) {
+// requeueOnNotFound inspect error, if not-found then returns Requeue, otherwise expose the error.
+func requeueOnNotFound(err error, requeueAfter int64) (reconcile.Result, error) {
 	if errors.IsNotFound(err) {
-		return Requeue(nil, requeueAfter)
+		return requeue(nil, requeueAfter)
 	}
-	return NoRequeue(err)
+	return noRequeue(err)
 }
 
-// RequeueOnConflict in case of conflict error, returning the error with requeue, otherwise Done.
-func RequeueOnConflict(err error) (reconcile.Result, error) {
+// requeueOnConflict in case of conflict error, returning the error with requeue, otherwise Done.
+func requeueOnConflict(err error) (reconcile.Result, error) {
 	if errors.IsConflict(err) {
-		return RequeueError(err)
+		return requeueError(err)
 	}
-	return Done()
+	return done()
 }
 
-// RequeueError simply requeue exposing the error.
-func RequeueError(err error) (reconcile.Result, error) {
+// requeueError simply requeue exposing the error.
+func requeueError(err error) (reconcile.Result, error) {
 	return reconcile.Result{Requeue: true}, err
 }
 
-// Requeue based on empty result and no error informed upstream, request will be requeued.
-func Requeue(err error, requeueAfter int64) (reconcile.Result, error) {
+// requeue based on empty result and no error informed upstream, request will be requeued.
+func requeue(err error, requeueAfter int64) (reconcile.Result, error) {
 	return reconcile.Result{
 		RequeueAfter: time.Duration(requeueAfter) * time.Second,
 		Requeue:      true,
 	}, err
 }
 
-// Done when no error is informed and request is not set for requeue.
-func Done() (reconcile.Result, error) {
+// done when no error is informed and request is not set for requeue.
+func done() (reconcile.Result, error) {
 	return reconcile.Result{}, nil
 }
 
-// DoneOnNotFound will return done when error is not-found, otherwise it calls out NoRequeue.
-func DoneOnNotFound(err error) (reconcile.Result, error) {
+// doneOnNotFound will return done when error is not-found, otherwise it calls out NoRequeue.
+func doneOnNotFound(err error) (reconcile.Result, error) {
 	if errors.IsNotFound(err) {
-		return Done()
+		return done()
 	}
-	return NoRequeue(err)
+	return noRequeue(err)
 }
 
-// NoRequeue returns error without requeue flag.
-func NoRequeue(err error) (reconcile.Result, error) {
+// noRequeue returns error without requeue flag.
+func noRequeue(err error) (reconcile.Result, error) {
 	return reconcile.Result{}, err
 }
 
diff --git a/pkg/controller/servicebindingrequest/controller.go b/pkg/controller/servicebindingrequest/controller.go
index 58602eb2..eb99a5ac 100644
--- a/pkg/controller/servicebindingrequest/controller.go
+++ b/pkg/controller/servicebindingrequest/controller.go
@@ -22,16 +22,16 @@ func Add(mgr manager.Manager) error {
 }
 
 // newReconciler returns a new reconcile.Reconciler
-func newReconciler(mgr manager.Manager, client dynamic.Interface) (*Reconciler, error) {
-	return &Reconciler{
+func newReconciler(mgr manager.Manager, client dynamic.Interface) (*reconciler, error) {
+	return &reconciler{
 		dynClient:  client,
 		scheme:     mgr.GetScheme(),
-		RestMapper: mgr.GetRESTMapper(),
+		restMapper: mgr.GetRESTMapper(),
 	}, nil
 }
 
 // add adds a new Controller to mgr with r as the reconcile.Reconciler.
-func add(mgr manager.Manager, r *Reconciler, client dynamic.Interface) error {
+func add(mgr manager.Manager, r *reconciler, client dynamic.Interface) error {
 	opts := controller.Options{Reconciler: r}
 	c, err := NewSBRController(mgr, opts, client)
 	if err != nil {
@@ -42,4 +42,4 @@ func add(mgr manager.Manager, r *Reconciler, client dynamic.Interface) error {
 }
 
 // blank assignment to verify that ReconcileServiceBindingRequest implements reconcile.Reconciler
-var _ reconcile.Reconciler = &Reconciler{}
+var _ reconcile.Reconciler = &reconciler{}
diff --git a/pkg/controller/servicebindingrequest/custom_env_parser.go b/pkg/controller/servicebindingrequest/custom_env_parser.go
index f2a3e28f..606fe41f 100644
--- a/pkg/controller/servicebindingrequest/custom_env_parser.go
+++ b/pkg/controller/servicebindingrequest/custom_env_parser.go
@@ -8,22 +8,22 @@ import (
 	corev1 "k8s.io/api/core/v1"
 )
 
-// CustomEnvParser is responsible to interpolate a given EnvVar containing templates.
-type CustomEnvParser struct {
+// customEnvParser is responsible to interpolate a given EnvVar containing templates.
+type customEnvParser struct {
 	EnvMap []corev1.EnvVar
 	Cache  map[string]interface{}
 }
 
-// NewCustomEnvParser returns a new CustomEnvParser.
-func NewCustomEnvParser(envMap []corev1.EnvVar, cache map[string]interface{}) *CustomEnvParser {
-	return &CustomEnvParser{
+// newCustomEnvParser returns a new CustomEnvParser.
+func newCustomEnvParser(envMap []corev1.EnvVar, cache map[string]interface{}) *customEnvParser {
+	return &customEnvParser{
 		EnvMap: envMap,
 		Cache:  cache,
 	}
 }
 
 // Parse interpolates and caches the templates in EnvMap.
-func (c *CustomEnvParser) Parse() (map[string]interface{}, error) {
+func (c *customEnvParser) Parse() (map[string]interface{}, error) {
 	data := make(map[string]interface{})
 	for _, v := range c.EnvMap {
 		tmpl, err := template.New("set").Funcs(template.FuncMap{"json": marshalToJSON}).Parse(v.Value)
diff --git a/pkg/controller/servicebindingrequest/envvars/envvars.go b/pkg/controller/servicebindingrequest/envvars/envvars.go
index 523a9aeb..0aa7163b 100644
--- a/pkg/controller/servicebindingrequest/envvars/envvars.go
+++ b/pkg/controller/servicebindingrequest/envvars/envvars.go
@@ -8,8 +8,8 @@ import (
 	"github.com/imdario/mergo"
 )
 
-// ErrUnsupportedType is returned when an unsupported type is encountered.
-var ErrUnsupportedType = errors.New("unsupported type")
+// errUnsupportedType is returned when an unsupported type is encountered.
+var errUnsupportedType = errors.New("unsupported type")
 
 // Build returns an environment variable dictionary with an entry for each
 // leaf containing a scalar value.
@@ -66,7 +66,7 @@ func Build(obj interface{}, path ...string) (map[string]string, error) {
 	case float64:
 		return buildString(strconv.FormatFloat(val, 'f', -1, 64), path), nil
 	default:
-		return nil, ErrUnsupportedType
+		return nil, errUnsupportedType
 	}
 }
 
diff --git a/pkg/controller/servicebindingrequest/mapper.go b/pkg/controller/servicebindingrequest/mapper.go
index d1b70b70..6780e44d 100644
--- a/pkg/controller/servicebindingrequest/mapper.go
+++ b/pkg/controller/servicebindingrequest/mapper.go
@@ -10,25 +10,25 @@ var (
 	mapperLog = log.NewLog("mapper")
 )
 
-// SBRRequestMapper is the handler.Mapper interface implementation. It should influence the
+// sbrRequestMapper is the handler.Mapper interface implementation. It should influence the
 // enqueue process considering the resources informed.
-type SBRRequestMapper struct{}
+type sbrRequestMapper struct{}
 
 // Map execute the mapping of a resource with the requests it would produce. Here we inspect the
 // given object trying to identify if this object is part of a SBR, or a actual SBR resource.
-func (m *SBRRequestMapper) Map(obj handler.MapObject) []reconcile.Request {
+func (m *sbrRequestMapper) Map(obj handler.MapObject) []reconcile.Request {
 	log := mapperLog.WithValues(
 		"Object.Namespace", obj.Meta.GetNamespace(),
 		"Object.Name", obj.Meta.GetName(),
 	)
 	toReconcile := []reconcile.Request{}
 
-	sbrNamespacedName, err := GetSBRNamespacedNameFromObject(obj.Object)
+	sbrNamespacedName, err := getSBRNamespacedNameFromObject(obj.Object)
 	if err != nil {
 		log.Error(err, "on inspecting object for annotations for SBR object")
 		return toReconcile
 	}
-	if IsNamespacedNameEmpty(sbrNamespacedName) {
+	if isNamespacedNameEmpty(sbrNamespacedName) {
 		log.Debug("not able to extract SBR namespaced-name")
 		return toReconcile
 	}
diff --git a/pkg/controller/servicebindingrequest/namespacedname.go b/pkg/controller/servicebindingrequest/namespacedname.go
index 76e1a14c..48736c8c 100644
--- a/pkg/controller/servicebindingrequest/namespacedname.go
+++ b/pkg/controller/servicebindingrequest/namespacedname.go
@@ -2,7 +2,7 @@ package servicebindingrequest
 
 import "k8s.io/apimachinery/pkg/types"
 
-// IsNamespacedNameEmpty returns true if any of the fields from the given namespacedName is empty.
-func IsNamespacedNameEmpty(namespacedName types.NamespacedName) bool {
+// isNamespacedNameEmpty returns true if any of the fields from the given namespacedName is empty.
+func isNamespacedNameEmpty(namespacedName types.NamespacedName) bool {
 	return namespacedName.Namespace == "" || namespacedName.Name == ""
 }
diff --git a/pkg/controller/servicebindingrequest/nested/accumulator/accumulator.go b/pkg/controller/servicebindingrequest/nested/accumulator/accumulator.go
index 5349f1cc..ccd4d1a2 100644
--- a/pkg/controller/servicebindingrequest/nested/accumulator/accumulator.go
+++ b/pkg/controller/servicebindingrequest/nested/accumulator/accumulator.go
@@ -8,15 +8,15 @@ import (
 
 const valuesKey = "values"
 
-// Accumulator is a value accumulator.
-type Accumulator map[string]interface{}
+// accumulator is a value accumulator.
+type accumulator map[string]interface{}
 
-// UnsupportedTypeErr is returned when an unsupported type is encountered.
-var UnsupportedTypeErr = errors.New("unsupported type")
+// unsupportedTypeErr is returned when an unsupported type is encountered.
+var unsupportedTypeErr = errors.New("unsupported type")
 
 // Accumulate accumulates the `val` value. An error is returned in the case
 // `val` contains an unsupported type.
-func (a Accumulator) Accumulate(val interface{}) error {
+func (a accumulator) Accumulate(val interface{}) error {
 	b := NewAccumulator()
 	switch v := val.(type) {
 	case map[string]interface{}:
@@ -28,17 +28,17 @@ func (a Accumulator) Accumulate(val interface{}) error {
 	case []map[string]interface{}, []string, []int:
 		b[valuesKey] = v
 	default:
-		return UnsupportedTypeErr
+		return unsupportedTypeErr
 	}
 	return mergo.Merge(&a, b, mergo.WithAppendSlice, mergo.WithOverride, mergo.WithTypeCheck)
 }
 
 // Value returns the accumulated values.
-func (a Accumulator) Value() interface{} {
+func (a accumulator) Value() interface{} {
 	return a[valuesKey]
 }
 
 // NewAccumulator returns a new value accumulator
-func NewAccumulator() Accumulator {
-	return Accumulator{}
+func NewAccumulator() accumulator {
+	return accumulator{}
 }
diff --git a/pkg/controller/servicebindingrequest/nested/nested.go b/pkg/controller/servicebindingrequest/nested/nested.go
index fbe2d125..bba3c54a 100644
--- a/pkg/controller/servicebindingrequest/nested/nested.go
+++ b/pkg/controller/servicebindingrequest/nested/nested.go
@@ -9,8 +9,8 @@ import (
 
 // getValueFromMap attempts to retrieve from `obj` a value from the given path
 // `path`.
-func getValueFromMap(obj map[string]interface{}, path Path) (interface{}, bool, error) {
-	head, exists := path.Head()
+func getValueFromMap(obj map[string]interface{}, p path) (interface{}, bool, error) {
+	head, exists := p.head()
 	if !exists {
 		return obj, true, nil
 	}
@@ -19,15 +19,15 @@ func getValueFromMap(obj map[string]interface{}, path Path) (interface{}, bool,
 		return nil, false, nil
 	}
 
-	return getValue(val, path.Tail())
+	return getValue(val, p.tail())
 }
 
 // collectValues accumulates the values found in all the given `path` in all
 // elements present in `obj`.
-func collectValues(obj []interface{}, path Path) (interface{}, error) {
+func collectValues(obj []interface{}, p path) (interface{}, error) {
 	r := accumulator.NewAccumulator()
 	for _, e := range obj {
-		val, found, err := getValue(e, path.AdjustedPath())
+		val, found, err := getValue(e, p.adjustedPath())
 		if err != nil || !found {
 			return nil, err
 		}
@@ -39,8 +39,8 @@ func collectValues(obj []interface{}, path Path) (interface{}, error) {
 	return r.Value(), nil
 }
 
-// UnsupportedTypeErr is returned when an unsupported type is encountered.
-var UnsupportedTypeErr = errors.New("unsupported type")
+// unsupportedTypeErr is returned when an unsupported type is encountered.
+var unsupportedTypeErr = errors.New("unsupported type")
 
 // convertToSlice attempts to convert the given `src` into a `[]interface{}`. An
 // error is returned when `src` is not one of the following:
@@ -68,16 +68,16 @@ func convertToSlice(src interface{}) ([]interface{}, error) {
 			obj[i] = e
 		}
 	default:
-		return nil, UnsupportedTypeErr
+		return nil, unsupportedTypeErr
 	}
 	return obj, nil
 }
 
-// InvalidIndexErr is returned when a given index is out of bounds.
-var InvalidIndexErr = errors.New("invalid index")
+// invalidIndexErr is returned when a given index is out of bounds.
+var invalidIndexErr = errors.New("invalid index")
 
 // getValueFromSlice attempts to return the value present at the given path.
-func getValueFromSlice(s interface{}, path Path) (interface{}, bool, error) {
+func getValueFromSlice(s interface{}, p path) (interface{}, bool, error) {
 	// assert and convert s to []interface{}
 	obj, err := convertToSlice(s)
 	if err != nil {
@@ -86,20 +86,20 @@ func getValueFromSlice(s interface{}, path Path) (interface{}, bool, error) {
 
 	// it is required for path to have a head in this case, since it is expected to contain either an
 	// Index or a sub-key in order to extract or aggregate the underlying value.
-	head, ok := path.Head()
+	head, ok := p.head()
 	if !ok {
 		return nil, false, nil
 	}
 
 	if head.Index != nil {
 		if *head.Index > len(obj) {
-			return nil, false, InvalidIndexErr
+			return nil, false, invalidIndexErr
 		}
 		m := obj[*head.Index]
-		return getValue(m, path.Tail())
+		return getValue(m, p.tail())
 	}
 
-	r, err := collectValues(obj, path)
+	r, err := collectValues(obj, p)
 	if err != nil {
 		return nil, false, err
 	}
@@ -107,22 +107,22 @@ func getValueFromSlice(s interface{}, path Path) (interface{}, bool, error) {
 }
 
 // getValue attempts to return the value present at the given path.
-func getValue(obj interface{}, path Path) (interface{}, bool, error) {
+func getValue(obj interface{}, p path) (interface{}, bool, error) {
 	// return obj if path is empty.
-	if _, ok := path.Head(); !ok {
+	if _, ok := p.head(); !ok {
 		return obj, true, nil
 	}
 
 	switch val := obj.(type) {
 	case string, int: // scalar
-		if path.HasTail() {
+		if p.hasTail() {
 			return nil, false, fmt.Errorf("type doesn't accept an index or key")
 		}
 		return val, true, nil
 	case map[string]interface{}: // map
-		return getValueFromMap(val, path)
+		return getValueFromMap(val, p)
 	case []map[string]interface{}, []int, []string: // slice
-		return getValueFromSlice(val, path)
+		return getValueFromSlice(val, p)
 	default:
 		panic(fmt.Sprintf("missing type for %+v", val))
 	}
@@ -142,7 +142,7 @@ func getValue(obj interface{}, path Path) (interface{}, bool, error) {
 //         },
 //     }
 //
-func ComposeValue(val interface{}, path Path) map[string]interface{} {
+func ComposeValue(val interface{}, p path) map[string]interface{} {
 	// root is the resulting data-structure to be returned to caller.
 	root := make(map[string]interface{})
 
@@ -151,7 +151,7 @@ func ComposeValue(val interface{}, path Path) map[string]interface{} {
 
 	// clean and split the path in `base` and `field`; for example, the path `a.b.*.c` is transformed
 	// into `a.b.c`, resulting in `a.b` as base and `c` as field.
-	base, field := path.Clean().Decompose()
+	base, field := p.clean().decompose()
 
 	// populate the root structure with the wanted hierarchy; being each node a
 	// map[string]interface{}.
@@ -169,10 +169,10 @@ func ComposeValue(val interface{}, path Path) map[string]interface{} {
 
 // GetValue attempts to retrieve the value in the given string encoded path.
 func GetValue(obj interface{}, p string, o string) (map[string]interface{}, bool, error) {
-	path := NewPath(p)
+	inputPath := NewPath(p)
 	outputPath := NewPath(o)
 
-	val, found, err := getValue(obj, path)
+	val, found, err := getValue(obj, inputPath)
 	if err != nil || !found {
 		return nil, found, err
 	}
diff --git a/pkg/controller/servicebindingrequest/nested/path.go b/pkg/controller/servicebindingrequest/nested/path.go
index d7a6b164..05ffa33f 100644
--- a/pkg/controller/servicebindingrequest/nested/path.go
+++ b/pkg/controller/servicebindingrequest/nested/path.go
@@ -5,15 +5,15 @@ import (
 	"strings"
 )
 
-// Field is the representation of a term in a field path.
+// field is the representation of a term in a field path.
 //
 // Assuming that 'status.dbCredentials' is a path for a value in a nested object, 'status' and
-// 'dbCredentials' are represented as Field values.
+// 'dbCredentials' are represented as field values.
 //
-// Field contains two members: 'Name' and 'Index'. 'Name' is a string like 'status' or
+// field contains two members: 'Name' and 'Index'. 'Name' is a string like 'status' or
 // 'dbCredentials', and 'Index' is the optional integer representation of the value, if it can be
 // transformed to a valid positive integer.
-type Field struct {
+type field struct {
 	// Name is the field name.
 	Name string
 	// Index is the integer representation of the field name in the case it can be converted to an
@@ -21,88 +21,88 @@ type Field struct {
 	Index *int
 }
 
-// NewField creates a new field with the given name.
-func NewField(name string) Field {
-	f := Field{Name: name}
+// newField creates a new field with the given name.
+func newField(name string) field {
+	f := field{Name: name}
 	if i, err := strconv.Atoi(name); err == nil {
 		f.Index = &i
 	}
 	return f
 }
 
-// Path represents a field path.
-type Path []Field
+// path represents a field path.
+type path []field
 
 // Head returns the path head if one exists.
-func (p Path) Head() (Field, bool) {
+func (p path) head() (field, bool) {
 	if len(p) > 0 {
 		return p[0], true
 	}
-	return Field{}, false
+	return field{}, false
 }
 
-// Tail returns the path tail if present.
+// tail returns the path tail if present.
 //
 // Returns 'b.c' in the path 'a.b.c'.
-func (p Path) Tail() Path {
-	_, exists := p.Head()
+func (p path) tail() path {
+	_, exists := p.head()
 	if !exists {
-		return Path{}
+		return path{}
 	}
 	return p[1:]
 }
 
-// HasTail asserts whether path has a tail.
-func (p Path) HasTail() bool {
-	return len(p.Tail()) > 0
+// hasTail asserts whether path has a tail.
+func (p path) hasTail() bool {
+	return len(p.tail()) > 0
 }
 
-// AdjustedPath adjusts the current path depending on the head element.
+// adjustedPath adjusts the current path depending on the head element.
 //
 // In the case the head of a path ('a' in the 'a.b.c' path) exists and is different than '*', returns
 // itself otherwise returns the path tail ('b.c' in the example).
-func (p Path) AdjustedPath() Path {
-	head, exists := p.Head()
+func (p path) adjustedPath() path {
+	head, exists := p.head()
 	if !exists {
-		return Path{}
+		return path{}
 	}
 	if head.Name == "*" {
-		return p.Tail()
+		return p.tail()
 	}
 	return p
 }
 
-// LastField returns the last field from the receiver.
-func (p Path) LastField() (Field, bool) {
+// lastField returns the last field from the receiver.
+func (p path) lastField() (field, bool) {
 	if len(p) > 0 {
 		return p[len(p)-1], true
 	}
-	return Field{}, false
+	return field{}, false
 }
 
-// BasePath returns the receiver's base path.
+// basePath returns the receiver's base path.
 //
 // For example, returns 'a.b' from the 'a.b.c' path.
-func (p Path) BasePath() Path {
+func (p path) basePath() path {
 	if len(p) > 1 {
 		return p[:len(p)-1]
 	}
-	return Path{}
+	return path{}
 }
 
-// Decompose returns the receiver's base path and the last field.
-func (p Path) Decompose() (Path, Field) {
-	f, _ := p.LastField()
-	b := p.BasePath()
+// decompose returns the receiver's base path and the last field.
+func (p path) decompose() (path, field) {
+	f, _ := p.lastField()
+	b := p.basePath()
 	return b, f
 }
 
-// Clean creates a new Path without '*' or integer values.
+// clean creates a new Path without '*' or integer values.
 //
 // For example, returns 'a.b.c' for 'a.b.*.c' or 'a.b.1.c'.
-func (p Path) Clean() Path {
-	newPath := make(Path, 0)
-	for _, f := range p.AdjustedPath() {
+func (p path) clean() path {
+	newPath := make(path, 0)
+	for _, f := range p.adjustedPath() {
 		if f.Index != nil {
 			continue
 		}
@@ -115,16 +115,16 @@ func (p Path) Clean() Path {
 }
 
 // NewPath creates a new path with the given string in the format 'a.b.c'.
-func NewPath(s string) Path {
+func NewPath(s string) path {
 	parts := strings.Split(s, ".")
-	return NewPathWithParts(parts)
+	return newPathWithParts(parts)
 }
 
 // NewPathWithParts constructs a Path from given parts.
-func NewPathWithParts(parts []string) Path {
-	path := make(Path, len(parts))
-	for i, p := range parts {
-		path[i] = NewField(p)
+func newPathWithParts(parts []string) path {
+	p := make(path, len(parts))
+	for i, part := range parts {
+		p[i] = newField(part)
 	}
-	return path
+	return p
 }
diff --git a/pkg/controller/servicebindingrequest/olm.go b/pkg/controller/servicebindingrequest/olm.go
index a4205cf3..683ca821 100644
--- a/pkg/controller/servicebindingrequest/olm.go
+++ b/pkg/controller/servicebindingrequest/olm.go
@@ -20,9 +20,9 @@ import (
 	"github.com/redhat-developer/service-binding-operator/pkg/log"
 )
 
-// OLM represents the actions this operator needs to take upon Operator-Lifecycle-Manager resources,
+// olm represents the actions this operator needs to take upon Operator-Lifecycle-Manager resources,
 // like ClusterServiceVersions (CSV) and CRDDescriptions.
-type OLM struct {
+type olm struct {
 	client dynamic.Interface // kubernetes dynamic client
 	ns     string            // namespace
 	logger *log.Log          // logger instance
@@ -37,7 +37,7 @@ var (
 )
 
 // listCSVs simple list to all CSV objects in the cluster.
-func (o *OLM) listCSVs() ([]unstructured.Unstructured, error) {
+func (o *olm) listCSVs() ([]unstructured.Unstructured, error) {
 	log := o.logger
 	gvr := olmv1alpha1.SchemeGroupVersion.WithResource(csvResource)
 	resourceClient := o.client.Resource(gvr).Namespace(o.ns)
@@ -53,7 +53,7 @@ func (o *OLM) listCSVs() ([]unstructured.Unstructured, error) {
 }
 
 // extractOwnedCRDs from a list of CSV objects.
-func (o *OLM) extractOwnedCRDs(
+func (o *olm) extractOwnedCRDs(
 	csvs []unstructured.Unstructured,
 ) ([]unstructured.Unstructured, error) {
 	crds := []unstructured.Unstructured{}
@@ -80,7 +80,7 @@ func (o *OLM) extractOwnedCRDs(
 }
 
 // ListCSVOwnedCRDs return a unstructured list of CRD objects from "owned" section in CSVs.
-func (o *OLM) ListCSVOwnedCRDs() ([]unstructured.Unstructured, error) {
+func (o *olm) ListCSVOwnedCRDs() ([]unstructured.Unstructured, error) {
 	log := o.logger
 	csvs, err := o.listCSVs()
 	if err != nil {
@@ -96,7 +96,7 @@ type eachCRDDescriptionFn func(crdDescription *olmv1alpha1.CRDDescription)
 // loopCRDDescriptions takes a list of CRDDescriptions (extracted from "owned") and converts to a
 // actual type instance, before calling out for informed function. This method can return error in
 // case of issues to convert unstructured into CRDDescription.
-func (o *OLM) loopCRDDescriptions(
+func (o *olm) loopCRDDescriptions(
 	crdDescriptions []unstructured.Unstructured,
 	fn eachCRDDescriptionFn,
 ) error {
@@ -118,8 +118,8 @@ func (o *OLM) loopCRDDescriptions(
 	return nil
 }
 
-// SelectCRDByGVK return a single CRD based on a given GVK.
-func (o *OLM) SelectCRDByGVK(gvk schema.GroupVersionKind, crd *unstructured.Unstructured) (*olmv1alpha1.CRDDescription, error) {
+// selectCRDByGVK return a single CRD based on a given GVK.
+func (o *olm) selectCRDByGVK(gvk schema.GroupVersionKind, crd *unstructured.Unstructured) (*olmv1alpha1.CRDDescription, error) {
 	log := o.logger.WithValues("Selector.GVK", gvk)
 	ownedCRDs, err := o.ListCSVOwnedCRDs()
 	if err != nil {
@@ -286,7 +286,7 @@ func buildDescriptorsFromAnnotations(in map[string]string) (
 }
 
 // extractGVKs loop owned objects and extract the GVK information from them.
-func (o *OLM) extractGVKs(
+func (o *olm) extractGVKs(
 	crdDescriptions []unstructured.Unstructured,
 ) ([]schema.GroupVersionKind, error) {
 	log := o.logger
@@ -306,8 +306,8 @@ func (o *OLM) extractGVKs(
 	return gvks, nil
 }
 
-// ListCSVOwnedCRDsAsGVKs return the list of owned CRDs from all CSV objects as a list of GVKs.
-func (o *OLM) ListCSVOwnedCRDsAsGVKs() ([]schema.GroupVersionKind, error) {
+// listCSVOwnedCRDsAsGVKs return the list of owned CRDs from all CSV objects as a list of GVKs.
+func (o *olm) listCSVOwnedCRDsAsGVKs() ([]schema.GroupVersionKind, error) {
 	log := o.logger
 	ownedCRDs, err := o.ListCSVOwnedCRDs()
 	if err != nil {
@@ -317,8 +317,8 @@ func (o *OLM) ListCSVOwnedCRDsAsGVKs() ([]schema.GroupVersionKind, error) {
 	return o.extractGVKs(ownedCRDs)
 }
 
-// ListGVKsFromCSVNamespacedName return the list of owned GVKs for a given CSV namespaced named.
-func (o *OLM) ListGVKsFromCSVNamespacedName(
+// listGVKsFromCSVNamespacedName return the list of owned GVKs for a given CSV namespaced named.
+func (o *olm) listGVKsFromCSVNamespacedName(
 	namespacedName types.NamespacedName,
 ) ([]schema.GroupVersionKind, error) {
 	log := o.logger.WithValues("CSV.NamespacedName", namespacedName)
@@ -347,9 +347,9 @@ func (o *OLM) ListGVKsFromCSVNamespacedName(
 	return o.extractGVKs(ownedCRDs)
 }
 
-// NewOLM instantiate a new OLM.
-func NewOLM(client dynamic.Interface, ns string) *OLM {
-	return &OLM{
+// newOLM instantiate a new OLM.
+func newOLM(client dynamic.Interface, ns string) *olm {
+	return &olm{
 		client: client,
 		ns:     ns,
 		logger: olmLog,
diff --git a/pkg/controller/servicebindingrequest/reconciler.go b/pkg/controller/servicebindingrequest/reconciler.go
index b2bae8d6..b2d8600e 100644
--- a/pkg/controller/servicebindingrequest/reconciler.go
+++ b/pkg/controller/servicebindingrequest/reconciler.go
@@ -27,10 +27,10 @@ const (
 )
 
 // Reconciler reconciles a ServiceBindingRequest object
-type Reconciler struct {
+type reconciler struct {
 	dynClient       dynamic.Interface // kubernetes dynamic api client
 	scheme          *runtime.Scheme   // api scheme
-	RestMapper      meta.RESTMapper   // restMapper to convert GVK and GVR
+	restMapper      meta.RESTMapper   // restMapper to convert GVK and GVR
 	resourceWatcher ResourceWatcher   // ResourceWatcher to add watching for specific GVK/GVR
 }
 
@@ -48,10 +48,10 @@ var reconcilerLog = log.NewLog("reconciler")
 //}
 
 // getServiceBindingRequest retrieve the SBR object based on namespaced-name.
-func (r *Reconciler) getServiceBindingRequest(
+func (r *reconciler) getServiceBindingRequest(
 	namespacedName types.NamespacedName,
 ) (*v1alpha1.ServiceBindingRequest, error) {
-	gr := v1alpha1.SchemeGroupVersion.WithResource(ServiceBindingRequestResource)
+	gr := v1alpha1.SchemeGroupVersion.WithResource(serviceBindingRequestResource)
 	resourceClient := r.dynClient.Resource(gr).Namespace(namespacedName.Namespace)
 	u, err := resourceClient.Get(namespacedName.Name, metav1.GetOptions{})
 	if err != nil {
@@ -97,7 +97,7 @@ func extractServiceSelectors(
 //    data formatted as environment variables key/value;
 // 4. Search applications that are interested to bind with given service, by inspecting labels. The
 //    Deployment (and other kinds) will be updated in "spec" level.
-func (r *Reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) {
+func (r *reconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) {
 	logger := reconcilerLog.WithValues(
 		"Request.Namespace", request.Namespace,
 		"Request.Name", request.Name,
@@ -108,12 +108,12 @@ func (r *Reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err
 	// fetch and validate namespaced ServiceBindingRequest instance
 	sbr, err := r.getServiceBindingRequest(request.NamespacedName)
 	if err != nil {
-		if errors.Is(err, ApplicationNotFound) {
+		if errors.Is(err, applicationNotFound) {
 			logger.Info("SBR deleted after application deletion")
-			return Done()
+			return done()
 		}
 		logger.Error(err, "On retrieving service-binding-request instance.")
-		return DoneOnNotFound(err)
+		return doneOnNotFound(err)
 	}
 
 	// validate namespaced ServiceBindingRequest instance (this check has been disabled until test data has been
@@ -139,14 +139,14 @@ func (r *Reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err
 		})
 		_, updateErr := updateServiceBindingRequestStatus(r.dynClient, sbr)
 		if updateErr == nil {
-			return Done()
+			return done()
 		}
 		// TODO: do not requeue here
 		//
 		// Since there are nothing to recover from in the case service selectors is empty, it is
 		// still required to requeue due to some watches not being implemented. This is known issue
 		// being worked in https://github.com/redhat-developer/service-binding-operator/pull/442.
-		return RequeueError(ErrEmptyBackingServiceSelectors)
+		return requeueError(errEmptyBackingServiceSelectors)
 	}
 
 	serviceCtxs, err := buildServiceContexts(
@@ -154,10 +154,10 @@ func (r *Reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err
 		sbr.GetNamespace(),
 		selectors,
 		sbr.Spec.DetectBindingResources,
-		r.RestMapper,
+		r.restMapper,
 	)
 	if err != nil {
-		return RequeueError(err)
+		return requeueError(err)
 	}
 
 	binding, err := buildBinding(
@@ -167,25 +167,25 @@ func (r *Reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err
 		sbr.Spec.EnvVarPrefix,
 	)
 	if err != nil {
-		return RequeueError(err)
+		return requeueError(err)
 	}
 
-	options := &ServiceBinderOptions{
-		DynClient:              r.dynClient,
-		DetectBindingResources: sbr.Spec.DetectBindingResources,
-		SBR:                    sbr,
-		Logger:                 logger,
-		Objects:                serviceCtxs.GetServices(),
-		Binding:                binding,
-		RESTMapper:             r.RestMapper,
+	options := &serviceBinderOptions{
+		dynClient:              r.dynClient,
+		detectBindingResources: sbr.Spec.DetectBindingResources,
+		sbr:                    sbr,
+		logger:                 logger,
+		objects:                serviceCtxs.getServices(),
+		binding:                binding,
+		restMapper:             r.restMapper,
 	}
 
-	sb, err := BuildServiceBinder(ctx, options)
+	sb, err := buildServiceBinder(ctx, options)
 	if err != nil {
 		// BuildServiceBinder can return only InvalidOptionsErr, and it is a programmer's error so
 		// just bail out without re-queueing nor updating conditions.
 		logger.Error(err, "Building ServiceBinder")
-		return NoRequeue(err)
+		return noRequeue(err)
 	}
 
 	gvrSpec := sbr.Spec.ApplicationSelector.GroupVersionResource
@@ -203,9 +203,9 @@ func (r *Reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err
 	if sbr.GetDeletionTimestamp() != nil {
 		logger := logger.WithName("unbind")
 		logger.Info("Executing unbinding steps...")
-		return sb.Unbind()
+		return sb.unbind()
 	}
 
 	logger.Info("Binding applications with intermediary secret...")
-	return sb.Bind()
+	return sb.bind()
 }
diff --git a/pkg/controller/servicebindingrequest/retriever.go b/pkg/controller/servicebindingrequest/retriever.go
index 60ae456e..dda808e4 100644
--- a/pkg/controller/servicebindingrequest/retriever.go
+++ b/pkg/controller/servicebindingrequest/retriever.go
@@ -12,8 +12,8 @@ import (
 	"github.com/redhat-developer/service-binding-operator/pkg/log"
 )
 
-// Retriever reads all data referred in plan instance, and store in a secret.
-type Retriever struct {
+// retriever reads all data referred in plan instance, and store in a secret.
+type retriever struct {
 	logger *log.Log          // logger instance
 	client dynamic.Interface // Kubernetes API client
 }
@@ -32,23 +32,23 @@ func createServiceIndexPath(name string, gvk schema.GroupVersionKind) []string {
 
 }
 
-func buildServiceEnvVars(svcCtx *ServiceContext, globalEnvVarPrefix string) (map[string]string, error) {
+func buildServiceEnvVars(svcCtx *serviceContext, globalEnvVarPrefix string) (map[string]string, error) {
 	prefixes := []string{}
 	if len(globalEnvVarPrefix) > 0 {
 		prefixes = append(prefixes, globalEnvVarPrefix)
 	}
-	if svcCtx.EnvVarPrefix != nil && len(*svcCtx.EnvVarPrefix) > 0 {
-		prefixes = append(prefixes, *svcCtx.EnvVarPrefix)
+	if svcCtx.envVarPrefix != nil && len(*svcCtx.envVarPrefix) > 0 {
+		prefixes = append(prefixes, *svcCtx.envVarPrefix)
 	}
-	if svcCtx.EnvVarPrefix == nil {
-		prefixes = append(prefixes, svcCtx.Service.GroupVersionKind().Kind)
+	if svcCtx.envVarPrefix == nil {
+		prefixes = append(prefixes, svcCtx.service.GroupVersionKind().Kind)
 	}
 
-	return envvars.Build(svcCtx.EnvVars, prefixes...)
+	return envvars.Build(svcCtx.envVars, prefixes...)
 }
 
-func (r *Retriever) processServiceContext(
-	svcCtx *ServiceContext,
+func (r *retriever) processServiceContext(
+	svcCtx *serviceContext,
 	customEnvVarCtx map[string]interface{},
 	globalEnvVarPrefix string,
 ) (map[string][]byte, []string, error) {
@@ -58,15 +58,15 @@ func (r *Retriever) processServiceContext(
 	}
 
 	// contribute the entire resource to the context shared with the custom env parser
-	gvk := svcCtx.Service.GetObjectKind().GroupVersionKind()
+	gvk := svcCtx.service.GetObjectKind().GroupVersionKind()
 
 	// add an entry in the custom environment variable context, allowing the user to use the
 	// following expression:
 	//
 	// `{{ index "v1alpha1" "postgresql.baiju.dev" "Database", "db-testing", "status", "connectionUrl" }}`
 	err = unstructured.SetNestedField(
-		customEnvVarCtx, svcCtx.Service.Object, gvk.Version, gvk.Group, gvk.Kind,
-		svcCtx.Service.GetName())
+		customEnvVarCtx, svcCtx.service.Object, gvk.Version, gvk.Group, gvk.Kind,
+		svcCtx.service.GetName())
 	if err != nil {
 		return nil, nil, err
 	}
@@ -78,28 +78,42 @@ func (r *Retriever) processServiceContext(
 	// `{{ .v1alpha1.postgresql_baiju_dev.Database.db_testing.status.connectionUrl }}`
 	err = unstructured.SetNestedField(
 		customEnvVarCtx,
-		svcCtx.Service.Object,
-		createServiceIndexPath(svcCtx.Service.GetName(), svcCtx.Service.GroupVersionKind())...,
+		svcCtx.service.Object,
+		createServiceIndexPath(svcCtx.service.GetName(), svcCtx.service.GroupVersionKind())...,
 	)
 	if err != nil {
 		return nil, nil, err
 	}
 
+	// add an entry in the custom environment variable context with the informed 'id'.
+	//
+	// `{{ .db_testing.status.connectionUrl }}`
+	if svcCtx.id != nil {
+		err = unstructured.SetNestedField(
+			customEnvVarCtx,
+			svcCtx.service.Object,
+			*svcCtx.id,
+		)
+		if err != nil {
+			return nil, nil, err
+		}
+	}
+
 	envVars := make(map[string][]byte, len(svcEnvVars))
 	for k, v := range svcEnvVars {
 		envVars[k] = []byte(v)
 	}
 
 	var volumeKeys []string
-	volumeKeys = append(volumeKeys, svcCtx.VolumeKeys...)
+	volumeKeys = append(volumeKeys, svcCtx.volumeKeys...)
 
 	return envVars, volumeKeys, nil
 }
 
 // ProcessServiceContexts returns environment variables and volume keys from a ServiceContext slice.
-func (r *Retriever) ProcessServiceContexts(
+func (r *retriever) ProcessServiceContexts(
 	globalEnvVarPrefix string,
-	svcCtxs ServiceContextList,
+	svcCtxs serviceContextList,
 	envVarTemplates []corev1.EnvVar,
 ) (map[string][]byte, []string, error) {
 	customEnvVarCtx := make(map[string]interface{})
@@ -117,7 +131,7 @@ func (r *Retriever) ProcessServiceContexts(
 		volumeKeys = append(volumeKeys, v...)
 	}
 
-	envParser := NewCustomEnvParser(envVarTemplates, customEnvVarCtx)
+	envParser := newCustomEnvParser(envVarTemplates, customEnvVarCtx)
 	customEnvVars, err := envParser.Parse()
 	if err != nil {
 		r.logger.Error(
@@ -141,8 +155,8 @@ func (r *Retriever) ProcessServiceContexts(
 // NewRetriever instantiate a new retriever instance.
 func NewRetriever(
 	client dynamic.Interface,
-) *Retriever {
-	return &Retriever{
+) *retriever {
+	return &retriever{
 		logger: log.NewLog("retriever"),
 		client: client,
 	}
diff --git a/pkg/controller/servicebindingrequest/sbrcontroller.go b/pkg/controller/servicebindingrequest/sbrcontroller.go
index d47a63ba..2a47d0d6 100644
--- a/pkg/controller/servicebindingrequest/sbrcontroller.go
+++ b/pkg/controller/servicebindingrequest/sbrcontroller.go
@@ -29,8 +29,8 @@ type ResourceWatcher interface {
 	AddWatchForGVK(schema.GroupVersionKind) error
 }
 
-// SBRController hold the controller instance and methods for a ServiceBindingRequest.
-type SBRController struct {
+// sbrController hold the controller instance and methods for a ServiceBindingRequest.
+type sbrController struct {
 	Controller   controller.Controller            // controller-runtime instance
 	Client       dynamic.Interface                // kubernetes dynamic api client
 	RestMapper   meta.RESTMapper                  // restMapper to convert GVK and GVR
@@ -38,7 +38,7 @@ type SBRController struct {
 	logger       *log.Log                         // logger instance
 }
 
-var _ ResourceWatcher = (*SBRController)(nil)
+var _ ResourceWatcher = (*sbrController)(nil)
 
 // controllerName common name of this controller
 const controllerName = "servicebindingrequest-controller"
@@ -63,24 +63,24 @@ func compareObjectFields(objOld, objNew runtime.Object, fields ...string) (bool,
 
 // newEnqueueRequestsForSBR returns a handler.EventHandler configured to map any incoming object to a
 // ServiceBindingRequest if it contains the required configuration.
-func (s *SBRController) newEnqueueRequestsForSBR() handler.EventHandler {
-	return &handler.EnqueueRequestsFromMapFunc{ToRequests: &SBRRequestMapper{}}
+func (s *sbrController) newEnqueueRequestsForSBR() handler.EventHandler {
+	return &handler.EnqueueRequestsFromMapFunc{ToRequests: &sbrRequestMapper{}}
 }
 
 // createSourceForGVK creates a *source.Kind for the given gvk.
-func (s *SBRController) createSourceForGVK(gvk schema.GroupVersionKind) *source.Kind {
+func (s *sbrController) createSourceForGVK(gvk schema.GroupVersionKind) *source.Kind {
 	return &source.Kind{Type: s.createUnstructuredWithGVK(gvk)}
 }
 
 // createUnstructuredWithGVK creates a *unstructured.Unstructured with the given gvk.
-func (s *SBRController) createUnstructuredWithGVK(gvk schema.GroupVersionKind) *unstructured.Unstructured {
+func (s *sbrController) createUnstructuredWithGVK(gvk schema.GroupVersionKind) *unstructured.Unstructured {
 	u := &unstructured.Unstructured{}
 	u.SetGroupVersionKind(gvk)
 	return u
 }
 
 // getWatchingGVKs return a list of GVKs that this controller is interested in watching.
-func (s *SBRController) getWatchingGVKs() ([]schema.GroupVersionKind, error) {
+func (s *sbrController) getWatchingGVKs() ([]schema.GroupVersionKind, error) {
 	log := s.logger
 	// standard resources types
 	gvks := []schema.GroupVersionKind{
@@ -88,8 +88,8 @@ func (s *SBRController) getWatchingGVKs() ([]schema.GroupVersionKind, error) {
 		{Group: "", Version: "v1", Kind: "ConfigMap"},
 	}
 
-	olm := NewOLM(s.Client, os.Getenv("WATCH_NAMESPACE"))
-	olmGVKs, err := olm.ListCSVOwnedCRDsAsGVKs()
+	olm := newOLM(s.Client, os.Getenv("WATCH_NAMESPACE"))
+	olmGVKs, err := olm.listCSVOwnedCRDsAsGVKs()
 	if err != nil {
 		log.Error(err, "On listing owned CSV as GVKs")
 		return nil, err
@@ -138,7 +138,7 @@ func buildGVKPredicate(logger *log.Log) predicate.Funcs {
 }
 
 // AddWatchForGVK creates a watch on a given GVK, as long as it's not duplicated.
-func (s *SBRController) AddWatchForGVK(gvk schema.GroupVersionKind) error {
+func (s *sbrController) AddWatchForGVK(gvk schema.GroupVersionKind) error {
 	logger := s.logger.WithValues("GVK", gvk)
 	logger.Debug("Adding watch for GVK...")
 	if _, exists := s.watchingGVKs[gvk]; exists {
@@ -155,7 +155,7 @@ func (s *SBRController) AddWatchForGVK(gvk schema.GroupVersionKind) error {
 }
 
 // AddWatchForGVR creates a watch on a given GVR
-func (s *SBRController) AddWatchForGVR(gvr schema.GroupVersionResource) error {
+func (s *sbrController) AddWatchForGVR(gvr schema.GroupVersionResource) error {
 	gvk, err := s.RestMapper.KindFor(gvr)
 	if err != nil {
 		return err
@@ -164,7 +164,7 @@ func (s *SBRController) AddWatchForGVR(gvr schema.GroupVersionResource) error {
 }
 
 // addCSVWatch creates a watch on ClusterServiceVersion.
-func (s *SBRController) addCSVWatch() error {
+func (s *sbrController) addCSVWatch() error {
 	log := s.logger
 	gvr := olmv1alpha1.SchemeGroupVersion.WithResource(csvResource)
 	resourceClient := s.Client.Resource(gvr).Namespace(os.Getenv("WATCH_NAMESPACE"))
@@ -175,7 +175,7 @@ func (s *SBRController) addCSVWatch() error {
 	} else if err != nil {
 		return err
 	}
-	csvGVK := olmv1alpha1.SchemeGroupVersion.WithKind(ClusterServiceVersionKind)
+	csvGVK := olmv1alpha1.SchemeGroupVersion.WithKind(clusterServiceVersionKind)
 	source := s.createSourceForGVK(csvGVK)
 	err = s.Controller.Watch(source, NewCreateWatchEventHandler(s))
 	if err != nil {
@@ -222,8 +222,8 @@ func buildSBRPredicate(logger *log.Log) predicate.Funcs {
 }
 
 // addSBRWatch creates a watchon ServiceBindingRequest GVK.
-func (s *SBRController) addSBRWatch() error {
-	gvk := v1alpha1.SchemeGroupVersion.WithKind(ServiceBindingRequestKind)
+func (s *sbrController) addSBRWatch() error {
+	gvk := v1alpha1.SchemeGroupVersion.WithKind(serviceBindingRequestKind)
 	l := s.logger.WithValues("GKV", gvk)
 	src := s.createSourceForGVK(gvk)
 	err := s.Controller.Watch(src, s.newEnqueueRequestsForSBR(), buildSBRPredicate(l))
@@ -237,7 +237,7 @@ func (s *SBRController) addSBRWatch() error {
 }
 
 // addWhitelistedGVKWatches create watch on GVKs employed on CSVs.
-func (s *SBRController) addWhitelistedGVKWatches() error {
+func (s *sbrController) addWhitelistedGVKWatches() error {
 	log := s.logger
 	// list of interesting GVKs to watch
 	gvks, err := s.getWatchingGVKs()
@@ -259,7 +259,7 @@ func (s *SBRController) addWhitelistedGVKWatches() error {
 }
 
 // Watch setup "watch" for all GVKs relevant for SBRController.
-func (s *SBRController) Watch() error {
+func (s *sbrController) Watch() error {
 	log := s.logger
 	err := s.addSBRWatch()
 	if err != nil {
@@ -288,13 +288,13 @@ func NewSBRController(
 	mgr manager.Manager,
 	options controller.Options,
 	client dynamic.Interface,
-) (*SBRController, error) {
+) (*sbrController, error) {
 	c, err := controller.New(controllerName, mgr, options)
 	if err != nil {
 		return nil, err
 	}
 
-	return &SBRController{
+	return &sbrController{
 		Controller:   c,
 		Client:       client,
 		RestMapper:   mgr.GetRESTMapper(),
diff --git a/pkg/controller/servicebindingrequest/secret.go b/pkg/controller/servicebindingrequest/secret.go
index 4ab15760..22eba8ac 100644
--- a/pkg/controller/servicebindingrequest/secret.go
+++ b/pkg/controller/servicebindingrequest/secret.go
@@ -11,8 +11,8 @@ import (
 	"github.com/redhat-developer/service-binding-operator/pkg/log"
 )
 
-// Secret represents the data collected by this operator, and later handled as a secret.
-type Secret struct {
+// secret represents the data collected by this operator, and later handled as a secret.
+type secret struct {
 	logger *log.Log          // logger instance
 	client dynamic.Interface // Kubernetes API client
 	ns     string
@@ -20,14 +20,14 @@ type Secret struct {
 }
 
 // buildResourceClient creates a resource client to handle corev1/secret resource.
-func (s *Secret) buildResourceClient() dynamic.ResourceInterface {
-	gvr := corev1.SchemeGroupVersion.WithResource(SecretResource)
+func (s *secret) buildResourceClient() dynamic.ResourceInterface {
+	gvr := corev1.SchemeGroupVersion.WithResource(secretResource)
 	return s.client.Resource(gvr).Namespace(s.ns)
 }
 
 // createOrUpdate will take informed payload and either create a new secret or update an existing
 // one. It can return error when Kubernetes client does.
-func (s *Secret) createOrUpdate(payload map[string][]byte) (*unstructured.Unstructured, error) {
+func (s *secret) createOrUpdate(payload map[string][]byte) (*unstructured.Unstructured, error) {
 	logger := s.logger.WithValues("Namespace", s.ns, "Name", s.name)
 	secretObj := &corev1.Secret{
 		ObjectMeta: metav1.ObjectMeta{
@@ -37,7 +37,7 @@ func (s *Secret) createOrUpdate(payload map[string][]byte) (*unstructured.Unstru
 		Data: payload,
 	}
 
-	gvk := corev1.SchemeGroupVersion.WithKind(SecretKind)
+	gvk := corev1.SchemeGroupVersion.WithKind(secretKind)
 	u, err := converter.ToUnstructuredAsGVK(secretObj, gvk)
 	if err != nil {
 		return nil, err
@@ -59,15 +59,15 @@ func (s *Secret) createOrUpdate(payload map[string][]byte) (*unstructured.Unstru
 	return u, nil
 }
 
-// Commit will store informed data as a secret, commit it against the API server. It can forward
+// commit will store informed data as a secret, commit it against the API server. It can forward
 // errors from custom environment parser component, or from the API server itself.
-func (s *Secret) Commit(payload map[string][]byte) (*unstructured.Unstructured, error) {
+func (s *secret) commit(payload map[string][]byte) (*unstructured.Unstructured, error) {
 	return s.createOrUpdate(payload)
 }
 
-// Get an unstructured object from the secret handled by this component. It can return errors in case
+// get an unstructured object from the secret handled by this component. It can return errors in case
 // the API server does.
-func (s *Secret) Get() (*unstructured.Unstructured, bool, error) {
+func (s *secret) get() (*unstructured.Unstructured, bool, error) {
 	resourceClient := s.buildResourceClient()
 	u, err := resourceClient.Get(s.name, metav1.GetOptions{})
 	if err != nil && !errors.IsNotFound(err) {
@@ -76,8 +76,8 @@ func (s *Secret) Get() (*unstructured.Unstructured, bool, error) {
 	return u, u != nil, nil
 }
 
-// Delete the secret represented by this component. It can return error when the API server does.
-func (s *Secret) Delete() error {
+// delete the secret represented by this component. It can return error when the API server does.
+func (s *secret) delete() error {
 	resourceClient := s.buildResourceClient()
 	err := resourceClient.Delete(s.name, &metav1.DeleteOptions{})
 	if err != nil && !errors.IsNotFound(err) {
@@ -86,13 +86,13 @@ func (s *Secret) Delete() error {
 	return nil
 }
 
-// NewSecret instantiate a new Secret.
-func NewSecret(
+// newSecret instantiate a new Secret.
+func newSecret(
 	client dynamic.Interface,
 	ns string,
 	name string,
-) *Secret {
-	return &Secret{
+) *secret {
+	return &secret{
 		logger: log.NewLog("secret"),
 		client: client,
 
diff --git a/pkg/controller/servicebindingrequest/service.go b/pkg/controller/servicebindingrequest/service.go
index 9895a942..34190665 100644
--- a/pkg/controller/servicebindingrequest/service.go
+++ b/pkg/controller/servicebindingrequest/service.go
@@ -18,12 +18,12 @@ import (
 )
 
 var (
-	// ErrUnspecifiedBackingServiceNamespace is returned when the namespace of a service is
+	// errUnspecifiedBackingServiceNamespace is returned when the namespace of a service is
 	// unspecified.
-	ErrUnspecifiedBackingServiceNamespace = errors.New("backing service namespace is unspecified")
-	// EmptyBackingServiceSelectorsErr is returned when no backing service selectors have been
+	errUnspecifiedBackingServiceNamespace = errors.New("backing service namespace is unspecified")
+	// errEmptyBackingServiceSelectors is returned when no backing service selectors have been
 	// informed in the Service Binding Request.
-	ErrEmptyBackingServiceSelectors = errors.New("backing service selectors are empty")
+	errEmptyBackingServiceSelectors = errors.New("backing service selectors are empty")
 )
 
 func findService(
@@ -38,7 +38,7 @@ func findService(
 	gvr, _ := meta.UnsafeGuessKindToResource(gvk)
 
 	if len(ns) == 0 {
-		return nil, ErrUnspecifiedBackingServiceNamespace
+		return nil, errUnspecifiedBackingServiceNamespace
 	}
 
 	// delegate the search selector's namespaced resource client
@@ -48,8 +48,8 @@ func findService(
 		Get(resourceRef, metav1.GetOptions{})
 }
 
-// CRDGVR is the plural GVR for Kubernetes CRDs.
-var CRDGVR = schema.GroupVersionResource{
+// crdGVR is the plural GVR for Kubernetes CRDs.
+var crdGVR = schema.GroupVersionResource{
 	Group:    "apiextensions.k8s.io",
 	Version:  "v1beta1",
 	Resource: "customresourcedefinitions",
@@ -61,7 +61,7 @@ func findServiceCRD(client dynamic.Interface, gvk schema.GroupVersionKind) (*uns
 	// crdName is the string'fied GroupResource, e.g. "deployments.apps"
 	crdName := gvr.GroupResource().String()
 	// delegate the search to the CustomResourceDefinition resource client
-	return client.Resource(CRDGVR).Get(crdName, metav1.GetOptions{})
+	return client.Resource(crdGVR).Get(crdName, metav1.GetOptions{})
 }
 
 func loadDescriptor(anns map[string]string, path string, descriptor string, root string) {
@@ -113,7 +113,7 @@ func findCRDDescription(
 	bssGVK schema.GroupVersionKind,
 	crd *unstructured.Unstructured,
 ) (*olmv1alpha1.CRDDescription, error) {
-	return NewOLM(client, ns).SelectCRDByGVK(bssGVK, crd)
+	return newOLM(client, ns).selectCRDByGVK(bssGVK, crd)
 }
 
 type bindableResource struct {
@@ -189,14 +189,14 @@ func buildOwnedResourceContext(
 	restMapper meta.RESTMapper,
 	inputPath string,
 	outputPath string,
-) (*ServiceContext, error) {
+) (*serviceContext, error) {
 	svcCtx, err := buildServiceContext(
 		client, obj.GetNamespace(), obj.GetObjectKind().GroupVersionKind(), obj.GetName(),
-		ownerEnvVarPrefix, restMapper)
+		ownerEnvVarPrefix, restMapper, nil)
 	if err != nil {
 		return nil, err
 	}
-	svcCtx.EnvVars, _, err = nested.GetValue(obj.Object, inputPath, outputPath)
+	svcCtx.envVars, _, err = nested.GetValue(obj.Object, inputPath, outputPath)
 	return svcCtx, err
 }
 
@@ -205,8 +205,8 @@ func buildOwnedResourceContexts(
 	objs []*unstructured.Unstructured,
 	ownerEnvVarPrefix *string,
 	restMapper meta.RESTMapper,
-) ([]*ServiceContext, error) {
-	ctxs := make(ServiceContextList, 0)
+) ([]*serviceContext, error) {
+	ctxs := make(serviceContextList, 0)
 
 	for _, obj := range objs {
 		for _, br := range bindableResources {
diff --git a/pkg/controller/servicebindingrequest/servicebinder.go b/pkg/controller/servicebindingrequest/servicebinder.go
index 694072d3..f3e767f1 100644
--- a/pkg/controller/servicebindingrequest/servicebinder.go
+++ b/pkg/controller/servicebindingrequest/servicebinder.go
@@ -21,81 +21,77 @@ import (
 )
 
 const (
-	// BindingSuccess binding has succeeded
-	BindingSuccess = "BindingSuccess"
-	// BindingFail binding has failed
-	BindingFail = "BindingFail"
-	//Finalizer annotation used in finalizer steps
-	Finalizer = "finalizer.servicebindingrequest.openshift.io"
+	// bindingFail binding has failed
+	bindingFail = "BindingFail"
+	//finalizer annotation used in finalizer steps
+	finalizer = "finalizer.servicebindingrequest.openshift.io"
 	// time in seconds to wait before requeuing requests
 	requeueAfter int64 = 45
 )
 
-// GroupVersion represents the service binding request resource's group version.
-var GroupVersion = v1alpha1.SchemeGroupVersion.WithResource(ServiceBindingRequestResource)
+// groupVersion represents the service binding request resource's group version.
+var groupVersion = v1alpha1.SchemeGroupVersion.WithResource(serviceBindingRequestResource)
 
 // message converts the error to string for the Message field in the Status condition
-func (b *ServiceBinder) message(err error) string {
+func (b *serviceBinder) message(err error) string {
 	return err.Error()
 }
 
-// ServiceBinderOptions is BuildServiceBinder arguments.
-type ServiceBinderOptions struct {
-	Logger                 *log.Log
-	DynClient              dynamic.Interface
-	DetectBindingResources bool
-	SBR                    *v1alpha1.ServiceBindingRequest
-	Objects                []*unstructured.Unstructured
-	EnvVars                map[string][]byte
-	EnvVarPrefix           string
-	Binding                *Binding
-	RESTMapper             meta.RESTMapper
+// serviceBinderOptions is BuildServiceBinder arguments.
+type serviceBinderOptions struct {
+	logger                 *log.Log
+	dynClient              dynamic.Interface
+	detectBindingResources bool
+	sbr                    *v1alpha1.ServiceBindingRequest
+	objects                []*unstructured.Unstructured
+	binding                *binding
+	restMapper             meta.RESTMapper
 }
 
-// ErrInvalidServiceBinderOptions is returned when ServiceBinderOptions contains an invalid value.
-type ErrInvalidServiceBinderOptions string
+// errInvalidServiceBinderOptions is returned when ServiceBinderOptions contains an invalid value.
+type errInvalidServiceBinderOptions string
 
-func (e ErrInvalidServiceBinderOptions) Error() string {
+func (e errInvalidServiceBinderOptions) Error() string {
 	return fmt.Sprintf("option %q is missing", string(e))
 }
 
 // Valid returns an error if the receiver is invalid, nil otherwise.
-func (o *ServiceBinderOptions) Valid() error {
-	if o.SBR == nil {
-		return ErrInvalidServiceBinderOptions("SBR")
+func (o *serviceBinderOptions) Valid() error {
+	if o.sbr == nil {
+		return errInvalidServiceBinderOptions("SBR")
 	}
 
-	if o.DynClient == nil {
-		return ErrInvalidServiceBinderOptions("DynClient")
+	if o.dynClient == nil {
+		return errInvalidServiceBinderOptions("DynClient")
 	}
 
-	if o.Binding == nil {
-		return ErrInvalidServiceBinderOptions("Binding")
+	if o.binding == nil {
+		return errInvalidServiceBinderOptions("Binding")
 	}
 
-	if o.RESTMapper == nil {
-		return ErrInvalidServiceBinderOptions("RESTMapper")
+	if o.restMapper == nil {
+		return errInvalidServiceBinderOptions("RESTMapper")
 	}
 
 	return nil
 }
 
-// ServiceBinder manages binding for a Service Binding Request and associated objects.
-type ServiceBinder struct {
-	// Binder is responsible for interacting with the cluster and apply binding related changes.
-	Binder *Binder
-	// EnvVars contains the environment variables to bind.
-	EnvVars map[string][]byte
-	// DynClient is the Kubernetes dynamic client used to interact with the cluster.
-	DynClient dynamic.Interface
-	// Logger provides logging facilities for internal components.
-	Logger *log.Log
-	// Objects is a list of additional unstructured objects related to the Service Binding Request.
-	Objects []*unstructured.Unstructured
-	// SBR is the ServiceBindingRequest associated with binding.
-	SBR *v1alpha1.ServiceBindingRequest
-	// Secret is the Secret associated with the Service Binding Request.
-	Secret *Secret
+// serviceBinder manages binding for a Service Binding Request and associated objects.
+type serviceBinder struct {
+	// binder is responsible for interacting with the cluster and apply binding related changes.
+	binder *binder
+	// envVars contains the environment variables to bind.
+	envVars map[string][]byte
+	// dynClient is the Kubernetes dynamic client used to interact with the cluster.
+	dynClient dynamic.Interface
+	// logger provides logging facilities for internal components.
+	logger *log.Log
+	// objects is a list of additional unstructured objects related to the Service Binding Request.
+	objects []*unstructured.Unstructured
+	// sbr is the ServiceBindingRequest associated with binding.
+	sbr *v1alpha1.ServiceBindingRequest
+	// secret is the secret associated with the Service Binding Request.
+	secret *secret
 }
 
 // updateServiceBindingRequest execute update API call on a SBR request. It can return errors from
@@ -110,7 +106,7 @@ func updateServiceBindingRequest(
 	}
 
 	nsClient := dynClient.
-		Resource(GroupVersion).
+		Resource(groupVersion).
 		Namespace(sbr.GetNamespace())
 
 	u, err = nsClient.Update(u, v1.UpdateOptions{})
@@ -129,46 +125,46 @@ func updateServiceBindingRequest(
 
 // updateServiceBindingRequest execute update API call on a SBR request. It can return errors from
 // this action.
-func (b *ServiceBinder) updateServiceBindingRequest(
+func (b *serviceBinder) updateServiceBindingRequest(
 	sbr *v1alpha1.ServiceBindingRequest,
 ) (*v1alpha1.ServiceBindingRequest, error) {
-	return updateServiceBindingRequest(b.DynClient, sbr)
+	return updateServiceBindingRequest(b.dynClient, sbr)
 }
 
-// Unbind removes the relationship between a Service Binding Request and its related objects.
-func (b *ServiceBinder) Unbind() (reconcile.Result, error) {
-	logger := b.Logger.WithName("Unbind")
+// unbind removes the relationship between a Service Binding Request and its related objects.
+func (b *serviceBinder) unbind() (reconcile.Result, error) {
+	logger := b.logger.WithName("Unbind")
 
 	// when finalizer is not found anymore, it can be safely removed
-	if !containsStringSlice(b.SBR.GetFinalizers(), Finalizer) {
+	if !containsStringSlice(b.sbr.GetFinalizers(), finalizer) {
 		logger.Info("Resource can be safely deleted!")
-		return Done()
+		return done()
 	}
 
 	logger.Info("Cleaning related objects from operator's annotations...")
-	if err := RemoveAndUpdateSBRAnnotations(b.DynClient, b.Objects); err != nil {
+	if err := removeAndUpdateSBRAnnotations(b.dynClient, b.objects); err != nil {
 		logger.Error(err, "On removing annotations from related objects.")
-		return RequeueError(err)
+		return requeueError(err)
 	}
 
-	if err := b.Binder.Unbind(); err != nil {
+	if err := b.binder.unbind(); err != nil {
 		logger.Error(err, "On unbinding related objects")
-		return RequeueError(err)
+		return requeueError(err)
 	}
 
 	logger.Info("Deleting intermediary secret")
-	if err := b.Secret.Delete(); err != nil {
+	if err := b.secret.delete(); err != nil {
 		logger.Error(err, "On deleting intermediary secret.")
-		return RequeueError(err)
+		return requeueError(err)
 	}
 
 	logger.Debug("Removing resource finalizers...")
-	b.SBR.SetFinalizers(removeStringSlice(b.SBR.GetFinalizers(), Finalizer))
-	if _, err := b.updateServiceBindingRequest(b.SBR); err != nil {
-		return NoRequeue(err)
+	b.sbr.SetFinalizers(removeStringSlice(b.sbr.GetFinalizers(), finalizer))
+	if _, err := b.updateServiceBindingRequest(b.sbr); err != nil {
+		return noRequeue(err)
 	}
 
-	return Done()
+	return done()
 }
 
 // UpdateServiceBindingRequestStatus execute update API call on a SBR Status. It can return errors from
@@ -183,7 +179,7 @@ func updateServiceBindingRequestStatus(
 	}
 
 	nsClient := dynClient.
-		Resource(GroupVersion).
+		Resource(groupVersion).
 		Namespace(sbr.GetNamespace())
 
 	u, err = nsClient.UpdateStatus(u, v1.UpdateOptions{})
@@ -201,7 +197,7 @@ func updateServiceBindingRequestStatus(
 }
 
 // updateStatusServiceBindingRequest updates the Service Binding Request's status field.
-func (b *ServiceBinder) updateStatusServiceBindingRequest(
+func (b *serviceBinder) updateStatusServiceBindingRequest(
 	sbr *v1alpha1.ServiceBindingRequest,
 	sbrStatus *v1alpha1.ServiceBindingRequestStatus,
 ) (
@@ -216,12 +212,12 @@ func (b *ServiceBinder) updateStatusServiceBindingRequest(
 	// coping status over informed object
 	sbr.Status = *sbrStatus
 
-	return updateServiceBindingRequestStatus(b.DynClient, sbr)
+	return updateServiceBindingRequestStatus(b.dynClient, sbr)
 }
 
 // onError comprise the update of ServiceBindingRequest status to set error flag, and inspect
 // informed error to apply a different behavior for not-founds.
-func (b *ServiceBinder) onError(
+func (b *serviceBinder) onError(
 	err error,
 	sbr *v1alpha1.ServiceBindingRequest,
 	sbrStatus *v1alpha1.ServiceBindingRequestStatus,
@@ -234,42 +230,42 @@ func (b *ServiceBinder) onError(
 	conditionsv1.SetStatusCondition(&sbrStatus.Conditions, conditionsv1.Condition{
 		Type:    BindingReady,
 		Status:  corev1.ConditionFalse,
-		Reason:  BindingFail,
+		Reason:  bindingFail,
 		Message: b.message(err),
 	})
 	newSbr, errStatus := b.updateStatusServiceBindingRequest(sbr, sbrStatus)
 	if errStatus != nil {
-		return RequeueError(errStatus)
+		return requeueError(errStatus)
 	}
-	b.SBR = newSbr
+	b.sbr = newSbr
 
-	return RequeueOnNotFound(err, requeueAfter)
+	return requeueOnNotFound(err, requeueAfter)
 }
 
-// Bind configures binding between the Service Binding Request and its related objects.
-func (b *ServiceBinder) Bind() (reconcile.Result, error) {
-	sbrStatus := b.SBR.Status.DeepCopy()
+// bind configures binding between the Service Binding Request and its related objects.
+func (b *serviceBinder) bind() (reconcile.Result, error) {
+	sbrStatus := b.sbr.Status.DeepCopy()
 
-	b.Logger.Info("Saving data on intermediary secret...")
-	secretObj, err := b.Secret.Commit(b.EnvVars)
+	b.logger.Info("Saving data on intermediary secret...")
+	secretObj, err := b.secret.commit(b.envVars)
 	if err != nil {
-		b.Logger.Error(err, "On saving secret data..")
-		return b.onError(err, b.SBR, sbrStatus, nil)
+		b.logger.Error(err, "On saving secret data..")
+		return b.onError(err, b.sbr, sbrStatus, nil)
 	}
 	sbrStatus.Secret = secretObj.GetName()
 
-	updatedObjects, err := b.Binder.Bind()
+	updatedObjects, err := b.binder.bind()
 	if err != nil {
-		b.Logger.Error(err, "On binding application.")
-		return b.onError(err, b.SBR, sbrStatus, updatedObjects)
+		b.logger.Error(err, "On binding application.")
+		return b.onError(err, b.sbr, sbrStatus, updatedObjects)
 	}
 	b.setApplicationObjects(sbrStatus, updatedObjects)
 
 	// annotating objects related to binding
-	namespacedName := types.NamespacedName{Namespace: b.SBR.GetNamespace(), Name: b.SBR.GetName()}
-	if err = SetAndUpdateSBRAnnotations(b.DynClient, namespacedName, append(b.Objects, secretObj)); err != nil {
-		b.Logger.Error(err, "On setting annotations in related objects.")
-		return b.onError(err, b.SBR, sbrStatus, updatedObjects)
+	namespacedName := types.NamespacedName{Namespace: b.sbr.GetNamespace(), Name: b.sbr.GetName()}
+	if err = setAndUpdateSBRAnnotations(b.dynClient, namespacedName, append(b.objects, secretObj)); err != nil {
+		b.logger.Error(err, "On setting annotations in related objects.")
+		return b.onError(err, b.sbr, sbrStatus, updatedObjects)
 	}
 
 	conditionsv1.SetStatusCondition(&sbrStatus.Conditions, conditionsv1.Condition{
@@ -278,23 +274,23 @@ func (b *ServiceBinder) Bind() (reconcile.Result, error) {
 	})
 
 	// updating status of request instance
-	sbr, err := b.updateStatusServiceBindingRequest(b.SBR, sbrStatus)
+	sbr, err := b.updateStatusServiceBindingRequest(b.sbr, sbrStatus)
 	if err != nil {
-		return RequeueOnConflict(err)
+		return requeueOnConflict(err)
 	}
 
 	// appending finalizer, should be later removed upon resource deletion
-	sbr.SetFinalizers(append(removeStringSlice(b.SBR.GetFinalizers(), Finalizer), Finalizer))
+	sbr.SetFinalizers(append(removeStringSlice(b.sbr.GetFinalizers(), finalizer), finalizer))
 	if _, err = b.updateServiceBindingRequest(sbr); err != nil {
-		return NoRequeue(err)
+		return noRequeue(err)
 	}
 
-	b.Logger.Info("All done!")
-	return Done()
+	b.logger.Info("All done!")
+	return done()
 }
 
 // setApplicationObjects replaces the Status's equivalent field.
-func (b *ServiceBinder) setApplicationObjects(
+func (b *serviceBinder) setApplicationObjects(
 	sbrStatus *v1alpha1.ServiceBindingRequestStatus,
 	objs []*unstructured.Unstructured,
 ) {
@@ -315,12 +311,12 @@ func (b *ServiceBinder) setApplicationObjects(
 	sbrStatus.Applications = boundApps
 }
 
-// BuildServiceBinder creates a new binding manager according to options.
-func BuildServiceBinder(
+// buildServiceBinder creates a new binding manager according to options.
+func buildServiceBinder(
 	ctx context.Context,
-	options *ServiceBinderOptions,
+	options *serviceBinderOptions,
 ) (
-	*ServiceBinder,
+	*serviceBinder,
 	error,
 ) {
 	if err := options.Valid(); err != nil {
@@ -329,52 +325,52 @@ func BuildServiceBinder(
 
 	// FIXME(isuttonl): review whether it is possible to move Secret.Commit() and Secret.Delete() to
 	// ServiceBinder.
-	secret := NewSecret(
-		options.DynClient,
-		options.SBR.GetNamespace(),
-		options.SBR.GetName(),
+	secret := newSecret(
+		options.dynClient,
+		options.sbr.GetNamespace(),
+		options.sbr.GetName(),
 	)
 
 	// FIXME(isuttonl): review whether binder can be lazily created in Bind() and Unbind(); also
 	// consider renaming to ResourceBinder
-	binder := NewBinder(
+	binder := newBinder(
 		ctx,
-		options.DynClient,
-		options.SBR,
-		options.Binding.VolumeKeys,
-		options.RESTMapper,
+		options.dynClient,
+		options.sbr,
+		options.binding.volumeKeys,
+		options.restMapper,
 	)
 
-	return &ServiceBinder{
-		Logger:    options.Logger,
-		Binder:    binder,
-		DynClient: options.DynClient,
-		SBR:       options.SBR,
-		Objects:   options.Objects,
-		EnvVars:   options.Binding.EnvVars,
-		Secret:    secret,
+	return &serviceBinder{
+		logger:    options.logger,
+		binder:    binder,
+		dynClient: options.dynClient,
+		sbr:       options.sbr,
+		objects:   options.objects,
+		envVars:   options.binding.envVars,
+		secret:    secret,
 	}, nil
 }
 
-type Binding struct {
-	EnvVars    map[string][]byte
-	VolumeKeys []string
+type binding struct {
+	envVars    map[string][]byte
+	volumeKeys []string
 }
 
 func buildBinding(
 	client dynamic.Interface,
 	customEnvVar []corev1.EnvVar,
-	svcCtxs ServiceContextList,
+	svcCtxs serviceContextList,
 	globalEnvVarPrefix string,
-) (*Binding, error) {
+) (*binding, error) {
 	envVars, volumeKeys, err := NewRetriever(client).
 		ProcessServiceContexts(globalEnvVarPrefix, svcCtxs, customEnvVar)
 	if err != nil {
 		return nil, err
 	}
 
-	return &Binding{
-		EnvVars:    envVars,
-		VolumeKeys: volumeKeys,
+	return &binding{
+		envVars:    envVars,
+		volumeKeys: volumeKeys,
 	}, nil
 }
diff --git a/pkg/controller/servicebindingrequest/servicecontext.go b/pkg/controller/servicebindingrequest/servicecontext.go
index 3684366e..5696a17f 100644
--- a/pkg/controller/servicebindingrequest/servicecontext.go
+++ b/pkg/controller/servicebindingrequest/servicecontext.go
@@ -13,26 +13,28 @@ import (
 	v1alpha1 "github.com/redhat-developer/service-binding-operator/pkg/apis/apps/v1alpha1"
 )
 
-// ServiceContext contains information related to a service.
-type ServiceContext struct {
-	// Service is the resource of the service being evaluated.
-	Service *unstructured.Unstructured
-	// EnvVars contains the service's contributed environment variables.
-	EnvVars map[string]interface{}
-	// VolumeKeys contains the keys that should be mounted as volume from the binding secret.
-	VolumeKeys []string
-	// EnvVarPrefix indicates the prefix to use in environment variables.
-	EnvVarPrefix *string
+// serviceContext contains information related to a service.
+type serviceContext struct {
+	// service is the resource of the service being evaluated.
+	service *unstructured.Unstructured
+	// envVars contains the service's contributed environment variables.
+	envVars map[string]interface{}
+	// volumeKeys contains the keys that should be mounted as volume from the binding secret.
+	volumeKeys []string
+	// envVarPrefix indicates the prefix to use in environment variables.
+	envVarPrefix *string
+	// Id indicates a name the service can be referred in custom environment variables.
+	id *string
 }
 
-// ServiceContextList is a list of ServiceContext values.
-type ServiceContextList []*ServiceContext
+// serviceContextList is a list of ServiceContext values.
+type serviceContextList []*serviceContext
 
-// GetServices returns a slice of service unstructured objects contained in the collection.
-func (sc ServiceContextList) GetServices() []*unstructured.Unstructured {
+// getServices returns a slice of service unstructured objects contained in the collection.
+func (sc serviceContextList) getServices() []*unstructured.Unstructured {
 	var crs []*unstructured.Unstructured
 	for _, s := range sc {
-		crs = append(crs, s.Service)
+		crs = append(crs, s.service)
 	}
 	return crs
 }
@@ -52,13 +54,13 @@ func buildServiceContexts(
 	selectors []v1alpha1.BackingServiceSelector,
 	includeServiceOwnedResources bool,
 	restMapper meta.RESTMapper,
-) (ServiceContextList, error) {
-	svcCtxs := make(ServiceContextList, 0)
+) (serviceContextList, error) {
+	svcCtxs := make(serviceContextList, 0)
 	for _, s := range selectors {
 		ns := stringValueOrDefault(s.Namespace, defaultNs)
 		gvk := schema.GroupVersionKind{Kind: s.Kind, Version: s.Version, Group: s.Group}
 		svcCtx, err := buildServiceContext(
-			client, ns, gvk, s.ResourceRef, s.EnvVarPrefix, restMapper)
+			client, ns, gvk, s.ResourceRef, s.EnvVarPrefix, restMapper, s.Id)
 		if err != nil {
 			return nil, err
 		}
@@ -66,15 +68,15 @@ func buildServiceContexts(
 
 		if includeServiceOwnedResources {
 			// use the selector's kind as owned resources environment variable prefix
-			svcEnvVarPrefix := svcCtx.EnvVarPrefix
+			svcEnvVarPrefix := svcCtx.envVarPrefix
 			if svcEnvVarPrefix == nil {
 				svcEnvVarPrefix = &s.Kind
 			}
 			ownedResourcesCtxs, err := findOwnedResourcesCtxs(
 				client,
 				ns,
-				svcCtx.Service.GetName(),
-				svcCtx.Service.GetUID(),
+				svcCtx.service.GetName(),
+				svcCtx.service.GetUID(),
 				gvk,
 				svcEnvVarPrefix,
 				restMapper,
@@ -97,7 +99,7 @@ func findOwnedResourcesCtxs(
 	gvk schema.GroupVersionKind,
 	envVarPrefix *string,
 	restMapper meta.RESTMapper,
-) (ServiceContextList, error) {
+) (serviceContextList, error) {
 	ownedResources, err := getOwnedResources(
 		client,
 		ns,
@@ -127,7 +129,8 @@ func buildServiceContext(
 	resourceRef string,
 	envVarPrefix *string,
 	restMapper meta.RESTMapper,
-) (*ServiceContext, error) {
+	id *string,
+) (*serviceContext, error) {
 	obj, err := findService(client, ns, gvk, resourceRef)
 	if err != nil {
 		return nil, err
@@ -197,11 +200,12 @@ func buildServiceContext(
 		}
 	}
 
-	serviceCtx := &ServiceContext{
-		Service:      obj,
-		EnvVars:      envVars,
-		VolumeKeys:   volumeKeys,
-		EnvVarPrefix: envVarPrefix,
+	serviceCtx := &serviceContext{
+		service:      obj,
+		envVars:      envVars,
+		volumeKeys:   volumeKeys,
+		envVarPrefix: envVarPrefix,
+		id:           id,
 	}
 
 	return serviceCtx, nil
diff --git a/pkg/controller/servicebindingrequest/watch.go b/pkg/controller/servicebindingrequest/watch.go
index ffcc8f9f..d67832a8 100644
--- a/pkg/controller/servicebindingrequest/watch.go
+++ b/pkg/controller/servicebindingrequest/watch.go
@@ -11,16 +11,16 @@ var (
 	watchLog = log.NewLog("watch")
 )
 
-// CSVToWatcherMapper creates a EventHandler interface to map ClusterServiceVersion objects back to
+// csvToWatcherMapper creates a EventHandler interface to map ClusterServiceVersion objects back to
 // controller and add given GVK to watch list.
-type CSVToWatcherMapper struct {
-	controller *SBRController
+type csvToWatcherMapper struct {
+	controller *sbrController
 }
 
 // Map requests directed to CSV objects and exctract related GVK to trigger another watch on
 // controller instance.
-func (c *CSVToWatcherMapper) Map(obj handler.MapObject) []reconcile.Request {
-	olm := NewOLM(c.controller.Client, obj.Meta.GetNamespace())
+func (c *csvToWatcherMapper) Map(obj handler.MapObject) []reconcile.Request {
+	olm := newOLM(c.controller.Client, obj.Meta.GetNamespace())
 	namespacedName := types.NamespacedName{
 		Namespace: obj.Meta.GetNamespace(),
 		Name:      obj.Meta.GetName(),
@@ -28,7 +28,7 @@ func (c *CSVToWatcherMapper) Map(obj handler.MapObject) []reconcile.Request {
 
 	log := watchLog.WithName("CSVToWatcherMapper").WithValues("Obj.NamespacedName", namespacedName)
 
-	gvks, err := olm.ListGVKsFromCSVNamespacedName(namespacedName)
+	gvks, err := olm.listGVKsFromCSVNamespacedName(namespacedName)
 	if err != nil {
 		log.Error(err, "Failed on listing GVK with namespaced-name!")
 		return []reconcile.Request{}
@@ -47,8 +47,8 @@ func (c *CSVToWatcherMapper) Map(obj handler.MapObject) []reconcile.Request {
 
 // NewCreateWatchEventHandler creates a new instance of handler.EventHandler interface with
 // CSVToWatcherMapper as map-func.
-func NewCreateWatchEventHandler(controller *SBRController) handler.EventHandler {
+func NewCreateWatchEventHandler(controller *sbrController) handler.EventHandler {
 	return &handler.EnqueueRequestsFromMapFunc{
-		ToRequests: &CSVToWatcherMapper{controller: controller},
+		ToRequests: &csvToWatcherMapper{controller: controller},
 	}
 }


Test patch:
diff --git a/pkg/controller/servicebindingrequest/annotations/attribute_test.go b/pkg/controller/servicebindingrequest/annotations/attribute_test.go
index 90b8cccc..48b078c1 100644
--- a/pkg/controller/servicebindingrequest/annotations/attribute_test.go
+++ b/pkg/controller/servicebindingrequest/annotations/attribute_test.go
@@ -22,7 +22,7 @@ func TestAttributeHandler(t *testing.T) {
 			bindingInfo, err := NewBindingInfo(args.key, args.value)
 			require.NoError(t, err)
 			require.NotNil(t, bindingInfo)
-			handler := NewAttributeHandler(bindingInfo, *args.obj)
+			handler := newAttributeHandler(bindingInfo, *args.obj)
 			got, err := handler.Handle()
 			require.NoError(t, err)
 			require.NotNil(t, got)
diff --git a/pkg/controller/servicebindingrequest/annotations/bindinginfo_test.go b/pkg/controller/servicebindingrequest/annotations/bindinginfo_test.go
index aef0294d..98dbe1ee 100644
--- a/pkg/controller/servicebindingrequest/annotations/bindinginfo_test.go
+++ b/pkg/controller/servicebindingrequest/annotations/bindinginfo_test.go
@@ -21,11 +21,11 @@ func TestNewBindingInfo(t *testing.T) {
 		name    string
 		args    args
 		wantErr bool
-		want    *BindingInfo
+		want    *bindingInfo
 	}{
 		{
 			args: args{name: prefix("status.configMapRef-password"), value: "binding"},
-			want: &BindingInfo{
+			want: &bindingInfo{
 				ResourceReferencePath: "status.configMapRef",
 				Descriptor:            "binding:password",
 				SourcePath:            "password",
@@ -36,7 +36,7 @@ func TestNewBindingInfo(t *testing.T) {
 		},
 		{
 			args: args{name: prefix("status.connectionString"), value: "binding"},
-			want: &BindingInfo{
+			want: &bindingInfo{
 				Descriptor:            "binding:status.connectionString",
 				ResourceReferencePath: "status.connectionString",
 				SourcePath:            "status.connectionString",
@@ -47,7 +47,7 @@ func TestNewBindingInfo(t *testing.T) {
 		},
 		{
 			args: args{name: prefix(""), value: "binding"},
-			want: &BindingInfo{
+			want: &bindingInfo{
 				Descriptor:            "binding:status.connectionString",
 				ResourceReferencePath: "status.connectionString",
 				SourcePath:            "status.connectionString",
diff --git a/pkg/controller/servicebindingrequest/annotations/configmap_test.go b/pkg/controller/servicebindingrequest/annotations/configmap_test.go
index 237ad27a..c71d5186 100644
--- a/pkg/controller/servicebindingrequest/annotations/configmap_test.go
+++ b/pkg/controller/servicebindingrequest/annotations/configmap_test.go
@@ -35,7 +35,7 @@ func TestConfigMapHandler(t *testing.T) {
 
 			bindingInfo, err := NewBindingInfo(args.name, args.value)
 			require.NoError(t, err)
-			handler, err := NewConfigMapHandler(
+			handler, err := newConfigMapHandler(
 				f.FakeDynClient(),
 				bindingInfo,
 				unstructured.Unstructured{Object: args.service},
diff --git a/pkg/controller/servicebindingrequest/annotations/resource_test.go b/pkg/controller/servicebindingrequest/annotations/resource_test.go
index 0559962d..27051f73 100644
--- a/pkg/controller/servicebindingrequest/annotations/resource_test.go
+++ b/pkg/controller/servicebindingrequest/annotations/resource_test.go
@@ -43,6 +43,6 @@ func TestDiscoverBindingType(t *testing.T) {
 	t.Run("unknown/secret", assertDiscoverBindingType(args{
 		value:     "binding:unknown:object:secret",
 		expected:  BindingTypeEnvVar,
-		wantedErr: UnknownBindingTypeErr("unknown"),
+		wantedErr: unknownBindingTypeErr("unknown"),
 	}))
 }
diff --git a/pkg/controller/servicebindingrequest/annotations/secret_test.go b/pkg/controller/servicebindingrequest/annotations/secret_test.go
index 46462ee5..73f7494a 100644
--- a/pkg/controller/servicebindingrequest/annotations/secret_test.go
+++ b/pkg/controller/servicebindingrequest/annotations/secret_test.go
@@ -33,11 +33,11 @@ func TestSecretHandler(t *testing.T) {
 
 			restMapper := testutils.BuildTestRESTMapper()
 
-			bindingInfo, err := NewBindingInfo(args.name, args.value)
+			bi, err := NewBindingInfo(args.name, args.value)
 			require.NoError(t, err)
-			handler, err := NewSecretHandler(
+			handler, err := newSecretHandler(
 				f.FakeDynClient(),
-				bindingInfo,
+				bi,
 				unstructured.Unstructured{Object: args.service},
 				restMapper,
 			)
diff --git a/pkg/controller/servicebindingrequest/annotations_test.go b/pkg/controller/servicebindingrequest/annotations_test.go
index 857ee7db..ee459bcd 100644
--- a/pkg/controller/servicebindingrequest/annotations_test.go
+++ b/pkg/controller/servicebindingrequest/annotations_test.go
@@ -28,7 +28,7 @@ func TestAnnotationsGetSBRNamespacedNameFromObject(t *testing.T) {
 
 	// not containing annotations, should return empty
 	t.Run("returns-empty", func(t *testing.T) {
-		namespacedName, err := GetSBRNamespacedNameFromObject(u.DeepCopyObject())
+		namespacedName, err := getSBRNamespacedNameFromObject(u.DeepCopyObject())
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{}, namespacedName)
 	})
@@ -36,7 +36,7 @@ func TestAnnotationsGetSBRNamespacedNameFromObject(t *testing.T) {
 	// with annotations in place it should return the actual values
 	t.Run("from-annotations", func(t *testing.T) {
 		u.SetAnnotations(map[string]string{sbrNamespaceAnnotation: "ns", sbrNameAnnotation: "name"})
-		namespacedName, err := GetSBRNamespacedNameFromObject(u.DeepCopyObject())
+		namespacedName, err := getSBRNamespacedNameFromObject(u.DeepCopyObject())
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{Namespace: "ns", Name: "name"}, namespacedName)
 	})
@@ -44,7 +44,7 @@ func TestAnnotationsGetSBRNamespacedNameFromObject(t *testing.T) {
 	// incomplete annotations, only name present
 	t.Run("only-name-from-annotations", func(t *testing.T) {
 		u.SetAnnotations(map[string]string{sbrNameAnnotation: "name"})
-		namespacedName, err := GetSBRNamespacedNameFromObject(u.DeepCopyObject())
+		namespacedName, err := getSBRNamespacedNameFromObject(u.DeepCopyObject())
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{}, namespacedName)
 	})
@@ -52,7 +52,7 @@ func TestAnnotationsGetSBRNamespacedNameFromObject(t *testing.T) {
 	// incomplete annotations, namespace annotation is present but an empty string
 	t.Run("namespace-empty-from-annotations", func(t *testing.T) {
 		u.SetAnnotations(map[string]string{sbrNameAnnotation: "name", sbrNamespaceAnnotation: ""})
-		namespacedName, err := GetSBRNamespacedNameFromObject(u.DeepCopyObject())
+		namespacedName, err := getSBRNamespacedNameFromObject(u.DeepCopyObject())
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{}, namespacedName)
 	})
@@ -60,7 +60,7 @@ func TestAnnotationsGetSBRNamespacedNameFromObject(t *testing.T) {
 	// incomplete annotations, only namespace present
 	t.Run("only-namespace-from-annotations", func(t *testing.T) {
 		u.SetAnnotations(map[string]string{sbrNamespaceAnnotation: "namespace"})
-		namespacedName, err := GetSBRNamespacedNameFromObject(u.DeepCopyObject())
+		namespacedName, err := getSBRNamespacedNameFromObject(u.DeepCopyObject())
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{}, namespacedName)
 	})
@@ -68,7 +68,7 @@ func TestAnnotationsGetSBRNamespacedNameFromObject(t *testing.T) {
 	// incomplete annotations, name annotation is present but an empty string
 	t.Run("name-empty-from-annotations", func(t *testing.T) {
 		u.SetAnnotations(map[string]string{sbrNamespaceAnnotation: "namespace", sbrNameAnnotation: ""})
-		namespacedName, err := GetSBRNamespacedNameFromObject(u.DeepCopyObject())
+		namespacedName, err := getSBRNamespacedNameFromObject(u.DeepCopyObject())
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{}, namespacedName)
 	})
@@ -76,10 +76,10 @@ func TestAnnotationsGetSBRNamespacedNameFromObject(t *testing.T) {
 	// it should also understand a actual SBR as well, so return not empty
 	t.Run("actual-sbr-object", func(t *testing.T) {
 		sbr := &unstructured.Unstructured{}
-		sbr.SetGroupVersionKind(v1alpha1.SchemeGroupVersion.WithKind(ServiceBindingRequestKind))
+		sbr.SetGroupVersionKind(v1alpha1.SchemeGroupVersion.WithKind(serviceBindingRequestKind))
 		sbr.SetNamespace("ns")
 		sbr.SetName("name")
-		namespacedName, err := GetSBRNamespacedNameFromObject(sbr.DeepCopyObject())
+		namespacedName, err := getSBRNamespacedNameFromObject(sbr.DeepCopyObject())
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{Namespace: "ns", Name: "name"}, namespacedName)
 	})
@@ -106,7 +106,7 @@ func TestAnnotationsSetAndRemoveSBRAnnotations(t *testing.T) {
 
 	t.Run("SetSBRAnnotations", func(t *testing.T) {
 		originCopy := u.DeepCopy()
-		newObj := SetSBRAnnotations(namespacedName, u)
+		newObj := setSBRAnnotations(namespacedName, u)
 
 		// we are not modifying the origin object
 		equal, err := nestedMapComparison(u, originCopy)
@@ -117,7 +117,7 @@ func TestAnnotationsSetAndRemoveSBRAnnotations(t *testing.T) {
 		require.NoError(t, err)
 		require.False(t, equal)
 
-		objNamespacedName, err := GetSBRNamespacedNameFromObject(newObj)
+		objNamespacedName, err := getSBRNamespacedNameFromObject(newObj)
 		require.NoError(t, err)
 		require.Equal(t, namespacedName, objNamespacedName)
 
@@ -130,7 +130,7 @@ func TestAnnotationsSetAndRemoveSBRAnnotations(t *testing.T) {
 
 	t.Run("RemoveSBRAnnotations", func(t *testing.T) {
 		originCopy := u.DeepCopy()
-		newObj := RemoveSBRAnnotations(u)
+		newObj := removeSBRAnnotations(u)
 
 		// we are not modifying the origin object
 		equal, err := nestedMapComparison(u, originCopy)
@@ -141,7 +141,7 @@ func TestAnnotationsSetAndRemoveSBRAnnotations(t *testing.T) {
 		require.NoError(t, err)
 		require.False(t, equal)
 
-		objNamespacedName, err := GetSBRNamespacedNameFromObject(newObj)
+		objNamespacedName, err := getSBRNamespacedNameFromObject(newObj)
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{}, objNamespacedName)
 
@@ -153,25 +153,25 @@ func TestAnnotationsSetAndRemoveSBRAnnotations(t *testing.T) {
 	})
 
 	t.Run("SetAndUpdateSBRAnnotations", func(t *testing.T) {
-		err := SetAndUpdateSBRAnnotations(client, namespacedName, objs)
+		err := setAndUpdateSBRAnnotations(client, namespacedName, objs)
 		require.NoError(t, err)
 
 		u, err := deploymentResource.Get(ns, metav1.GetOptions{})
 		require.NoError(t, err)
 
-		objNamespacedName, err := GetSBRNamespacedNameFromObject(u)
+		objNamespacedName, err := getSBRNamespacedNameFromObject(u)
 		require.NoError(t, err)
 		require.Equal(t, namespacedName, objNamespacedName)
 	})
 
 	t.Run("RemoveAndUpdateSBRAnnotations", func(t *testing.T) {
-		err := RemoveAndUpdateSBRAnnotations(client, objs)
+		err := removeAndUpdateSBRAnnotations(client, objs)
 		require.NoError(t, err)
 
 		u, err := deploymentResource.Get(ns, metav1.GetOptions{})
 		require.NoError(t, err)
 
-		objNamespacedName, err := GetSBRNamespacedNameFromObject(u)
+		objNamespacedName, err := getSBRNamespacedNameFromObject(u)
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{}, objNamespacedName)
 	})
diff --git a/pkg/controller/servicebindingrequest/binder_test.go b/pkg/controller/servicebindingrequest/binder_test.go
index 929e001b..fdd6579a 100644
--- a/pkg/controller/servicebindingrequest/binder_test.go
+++ b/pkg/controller/servicebindingrequest/binder_test.go
@@ -57,7 +57,7 @@ func TestBinderNew(t *testing.T) {
 	)
 
 	t.Run("search-using-resourceref", func(t *testing.T) {
-		binderForSBRWithResourceRef := NewBinder(
+		binderForSBRWithResourceRef := newBinder(
 			context.TODO(),
 			f.FakeDynClient(),
 			sbrWithResourceRef,
@@ -72,7 +72,7 @@ func TestBinderNew(t *testing.T) {
 	})
 
 	t.Run("search", func(t *testing.T) {
-		binder := NewBinder(
+		binder := newBinder(
 			context.TODO(),
 			f.FakeDynClient(),
 			sbr,
@@ -87,7 +87,7 @@ func TestBinderNew(t *testing.T) {
 	})
 
 	t.Run("appendEnvFrom-removeEnvFrom", func(t *testing.T) {
-		binder := NewBinder(
+		binder := newBinder(
 			context.TODO(),
 			f.FakeDynClient(),
 			sbr,
@@ -110,7 +110,7 @@ func TestBinderNew(t *testing.T) {
 
 	t.Run("appendEnv", func(t *testing.T) {
 
-		binder := NewBinder(
+		binder := newBinder(
 			context.TODO(),
 			f.FakeDynClient(),
 			sbr,
@@ -128,7 +128,7 @@ func TestBinderNew(t *testing.T) {
 
 	t.Run("update", func(t *testing.T) {
 
-		binder := NewBinder(
+		binder := newBinder(
 			context.TODO(),
 			f.FakeDynClient(),
 			sbr,
@@ -150,7 +150,7 @@ func TestBinderNew(t *testing.T) {
 		err = runtime.DefaultUnstructuredConverter.FromUnstructured(updatedObjects[0].Object, &deployment)
 		require.NoError(t, err)
 
-		sbrName, err := GetSBRNamespacedNameFromObject(&deployment)
+		sbrName, err := getSBRNamespacedNameFromObject(&deployment)
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{Name: name, Namespace: ns}, sbrName)
 
@@ -166,7 +166,7 @@ func TestBinderNew(t *testing.T) {
 
 		// special env-var should exist to trigger a side effect such as Pod restart when the
 		// intermediate secret has been modified
-		envVar := getEnvVar(c.Env, ChangeTriggerEnv)
+		envVar := getEnvVar(c.Env, changeTriggerEnv)
 		require.NotNil(t, envVar)
 		require.NotEmpty(t, envVar.Value)
 
@@ -177,7 +177,7 @@ func TestBinderNew(t *testing.T) {
 	})
 
 	t.Run("update with extra modifier present", func(t *testing.T) {
-		binder := NewBinder(
+		binder := newBinder(
 			context.TODO(),
 			f.FakeDynClient(),
 			sbr,
@@ -186,7 +186,7 @@ func TestBinderNew(t *testing.T) {
 		)
 		// test binder with extra modifier present
 		ch := make(chan struct{})
-		binder.modifier = ExtraFieldsModifierFunc(func(u *unstructured.Unstructured) error {
+		binder.modifier = extraFieldsModifierFunc(func(u *unstructured.Unstructured) error {
 			close(ch)
 			return nil
 		})
@@ -210,7 +210,7 @@ func TestBinderNew(t *testing.T) {
 
 	t.Run("remove", func(t *testing.T) {
 
-		binder := NewBinder(
+		binder := newBinder(
 			context.TODO(),
 			f.FakeDynClient(),
 			sbr,
@@ -242,7 +242,7 @@ func TestBinderNew(t *testing.T) {
 		err = runtime.DefaultUnstructuredConverter.FromUnstructured(list.Items[0].Object, &deployment)
 		require.NoError(t, err)
 
-		sbrName, err := GetSBRNamespacedNameFromObject(&deployment)
+		sbrName, err := getSBRNamespacedNameFromObject(&deployment)
 		require.NoError(t, err)
 		require.Equal(t, types.NamespacedName{}, sbrName)
 
@@ -267,8 +267,8 @@ func TestBinderAppendEnvVar(t *testing.T) {
 		},
 	}
 
-	binder := &Binder{}
-	updatedEnvVarList := binder.appendEnvVar(envList, envName, "someothervalue")
+	b := &binder{}
+	updatedEnvVarList := b.appendEnvVar(envList, envName, "someothervalue")
 
 	// validate that no new key is added.
 	// the existing key should be overwritten with the new value.
@@ -284,7 +284,7 @@ func TestBinderApplicationName(t *testing.T) {
 	sbr := f.AddMockedServiceBindingRequest(name, nil, "backingServiceResourceRef", "applicationResourceRef", deploymentsGVR, nil)
 	f.AddMockedUnstructuredDeployment("applicationResourceRef", nil)
 
-	binder := NewBinder(
+	binder := newBinder(
 		context.TODO(),
 		f.FakeDynClient(),
 		sbr,
@@ -308,7 +308,7 @@ func TestBindingWithDeploymentConfig(t *testing.T) {
 	sbr := f.AddMockedServiceBindingRequest(name, nil, "backingServiceResourceRef", "applicationResourceRef", deploymentConfigsGVR, nil)
 	f.AddMockedUnstructuredDeploymentConfig("applicationResourceRef", nil)
 
-	binder := NewBinder(
+	binder := newBinder(
 		context.TODO(),
 		f.FakeDynClient(),
 		sbr,
@@ -338,7 +338,7 @@ func TestBindTwoApplications(t *testing.T) {
 	}
 	f.AddMockedUnstructuredDeployment("applicationResourceRef1", matchLabels1)
 	sbr1 := f.AddMockedServiceBindingRequest(name1, nil, "backingServiceResourceRef", "", deploymentsGVR, matchLabels1)
-	binder1 := NewBinder(
+	binder1 := newBinder(
 		context.TODO(),
 		f.FakeDynClient(),
 		sbr1,
@@ -354,7 +354,7 @@ func TestBindTwoApplications(t *testing.T) {
 	}
 	f.AddMockedUnstructuredDeployment("applicationResourceRef2", matchLabels2)
 	sbr2 := f.AddMockedServiceBindingRequest(name2, nil, "backingServiceResourceRef", "", deploymentsGVR, matchLabels2)
-	binder2 := NewBinder(
+	binder2 := newBinder(
 		context.TODO(),
 		f.FakeDynClient(),
 		sbr2,
@@ -387,7 +387,7 @@ func TestKnativeServicesContractWithBinder(t *testing.T) {
 	sbr := f.AddMockedServiceBindingRequest(name, nil, "", "knative-app", gvr, matchLabels)
 	f.AddMockedUnstructuredKnativeService("knative-app", matchLabels)
 
-	binder := NewBinder(
+	binder := newBinder(
 		context.TODO(),
 		f.FakeDynClient(),
 		sbr,
@@ -421,7 +421,7 @@ func Test_extraFieldsModifier(t *testing.T) {
 	f := mocks.NewFake(t, ns)
 	deploy := mocks.DeploymentMock(ns, "deployment-fake", matchLabels)
 	sbr := mocks.ServiceBindingRequestMock(ns, name, nil, "", deploy.Name, deploymentsGVR, matchLabels)
-	binder := NewBinder(
+	binder := newBinder(
 		context.TODO(),
 		f.FakeDynClient(),
 		sbr,
@@ -436,7 +436,7 @@ func Test_extraFieldsModifier(t *testing.T) {
 	ksvc := mocks.KnativeServiceMock(ns, "knative-app-with-rev-name", matchLabels)
 	sbr = mocks.ServiceBindingRequestMock(ns, name, nil, "", ksvc.Name, gvr, matchLabels)
 
-	binder = NewBinder(
+	binder = newBinder(
 		context.TODO(),
 		f.FakeDynClient(),
 		sbr,
diff --git a/pkg/controller/servicebindingrequest/custom_env_parser_test.go b/pkg/controller/servicebindingrequest/custom_env_parser_test.go
index d98dd00b..a9d15cc7 100644
--- a/pkg/controller/servicebindingrequest/custom_env_parser_test.go
+++ b/pkg/controller/servicebindingrequest/custom_env_parser_test.go
@@ -10,9 +10,9 @@ import (
 
 func TestCustomEnvParser(t *testing.T) {
 	type wantedVar struct {
-		Name       string
-		Value      string
-		ErrMessage string
+		name       string
+		value      string
+		errMessage string
 	}
 
 	type args struct {
@@ -23,12 +23,12 @@ func TestCustomEnvParser(t *testing.T) {
 
 	testCase := func(args args) func(t *testing.T) {
 		return func(t *testing.T) {
-			parser := NewCustomEnvParser(args.varTemplates, args.in)
+			parser := newCustomEnvParser(args.varTemplates, args.in)
 			values, err := parser.Parse()
 			require.NoError(t, err)
 
 			for _, w := range args.wanted {
-				require.Equal(t, values[w.Name], w.Value, w.ErrMessage)
+				require.Equal(t, values[w.name], w.value, w.errMessage)
 			}
 		}
 	}
@@ -46,8 +46,8 @@ func TestCustomEnvParser(t *testing.T) {
 			},
 		},
 		wanted: []wantedVar{
-			{Name: "JDBC_CONNECTION_STRING", Value: "database-name:database-user@database-pass"},
-			{Name: "ANOTHER_STRING", Value: "database-name_database-user"},
+			{name: "JDBC_CONNECTION_STRING", value: "database-name:database-user@database-pass"},
+			{name: "ANOTHER_STRING", value: "database-name_database-user"},
 		},
 		varTemplates: []corev1.EnvVar{
 			corev1.EnvVar{
@@ -72,7 +72,7 @@ func TestCustomEnvPath_Parse(t *testing.T) {
 
 	assertParse := func(args args) func(*testing.T) {
 		return func(t *testing.T) {
-			customEnvParser := NewCustomEnvParser(args.templates, args.envVarCtx)
+			customEnvParser := newCustomEnvParser(args.templates, args.envVarCtx)
 			actual, err := customEnvParser.Parse()
 			if args.wantErr != nil {
 				require.Error(t, args.wantErr)
@@ -142,7 +142,7 @@ func TestCustomEnvPath_Parse_exampleCase(t *testing.T) {
 		},
 	}
 
-	customEnvPath := NewCustomEnvParser(envMap, cache)
+	customEnvPath := newCustomEnvParser(envMap, cache)
 	values, err := customEnvPath.Parse()
 	if err != nil {
 		t.Error(err)
@@ -193,7 +193,7 @@ func TestCustomEnvPath_Parse_ToJson(t *testing.T) {
 			Value: `{{ json .notExist }}`,
 		},
 	}
-	customEnvPath := NewCustomEnvParser(envMap, cache)
+	customEnvPath := newCustomEnvParser(envMap, cache)
 	values, err := customEnvPath.Parse()
 	if err != nil {
 		t.Error(err)
diff --git a/pkg/controller/servicebindingrequest/mapper_test.go b/pkg/controller/servicebindingrequest/mapper_test.go
index 5a05a101..fc84c080 100644
--- a/pkg/controller/servicebindingrequest/mapper_test.go
+++ b/pkg/controller/servicebindingrequest/mapper_test.go
@@ -14,7 +14,7 @@ import (
 )
 
 func TestSBRRequestMapperMap(t *testing.T) {
-	mapper := &SBRRequestMapper{}
+	mapper := &sbrRequestMapper{}
 
 	u := &unstructured.Unstructured{}
 	u.SetNamespace("mapper-unit")
@@ -37,7 +37,7 @@ func TestSBRRequestMapperMap(t *testing.T) {
 
 	// it should also understand a actual SBR as well, so return not empty
 	sbr := &unstructured.Unstructured{}
-	sbr.SetGroupVersionKind(v1alpha1.SchemeGroupVersion.WithKind(ServiceBindingRequestKind))
+	sbr.SetGroupVersionKind(v1alpha1.SchemeGroupVersion.WithKind(serviceBindingRequestKind))
 	sbr.SetNamespace("ns")
 	sbr.SetName("name")
 	mapObj = handler.MapObject{Meta: u, Object: sbr.DeepCopyObject()}
diff --git a/pkg/controller/servicebindingrequest/namespacedname_test.go b/pkg/controller/servicebindingrequest/namespacedname_test.go
index 98111aac..9290176c 100644
--- a/pkg/controller/servicebindingrequest/namespacedname_test.go
+++ b/pkg/controller/servicebindingrequest/namespacedname_test.go
@@ -8,8 +8,8 @@ import (
 )
 
 func TestNamespacednameIsSBRNamespacedNameEmpty(t *testing.T) {
-	require.True(t, IsNamespacedNameEmpty(types.NamespacedName{}))
-	require.True(t, IsNamespacedNameEmpty(types.NamespacedName{Namespace: "ns"}))
-	require.True(t, IsNamespacedNameEmpty(types.NamespacedName{Name: "name"}))
-	require.False(t, IsNamespacedNameEmpty(types.NamespacedName{Namespace: "ns", Name: "name"}))
+	require.True(t, isNamespacedNameEmpty(types.NamespacedName{}))
+	require.True(t, isNamespacedNameEmpty(types.NamespacedName{Namespace: "ns"}))
+	require.True(t, isNamespacedNameEmpty(types.NamespacedName{Name: "name"}))
+	require.False(t, isNamespacedNameEmpty(types.NamespacedName{Namespace: "ns", Name: "name"}))
 }
diff --git a/pkg/controller/servicebindingrequest/olm_test.go b/pkg/controller/servicebindingrequest/olm_test.go
index df390c08..6160e7a2 100644
--- a/pkg/controller/servicebindingrequest/olm_test.go
+++ b/pkg/controller/servicebindingrequest/olm_test.go
@@ -46,7 +46,7 @@ func TestOLMWithoutCSVCRD(t *testing.T) {
 		}
 		return false, nil, nil
 	})
-	olm := NewOLM(client, ns)
+	olm := newOLM(client, ns)
 
 	t.Run("listCSVs without CSV CRD installed", func(t *testing.T) {
 		resourceClient := client.Resource(gvr).Namespace(ns)
@@ -68,7 +68,7 @@ func TestOLMNew(t *testing.T) {
 	f := mocks.NewFake(t, ns)
 	f.AddMockedUnstructuredCSV(csvName)
 	client := f.FakeDynClient()
-	olm := NewOLM(client, ns)
+	olm := newOLM(client, ns)
 
 	t.Run("listCSVs", func(t *testing.T) {
 		csvs, err := olm.listCSVs()
@@ -84,7 +84,7 @@ func TestOLMNew(t *testing.T) {
 
 	t.Run("SelectCRDByGVK", func(t *testing.T) {
 		// FIXME: include test for populated CRD
-		crd, err := olm.SelectCRDByGVK(schema.GroupVersionKind{
+		crd, err := olm.selectCRDByGVK(schema.GroupVersionKind{
 			Group:   mocks.CRDName,
 			Version: mocks.CRDVersion,
 			Kind:    mocks.CRDKind,
@@ -96,7 +96,7 @@ func TestOLMNew(t *testing.T) {
 	})
 
 	t.Run("ListCSVOwnedCRDsAsGVKs", func(t *testing.T) {
-		gvks, err := olm.ListCSVOwnedCRDsAsGVKs()
+		gvks, err := olm.listCSVOwnedCRDsAsGVKs()
 		require.NoError(t, err)
 		require.Len(t, gvks, 1)
 		assertGVKs(t, gvks)
@@ -104,7 +104,7 @@ func TestOLMNew(t *testing.T) {
 
 	t.Run("ListGVKsFromCSVNamespacedName", func(t *testing.T) {
 		namespacedName := types.NamespacedName{Namespace: ns, Name: csvName}
-		gvks, err := olm.ListGVKsFromCSVNamespacedName(namespacedName)
+		gvks, err := olm.listGVKsFromCSVNamespacedName(namespacedName)
 		require.NoError(t, err)
 		require.Len(t, gvks, 1)
 		assertGVKs(t, gvks)
diff --git a/pkg/controller/servicebindingrequest/reconciler_test.go b/pkg/controller/servicebindingrequest/reconciler_test.go
index 5d43b1d5..5fcbd3e1 100644
--- a/pkg/controller/servicebindingrequest/reconciler_test.go
+++ b/pkg/controller/servicebindingrequest/reconciler_test.go
@@ -92,17 +92,17 @@ func TestApplicationSelectorByName(t *testing.T) {
 
 	fakeDynClient := f.FakeDynClient()
 	mapper := testutils.BuildTestRESTMapper()
-	reconciler := &Reconciler{dynClient: fakeDynClient, RestMapper: mapper, scheme: f.S}
-	reconciler.resourceWatcher = newFakeResourceWatcher(mapper)
+	r := &reconciler{dynClient: fakeDynClient, restMapper: mapper, scheme: f.S}
+	r.resourceWatcher = newFakeResourceWatcher(mapper)
 
 	t.Run("test-application-selector-by-name", func(t *testing.T) {
 
-		res, err := reconciler.Reconcile(reconcileRequest())
+		res, err := r.Reconcile(reconcileRequest())
 		require.NoError(t, err)
 		require.False(t, res.Requeue)
 
 		namespacedName := types.NamespacedName{Namespace: reconcilerNs, Name: reconcilerName}
-		sbrOutput, err := reconciler.getServiceBindingRequest(namespacedName)
+		sbrOutput, err := r.getServiceBindingRequest(namespacedName)
 		require.NoError(t, err)
 
 		require.Equal(t, BindingReady, sbrOutput.Status.Conditions[0].Type)
@@ -140,11 +140,11 @@ func TestReconcilerReconcileUsingSecret(t *testing.T) {
 
 	fakeDynClient := f.FakeDynClient()
 	mapper := testutils.BuildTestRESTMapper()
-	reconciler := &Reconciler{dynClient: fakeDynClient, RestMapper: mapper, scheme: f.S}
-	reconciler.resourceWatcher = newFakeResourceWatcher(mapper)
+	r := &reconciler{dynClient: fakeDynClient, restMapper: mapper, scheme: f.S}
+	r.resourceWatcher = newFakeResourceWatcher(mapper)
 
 	t.Run("reconcile-using-secret", func(t *testing.T) {
-		res, err := reconciler.Reconcile(reconcileRequest())
+		res, err := r.Reconcile(reconcileRequest())
 		require.NoError(t, err)
 		require.False(t, res.Requeue)
 
@@ -164,7 +164,7 @@ func TestReconcilerReconcileUsingSecret(t *testing.T) {
 		require.Equal(t, reconcilerName, containers[0].EnvFrom[0].SecretRef.Name)
 
 		namespacedName = types.NamespacedName{Namespace: reconcilerNs, Name: reconcilerName}
-		sbrOutput, err := reconciler.getServiceBindingRequest(namespacedName)
+		sbrOutput, err := r.getServiceBindingRequest(namespacedName)
 		require.NoError(t, err)
 
 		require.Equal(t, BindingReady, sbrOutput.Status.Conditions[0].Type)
@@ -202,11 +202,11 @@ func TestReconcilerReconcileUsingVolumes(t *testing.T) {
 
 	fakeDynClient := f.FakeDynClient()
 	mapper := testutils.BuildTestRESTMapper()
-	reconciler := &Reconciler{dynClient: fakeDynClient, RestMapper: mapper, scheme: f.S}
-	reconciler.resourceWatcher = newFakeResourceWatcher(mapper)
+	r := &reconciler{dynClient: fakeDynClient, restMapper: mapper, scheme: f.S}
+	r.resourceWatcher = newFakeResourceWatcher(mapper)
 
 	t.Run("reconcile-using-volume", func(t *testing.T) {
-		res, err := reconciler.Reconcile(reconcileRequest())
+		res, err := r.Reconcile(reconcileRequest())
 		require.NoError(t, err)
 		require.False(t, res.Requeue)
 
@@ -244,16 +244,16 @@ func TestReconcilerGenericBinding(t *testing.T) {
 
 	fakeDynClient := f.FakeDynClient()
 	mapper := testutils.BuildTestRESTMapper()
-	reconciler := &Reconciler{dynClient: fakeDynClient, RestMapper: mapper, scheme: f.S}
-	reconciler.resourceWatcher = newFakeResourceWatcher(mapper)
+	r := &reconciler{dynClient: fakeDynClient, restMapper: mapper, scheme: f.S}
+	r.resourceWatcher = newFakeResourceWatcher(mapper)
 
 	// Reconcile without deployment
-	res, err := reconciler.Reconcile(reconcileRequest())
+	res, err := r.Reconcile(reconcileRequest())
 	require.NoError(t, err)
 	require.False(t, res.Requeue)
 
 	namespacedName := types.NamespacedName{Namespace: reconcilerNs, Name: reconcilerName}
-	sbrOutput, err := reconciler.getServiceBindingRequest(namespacedName)
+	sbrOutput, err := r.getServiceBindingRequest(namespacedName)
 	require.NoError(t, err)
 
 	require.True(t,
@@ -270,9 +270,9 @@ func TestReconcilerGenericBinding(t *testing.T) {
 	// Reconcile with deployment
 	f.AddMockedUnstructuredDeployment(reconcilerName, matchLabels)
 	fakeDynClient = f.FakeDynClient()
-	reconciler = &Reconciler{dynClient: fakeDynClient, RestMapper: testutils.BuildTestRESTMapper(), scheme: f.S}
-	reconciler.resourceWatcher = newFakeResourceWatcher(mapper)
-	res, err = reconciler.Reconcile(reconcileRequest())
+	r = &reconciler{dynClient: fakeDynClient, restMapper: testutils.BuildTestRESTMapper(), scheme: f.S}
+	r.resourceWatcher = newFakeResourceWatcher(mapper)
+	res, err = r.Reconcile(reconcileRequest())
 	require.NoError(t, err)
 	require.False(t, res.Requeue)
 
@@ -283,7 +283,7 @@ func TestReconcilerGenericBinding(t *testing.T) {
 	err = runtime.DefaultUnstructuredConverter.FromUnstructured(u.Object, &d)
 	require.NoError(t, err)
 
-	sbrOutput2, err := reconciler.getServiceBindingRequest(namespacedName)
+	sbrOutput2, err := r.getServiceBindingRequest(namespacedName)
 	require.NoError(t, err)
 
 	require.Equal(t, BindingReady, sbrOutput2.Status.Conditions[0].Type)
@@ -305,13 +305,13 @@ func TestReconcilerGenericBinding(t *testing.T) {
 	_, err = fakeDynClient.Resource(secretsGVR).Namespace(updated.GetNamespace()).Update(&updated, metav1.UpdateOptions{})
 	require.NoError(t, err)
 	time.Sleep(1 * time.Second)
-	reconciler = &Reconciler{dynClient: fakeDynClient, RestMapper: testutils.BuildTestRESTMapper(), scheme: f.S}
-	reconciler.resourceWatcher = newFakeResourceWatcher(mapper)
-	res, err = reconciler.Reconcile(reconcileRequest())
+	r = &reconciler{dynClient: fakeDynClient, restMapper: testutils.BuildTestRESTMapper(), scheme: f.S}
+	r.resourceWatcher = newFakeResourceWatcher(mapper)
+	res, err = r.Reconcile(reconcileRequest())
 	require.NoError(t, err)
 	require.False(t, res.Requeue)
 
-	sbrOutput3, err := reconciler.getServiceBindingRequest(namespacedName)
+	sbrOutput3, err := r.getServiceBindingRequest(namespacedName)
 	require.NoError(t, err)
 	require.Equal(t, BindingReady, sbrOutput3.Status.Conditions[0].Type)
 	require.Equal(t, corev1.ConditionTrue, sbrOutput3.Status.Conditions[0].Status)
@@ -341,17 +341,17 @@ func TestReconcilerReconcileWithConflictingAppSelc(t *testing.T) {
 
 	fakeDynClient := f.FakeDynClient()
 	mapper := testutils.BuildTestRESTMapper()
-	reconciler := &Reconciler{dynClient: fakeDynClient, RestMapper: mapper, scheme: f.S}
-	reconciler.resourceWatcher = newFakeResourceWatcher(mapper)
+	r := &reconciler{dynClient: fakeDynClient, restMapper: mapper, scheme: f.S}
+	r.resourceWatcher = newFakeResourceWatcher(mapper)
 
 	t.Run("test-reconciler-reconcile-with-conflicting-application-selector", func(t *testing.T) {
 
-		res, err := reconciler.Reconcile(reconcileRequest())
+		res, err := r.Reconcile(reconcileRequest())
 		require.NoError(t, err)
 		require.False(t, res.Requeue)
 
 		namespacedName := types.NamespacedName{Namespace: reconcilerNs, Name: reconcilerName}
-		sbrOutput, err := reconciler.getServiceBindingRequest(namespacedName)
+		sbrOutput, err := r.getServiceBindingRequest(namespacedName)
 		require.NoError(t, err)
 
 		expectedStatus := v1alpha1.BoundApplication{
@@ -382,15 +382,15 @@ func TestEmptyApplicationSelector(t *testing.T) {
 
 	fakeDynClient := f.FakeDynClient()
 	mapper := testutils.BuildTestRESTMapper()
-	reconciler := &Reconciler{dynClient: fakeDynClient, RestMapper: mapper, scheme: f.S}
-	reconciler.resourceWatcher = newFakeResourceWatcher(mapper)
+	r := &reconciler{dynClient: fakeDynClient, restMapper: mapper, scheme: f.S}
+	r.resourceWatcher = newFakeResourceWatcher(mapper)
 
-	res, err := reconciler.Reconcile(reconcileRequest())
+	res, err := r.Reconcile(reconcileRequest())
 	require.NoError(t, err)
 	require.False(t, res.Requeue)
 
 	namespacedName := types.NamespacedName{Namespace: reconcilerNs, Name: reconcilerName}
-	sbrOutput, err := reconciler.getServiceBindingRequest(namespacedName)
+	sbrOutput, err := r.getServiceBindingRequest(namespacedName)
 	require.NoError(t, err)
 
 	require.Equal(t, BindingReady, sbrOutput.Status.Conditions[0].Type)
diff --git a/pkg/controller/servicebindingrequest/retriever_test.go b/pkg/controller/servicebindingrequest/retriever_test.go
index 70ca1a1d..38ecb146 100644
--- a/pkg/controller/servicebindingrequest/retriever_test.go
+++ b/pkg/controller/servicebindingrequest/retriever_test.go
@@ -2,22 +2,38 @@ package servicebindingrequest
 
 import (
 	"fmt"
+	"strings"
 	"testing"
 
 	"github.com/stretchr/testify/require"
-	v1 "k8s.io/api/core/v1"
+	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 	logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
 
 	"github.com/redhat-developer/service-binding-operator/test/mocks"
 )
 
-func TestRetriever(t *testing.T) {
+func toIndexTemplate(obj *unstructured.Unstructured, fieldPath string) string {
+	gvk := obj.GetObjectKind().GroupVersionKind()
+	name := obj.GetName()
+	parts := strings.Split(fieldPath, ".")
+	var newParts []string
+	for _, part := range parts {
+		newParts = append(newParts, fmt.Sprintf(`%q`, part))
+	}
+	indexArg := strings.Join(newParts, " ")
+	return fmt.Sprintf(
+		`{{ index . %q %q %q %q %s }}`, gvk.Version, gvk.Group, gvk.Kind, name, indexArg)
+}
+
+func TestRetrieverProcessServiceContexts(t *testing.T) {
+
 	logf.SetLogger(logf.ZapLogger(true))
 
 	ns := "testing"
-	backingServiceNs := "backing-servicec-ns"
+	backingServiceNs := "backing-service-ns"
 	crName := "db-testing"
+	crId := "db_testing"
 
 	f := mocks.NewFake(t, ns)
 	f.AddMockedUnstructuredCSV("csv")
@@ -26,47 +42,99 @@ func TestRetriever(t *testing.T) {
 	cr, err := mocks.UnstructuredDatabaseCRMock(backingServiceNs, crName)
 	require.NoError(t, err)
 
-	crInSameNamespace, err := mocks.UnstructuredDatabaseCRMock(ns, crName)
-	require.NoError(t, err)
+	fakeDynClient := f.FakeDynClient()
 
-	serviceCtxs := ServiceContextList{
+	type testCase struct {
+		dataMapping  []corev1.EnvVar
+		envVarPrefix string
+		expected     map[string][]byte
+		name         string
+		svcCtxs      serviceContextList
+	}
+
+	testCases := []testCase{
 		{
-			Service: cr,
+			name:         "access with index should return correct value",
+			envVarPrefix: "SERVICE_BINDING",
+			svcCtxs: serviceContextList{
+				{service: cr},
+			},
+			dataMapping: []corev1.EnvVar{
+				{Name: "SAME_NAMESPACE", Value: toIndexTemplate(cr, "metadata.name")},
+			},
+			expected: map[string][]byte{
+				"SERVICE_BINDING_SAME_NAMESPACE": []byte(cr.GetName()),
+			},
 		},
 		{
-			Service: crInSameNamespace,
+			name:         "direct access with apiVersion and kind should return correct value",
+			envVarPrefix: "SERVICE_BINDING",
+			svcCtxs: serviceContextList{
+				{service: cr},
+			},
+			dataMapping: []corev1.EnvVar{
+				{
+					Name:  "DIRECT_ACCESS",
+					Value: `{{ .v1alpha1.postgresql_baiju_dev.Database.db_testing.metadata.name }}`,
+				},
+			},
+			expected: map[string][]byte{
+				"SERVICE_BINDING_DIRECT_ACCESS": []byte(cr.GetName()),
+			},
+		},
+		{
+			name:         "direct access with declared id should return correct value",
+			envVarPrefix: "SERVICE_BINDING",
+			svcCtxs: serviceContextList{
+				{
+					service: cr,
+					id:      &crId,
+				},
+			},
+			dataMapping: []corev1.EnvVar{
+				{
+					Name:  "ID_ACCESS",
+					Value: `{{ .db_testing.metadata.name }}`,
+				},
+			},
+			expected: map[string][]byte{
+				"SERVICE_BINDING_ID_ACCESS": []byte(cr.GetName()),
+			},
+		},
+		{
+			name:         "direct access without declared id should return <no value>",
+			envVarPrefix: "SERVICE_BINDING",
+			svcCtxs: serviceContextList{
+				{
+					service: cr,
+				},
+			},
+			dataMapping: []corev1.EnvVar{
+				{
+					Name:  "ID_ACCESS",
+					Value: `{{ .db_testing.metadata.name }}`,
+				},
+			},
+			expected: map[string][]byte{
+				"SERVICE_BINDING_ID_ACCESS": []byte("<no value>"),
+			},
 		},
 	}
 
-	fakeDynClient := f.FakeDynClient()
-
-	toTmpl := func(obj *unstructured.Unstructured) string {
-		gvk := obj.GetObjectKind().GroupVersionKind()
-		name := obj.GetName()
-		return fmt.Sprintf(`{{ index . %q %q %q %q "metadata" "name" }}`, gvk.Version, gvk.Group, gvk.Kind, name)
+	for _, tc := range testCases {
+		t.Run(tc.name, func(t *testing.T) {
+			got, _, err := NewRetriever(fakeDynClient).ProcessServiceContexts(
+				tc.envVarPrefix, tc.svcCtxs, tc.dataMapping)
+			require.NoError(t, err)
+			require.Equal(t, tc.expected, got)
+		})
 	}
-
-	actual, _, err := NewRetriever(fakeDynClient).ProcessServiceContexts(
-		"SERVICE_BINDING",
-		serviceCtxs,
-		[]v1.EnvVar{
-			{Name: "SAME_NAMESPACE", Value: toTmpl(crInSameNamespace)},
-			{Name: "OTHER_NAMESPACE", Value: toTmpl(cr)},
-			{Name: "DIRECT_ACCESS", Value: `{{ .v1alpha1.postgresql_baiju_dev.Database.db_testing.metadata.name }}`},
-		},
-	)
-	require.NoError(t, err)
-	require.Equal(t, map[string][]byte{
-		"SERVICE_BINDING_SAME_NAMESPACE":  []byte(crInSameNamespace.GetName()),
-		"SERVICE_BINDING_OTHER_NAMESPACE": []byte(cr.GetName()),
-		"SERVICE_BINDING_DIRECT_ACCESS":   []byte(cr.GetName()),
-	}, actual)
 }
 
 func TestBuildServiceEnvVars(t *testing.T) {
 
 	type testCase struct {
-		ctx                *ServiceContext
+		ctx                *serviceContext
 		globalEnvVarPrefix string
 		expected           map[string]string
 	}
@@ -80,9 +148,9 @@ func TestBuildServiceEnvVars(t *testing.T) {
 	testCases := []testCase{
 		{
 			globalEnvVarPrefix: "",
-			ctx: &ServiceContext{
-				EnvVarPrefix: &emptyString,
-				EnvVars: map[string]interface{}{
+			ctx: &serviceContext{
+				envVarPrefix: &emptyString,
+				envVars: map[string]interface{}{
 					"apiKey": "my-secret-key",
 				},
 			},
@@ -92,9 +160,9 @@ func TestBuildServiceEnvVars(t *testing.T) {
 		},
 		{
 			globalEnvVarPrefix: "globalprefix",
-			ctx: &ServiceContext{
-				EnvVarPrefix: &emptyString,
-				EnvVars: map[string]interface{}{
+			ctx: &serviceContext{
+				envVarPrefix: &emptyString,
+				envVars: map[string]interface{}{
 					"apiKey": "my-secret-key",
 				},
 			},
@@ -104,9 +172,9 @@ func TestBuildServiceEnvVars(t *testing.T) {
 		},
 		{
 			globalEnvVarPrefix: "globalprefix",
-			ctx: &ServiceContext{
-				EnvVarPrefix: &serviceEnvVarPrefix,
-				EnvVars: map[string]interface{}{
+			ctx: &serviceContext{
+				envVarPrefix: &serviceEnvVarPrefix,
+				envVars: map[string]interface{}{
 					"apiKey": "my-secret-key",
 				},
 			},
@@ -116,10 +184,10 @@ func TestBuildServiceEnvVars(t *testing.T) {
 		},
 		{
 			globalEnvVarPrefix: "",
-			ctx: &ServiceContext{
-				Service:      cr,
-				EnvVarPrefix: nil,
-				EnvVars: map[string]interface{}{
+			ctx: &serviceContext{
+				service:      cr,
+				envVarPrefix: nil,
+				envVars: map[string]interface{}{
 					"apiKey": "my-secret-key",
 				},
 			},
@@ -129,9 +197,9 @@ func TestBuildServiceEnvVars(t *testing.T) {
 		},
 		{
 			globalEnvVarPrefix: "",
-			ctx: &ServiceContext{
-				EnvVarPrefix: &serviceEnvVarPrefix,
-				EnvVars: map[string]interface{}{
+			ctx: &serviceContext{
+				envVarPrefix: &serviceEnvVarPrefix,
+				envVars: map[string]interface{}{
 					"apiKey": "my-secret-key",
 				},
 			},
diff --git a/pkg/controller/servicebindingrequest/sbrcontroller_test.go b/pkg/controller/servicebindingrequest/sbrcontroller_test.go
index a290cd41..d49110f2 100644
--- a/pkg/controller/servicebindingrequest/sbrcontroller_test.go
+++ b/pkg/controller/servicebindingrequest/sbrcontroller_test.go
@@ -204,7 +204,7 @@ func (f *fakeController) Watch(src source.Source, eventhandler handler.EventHand
 
 func TestSBRController_ResourceWatcher(t *testing.T) {
 
-	controller := &SBRController{
+	controller := &sbrController{
 		RestMapper: testutils.BuildTestRESTMapper(),
 		logger:     log.NewLog("testSBRController"),
 	}
diff --git a/pkg/controller/servicebindingrequest/secret_test.go b/pkg/controller/servicebindingrequest/secret_test.go
index d1f780e9..8f579eb0 100644
--- a/pkg/controller/servicebindingrequest/secret_test.go
+++ b/pkg/controller/servicebindingrequest/secret_test.go
@@ -22,7 +22,7 @@ func TestSecretNew(t *testing.T) {
 
 	data := map[string][]byte{"key": []byte("value")}
 
-	s := NewSecret(
+	s := newSecret(
 		f.FakeDynClient(),
 		ns,
 		name,
@@ -35,18 +35,18 @@ func TestSecretNew(t *testing.T) {
 	})
 
 	t.Run("Delete", func(t *testing.T) {
-		err := s.Delete()
+		err := s.delete()
 		assert.NoError(t, err)
 	})
 
 	t.Run("Commit", func(t *testing.T) {
-		u, err := s.Commit(data)
+		u, err := s.commit(data)
 		assert.NoError(t, err)
 		assertSecretNamespacedName(t, u, ns, name)
 	})
 
 	t.Run("Get", func(t *testing.T) {
-		u, found, err := s.Get()
+		u, found, err := s.get()
 		assert.NoError(t, err)
 		assert.True(t, found)
 		assertSecretNamespacedName(t, u, ns, name)
diff --git a/pkg/controller/servicebindingrequest/service_test.go b/pkg/controller/servicebindingrequest/service_test.go
index c4ee1879..a2b9d951 100644
--- a/pkg/controller/servicebindingrequest/service_test.go
+++ b/pkg/controller/servicebindingrequest/service_test.go
@@ -28,7 +28,7 @@ func TestFindService(t *testing.T) {
 		cr, err := findService(
 			f.FakeDynClient(), "", db.GetObjectKind().GroupVersionKind(), resourceRef)
 		require.Error(t, err)
-		require.Equal(t, err, ErrUnspecifiedBackingServiceNamespace)
+		require.Equal(t, err, errUnspecifiedBackingServiceNamespace)
 		require.Nil(t, cr)
 	})
 
diff --git a/pkg/controller/servicebindingrequest/servicebinder_test.go b/pkg/controller/servicebindingrequest/servicebinder_test.go
index bf6104c9..64fe9ba1 100644
--- a/pkg/controller/servicebindingrequest/servicebinder_test.go
+++ b/pkg/controller/servicebindingrequest/servicebinder_test.go
@@ -57,7 +57,7 @@ func TestServiceBinder_Bind(t *testing.T) {
 	// args are the test arguments
 	type args struct {
 		// options inform the test how to build the ServiceBinder.
-		options *ServiceBinderOptions
+		options *serviceBinderOptions
 		// wantBuildErr informs the test an error is wanted at build phase.
 		wantBuildErr error
 		// wantErr informs the test an error is wanted at ServiceBinder's bind phase.
@@ -76,7 +76,7 @@ func TestServiceBinder_Bind(t *testing.T) {
 	assertBind := func(args args) func(*testing.T) {
 		return func(t *testing.T) {
 			ctx := context.TODO()
-			sb, err := BuildServiceBinder(ctx, args.options)
+			sb, err := buildServiceBinder(ctx, args.options)
 			if args.wantBuildErr != nil {
 				require.EqualError(t, err, args.wantBuildErr.Error())
 				return
@@ -84,7 +84,7 @@ func TestServiceBinder_Bind(t *testing.T) {
 				require.NoError(t, err)
 			}
 
-			res, err := sb.Bind()
+			res, err := sb.bind()
 
 			if args.wantErr != nil {
 				require.EqualError(t, err, args.wantErr.Error())
@@ -97,7 +97,7 @@ func TestServiceBinder_Bind(t *testing.T) {
 
 			// extract actions from the dynamic client, regardless of the bind status; it is expected
 			// that failures also issue updates for ServiceBindingRequest objects
-			dynClient, ok := sb.DynClient.(*fake.FakeDynamicClient)
+			dynClient, ok := sb.dynClient.(*fake.FakeDynamicClient)
 			require.True(t, ok)
 			actions := dynClient.Actions()
 			require.NotNil(t, actions)
@@ -105,7 +105,7 @@ func TestServiceBinder_Bind(t *testing.T) {
 			if len(args.wantConditions) > 0 {
 				// proceed to find whether conditions match wanted conditions
 				for _, c := range args.wantConditions {
-					for _, cond := range sb.SBR.Status.Conditions {
+					for _, cond := range sb.sbr.Status.Conditions {
 						expected := conditionsv1.Condition{}
 						got := conditionsv1.Condition{}
 						if len(c.Type) > 0 {
@@ -396,16 +396,16 @@ func TestServiceBinder_Bind(t *testing.T) {
 	logger := log.NewLog("service-binder")
 
 	t.Run("single bind golden path", assertBind(args{
-		options: &ServiceBinderOptions{
-			Logger:                 logger,
-			DynClient:              f.FakeDynClient(),
-			DetectBindingResources: false,
-			SBR:                    sbrSingleService,
-			Binding: &Binding{
-				EnvVars:    map[string][]byte{},
-				VolumeKeys: []string{},
+		options: &serviceBinderOptions{
+			logger:                 logger,
+			dynClient:              f.FakeDynClient(),
+			detectBindingResources: false,
+			sbr:                    sbrSingleService,
+			binding: &binding{
+				envVars:    map[string][]byte{},
+				volumeKeys: []string{},
 			},
-			RESTMapper: testutils.BuildTestRESTMapper(),
+			restMapper: testutils.BuildTestRESTMapper(),
 		},
 		wantConditions: []wantedCondition{
 			{
@@ -433,18 +433,18 @@ func TestServiceBinder_Bind(t *testing.T) {
 	}))
 
 	t.Run("single bind golden path and custom env vars", assertBind(args{
-		options: &ServiceBinderOptions{
-			Logger:                 logger,
-			DynClient:              f.FakeDynClient(),
-			DetectBindingResources: false,
-			SBR:                    sbrSingleServiceWithCustomEnvVar,
-			Binding: &Binding{
-				EnvVars: map[string][]byte{
+		options: &serviceBinderOptions{
+			logger:                 logger,
+			dynClient:              f.FakeDynClient(),
+			detectBindingResources: false,
+			sbr:                    sbrSingleServiceWithCustomEnvVar,
+			binding: &binding{
+				envVars: map[string][]byte{
 					"MY_DB_NAME": []byte("db1"),
 				},
-				VolumeKeys: []string{},
+				volumeKeys: []string{},
 			},
-			RESTMapper: testutils.BuildTestRESTMapper(),
+			restMapper: testutils.BuildTestRESTMapper(),
 		},
 		wantConditions: []wantedCondition{
 			{
@@ -475,16 +475,16 @@ func TestServiceBinder_Bind(t *testing.T) {
 	}))
 
 	t.Run("bind with binding resource detection", assertBind(args{
-		options: &ServiceBinderOptions{
-			Logger:                 logger,
-			DynClient:              f.FakeDynClient(),
-			DetectBindingResources: true,
-			SBR:                    sbrSingleService,
-			Binding: &Binding{
-				EnvVars:    map[string][]byte{},
-				VolumeKeys: []string{},
+		options: &serviceBinderOptions{
+			logger:                 logger,
+			dynClient:              f.FakeDynClient(),
+			detectBindingResources: true,
+			sbr:                    sbrSingleService,
+			binding: &binding{
+				envVars:    map[string][]byte{},
+				volumeKeys: []string{},
 			},
-			RESTMapper: testutils.BuildTestRESTMapper(),
+			restMapper: testutils.BuildTestRESTMapper(),
 		},
 		wantConditions: []wantedCondition{
 			{
@@ -495,51 +495,51 @@ func TestServiceBinder_Bind(t *testing.T) {
 	}))
 
 	t.Run("empty applicationSelector", assertBind(args{
-		options: &ServiceBinderOptions{
-			Logger:                 logger,
-			DynClient:              f.FakeDynClient(),
-			DetectBindingResources: true,
-			SBR:                    sbrEmptyAppSelector,
-			Binding: &Binding{
-				EnvVars:    map[string][]byte{},
-				VolumeKeys: []string{},
+		options: &serviceBinderOptions{
+			logger:                 logger,
+			dynClient:              f.FakeDynClient(),
+			detectBindingResources: true,
+			sbr:                    sbrEmptyAppSelector,
+			binding: &binding{
+				envVars:    map[string][]byte{},
+				volumeKeys: []string{},
 			},
-			RESTMapper: testutils.BuildTestRESTMapper(),
+			restMapper: testutils.BuildTestRESTMapper(),
 		},
-		wantErr: EmptyApplicationSelectorErr,
+		wantErr: emptyApplicationSelectorErr,
 		wantConditions: []wantedCondition{
 			{
 				Type:    BindingReady,
 				Status:  corev1.ConditionFalse,
-				Reason:  BindingFail,
-				Message: EmptyApplicationSelectorErr.Error(),
+				Reason:  bindingFail,
+				Message: emptyApplicationSelectorErr.Error(),
 			},
 		},
 	}))
 
 	// Missing SBR returns an InvalidOptionsErr
 	t.Run("bind missing SBR", assertBind(args{
-		options: &ServiceBinderOptions{
-			Logger:                 logger,
-			DynClient:              f.FakeDynClient(),
-			DetectBindingResources: false,
-			SBR:                    nil,
-			RESTMapper:             testutils.BuildTestRESTMapper(),
+		options: &serviceBinderOptions{
+			logger:                 logger,
+			dynClient:              f.FakeDynClient(),
+			detectBindingResources: false,
+			sbr:                    nil,
+			restMapper:             testutils.BuildTestRESTMapper(),
 		},
-		wantBuildErr: ErrInvalidServiceBinderOptions("SBR"),
+		wantBuildErr: errInvalidServiceBinderOptions("SBR"),
 	}))
 
 	t.Run("multiple services bind golden path", assertBind(args{
-		options: &ServiceBinderOptions{
-			Logger:                 logger,
-			DynClient:              f.FakeDynClient(),
-			DetectBindingResources: false,
-			SBR:                    sbrMultipleServices,
-			Binding: &Binding{
-				EnvVars:    map[string][]byte{},
-				VolumeKeys: []string{},
+		options: &serviceBinderOptions{
+			logger:                 logger,
+			dynClient:              f.FakeDynClient(),
+			detectBindingResources: false,
+			sbr:                    sbrMultipleServices,
+			binding: &binding{
+				envVars:    map[string][]byte{},
+				volumeKeys: []string{},
 			},
-			RESTMapper: testutils.BuildTestRESTMapper(),
+			restMapper: testutils.BuildTestRESTMapper(),
 		},
 		wantConditions: []wantedCondition{
 			{
diff --git a/pkg/controller/servicebindingrequest/servicecontext_test.go b/pkg/controller/servicebindingrequest/servicecontext_test.go
index 2c9e97c9..dba4586c 100644
--- a/pkg/controller/servicebindingrequest/servicecontext_test.go
+++ b/pkg/controller/servicebindingrequest/servicecontext_test.go
@@ -123,7 +123,7 @@ func TestFindOwnedResourcesCtxs_ConfigMap(t *testing.T) {
 				"user":     "user",
 			},
 		}
-		require.Equal(t, expected, got[0].EnvVars)
+		require.Equal(t, expected, got[0].envVars)
 
 	})
 }