diff --git a/src/bin/config_parser/src/config_validator/metric_definitions.go b/src/bin/config_parser/src/config_validator/metric_definitions.go
index 6072cee..81042f1 100644
--- a/src/bin/config_parser/src/config_validator/metric_definitions.go
+++ b/src/bin/config_parser/src/config_validator/metric_definitions.go
@@ -223,8 +223,6 @@
 		return validateMetricDimensions(m)
 	case config.MetricDefinition_INT_HISTOGRAM:
 		return validateIntHistogram(m)
-	case config.MetricDefinition_STRING_USED:
-		return validateStringUsed(m)
 	case config.MetricDefinition_CUSTOM:
 		return validateCustom(m)
 	}
@@ -266,13 +264,6 @@
 	return validateMetricDimensions(m)
 }
 
-func validateStringUsed(m config.MetricDefinition) error {
-	if len(m.MetricDimensions) > 0 {
-		return fmt.Errorf("metric_dimensions must not be set for metrics of type STRING_USED")
-	}
-	return nil
-}
-
 // TODO(ninai): remove this function when Cobalt 1.0 is done.
 func validateCustomOld(m config.MetricDefinition) error {
 	if len(m.MetricDimensions) > 0 {
diff --git a/src/bin/config_parser/src/config_validator/metric_definitions_test.go b/src/bin/config_parser/src/config_validator/metric_definitions_test.go
index 9d1263f..e0bc323 100644
--- a/src/bin/config_parser/src/config_validator/metric_definitions_test.go
+++ b/src/bin/config_parser/src/config_validator/metric_definitions_test.go
@@ -407,15 +407,6 @@
 	}
 }
 
