diff --git a/go/dmi/hw_management_service.pb.go b/go/dmi/hw_management_service.pb.go
index 978f2bd..ef980fa 100644
--- a/go/dmi/hw_management_service.pb.go
+++ b/go/dmi/hw_management_service.pb.go
@@ -336,6 +336,92 @@
 	return nil
 }
 
+type StopManagingDeviceRequest struct {
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StopManagingDeviceRequest) Reset()         { *m = StopManagingDeviceRequest{} }
+func (m *StopManagingDeviceRequest) String() string { return proto.CompactTextString(m) }
+func (*StopManagingDeviceRequest) ProtoMessage()    {}
+func (*StopManagingDeviceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{6}
+}
+
+func (m *StopManagingDeviceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StopManagingDeviceRequest.Unmarshal(m, b)
+}
+func (m *StopManagingDeviceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StopManagingDeviceRequest.Marshal(b, m, deterministic)
+}
+func (m *StopManagingDeviceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StopManagingDeviceRequest.Merge(m, src)
+}
+func (m *StopManagingDeviceRequest) XXX_Size() int {
+	return xxx_messageInfo_StopManagingDeviceRequest.Size(m)
+}
+func (m *StopManagingDeviceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_StopManagingDeviceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StopManagingDeviceRequest proto.InternalMessageInfo
+
+func (m *StopManagingDeviceRequest) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+type StopManagingDeviceResponse struct {
+	Status               Status   `protobuf:"varint,1,opt,name=status,proto3,enum=dmi.Status" json:"status,omitempty"`
+	Reason               Reason   `protobuf:"varint,2,opt,name=reason,proto3,enum=dmi.Reason" json:"reason,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StopManagingDeviceResponse) Reset()         { *m = StopManagingDeviceResponse{} }
+func (m *StopManagingDeviceResponse) String() string { return proto.CompactTextString(m) }
+func (*StopManagingDeviceResponse) ProtoMessage()    {}
+func (*StopManagingDeviceResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{7}
+}
+
+func (m *StopManagingDeviceResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StopManagingDeviceResponse.Unmarshal(m, b)
+}
+func (m *StopManagingDeviceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StopManagingDeviceResponse.Marshal(b, m, deterministic)
+}
+func (m *StopManagingDeviceResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StopManagingDeviceResponse.Merge(m, src)
+}
+func (m *StopManagingDeviceResponse) XXX_Size() int {
+	return xxx_messageInfo_StopManagingDeviceResponse.Size(m)
+}
+func (m *StopManagingDeviceResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_StopManagingDeviceResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StopManagingDeviceResponse proto.InternalMessageInfo
+
+func (m *StopManagingDeviceResponse) GetStatus() Status {
+	if m != nil {
+		return m.Status
+	}
+	return Status_UNDEFINED_STATUS
+}
+
+func (m *StopManagingDeviceResponse) GetReason() Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return Reason_UNDEFINED_REASON
+}
+
 func init() {
 	proto.RegisterType((*PhysicalInventoryRequest)(nil), "dmi.PhysicalInventoryRequest")
 	proto.RegisterType((*PhysicalInventoryResponse)(nil), "dmi.PhysicalInventoryResponse")
@@ -343,43 +429,47 @@
 	proto.RegisterType((*HWComponentInfoSetRequest)(nil), "dmi.HWComponentInfoSetRequest")
 	proto.RegisterType((*HWComponentInfoSetResponse)(nil), "dmi.HWComponentInfoSetResponse")
 	proto.RegisterType((*StartManagingDeviceResponse)(nil), "dmi.StartManagingDeviceResponse")
+	proto.RegisterType((*StopManagingDeviceRequest)(nil), "dmi.StopManagingDeviceRequest")
+	proto.RegisterType((*StopManagingDeviceResponse)(nil), "dmi.StopManagingDeviceResponse")
 }
 
 func init() { proto.RegisterFile("dmi/hw_management_service.proto", fileDescriptor_eae902e73066286d) }
 
 var fileDescriptor_eae902e73066286d = []byte{
-	// 487 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x54, 0xd1, 0x8a, 0xd3, 0x40,
-	0x14, 0x25, 0xad, 0xac, 0xf4, 0xd6, 0x2d, 0x38, 0xfa, 0x90, 0x46, 0x74, 0x97, 0x88, 0x20, 0xca,
-	0x36, 0xa5, 0xfb, 0x24, 0xbe, 0xa9, 0x6c, 0xbb, 0x0f, 0x5d, 0x24, 0x61, 0x29, 0xf8, 0x52, 0xa6,
-	0x99, 0xdb, 0x74, 0x60, 0x67, 0xa6, 0x66, 0x26, 0x5d, 0xf6, 0x37, 0xf4, 0x07, 0xfc, 0x28, 0x3f,
-	0xc2, 0xcf, 0x90, 0xcc, 0x6c, 0xd3, 0xd2, 0x6d, 0x44, 0x44, 0xc1, 0xb7, 0xe4, 0x9e, 0x73, 0x0f,
-	0xe7, 0xce, 0x9d, 0x33, 0x70, 0xc4, 0x04, 0x8f, 0x16, 0xd7, 0x53, 0x41, 0x25, 0xcd, 0x50, 0xa0,
-	0x34, 0x53, 0x8d, 0xf9, 0x8a, 0xa7, 0xd8, 0x5b, 0xe6, 0xca, 0x28, 0xd2, 0x64, 0x82, 0x07, 0x0f,
-	0x4b, 0x56, 0xaa, 0x84, 0x50, 0x52, 0xbb, 0x7a, 0xf0, 0xc0, 0x35, 0xba, 0xbf, 0xf0, 0x0c, 0xfc,
-	0x8f, 0x8b, 0x1b, 0xcd, 0x53, 0x7a, 0x75, 0x2e, 0x57, 0x28, 0x8d, 0xca, 0x6f, 0x62, 0xfc, 0x5c,
-	0xa0, 0x36, 0xe4, 0x15, 0xb4, 0x19, 0x96, 0x8a, 0xd3, 0xa2, 0xe0, 0xcc, 0xf7, 0x8e, 0xbd, 0x97,
-	0xed, 0x41, 0xab, 0xc7, 0x04, 0xef, 0x5d, 0x16, 0x9c, 0xc5, 0xe0, 0xd0, 0xf2, 0x3b, 0xfc, 0xe2,
-	0x41, 0x77, 0x8f, 0x90, 0x5e, 0x2a, 0xa9, 0x91, 0x3c, 0x87, 0x03, 0x6d, 0xa8, 0x29, 0xb4, 0x15,
-	0xe9, 0x0c, 0xda, 0x56, 0x24, 0xb1, 0xa5, 0xf8, 0x16, 0x2a, 0x49, 0x39, 0x52, 0xad, 0xa4, 0xdf,
-	0xd8, 0x22, 0xc5, 0xb6, 0x14, 0xdf, 0x42, 0xe4, 0x35, 0xb4, 0xf8, 0x5a, 0xde, 0x6f, 0x5a, 0x47,
-	0x87, 0x96, 0x37, 0xa2, 0x39, 0xbb, 0xa6, 0x39, 0xc6, 0x1b, 0x3c, 0xfc, 0xe6, 0x41, 0x77, 0x34,
-	0x79, 0xaf, 0xc4, 0x52, 0x49, 0x94, 0xe6, 0x5c, 0xce, 0xd5, 0x10, 0xcd, 0x1f, 0x8c, 0x47, 0xfa,
-	0xd0, 0x49, 0xd7, 0x32, 0x8e, 0xde, 0xd8, 0xa5, 0x1f, 0x56, 0x04, 0xdb, 0xf1, 0x62, 0xbb, 0x43,
-	0x52, 0x81, 0xd6, 0x6d, 0x6b, 0x8b, 0x76, 0x41, 0x05, 0x86, 0xdf, 0xef, 0x5a, 0x4c, 0xfe, 0x2f,
-	0x8b, 0x64, 0x00, 0xf7, 0xd3, 0x05, 0x95, 0x19, 0x6a, 0xff, 0x9e, 0x55, 0xf4, 0xad, 0xe2, 0x58,
-	0x31, 0x3e, 0xe7, 0x74, 0x76, 0x85, 0x95, 0xfb, 0x78, 0x4d, 0x0c, 0xe7, 0x10, 0xec, 0x9b, 0xea,
-	0x6f, 0x5f, 0x87, 0xf0, 0xab, 0x07, 0x4f, 0x12, 0x43, 0x73, 0x33, 0x2e, 0x63, 0xc0, 0x65, 0xf6,
-	0xc1, 0x1e, 0xc8, 0x3f, 0xb8, 0x78, 0x3b, 0xab, 0x68, 0xfe, 0x62, 0x15, 0x83, 0x1f, 0x0d, 0xe8,
-	0x5e, 0x50, 0xc3, 0x57, 0x38, 0x9a, 0x8c, 0xab, 0x7c, 0x26, 0x2e, 0x9e, 0x24, 0x81, 0x47, 0x7b,
-	0x2c, 0x93, 0xda, 0x53, 0x0d, 0x8e, 0xd7, 0xa6, 0xeb, 0xc6, 0xec, 0x7b, 0x64, 0x02, 0x8f, 0x87,
-	0x68, 0xee, 0x24, 0x90, 0x3c, 0xb5, 0xbd, 0x75, 0x11, 0x0f, 0x9e, 0xd5, 0xc1, 0x95, 0xf0, 0x19,
-	0x90, 0x21, 0x9a, 0x9d, 0x65, 0x12, 0xd7, 0x57, 0x9b, 0xad, 0xa0, 0x63, 0xf1, 0x0a, 0xed, 0x7b,
-	0xe4, 0x12, 0x48, 0xf2, 0x9b, 0x3a, 0x9b, 0x00, 0x04, 0x47, 0xb5, 0xb8, 0x33, 0xf8, 0xee, 0xed,
-	0xa7, 0x37, 0x19, 0x37, 0x8b, 0x62, 0xd6, 0x4b, 0x95, 0x88, 0xd4, 0x12, 0x65, 0xaa, 0x72, 0x16,
-	0xb9, 0x65, 0x9c, 0x6c, 0x1e, 0xc7, 0x13, 0x2e, 0x0d, 0xe6, 0x73, 0x9a, 0x62, 0xb4, 0x3a, 0x8d,
-	0x32, 0x15, 0x31, 0xc1, 0x67, 0x07, 0xf6, 0x0d, 0x3c, 0xfd, 0x19, 0x00, 0x00, 0xff, 0xff, 0xd3,
-	0x67, 0x56, 0xf0, 0x4c, 0x05, 0x00, 0x00,
+	// 527 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0xd1, 0x6a, 0x13, 0x41,
+	0x14, 0x65, 0x9b, 0x52, 0xc9, 0x8d, 0x0d, 0x38, 0xfa, 0xb0, 0x59, 0xb1, 0x2d, 0x2b, 0x82, 0x28,
+	0xcd, 0x96, 0xf4, 0x49, 0x7c, 0x53, 0x69, 0xd2, 0x87, 0x14, 0xd9, 0xa5, 0x04, 0x7c, 0x09, 0x93,
+	0x9d, 0x9b, 0x64, 0xa0, 0x33, 0xb3, 0xee, 0xcc, 0xa6, 0xf4, 0x37, 0xf4, 0x07, 0xfc, 0x13, 0x7f,
+	0xc2, 0x0f, 0x92, 0x9d, 0xdd, 0x6c, 0x42, 0x92, 0x15, 0x91, 0x0a, 0x7d, 0xdb, 0xcc, 0x39, 0xf7,
+	0x70, 0xee, 0x99, 0xb9, 0x37, 0x70, 0xcc, 0x04, 0x0f, 0xe6, 0xb7, 0x63, 0x41, 0x25, 0x9d, 0xa1,
+	0x40, 0x69, 0xc6, 0x1a, 0xd3, 0x05, 0x8f, 0xb1, 0x9b, 0xa4, 0xca, 0x28, 0xd2, 0x60, 0x82, 0x7b,
+	0x4f, 0x72, 0x56, 0xac, 0x84, 0x50, 0x52, 0x17, 0xe7, 0xde, 0xe3, 0xa2, 0xb0, 0xf8, 0xe5, 0x5f,
+	0x80, 0xfb, 0x79, 0x7e, 0xa7, 0x79, 0x4c, 0x6f, 0x2e, 0xe5, 0x02, 0xa5, 0x51, 0xe9, 0x5d, 0x88,
+	0x5f, 0x33, 0xd4, 0x86, 0xbc, 0x81, 0x16, 0xc3, 0x5c, 0x71, 0x9c, 0x65, 0x9c, 0xb9, 0xce, 0x89,
+	0xf3, 0xba, 0xd5, 0x6b, 0x76, 0x99, 0xe0, 0xdd, 0xeb, 0x8c, 0xb3, 0x10, 0x0a, 0x34, 0xff, 0xf6,
+	0xbf, 0x39, 0xd0, 0xd9, 0x21, 0xa4, 0x13, 0x25, 0x35, 0x92, 0x97, 0x70, 0xa0, 0x0d, 0x35, 0x99,
+	0xb6, 0x22, 0xed, 0x5e, 0xcb, 0x8a, 0x44, 0xf6, 0x28, 0x2c, 0xa1, 0x9c, 0x94, 0x22, 0xd5, 0x4a,
+	0xba, 0x7b, 0x6b, 0xa4, 0xd0, 0x1e, 0x85, 0x25, 0x44, 0xde, 0x42, 0x93, 0x2f, 0xe5, 0xdd, 0x86,
+	0x75, 0x74, 0x68, 0x79, 0x03, 0x9a, 0xb2, 0x5b, 0x9a, 0x62, 0xb8, 0xc2, 0xfd, 0x1f, 0x0e, 0x74,
+	0x06, 0xa3, 0x8f, 0x4a, 0x24, 0x4a, 0xa2, 0x34, 0x97, 0x72, 0xaa, 0xfa, 0x68, 0xfe, 0xa1, 0x3d,
+	0x72, 0x06, 0xed, 0x78, 0x29, 0x53, 0xd0, 0xf7, 0x36, 0xe9, 0x87, 0x15, 0xc1, 0x56, 0xbc, 0x5a,
+	0xaf, 0x90, 0x54, 0xa0, 0x75, 0xdb, 0x5c, 0xa3, 0x5d, 0x51, 0x81, 0xfe, 0xaf, 0x6d, 0x8b, 0xd1,
+	0xc3, 0xb2, 0x48, 0x7a, 0xf0, 0x28, 0x9e, 0x53, 0x39, 0x43, 0xed, 0xee, 0x5b, 0x45, 0xd7, 0x2a,
+	0x0e, 0x15, 0xe3, 0x53, 0x4e, 0x27, 0x37, 0x58, 0xb9, 0x0f, 0x97, 0x44, 0x7f, 0x0a, 0xde, 0xae,
+	0xae, 0xee, 0xfb, 0x39, 0xf8, 0xdf, 0x1d, 0x78, 0x1e, 0x19, 0x9a, 0x9a, 0x61, 0x3e, 0x06, 0x5c,
+	0xce, 0x3e, 0xd9, 0x40, 0xfe, 0xc3, 0xc3, 0xdb, 0xb8, 0x8a, 0xc6, 0x9f, 0x86, 0x21, 0x80, 0x4e,
+	0x64, 0x54, 0xb2, 0xe9, 0xa9, 0xb8, 0x53, 0x02, 0xfb, 0x36, 0x6b, 0xc7, 0x66, 0x6d, 0xbf, 0xf3,
+	0xb8, 0x76, 0x15, 0xdc, 0x77, 0x13, 0xbd, 0x9f, 0x0d, 0xe8, 0x5c, 0x51, 0xc3, 0x17, 0x38, 0x18,
+	0x0d, 0xab, 0xc5, 0x11, 0x15, 0x7b, 0x83, 0x44, 0xf0, 0x74, 0x47, 0x96, 0xa4, 0xf6, 0xba, 0xbd,
+	0x93, 0xa5, 0x91, 0xba, 0xfc, 0xcf, 0x1c, 0x72, 0x0d, 0x64, 0xbb, 0x35, 0x72, 0x54, 0x56, 0xd6,
+	0x84, 0xe4, 0x1d, 0xd7, 0xe2, 0x65, 0x26, 0x23, 0x78, 0xd6, 0x47, 0xb3, 0xb5, 0x71, 0xc8, 0x0b,
+	0x5b, 0x58, 0xb7, 0xd2, 0xbc, 0xa3, 0x3a, 0xb8, 0xf2, 0x7b, 0x01, 0xa4, 0x8f, 0x66, 0xe3, 0xf1,
+	0x96, 0x7e, 0x6b, 0x77, 0x89, 0xd7, 0xb6, 0x78, 0x85, 0x96, 0x7d, 0xff, 0xa5, 0xce, 0x6a, 0xe0,
+	0xcb, 0xbe, 0xeb, 0x47, 0xe7, 0xc3, 0xfb, 0x2f, 0xef, 0x66, 0xdc, 0xcc, 0xb3, 0x49, 0x37, 0x56,
+	0x22, 0x50, 0x09, 0xca, 0x58, 0xa5, 0x2c, 0x28, 0x1e, 0xdf, 0xe9, 0xea, 0xcf, 0xe0, 0x94, 0x4b,
+	0x83, 0xe9, 0x94, 0xc6, 0x18, 0x2c, 0xce, 0x83, 0x99, 0x0a, 0x98, 0xe0, 0x93, 0x03, 0xbb, 0xf3,
+	0xcf, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x47, 0xf4, 0xba, 0x3c, 0x06, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -404,6 +494,8 @@
 	// asset_id = Optional;
 	// uri = IP Address of the Hardware;
 	StartManagingDevice(ctx context.Context, in *ModifiableComponent, opts ...grpc.CallOption) (NativeHWManagementService_StartManagingDeviceClient, error)
+	// Stop management of a device and clean up any context and caches for that device
+	StopManagingDevice(ctx context.Context, in *StopManagingDeviceRequest, opts ...grpc.CallOption) (*StopManagingDeviceResponse, error)
 	// Get the HW inventory details of the Device
 	GetPhysicalInventory(ctx context.Context, in *PhysicalInventoryRequest, opts ...grpc.CallOption) (NativeHWManagementService_GetPhysicalInventoryClient, error)
 	// Get the details of a particular HW component
@@ -452,6 +544,15 @@
 	return m, nil
 }
 
+func (c *nativeHWManagementServiceClient) StopManagingDevice(ctx context.Context, in *StopManagingDeviceRequest, opts ...grpc.CallOption) (*StopManagingDeviceResponse, error) {
+	out := new(StopManagingDeviceResponse)
+	err := c.cc.Invoke(ctx, "/dmi.NativeHWManagementService/StopManagingDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *nativeHWManagementServiceClient) GetPhysicalInventory(ctx context.Context, in *PhysicalInventoryRequest, opts ...grpc.CallOption) (NativeHWManagementService_GetPhysicalInventoryClient, error) {
 	stream, err := c.cc.NewStream(ctx, &_NativeHWManagementService_serviceDesc.Streams[1], "/dmi.NativeHWManagementService/GetPhysicalInventory", opts...)
 	if err != nil {
@@ -537,6 +638,8 @@
 	// asset_id = Optional;
 	// uri = IP Address of the Hardware;
 	StartManagingDevice(*ModifiableComponent, NativeHWManagementService_StartManagingDeviceServer) error
+	// Stop management of a device and clean up any context and caches for that device
+	StopManagingDevice(context.Context, *StopManagingDeviceRequest) (*StopManagingDeviceResponse, error)
 	// Get the HW inventory details of the Device
 	GetPhysicalInventory(*PhysicalInventoryRequest, NativeHWManagementService_GetPhysicalInventoryServer) error
 	// Get the details of a particular HW component
@@ -570,6 +673,24 @@
 	return x.ServerStream.SendMsg(m)
 }
 
+func _NativeHWManagementService_StopManagingDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(StopManagingDeviceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NativeHWManagementServiceServer).StopManagingDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/dmi.NativeHWManagementService/StopManagingDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NativeHWManagementServiceServer).StopManagingDevice(ctx, req.(*StopManagingDeviceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _NativeHWManagementService_GetPhysicalInventory_Handler(srv interface{}, stream grpc.ServerStream) error {
 	m := new(PhysicalInventoryRequest)
 	if err := stream.RecvMsg(m); err != nil {
@@ -635,6 +756,10 @@
 	HandlerType: (*NativeHWManagementServiceServer)(nil),
 	Methods: []grpc.MethodDesc{
 		{
+			MethodName: "StopManagingDevice",
+			Handler:    _NativeHWManagementService_StopManagingDevice_Handler,
+		},
+		{
 			MethodName: "SetHWComponentInfo",
 			Handler:    _NativeHWManagementService_SetHWComponentInfo_Handler,
 		},
