diff --git a/proto/analytics_frontend.proto b/proto/analytics_frontend.proto
index c37acceaafd5c36b0372fc0e21edde7778965f77..096c1ee035ae663359d9f4df1e071d3997a0d351 100644
--- a/proto/analytics_frontend.proto
+++ b/proto/analytics_frontend.proto
@@ -1,9 +1,23 @@
+// Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+//
+// 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.
+
 syntax = "proto3";
-package device;
+package analytics_frontend;
 
 import "context.proto";
 import "kpi_manager.proto";
-import "kpi_sample_types.proto";
+//import "kpi_sample_types.proto";
 
 service AnalyticsFrontendService {
   rpc StartAnalyzer  (Analyzer      ) returns (AnalyzerId   ) {}
@@ -15,33 +29,39 @@ message AnalyzerId {
   context.Uuid analyzer_id = 1;
 }
 
-enum AnalyzerMode {
-  ANALYZERMODE_BATCH    = 0;
-  ANALYZERMODE_STRAMING = 1;
+enum AnalyzerOperationMode {
+  ANALYZEROPERATIONMODE_BATCH     = 0;
+  ANALYZEROPERATIONMODE_STREAMING = 1;
 }
 
 message Analyzer {
-  repeated kpi_manager.KpiId kpi_id               = 1; // The KPI Ids to be processed by the analyzer
-  AnalyzerMode                  mode                 = 2; // Operation mode of the analyzer
-  float                         batch_min_duration_s = 3; // In batch mode, min duration to collect before executing batch
-  float                         batch_max_duration_s = 4; // In batch mode, max duration collected to execute the batch
-  uint64                        batch_min_size       = 5; // In batch mode, min number of samples to collect before executing batch
-  uint64                        batch_max_size       = 6; // In batch mode, max number of samples collected to execute the batch
+  string                     algorithm_name       = 1; // The algorithm to be executed
+  repeated kpi_manager.KpiId input_kpi_ids        = 2; // The KPI Ids to be processed by the analyzer
+  repeated kpi_manager.KpiId output_kpi_ids       = 3; // The KPI Ids produced by the analyzer
+  AnalyzerOperationMode      operation_mode       = 4; // Operation mode of the analyzer
+
+  // In batch mode...
+  float                      batch_min_duration_s = 5; // ..., min duration to collect before executing batch
+  float                      batch_max_duration_s = 6; // ..., max duration collected to execute the batch
+  uint64                     batch_min_size       = 7; // ..., min number of samples to collect before executing batch
+  uint64                     batch_max_size       = 8; // ..., max number of samples collected to execute the batch
 }
 
 message AnalyzerFilter {
   // Analyzer that fulfill the filter are those that match ALL the following fields.
   // An empty list means: any value is accepted.
   // All fields empty means: list all Analyzers
-  repeated AnalyzerId                     analyzer_id    = 1;
-  repeated kpi_manager.KpiId           kpi_id          = 2;
-  repeated kpi_sample_types.KpiSampleType kpi_sample_type = 3;
-  repeated context.DeviceId               device_id       = 4;
-  repeated context.EndPointId             endpoint_id     = 5;
-  repeated context.ServiceId              service_id      = 6;
-  repeated context.SliceId                slice_id        = 7;
-  repeated context.ConnectionId           connection_id   = 8;
-  repeated context.LinkId                 link_id         = 9;
+  repeated AnalyzerId                     analyzer_id     = 1;
+  repeated string                         algorithm_names = 2;
+  repeated kpi_manager.KpiId              input_kpi_ids   = 3;
+  repeated kpi_manager.KpiId              output_kpi_ids  = 4;
+  //repeated kpi_sample_types.KpiSampleType kpi_sample_type = 5; // Not implemented
+  //repeated context.DeviceId               device_id       = 6; // Not implemented
+  //repeated context.EndPointId             endpoint_id     = 7; // Not implemented
+  //repeated context.ServiceId              service_id      = 8; // Not implemented
+  //repeated context.SliceId                slice_id        = 9; // Not implemented
+  //repeated context.ConnectionId           connection_id   = 10; // Not implemented
+  //repeated context.LinkId                 link_id         = 11; // Not implemented
 }
 
 message AnalyzerList {
diff --git a/proto/device.proto b/proto/device.proto
index 57780adae83ad45ca719d024c3014f740f12bb33..a1882f33f8e177502c456672a0517928f0259ef5 100644
--- a/proto/device.proto
+++ b/proto/device.proto
@@ -16,8 +16,7 @@ syntax = "proto3";
 package device;
 
 import "context.proto";
-//import "monitoring.proto";
-import "kpi_manager.proto";
+import "monitoring.proto"; // to be migrated to: "kpi_manager.proto"
 
 service DeviceService {
   rpc AddDevice       (context.Device    ) returns (context.DeviceId    ) {}
@@ -28,8 +27,8 @@ service DeviceService {
 }
 
 message MonitoringSettings {
-  kpi_manager.KpiId kpi_id = 1;
-  kpi_manager.KpiDescriptor kpi_descriptor = 2;
-  float sampling_duration_s = 3;
-  float sampling_interval_s = 4;
+  monitoring.KpiId         kpi_id              = 1; // to be migrated to: "kpi_manager.KpiId"
+  monitoring.KpiDescriptor kpi_descriptor      = 2; // to be migrated to: "kpi_manager.KpiDescriptor"
+  float                    sampling_duration_s = 3;
+  float                    sampling_interval_s = 4;
 }
diff --git a/proto/monitoring.proto b/proto/monitoring.proto
index f240fc3ceb12885557be26cf62597a98e35619f4..96423bb4952abfbde0fb72b5dae3497485592d1b 100755
--- a/proto/monitoring.proto
+++ b/proto/monitoring.proto
@@ -16,14 +16,14 @@ syntax = "proto3";
 package monitoring;
 
 import "context.proto";
-import "kpi_manager.proto";
-//import "kpi_sample_types.proto";
+import "monitoring.proto";
+import "kpi_sample_types.proto";
 
 service MonitoringService {
-//  rpc SetKpi                (KpiDescriptor      ) returns (KpiId               ) {} // Stable not final
-//  rpc DeleteKpi             (KpiId              ) returns (context.Empty       ) {} // Stable and final
-//  rpc GetKpiDescriptor      (KpiId              ) returns (KpiDescriptor       ) {} // Stable and final
-//  rpc GetKpiDescriptorList  (context.Empty      ) returns (KpiDescriptorList   ) {} // Stable and final
+  rpc SetKpi                (KpiDescriptor      ) returns (KpiId               ) {} // Stable not final
+  rpc DeleteKpi             (KpiId              ) returns (context.Empty       ) {} // Stable and final
+  rpc GetKpiDescriptor      (KpiId              ) returns (KpiDescriptor       ) {} // Stable and final
+  rpc GetKpiDescriptorList  (context.Empty      ) returns (KpiDescriptorList   ) {} // Stable and final
   rpc IncludeKpi            (Kpi                ) returns (context.Empty       ) {} // Stable and final
   rpc MonitorKpi            (MonitorKpiRequest  ) returns (context.Empty       ) {} // Stable and final
   rpc QueryKpiData          (KpiQuery           ) returns (RawKpiTable         ) {} // Not implemented
@@ -36,21 +36,32 @@ service MonitoringService {
   rpc GetAlarmDescriptor    (AlarmID            ) returns (AlarmDescriptor     ) {} // Stable and final
   rpc GetAlarmResponseStream(AlarmSubscription  ) returns (stream AlarmResponse) {} // Not Stable not final
   rpc DeleteAlarm           (AlarmID            ) returns (context.Empty       ) {} // Stable and final
-//  rpc GetStreamKpi          (KpiId              ) returns (stream Kpi          ) {} // Stable not final
-//  rpc GetInstantKpi         (KpiId              ) returns (Kpi                 ) {} // Stable not final
+  rpc GetStreamKpi          (KpiId              ) returns (stream Kpi          ) {} // Stable not final
+  rpc GetInstantKpi         (KpiId              ) returns (Kpi                 ) {} // Stable not final
 }
 
-
+message KpiDescriptor {
+  KpiId                          kpi_id          = 1;
+  string                         kpi_description = 2;
+  repeated KpiId                 kpi_id_list     = 3;
+  kpi_sample_types.KpiSampleType kpi_sample_type = 4;
+  context.DeviceId               device_id       = 5;
+  context.EndPointId             endpoint_id     = 6;
+  context.ServiceId              service_id      = 7;
+  context.SliceId                slice_id        = 8;
+  context.ConnectionId           connection_id   = 9;
+  context.LinkId                 link_id         = 10;
+}
 
 message MonitorKpiRequest {
-  kpi_manager.KpiId kpi_id  = 1;
+  KpiId kpi_id  = 1;
   float monitoring_window_s = 2;
   float sampling_rate_s     = 3;
   // Pending add field to reflect Available Device Protocols
 }
 
 message KpiQuery {
-  repeated kpi_manager.KpiId    kpi_ids             = 1;
+  repeated KpiId    kpi_ids             = 1;
   float                         monitoring_window_s = 2;
   uint32                        last_n_samples      = 3;  // used when you want something like "get the last N many samples
   context.Timestamp             start_timestamp     = 4;  // used when you want something like "get the samples since X date/time"
@@ -64,7 +75,7 @@ message RawKpi { // cell
 }
 
 message RawKpiList { // column
-  kpi_manager.KpiId  kpi_id    = 1;
+  KpiId  kpi_id    = 1;
   repeated RawKpi    raw_kpis  = 2;
 }
 
@@ -72,10 +83,12 @@ message RawKpiTable { // table
   repeated RawKpiList raw_kpi_lists = 1;
 }
 
-
+message KpiId {
+  context.Uuid kpi_id = 1;
+}
 
 message Kpi {
-  kpi_manager.KpiId kpi_id    = 1;
+  KpiId kpi_id    = 1;
   context.Timestamp timestamp = 2;
   KpiValue          kpi_value = 3;
 }
@@ -109,7 +122,7 @@ message KpiList {
 
 message SubsDescriptor{
   SubscriptionID    subs_id             = 1;
-  kpi_manager.KpiId kpi_id              = 2;
+  KpiId kpi_id              = 2;
   float             sampling_duration_s = 3;
   float             sampling_interval_s = 4;
   context.Timestamp start_timestamp     = 5;  // used when you want something like "get the samples since X date/time"
@@ -134,7 +147,7 @@ message AlarmDescriptor {
   AlarmID                     alarm_id              = 1;
   string                      alarm_description     = 2;
   string                      name                  = 3;
-  kpi_manager.KpiId           kpi_id                = 4;
+  KpiId           kpi_id                = 4;
   KpiValueRange               kpi_value_range       = 5;
   context.Timestamp           timestamp             = 6;
 }
diff --git a/proto/optical_attack_detector.proto b/proto/optical_attack_detector.proto
index bf5cf4db1976932e1126da2263378c7ebdd18b30..f74eea68b8c5a588f5ecc06a59916058cb8d9695 100644
--- a/proto/optical_attack_detector.proto
+++ b/proto/optical_attack_detector.proto
@@ -12,13 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-// protocol buffers documentation: https://developers.google.com/protocol-buffers/docs/proto3
 syntax = "proto3";
 package optical_attack_detector;
 
 import "context.proto";
-//import "monitoring.proto";
-import "kpi_manager.proto";
+import "monitoring.proto"; // to be migrated to: "kpi_manager.proto"
 
 service OpticalAttackDetectorService {
   
@@ -29,5 +27,5 @@ service OpticalAttackDetectorService {
 
 message DetectionRequest {
   context.ServiceId service_id = 1;
-  kpi_manager.KpiId  kpi_id     = 2;
+  monitoring.KpiId  kpi_id     = 2; // to be migrated to: "kpi_manager.KpiId"
 }
diff --git a/proto/policy_condition.proto b/proto/policy_condition.proto
index 2904f475635b8f87a998418790e6deac37b5bf1a..612dcb1af8eb8adb0db65b8ae47301c87ad6b9ef 100644
--- a/proto/policy_condition.proto
+++ b/proto/policy_condition.proto
@@ -15,14 +15,13 @@
 syntax = "proto3";
 package policy;
 
-import "monitoring.proto";
-import "kpi_manager.proto";
+import "monitoring.proto"; // to be migrated to: "kpi_manager.proto"
 
 // Condition
 message PolicyRuleCondition {
-  kpi_manager.KpiId kpiId = 1;
-  NumericalOperator numericalOperator = 2;
-  monitoring.KpiValue kpiValue = 3;
+  monitoring.KpiId    kpiId             = 1;  // to be migrated to: "kpi_manager.KpiId"
+  NumericalOperator   numericalOperator = 2;
+  monitoring.KpiValue kpiValue          = 3;
 }
 
 // Operator to be used when comparing Kpis with condition values