-func TestValidateStringUsedEventCodesSet(t *testing.T) {
-	m := makeValidMetric()
-	m.MetricDimensions[0].EventCodes = map[uint32]string{1: "hello"}
-
-	if err := validateStringUsed(m); err == nil {
-		t.Error("Accepted STRING_USED metric with event_codes set.")
-	}
-}
-
 func TestValidateCustomEventCodesSetOld(t *testing.T) {
 	m := makeValidMetric()
 	m.Parts = map[string]*config.MetricPart{"hello": nil}
diff --git a/src/bin/config_parser/src/config_validator/report_definitions.go b/src/bin/config_parser/src/config_validator/report_definitions.go
index 3cf53d6..47a67cf 100644
--- a/src/bin/config_parser/src/config_validator/report_definitions.go
+++ b/src/bin/config_parser/src/config_validator/report_definitions.go
@@ -48,9 +48,6 @@
 	config.MetricDefinition_INT_HISTOGRAM: map[config.ReportDefinition_ReportType]bool{
 		config.ReportDefinition_INT_RANGE_HISTOGRAM: true,
 	},
-	config.MetricDefinition_STRING_USED: map[config.ReportDefinition_ReportType]bool{
-		config.ReportDefinition_HIGH_FREQUENCY_STRING_COUNTS: true,
-	},
 	config.MetricDefinition_CUSTOM: map[config.ReportDefinition_ReportType]bool{
 		config.ReportDefinition_CUSTOM_RAW_DUMP: true,
 	},
@@ -135,8 +132,6 @@
 	switch r.ReportType {
 	case config.ReportDefinition_SIMPLE_OCCURRENCE_COUNT:
 		return validateSimpleOccurrenceCountReportDef(r)
-	case config.ReportDefinition_HIGH_FREQUENCY_STRING_COUNTS:
-		return validateHighFrequencyStringCountsReportDef(r)
 	case config.ReportDefinition_UNIQUE_N_DAY_ACTIVES:
 		return validateUniqueActivesReportDef(r)
 	case config.ReportDefinition_PER_DEVICE_NUMERIC_STATS:
@@ -158,14 +153,6 @@
 	return nil
 }
 
-func validateHighFrequencyStringCountsReportDef(r config.ReportDefinition) error {
-	if err := validateLocalPrivacyNoiseLevel(r); err != nil {
-		return err
-	}
-
-	return nil
-}
-
 func validateUniqueActivesReportDef(r config.ReportDefinition) error {
 	if err := validateWindowSize(r); err != nil {
 		return err
diff --git a/src/bin/config_parser/src/config_validator/report_definitions_test.go b/src/bin/config_parser/src/config_validator/report_definitions_test.go
index ae79f28..926362c 100644
--- a/src/bin/config_parser/src/config_validator/report_definitions_test.go
+++ b/src/bin/config_parser/src/config_validator/report_definitions_test.go
@@ -107,16 +107,6 @@
 	}
 }
 
-// Test that local_privacy_noise_level must be set if the report type is HIGH_FREQUENCY_STRING_COUNTS.
-func TestValidateReportDefinitionForHighFrequencyStringCounts(t *testing.T) {
-	r := makeValidReport()
-	r.ReportType = config.ReportDefinition_HIGH_FREQUENCY_STRING_COUNTS
-
-	if err := validateReportDefinition(r); err == nil {
-		t.Error("Accepted report definition of type HIGH_FREQUENCY_STRING_COUNTS with local_privacy_noise_level unset.")
-	}
-}
-
 // Test that local_privacy_noise_level and window_size must be set if the report type is UNIQUE_N_DAY_ACTIVES.
 func TestValidateReportDefinitionForUniqueActives(t *testing.T) {
 	r := makeValidReport()
diff --git a/src/bin/test_app/test_app.cc b/src/bin/test_app/test_app.cc
index 33269cc..1a8d1fd 100644
--- a/src/bin/test_app/test_app.cc
+++ b/src/bin/test_app/test_app.cc
@@ -1173,8 +1173,6 @@
       return "MEMORY_USAGE";
     case MetricDefinition::INT_HISTOGRAM:
       return "INT_HISTOGRAM";
-    case MetricDefinition::STRING_USED:
-      return "STRING_USED";
     case MetricDefinition::CUSTOM:
       return "CUSTOM";
     default:
@@ -1195,8 +1193,6 @@
       return "NUMERIC_AGGREGATION";
     case ReportDefinition::INT_RANGE_HISTOGRAM:
       return "INT_RANGE_HISTOGRAM";
-    case ReportDefinition::HIGH_FREQUENCY_STRING_COUNTS:
-      return "HIGH_FREQUENCY_STRING_COUNTS";
     case ReportDefinition::NUMERIC_PERF_RAW_DUMP:
       return "NUMERIC_PERF_RAW_DUMP";
     case ReportDefinition::UNIQUE_N_DAY_ACTIVES:
diff --git a/src/lib/crypto_util/hash.h b/src/lib/crypto_util/hash.h
index f44c75c..f83f33b 100644
--- a/src/lib/crypto_util/hash.h
+++ b/src/lib/crypto_util/hash.h
@@ -25,10 +25,6 @@
 
 namespace hash {
 
-// Note(rudominer) Hash() is used for generating the Bloom Filter bits for
-// String RAPPOR. We allow up to 1024 Bloom bits and so we need to consume
-// two bytes of digest per hash in the Bloom filter. We allow up to 8 hashes
-// and so the DIGEST_SIZE must be at least 16.
 static const size_t DIGEST_SIZE = 32;  // SHA-256 outputs 32 bytes.
 
 // Computes the SHA256 digest of |data_len| bytes from |data| and writes the
diff --git a/src/logger/encoder.cc b/src/logger/encoder.cc
index 04824b9..781a6f5 100644
--- a/src/logger/encoder.cc
+++ b/src/logger/encoder.cc
@@ -9,6 +9,7 @@
 
 #include "src/algorithms/rappor/rappor_config_helper.h"
 #include "src/algorithms/rappor/rappor_encoder.h"
+#include "src/lib/crypto_util/hash.h"
 #include "src/logger/project_context.h"
 #include "src/logging.h"
 #include "src/pb/observation2.pb.h"
@@ -23,7 +24,6 @@
 using ::cobalt::crypto::hash::DIGEST_SIZE;
 using ::cobalt::rappor::BasicRapporEncoder;
 using ::cobalt::rappor::RapporConfigHelper;
-using ::cobalt::rappor::RapporEncoder;
 using ::cobalt::system_data::ClientSecret;
 using ::cobalt::system_data::SystemDataInterface;
 using ::google::protobuf::RepeatedField;
@@ -98,45 +98,6 @@
   return result;
 }
 
-Encoder::Result Encoder::EncodeRapporObservation(MetricRef metric, const ReportDefinition* report,
-                                                 uint32_t day_index, const std::string& str) const {
-  auto result = MakeObservation(metric, report, day_index);
-  auto* observation = result.observation.get();
-  auto* rappor_observation = observation->mutable_string_rappor();
-
-  rappor::RapporConfig rappor_config;
-  rappor_config.num_hashes = RapporConfigHelper::kNumHashes;
-  rappor_config.num_cohorts = RapporConfigHelper::StringRapporNumCohorts(*report);
-  rappor_config.num_bloom_bits = RapporConfigHelper::StringRapporNumBloomBits(*report);
-  rappor_config.prob_rr = RapporConfigHelper::kProbRR;
-  float prob_bit_flip = RapporConfigHelper::ProbBitFlip(*report, metric.FullyQualifiedName());
-  rappor_config.prob_0_becomes_1 = prob_bit_flip;
-  rappor_config.prob_1_stays_1 = 1.0f - prob_bit_flip;
-
-  RapporEncoder rappor_encoder(rappor_config, client_secret_);
-  ValuePart string_value;
-  string_value.set_string_value(str);
-  switch (rappor_encoder.Encode(string_value, rappor_observation)) {
-    case rappor::kOK:
-      break;
-
-    case rappor::kInvalidConfig:
-      LOG(ERROR) << "RapporEncoder returned kInvalidConfig for: Report " << report->report_name()
-                 << " for metric " << metric.metric_name() << " in project "
-                 << metric.ProjectDebugString() << ".";
-      result.status = kInvalidConfig;
-      return result;
-
-    case rappor::kInvalidInput:
-      LOG(ERROR) << "RapporEncoder returned kInvalidInput for: Report " << report->report_name()
-                 << " for metric " << metric.metric_name() << " in project "
-                 << metric.ProjectDebugString() << ".";
-      result.status = kInvalidArguments;
-      return result;
-  }
-  return result;
-}
-
 Encoder::Result Encoder::EncodeIntegerEventObservation(
     MetricRef metric, const ReportDefinition* report, uint32_t day_index,
     const RepeatedField<uint32_t>& event_codes, const std::string& component, int64_t value) const {
diff --git a/src/logger/encoder.h b/src/logger/encoder.h
index b571095..30e01c4 100644
--- a/src/logger/encoder.h
+++ b/src/logger/encoder.h
@@ -202,25 +202,6 @@
   Result EncodeCustomObservation(MetricRef metric, const ReportDefinition* report,
                                  uint32_t day_index, EventValuesPtr event_values) const;
 
-  // Encodes an Observation of type RapporObservation.
-  //
-  // metric: Provides access to the names and IDs of the customer, project and
-  // metric associated with the Observation being encoded.
-  //
-  // report: The definition of the Report associated with the Observation being
-  // encoded. In addition to the common fields always required, this method also
-  // requires that the |local_privacy_noise_level| field be set. This is used to
-  // determine the p and q values for String RAPPOR. Additionally
-  // The fields |expected_population_size| and |expected_string_set_size| from
-  // the ReportDefinition will be consulted when configuring the String
-  // RAPPOR algorithm.
-  //
-  // day_index: The day index associated with the Observation being encoded.
-  //
-  // str: The string to encode using String RAPPOR.
-  Result EncodeRapporObservation(MetricRef metric, const ReportDefinition* report,
-                                 uint32_t day_index, const std::string& str) const;
-
   // Encodes an Observation of type UniqueActivesObservation.
   //
   // metric: Provides access to the names and IDs of the customer, project and
diff --git a/src/logger/encoder_test.cc b/src/logger/encoder_test.cc
index e4d65c4..38afd35 100644
--- a/src/logger/encoder_test.cc
+++ b/src/logger/encoder_test.cc
@@ -268,23 +268,6 @@
   }
 }
 
-TEST_F(EncoderTest, EncodeRapporObservation) {
-  const char kMetricName[] = "ModuleDownloads";
-  const char kReportName[] = "ModuleDownloads_HeavyHitters";
-  const uint32_t kExpectedMetricId = 7;
-  auto pair = GetMetricAndReport(kMetricName, kReportName);
-  auto result = encoder_->EncodeRapporObservation(project_context_->RefMetric(pair.first),
-                                                  pair.second, kDayIndex, "Supercalifragilistic");
-  CheckResult(result, kExpectedMetricId, kModuleDownloadsModuleDownloadsHeavyHittersReportId,
-              kDayIndex);
-  CheckDefaultSystemProfile(result);
-  ASSERT_TRUE(result.observation->has_string_rappor());
-  const RapporObservation& obs = result.observation->string_rappor();
-  EXPECT_LT(obs.cohort(), 256u);
-  // Expect 128 Bloom bits and so 16 bytes.
-  EXPECT_EQ(obs.data().size(), 16u);
-}
-
 TEST_F(EncoderTest, EncodeCustomObservation) {
   const char kMetricName[] = "ModuleInstalls";
   const char kReportName[] = "ModuleInstalls_DetailedData";
diff --git a/src/logger/event_loggers.cc b/src/logger/event_loggers.cc
index 21e37b9..bf4fd7a 100644
--- a/src/logger/event_loggers.cc
+++ b/src/logger/event_loggers.cc
@@ -59,10 +59,6 @@
       return std::make_unique<internal::IntHistogramEventLogger>(encoder, event_aggregator,
                                                                  observation_writer, system_data);
     }
-    case MetricDefinition::STRING_USED: {
-      return std::make_unique<internal::StringUsedEventLogger>(encoder, event_aggregator,
-                                                               observation_writer, system_data);
-    }
     case MetricDefinition::CUSTOM: {
       return std::make_unique<internal::CustomEventLogger>(encoder, event_aggregator,
                                                            observation_writer, system_data);
@@ -133,9 +129,6 @@
     for (const auto& bucket : e.buckets()) {
       ss << "| " << bucket.index() << " = " << bucket.count() << std::endl;
     }
-  } else if (event->has_string_used_event()) {
-    const auto& e = event->string_used_event();
-    ss << "StringUsedEvent: " << e.str() << std::endl;
   } else if (event->has_custom_event()) {
     const auto& e = event->custom_event();
     ss << "CustomEvent:";
@@ -743,29 +736,6 @@
   }
 }
 
