diff --git a/metrics/metrics_client.cc b/metrics/metrics_client.cc
index 86bec73..6ffc13b 100644
--- a/metrics/metrics_client.cc
+++ b/metrics/metrics_client.cc
@@ -11,6 +11,7 @@
   fprintf(stderr,
           "Usage:  metrics_client [-ab] [-t] name sample min max nbuckets\n"
           "        metrics_client [-ab] -e   name sample max\n"
+          "        metrics_client [-ab] -v   event\n"
           "        metrics_client -u action\n"
           "        metrics_client [-cg]\n"
           "\n"
@@ -22,7 +23,9 @@
           "  -e: send linear/enumeration histogram data\n"
           "  -g: return exit status 0 if machine in guest mode, 1 otherwise\n"
           "  -t: convert sample from double seconds to int milliseconds\n"
-          "  -u: send a user action to Chrome\n");
+          "  -u: send a user action to Chrome\n"
+          "  -v: send a Platform.CrOSEvent enum histogram sample\n"
+          );
   exit(1);
 }
 
@@ -69,6 +72,19 @@
   return 0;
 }
 
+static int SendCrosEvent(char* argv[], int action_index) {
+  const char* event = argv[action_index];
+  bool result;
+  MetricsLibrary metrics_lib;
+  metrics_lib.Init();
+  result = metrics_lib.SendCrosEventToUMA(event);
+  if (!result) {
+    fprintf(stderr, "metrics_client: could not send event %s\n", event);
+    return 1;
+  }
+  return 0;
+}
+
 static int HasConsent() {
   MetricsLibrary metrics_lib;
   metrics_lib.Init();
@@ -85,6 +101,7 @@
   enum Mode {
     kModeSendStats,
     kModeSendUserAction,
+    kModeSendCrosEvent,
     kModeHasConsent,
     kModeIsGuestMode
   } mode = kModeSendStats;
@@ -95,7 +112,7 @@
 
   // Parse arguments
   int flag;
-  while ((flag = getopt(argc, argv, "abcegtu")) != -1) {
+  while ((flag = getopt(argc, argv, "abcegtuv")) != -1) {
     switch (flag) {
       case 'a':
         mode = kModeSendStats;
@@ -122,6 +139,9 @@
       case 'u':
         mode = kModeSendUserAction;
         break;
+      case 'v':
+        mode = kModeSendCrosEvent;
+        break;
       default:
         ShowUsage();
         break;
@@ -134,6 +154,8 @@
     expected_args = send_enum ? 3 : 5;
   else if (mode == kModeSendUserAction)
     expected_args = 1;
+  else if (mode == kModeSendCrosEvent)
+    expected_args = 1;
 
   if ((arg_index + expected_args) != argc) {
     ShowUsage();
@@ -152,6 +174,8 @@
                        send_to_chrome);
     case kModeSendUserAction:
       return SendUserAction(argv, arg_index);
+    case kModeSendCrosEvent:
+      return SendCrosEvent(argv, arg_index);
     case kModeHasConsent:
       return HasConsent();
     case kModeIsGuestMode:
diff --git a/metrics/metrics_library.cc b/metrics/metrics_library.cc
index fe48122..a2227ac 100644
--- a/metrics/metrics_library.cc
+++ b/metrics/metrics_library.cc
@@ -24,6 +24,8 @@
 static const char kUMAEventsPath[] = "/var/log/metrics/uma-events";
 static const char kConsentFile[] = "/home/chronos/Consent To Send Stats";
 static const int32_t kBufferSize = 1024;
+static const char kCrosEventHistogramName[] = "Platform.CrOSEvent";
+static const int kCrosEventHistogramMax = 100;
 
 time_t MetricsLibrary::cached_enabled_time_ = 0;
 bool MetricsLibrary::cached_enabled_ = false;
@@ -306,3 +308,19 @@
 void MetricsLibrary::SetPolicyProvider(policy::PolicyProvider* provider) {
   policy_provider_.reset(provider);
 }
+
+bool MetricsLibrary::SendCrosEventToUMA(const std::string& event) {
+  int n;
+  /* Add new events here.
+   *
+   * Whoever adds the second event (if anybody) please be so kind to change
+   * this to a map lookup.  (Or at least change "second" above to "third",
+   * etc.)
+   */
+  if (event.compare("ModemManagerCommandSendFailure") == 0) {
+    n = 0;
+  } else {
+    return false;
+  }
+  return SendEnumToUMA(kCrosEventHistogramName, n, kCrosEventHistogramMax);
+}
diff --git a/metrics/metrics_library.h b/metrics/metrics_library.h
index 2539f02..ce6985f 100644
--- a/metrics/metrics_library.h
+++ b/metrics/metrics_library.h
@@ -90,6 +90,14 @@
   // has occurred.  Used by UMA to generate stability statistics.
   bool SendCrashToUMA(const char *crash_kind);
 
+  // Sends a "generic Chrome OS event" to UMA.  This is an event name
+  // that is translated into an enumerated histogram entry.  Event names
+  // are added to metrics_library.cc.  Optionally, they can be added
+  // to histograms.xml---but part of the reason for this is to simplify
+  // the addition of events (at the cost of having to look them up by
+  // number in the histograms dashboard).
+  bool SendCrosEventToUMA(const std::string& event);
+
   // Sends to Autotest and returns true on success.
   static bool SendToAutotest(const std::string& name, int value);
 
