diff --git a/tlbmc/entity.proto b/tlbmc/entity.proto
new file mode 100644
index 0000000..0275823
--- /dev/null
+++ b/tlbmc/entity.proto
@@ -0,0 +1,31 @@
+edition = "2023";
+
+package platforms_syshealth.collection.feed;
+
+message MachineNodeEntity {
+  string machine_name = 1;
+  string hostname = 2;
+  string node_entity_tag = 3;
+}
+
+message Entity {
+  message Metadata {
+    // The hostname of the entity.
+    string hostname = 1;
+  }
+  enum Type {
+    UNKNOWN = 0;
+    MACHINE = 1;
+    MACHINE_NODE = 2;
+    NETWORK_DEVICE = 3;
+  }
+  Type type = 1;
+  Metadata metadata = 2;
+  oneof entity_id {
+    // Simple name identifier. Suitable for machines and network devices.
+    string name = 3;
+    // Identifier for a machine node which also must include the hostname
+    // and node entity tag.
+    MachineNodeEntity machine_node_entity = 4;
+  }
+}
diff --git a/tlbmc/feed_payload.proto b/tlbmc/feed_payload.proto
index 18da6c3..6ef66b6 100644
--- a/tlbmc/feed_payload.proto
+++ b/tlbmc/feed_payload.proto
@@ -2,7 +2,7 @@
 
 package platforms_syshealth.collection.feed;
 
-import "collection_entity.proto";
+import "entity.proto";
 import "payload.proto";
 
 message HftPayload {
@@ -11,7 +11,7 @@
 
 message Metadata {
   // The entity that produced the data.
-  CollectionEntityId entity_id = 1;
+  Entity entity = 1;
 }
 
 // Central payload for collect data types we support.
diff --git a/tlbmc/meson.build b/tlbmc/meson.build
index d4db712..5d51c71 100644
--- a/tlbmc/meson.build
+++ b/tlbmc/meson.build
@@ -9,6 +9,7 @@
   'client_subscription.proto',
   'collection_entity.proto',
   'data_sink_service.proto',
+  'entity.proto',
   'entity_common_config.proto',
   'fan_controller_config.proto',
   'fan_pwm_config.proto',
diff --git a/tlbmc/service_messages.proto b/tlbmc/service_messages.proto
index 8b6df5c..611fc07 100644
--- a/tlbmc/service_messages.proto
+++ b/tlbmc/service_messages.proto
@@ -2,12 +2,12 @@
 
 package platforms_syshealth.collection.feed;
 
+import "entity.proto";
 import "feed_payload.proto";
-import "collection_entity.proto";
 import "client_subscription.proto";
 
 message MetricSet {
-  optional CollectionEntityId entity_id = 1;
+  optional Entity entity = 1;
   optional string policy_id = 2;
 
   // Payload depends on the source type, needs a flexible structure.
@@ -38,7 +38,7 @@
 }
 
 message GetPoliciesRequest {
-  optional CollectionEntityId entity_id = 1;
+  optional Entity entity = 1;
   optional EndpointIdentifier endpoint_identifier = 2;
 }
 
diff --git a/tlbmc/subscription/manager_impl.cc b/tlbmc/subscription/manager_impl.cc
index c5a2d25..c8fef51 100644
--- a/tlbmc/subscription/manager_impl.cc
+++ b/tlbmc/subscription/manager_impl.cc
@@ -13,7 +13,6 @@
 #include <vector>
 
 #include "tlbmc/feed_payload.pb.h"
-#include "tlbmc/collection_entity.pb.h"
 #include "tlbmc/feed_client_interface.h"
 #include "tlbmc/hft_subscription.pb.h"
 #include "tlbmc/client_subscription.pb.h"
@@ -291,14 +290,14 @@
 SubscriptionManagerImpl::SubscriptionManagerImpl(
     std::unique_ptr<DataSource> data_source, FeedClientInterface* feed_client,
     const Options& options,
-    const platforms_syshealth::collection::feed::NodeEntityId& node_entity_id)
+    const platforms_syshealth::collection::feed::Entity& entity)
     : next_subscription_id_(0),
       task_scheduler_(std::make_unique<milotic_tlbmc::TaskScheduler>()),
       data_source_(std::move(data_source)),
       feed_client_(feed_client),
       get_policies_interval_(options.get_policies_interval),
       endpoint_type_(options.endpoint_type),