-/////////////// StringUsedEventLogger method implementations ///////////////////
-
-Encoder::Result StringUsedEventLogger::MaybeEncodeImmediateObservation(
-    const ReportDefinition& report, bool /*may_invalidate*/, EventRecord* event_record) {
-  TRACE_DURATION("cobalt_core", "StringUsedEventLogger::MaybeEncodeImmediateObservation");
-  const MetricDefinition& metric = *(event_record->metric());
-  const Event& event = *(event_record->event());
-  CHECK(event.has_string_used_event());
-  const auto& string_used_event = event_record->event()->string_used_event();
-  switch (report.report_type()) {
-    // Each report type has its own logic for generating immediate
-    // observations.
-    case ReportDefinition::HIGH_FREQUENCY_STRING_COUNTS: {
-      return encoder()->EncodeRapporObservation(event_record->project_context()->RefMetric(&metric),
-                                                &report, event.day_index(),
-                                                string_used_event.str());
-    }
-
-    default:
-      return BadReportType(event_record->project_context()->FullMetricName(metric), report);
-  }
-}
-
 /////////////// CustomEventLogger method implementations ///////////////////////
 
 Status CustomEventLogger::ValidateEvent(const EventRecord& /*event_record*/) {
diff --git a/src/logger/event_loggers.h b/src/logger/event_loggers.h
index 16b1abf..13eba19 100644
--- a/src/logger/event_loggers.h
+++ b/src/logger/event_loggers.h
@@ -251,18 +251,6 @@
                                                   EventRecord* event_record) override;
 };
 
