diff --git a/controller/interfaces/plugin/plugin.go b/controller/interfaces/plugin/plugin.go
index 8e065e5f43c8c46db46a2bcfee69cf664ae2ada9..6835b7e738b764149bac026232a0fd4d35d43208 100644
--- a/controller/interfaces/plugin/plugin.go
+++ b/controller/interfaces/plugin/plugin.go
@@ -1,6 +1,7 @@
 package plugin
 
 import (
+	"encoding/json"
 	"fmt"
 	"net"
 	"os"
@@ -149,6 +150,29 @@ func (lp *LoadedPlugin) UnmarshalBSON(data []byte) error {
 	return nil
 }
 
+func (lp *LoadedPlugin) UnmarshalJSON(data []byte) error {
+	loadedPluginHelper := new(LoadedPluginHelper)
+	if err := json.Unmarshal(data, loadedPluginHelper); err != nil {
+		return err
+	}
+
+	lp.ID = loadedPluginHelper.ID
+	lp.Manifest = loadedPluginHelper.Manifest
+	lp.State = loadedPluginHelper.State
+	lp.ReattachConfig = hcplugin.ReattachConfig{
+		Protocol:        hcplugin.Protocol(loadedPluginHelper.ReattachConfig.Protocol),
+		ProtocolVersion: loadedPluginHelper.ReattachConfig.ProtocolVersion,
+		Addr: &net.UnixAddr{
+			Name: loadedPluginHelper.ReattachConfig.Addr.Name,
+			Net:  loadedPluginHelper.ReattachConfig.Addr.Net,
+		},
+		Pid:  loadedPluginHelper.ReattachConfig.Pid,
+		Test: loadedPluginHelper.ReattachConfig.Test,
+	}
+
+	return nil
+}
+
 type LoadedPluginHelper struct {
 	ID             string               `json:"id" bson:"_id"`
 	Manifest       Manifest             `json:"manifest" bson:"manifest"`