diff --git a/internal/pkg/holder/doc.go b/internal/pkg/holder/doc.go
new file mode 100644
index 0000000..0564693
--- /dev/null
+++ b/internal/pkg/holder/doc.go
@@ -0,0 +1,32 @@
+/*
+ *   Copyright 2020-present Open Networking Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+// The implementation of the open flow agent (vpagent) uses a GRPC connection
+// to VOLTHA accross several implementaton packages including the vpagent and
+// openflow packages. This GRPC connection is shared through packages and type
+// instances via injection.
+//
+// As the vpagent executes within a micro-service environment it is
+// possible that the GRPC connection is reset (re-established). When the connection
+// is re-established, because injection is used, the new value needs to be
+// re-injected across the implementation.
+//
+// To help simply the re-injection or value change scenario a holder for the
+// GRPC connection is established so that the reference to the holder can
+// stay [sic] consistant over the lifetime of the vpagent while the underlying
+// GRPC connection can change without walking the entire runtime structure.
+
+package holder
diff --git a/internal/pkg/holder/holder.go b/internal/pkg/holder/holder.go
new file mode 100644
index 0000000..95c1483
--- /dev/null
+++ b/internal/pkg/holder/holder.go
@@ -0,0 +1,56 @@
+/*
+ *   Copyright 2020-present Open Networking Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package holder
+
+import (
+	"sync"
+
+	"github.com/opencord/voltha-protos/v5/go/voltha"
+)
+
+// VolthaServiceClientHolder provides a consistent (voluntarily unmutable) reference
+// point for a mutable value that represents a GRPC service interface to
+// VOLTHA
+type VolthaServiceClientHolder struct {
+	mutex           sync.RWMutex
+	volthaSvcClient voltha.VolthaServiceClient
+}
+
+// VolthaServiceClientReference structure
+type VolthaServiceClientReference struct {
+}
+
+// Clear sets the held value to nil (not set)
+func (h *VolthaServiceClientHolder) Clear() {
+	h.mutex.Lock()
+	defer h.mutex.Unlock()
+	h.volthaSvcClient = nil
+}
+
+// Set assigns the value being held to the specified value
+func (h *VolthaServiceClientHolder) Set(client voltha.VolthaServiceClient) {
+	h.mutex.Lock()
+	defer h.mutex.Unlock()
+	h.volthaSvcClient = client
+}
+
+// Get returns the currently held value
+func (h *VolthaServiceClientHolder) Get() voltha.VolthaServiceClient {
+	h.mutex.RLock()
+	defer h.mutex.RUnlock()
+	return h.volthaSvcClient
+}