-// Implementation of EventLogger for metrics of type STRING_USED.
-class StringUsedEventLogger : public EventLogger {
- public:
-  using EventLogger::EventLogger;
-  ~StringUsedEventLogger() override = default;
-
- private:
-  Encoder::Result MaybeEncodeImmediateObservation(const ReportDefinition& report,
-                                                  bool may_invalidate,
-                                                  EventRecord* event_record) override;
-};
-
 // Implementation of EventLogger for metrics of type CUSTOM.
 class CustomEventLogger : public EventLogger {
  public:
diff --git a/src/logger/event_loggers_test.cc b/src/logger/event_loggers_test.cc
index f94017f..fce08fc 100644
--- a/src/logger/event_loggers_test.cc
+++ b/src/logger/event_loggers_test.cc
@@ -228,18 +228,6 @@
     return logger_->Log(std::move(event_record), mock_clock_->now());
   }
 
-  Status LogString(uint32_t metric_id, const std::string& str) {
-    auto event_record = std::make_unique<EventRecord>(project_context_, metric_id);
-    auto* string_used_event = event_record->event()->mutable_string_used_event();
-    string_used_event->set_str(str);
-    Status valid;
-    if (kOK != (valid = logger_->PrepareAndValidateEvent(metric_id, MetricDefinition::STRING_USED,
-                                                         event_record.get()))) {
-      return valid;
-    }
-    return logger_->Log(std::move(event_record), mock_clock_->now());
-  }
-
   Status LogCustomEvent(uint32_t metric_id, const std::vector<std::string>& dimension_names,
                         const std::vector<CustomDimensionValue>& values) {
     auto event_record = std::make_unique<EventRecord>(project_context_, metric_id);
@@ -282,8 +270,6 @@
 
 class IntHistogramEventLoggerTest : public EventLoggersTest<internal::IntHistogramEventLogger> {};
 
-class StringUsedEventLoggerTest : public EventLoggersTest<internal::StringUsedEventLogger> {};
-
 class CustomEventLoggerTest : public EventLoggersTest<internal::CustomEventLogger> {};
 
 // Creates a Logger whose ProjectContext contains only EVENT_OCCURRED metrics,
@@ -608,20 +594,6 @@
   }
 }
 