-      node_entity_id_(node_entity_id) {
+      entity_(entity) {
   if (feed_client_ != nullptr) {
     get_policies_task_id_ = task_scheduler_->ScheduleAsync(
         [this](absl::AnyInvocable<void()> on_done) {
@@ -323,7 +322,7 @@
   LOG(INFO) << "Getting policies from agent config service";
   GetPoliciesRequest request;
   request.mutable_endpoint_identifier()->set_endpoint_type(endpoint_type_);
-  *request.mutable_entity_id()->mutable_node_entity() = node_entity_id_;
+  *request.mutable_entity() = entity_;
   absl::StatusOr<GetPoliciesResponse> response =
       feed_client_->GetPolicies(request);
   if (!response.ok()) {
diff --git a/tlbmc/subscription/manager_impl.h b/tlbmc/subscription/manager_impl.h
index c79f3a1..9f5c923 100644
--- a/tlbmc/subscription/manager_impl.h
+++ b/tlbmc/subscription/manager_impl.h
@@ -9,7 +9,7 @@
 #include <string>
 #include <utility>
 
-#include "tlbmc/collection_entity.pb.h"
+#include "tlbmc/entity.pb.h"
 #include "tlbmc/feed_client_interface.h"
 #include "tlbmc/service_messages.pb.h"
 #include "one/offline_node_entities.pb.h"
@@ -181,7 +181,9 @@
       std::unique_ptr<DataSource> data_source,
       platforms_syshealth::collection::feed::FeedClientInterface* feed_client,
       const Options& options) {
-    platforms_syshealth::collection::feed::NodeEntityId node_entity_id;
+    platforms_syshealth::collection::feed::Entity entity;
+    entity.set_type(
+        platforms_syshealth::collection::feed::Entity::MACHINE_NODE);
     absl::StatusOr<
         production_msv::node_entities_proto::OfflineNodeEntityInformation>
         node_entity_info;
@@ -198,18 +200,25 @@
                  << node_entity_info.status();
       return nullptr;
     }
-      node_entity_id.set_machine_name(
-          node_entity_info->resolved_config().machine_name());
-      node_entity_id.set_entity_tag(node_entity_info->entity_tag());
-      if (node_entity_info->resolved_config().entities().contains(
-              node_entity_info->entity_tag())) {
-        node_entity_id.set_hostname(node_entity_info->resolved_config()
-                                        .entities()
-                                        .at(node_entity_info->entity_tag())
-                                        .hostname());
-      }
+    entity.mutable_machine_node_entity()->set_machine_name(
+        node_entity_info->resolved_config().machine_name());
+    entity.mutable_machine_node_entity()->set_node_entity_tag(
+        node_entity_info->entity_tag());
+    if (node_entity_info->resolved_config().entities().contains(
+            node_entity_info->entity_tag())) {
+      entity.mutable_machine_node_entity()->set_hostname(
+          node_entity_info->resolved_config()
+              .entities()
+              .at(node_entity_info->entity_tag())
+              .hostname());
+      entity.mutable_metadata()->set_hostname(
+          node_entity_info->resolved_config()
+              .entities()
+              .at(node_entity_info->entity_tag())
+              .hostname());
+    }
     return absl::WrapUnique(new SubscriptionManagerImpl(
-        std::move(data_source), feed_client, options, node_entity_id));
+        std::move(data_source), feed_client, options, entity));
   }
 
   absl::StatusOr<SubscriptionId> AddSubscription(
@@ -228,8 +237,7 @@
       std::unique_ptr<DataSource> data_source,
       platforms_syshealth::collection::feed::FeedClientInterface* feed_client,
       const Options& options,
-      const platforms_syshealth::collection::feed::NodeEntityId&
-          node_entity_id);
+      const platforms_syshealth::collection::feed::Entity& entity);
 
   void PullAgentPoliciesAndUpdateSubscriptions();
   SubscriptionId GenerateSubscriptionId();
@@ -261,7 +269,7 @@
   const platforms_syshealth::collection::feed::EndpointIdentifier::EndpointType
       endpoint_type_ = platforms_syshealth::collection::feed::
           EndpointIdentifier::ENDPOINT_TYPE_UNSPECIFIED;
-  platforms_syshealth::collection::feed::NodeEntityId node_entity_id_;
+  platforms_syshealth::collection::feed::Entity entity_;
 };
 
 }  // namespace milotic_hft