-// Tests the StringUsedEventLogger.
-TEST_F(StringUsedEventLoggerTest, Log) {
-  ASSERT_EQ(kOK,
-            LogString(testing::all_report_types::kModuleDownloadsMetricId, "www.mymodule.com"));
-  Observation2 observation;
-  uint32_t expected_report_id =
-      testing::all_report_types::kModuleDownloadsModuleDownloadsHeavyHittersReportId;
-  ASSERT_TRUE(FetchSingleObservation(&observation, expected_report_id, observation_store_.get(),
-                                     update_recipient_.get()));
-
-  ASSERT_TRUE(observation.has_string_rappor());
-  EXPECT_FALSE(observation.string_rappor().data().empty());
-}
-
 // Tests the CustomEventLogger.
 TEST_F(CustomEventLoggerTest, LogCustomEvent) {
   CustomDimensionValue module_value, number_value;
diff --git a/src/logger/fake_logger.cc b/src/logger/fake_logger.cc
index 53773a9..56f389b 100644
--- a/src/logger/fake_logger.cc
+++ b/src/logger/fake_logger.cc
@@ -115,17 +115,6 @@
   return Status::kOK;
 }
 
-Status FakeLogger::LogString(uint32_t metric_id, const std::string& str) {
-  call_count_ += 1;
-
-  Event event;
-  event.set_metric_id(metric_id);
-  event.mutable_string_used_event()->set_str(str);
-  last_event_logged_ = event;
-
-  return Status::kOK;
-}
-
 Status FakeLogger::LogCustomEvent(uint32_t metric_id, EventValuesPtr event_values) {
   call_count_ += 1;
 
diff --git a/src/logger/fake_logger.h b/src/logger/fake_logger.h
index 34a44bb..a6b4435 100644
--- a/src/logger/fake_logger.h
+++ b/src/logger/fake_logger.h
@@ -49,8 +49,6 @@
   Status LogIntHistogram(uint32_t metric_id, const std::vector<uint32_t>& event_codes,
                          const std::string& component, HistogramPtr histogram) override;
 
-  Status LogString(uint32_t metric_id, const std::string& str) override;
-
   Status LogCustomEvent(uint32_t metric_id, EventValuesPtr event_values) override;
 
   uint32_t call_count() { return call_count_; }
diff --git a/src/logger/logger.cc b/src/logger/logger.cc
index 7858ec6..a6bf523 100644
--- a/src/logger/logger.cc
+++ b/src/logger/logger.cc
@@ -135,14 +135,6 @@
   return Log(metric_id, MetricDefinition::INT_HISTOGRAM, std::move(event_record));
 }
 
-Status Logger::LogString(uint32_t metric_id, const std::string& str) {
-  internal_metrics_->LoggerCalled(LoggerMethod::LogString, project_context_->project());
-  auto event_record = std::make_unique<EventRecord>(project_context_, metric_id);
-  auto* string_used_event = event_record->event()->mutable_string_used_event();
-  string_used_event->set_str(str);
-  return Log(metric_id, MetricDefinition::STRING_USED, std::move(event_record));
-}
-
 Status Logger::LogCustomEvent(uint32_t metric_id, EventValuesPtr event_values) {
   internal_metrics_->LoggerCalled(LoggerMethod::LogCustomEvent, project_context_->project());
   auto event_record = std::make_unique<EventRecord>(project_context_, metric_id);
diff --git a/src/logger/logger.h b/src/logger/logger.h
index 0502db6..336956f 100644
--- a/src/logger/logger.h
+++ b/src/logger/logger.h
@@ -144,8 +144,6 @@
   Status LogIntHistogram(uint32_t metric_id, const std::vector<uint32_t>& event_codes,
                          const std::string& component, HistogramPtr histogram) override;
 
-  Status LogString(uint32_t metric_id, const std::string& str) override;
-
   Status LogCustomEvent(uint32_t metric_id, EventValuesPtr event_values) override;
 
   // LoggerCalled (cobalt_internal::metrics::logger_calls_made) and
diff --git a/src/logger/logger_interface.h b/src/logger/logger_interface.h
index d39017a..e2911bc 100644
--- a/src/logger/logger_interface.h
+++ b/src/logger/logger_interface.h
@@ -168,25 +168,6 @@
                            std::move(histogram));
   }
 
-  // Logs the fact that a given string was used, in a specific context.
-  // The semantics of the context and the string is specified in the
-  // Metric definition.
-  //
-  //  This method is intended to be used in the following situation:
-  //  * The string s being logged does not contain PII or passwords.
-  //  * The set S of all possible strings that may be logged is large.
-  //    If the set S is small consider using LogEvent() instead.
-  //  * The ultimate data of interest is the statistical distribution of the
-  //    most commonly used strings from S over the population of all Fuchsia
-  //    devices.
-  //
-  // |metric_id| ID of the Metric the logged Event will belong to. It must
-  // be one of the Metrics from the ProjectContext passed to the constructor,
-  // and it must be of type STRING_USED.
-  //
-  // |str| The human-readable string to log.
-  virtual Status LogString(uint32_t metric_id, const std::string& str) = 0;
-
   // Logs a custom event. The structure of the event is defined in a proto file
   // in the project's config folder.
   //
diff --git a/src/logger/logger_test.cc b/src/logger/logger_test.cc
index 5097b56..ed6555d 100644
--- a/src/logger/logger_test.cc
+++ b/src/logger/logger_test.cc
@@ -387,21 +387,6 @@
   }
 }
 
-// Tests the method LogString().
-TEST_F(LoggerTest, LogString) {
-  ASSERT_EQ(kOK, logger_->LogString(testing::all_report_types::kModuleDownloadsMetricId,
-                                    "www.mymodule.com"));
-  Observation2 observation;
-  uint32_t expected_report_id =
-      testing::all_report_types::kModuleDownloadsModuleDownloadsHeavyHittersReportId;
-
-  ASSERT_TRUE(FetchSingleObservation(&observation, expected_report_id, observation_store_.get(),
-                                     update_recipient_.get()));
-
-  ASSERT_TRUE(observation.has_string_rappor());
-  EXPECT_FALSE(observation.string_rappor().data().empty());
-}
-
 // Tests the method LogCustomEvent().
 TEST_F(LoggerTest, LogCustomEvent) {
   CustomDimensionValue module_value, number_value;
diff --git a/src/logger/logger_test_utils.cc b/src/logger/logger_test_utils.cc
index cd532a1..5c07acc 100644
--- a/src/logger/logger_test_utils.cc
+++ b/src/logger/logger_test_utils.cc
@@ -13,6 +13,7 @@
 
 #include "src/algorithms/rappor/rappor_config_helper.h"
 #include "src/algorithms/rappor/rappor_encoder.h"
+#include "src/lib/crypto_util/hash.h"
 #include "src/lib/util/encrypted_message_util.h"
 #include "src/local_aggregation/aggregation_utils.h"
 #include "src/logger/encoder.h"
diff --git a/src/logger/test_registries/all_report_types_test_registry.yaml b/src/logger/test_registries/all_report_types_test_registry.yaml
index a5371ff..070e859 100644
--- a/src/logger/test_registries/all_report_types_test_registry.yaml
+++ b/src/logger/test_registries/all_report_types_test_registry.yaml
@@ -143,18 +143,6 @@
       id: 15
       report_type: INT_RANGE_HISTOGRAM
 
-- id: 7
-  metric_name: "ModuleDownloads"
-  metric_type: STRING_USED
-  reports:
-    # Report ID: 1447128111
-    - report_name: "ModuleDownloads_HeavyHitters"
-      id: 16
-      report_type: HIGH_FREQUENCY_STRING_COUNTS
-      local_privacy_noise_level: SMALL
-      expected_population_size: 20000
-      expected_string_set_size: 10000
-
 - id: 8
   metric_name: "ModuleInstalls"
   metric_type: CUSTOM
diff --git a/src/logger/test_registries/encoder_test_registry.yaml b/src/logger/test_registries/encoder_test_registry.yaml
index 9d41895..692de2d 100644
--- a/src/logger/test_registries/encoder_test_registry.yaml
+++ b/src/logger/test_registries/encoder_test_registry.yaml
@@ -42,18 +42,6 @@
         - OS
         - ARCH
 
-- id: 7
-  metric_name: ModuleDownloads
-  metric_type: STRING_USED
-  reports:
-    - report_name: ModuleDownloads_HeavyHitters
-      id: 3
-      report_type: HIGH_FREQUENCY_STRING_COUNTS
-      local_privacy_noise_level: SMALL
-      expected_population_size: 20000
-      expected_string_set_size: 10000
-      system_profile_field: [BOARD_NAME, PRODUCT_NAME]
-
 - id: 8
   metric_name: ModuleInstalls
   metric_type: CUSTOM
diff --git a/src/registry/metric_definition.proto b/src/registry/metric_definition.proto
index 184203e..9562216 100644
--- a/src/registry/metric_definition.proto
+++ b/src/registry/metric_definition.proto
@@ -57,6 +57,9 @@
   // A Metric has one of the following types.
   // Next ID: 8
   enum MetricType {
+    reserved 7;
+    reserved "STRING_USED";
+
     UNSET = 0;
 
     // Records that an event has occurred.
@@ -202,25 +205,6 @@
     // - INT_RANGE_HISTOGRAM
     INT_HISTOGRAM = 6;
 
-    // Records that a given string was used in a specific context. The semantics
-    // of the Metric must be specified in comments near the MetricDefintion.
-    //
-    //  This metric type is intended to be used in the following situation:
-    //  * The string being logged does not contain PII or passwords.
-    //  * The set of all possible strings that may be logged is large.
-    //    If the set is small consider using EVENT_OCCURED instead.
-    //  * The ultimate data of interest is the statistical distribution of the
-    //    most commonly used strings
-    //
-    // Event fields:
-    // - string s # The string that was used.
-    //
-    // MetricDefinition fields: None
-    //
-    // Compatible report types:
-    // - HIGH_FREQUENCY_STRING_COUNTS
-    STRING_USED = 7;
-
     // Allows users of Cobalt to define custom Metrics with custom semantics and
     // multiple parts, each with their own data type. A metric of this type is
     // associated with a protocol buffer definition and proto messages of that
diff --git a/src/registry/report_definition.proto b/src/registry/report_definition.proto
index b5e41e9..68aa074 100644
--- a/src/registry/report_definition.proto
+++ b/src/registry/report_definition.proto
@@ -57,8 +57,8 @@
 
   // A Report has one of the following types.
   enum ReportType {
-    reserved 6;
-    reserved "STRING_COUNTS_WITH_THRESHOLD";
+    reserved 5, 6;
+    reserved "HIGH_FREQUENCY_STRING_COUNTS", "STRING_COUNTS_WITH_THRESHOLD";
 
     REPORT_TYPE_UNSET = 0;
 
@@ -136,45 +136,6 @@
     // (See report_row.proto)
     INT_RANGE_HISTOGRAM = 4;
 
-    // Gives the approximate distribution of the most commonly used strings in a
-    // specific context specified by comments in the owning MetricDefinition.
-    // Supports the use of local differential privacy.
-    //
-    // Supported Input Types:
-    //   - Metric types: STRING_USED
-    //     Encoding: String RAPPOR
-    //     Observation type: StringRapporObservation
-    //
-    // ReportDefinition fields particular to this type:
-    //   - local_privacy_noise_level # Gives RAPPOR parameters p,q
-    //   - expected_population_size  # Hint for RAPPOR num cohorts
-    //   - expected_string_set_size  # Hint for RAPPOR num bits
-    //   - candidate_list # All known string values
-    //   - candidate_file # File with all known string values
-    //
-    // Report fields:
-    //   - date
-    //   - system_profile # One or more fields from the SystemProfile message
-    //                      type (cobalt/observation.proto) describing the
-    //                      system on which the events occurred.
-    //   - string # The string that was used
-    //   - count # An estimate of the total number of times the string was used
-    //           # for the given date, over devices with that system profile.
-    //   - std_err: # Estimate of the std err in the value of Count estimate.
-    //
-    // Example report:
-    //
-    // Date, SystemProfile, String, Count, std_err
-    // ------------------------------------------
-    // 2018-7-25,<sys-prof 1>,"www.alpha.com", 12345, 1.3
-    // 2018-7-25,<sys-prof 1>,"www.beta.com", 23456, 1.3
-    // 2018-7-25,<sys-prof 2>,"www.gamma.com", 34567, 1.3
-    // 2018-7-25,<sys-prof 2>,"www.delta.com", 78901, 1.3
-    //
-    // Note that the report will only include the most frequently used strings,
-    // the so-called "heavy-hitters."
-    HIGH_FREQUENCY_STRING_COUNTS = 5;
-
     // Gives a raw dump of the Observations for a day of one of the numeric
     // performance metrics.
     //
@@ -344,33 +305,20 @@
   // after data collection has begun or the data will become corrupted.
   LocalPrivacyNoiseLevel local_privacy_noise_level = 4;
 
-  // This field is used only with Report type
-  // HIGH_FREQUENCY_STRING_COUNTS.
-  // An estimate of the number of different devices that will be participating
-  // in collecting data for the report. This helps to tune the RAPPOR
-  // algorithm. This must not be changed after data collection has
-  // begun or the data may become corrupted.
-  uint32 expected_population_size = 5;
+  // This field is not in use.
+  uint32 expected_population_size = 5 [deprecated = true];
 
-  // This field is used only with Report type
-  // HIGH_FREQUENCY_STRING_COUNTS.
-  // An estimate of the size of the set of all strings that are likely to
-  // be logged. This helps to tune the RAPPOR algorithm. This
-  // must not be changed after data collection has begun or the data may
-  // become corrupted.
-  uint32 expected_string_set_size = 6;
+  // This field is not in use.
+  uint32 expected_string_set_size = 6 [deprecated = true];
 
   // Explicit list of known string values. Either this or |candidate_file|
   // should be used, not both. Used for the hashed |component_name|
-  // field for several Report types and the encoded |string| field for the
-  // HIGH_FREQUENCY_STRING_COUNTS Report type.
+  // field for several Report types.
   repeated string candidate_list = 8 [(cobalt_options).hide_on_client = true];
 
   // Simple name or full path to file containing known string values.
   // Either this or |candidate_list| should be used, not both. Used for the
-  // hashed |component_name| field for several report types and the encoded
-  // |string| field for the
-  // HIGH_FREQUENCY_STRING_COUNTS Report type.
+  // hashed |component_name| field for several report types.
   string candidate_file = 9;
 
   // This field is used only with the INT_RANGE_HISTOGRAM Report type, but
