diff --git a/cmds/statsd/Android.mk b/cmds/statsd/Android.mk
index 4c097f0..f1b3c05 100644
--- a/cmds/statsd/Android.mk
+++ b/cmds/statsd/Android.mk
@@ -25,7 +25,7 @@
 LOCAL_SRC_FILES := $(call all-proto-files-under, src)
 
 LOCAL_PROTOC_FLAGS :=
-LOCAL_PROTOC_OPTIMIZE_TYPE := lite
+LOCAL_PROTOC_OPTIMIZE_TYPE := lite-static
 
 include $(BUILD_STATIC_LIBRARY)
 
@@ -86,6 +86,7 @@
         libutils \
         libservices \
         libandroidfw \
+        libprotobuf-cpp-lite \
 
 LOCAL_MODULE_CLASS := EXECUTABLES
 
@@ -131,6 +132,7 @@
     libcutils \
     liblog \
     libselinux \
-    libutils
+    libutils \
+    libprotobuf-cpp-lite \
 
 include $(BUILD_NATIVE_TEST)
diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp
index f49dfde..5f5e216 100644
--- a/cmds/statsd/src/StatsLogProcessor.cpp
+++ b/cmds/statsd/src/StatsLogProcessor.cpp
@@ -19,7 +19,7 @@
 #include <log/event_tag_map.h>
 #include <log/logprint.h>
 #include <utils/Errors.h>
-
+#include <cutils/log.h>
 #include <frameworks/base/cmds/statsd/src/stats_log.pb.h>
 
 using namespace android;
@@ -66,3 +66,9 @@
     }
 }
 
+void
+StatsLogProcessor::UpdateConfig(const int config_source, StatsdConfig config)
+{
+    m_configs[config_source] = config;
+    ALOGD("Updated configuration for source %i", config_source);
+}
\ No newline at end of file
diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h
index 23066ab9..d2daecd 100644
--- a/cmds/statsd/src/StatsLogProcessor.h
+++ b/cmds/statsd/src/StatsLogProcessor.h
@@ -19,8 +19,12 @@
 #include "LogReader.h"
 #include "DropboxWriter.h"
 
+#include <frameworks/base/cmds/statsd/src/statsd_config.pb.h>
 #include <log/logprint.h>
 #include <stdio.h>
+#include <unordered_map>
+
+using android::os::statsd::StatsdConfig;
 
 class StatsLogProcessor : public LogListener
 {
@@ -30,6 +34,8 @@
 
     virtual void OnLogEvent(const log_msg& msg);
 
+    virtual void UpdateConfig(const int config_source, StatsdConfig config);
+
 private:
     /**
      * Numeric to string tag name mapping.
@@ -42,5 +48,11 @@
     AndroidLogFormat* m_format;
 
     DropboxWriter m_dropbox_writer;
+
+    /**
+     * Configs that have been specified, keyed by the source. This allows us to over-ride the config
+     * from a source later.
+     */
+    std::unordered_map<int, StatsdConfig> m_configs;
 };
 #endif //STATS_LOG_PROCESSOR_H
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index 030c760..24413f6 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -19,9 +19,11 @@
 #include "StatsService.h"
 #include "DropboxReader.h"
 
+#include <android-base/file.h>
 #include <binder/IPCThreadState.h>
 #include <binder/IServiceManager.h>
 #include <cutils/log.h>
+#include <frameworks/base/cmds/statsd/src/statsd_config.pb.h>
 #include <private/android_filesystem_config.h>
 #include <utils/Looper.h>
 #include <utils/String16.h>
@@ -31,6 +33,7 @@
 #include <stdlib.h>
 
 using namespace android;
+using android::os::statsd::StatsdConfig;
 
 // ================================================================================
 StatsService::StatsService(const sp<Looper>& handlerLooper)
@@ -42,6 +45,13 @@
 {
 }
 
+status_t
+StatsService::setProcessor(const sp<StatsLogProcessor>& main_processor) {
+    m_processor = main_processor;
+    ALOGD("stats service set to processor %p", m_processor.get());
+    return NO_ERROR;
+}
+
 // Implement our own because the default binder implementation isn't
 // properly handling SHELL_COMMAND_TRANSACTION
 status_t
@@ -124,12 +134,33 @@
         if (!args[0].compare(String8("print-stats-log")) && args.size() > 1) {
             return doPrintStatsLog(out, args);
         }
+        if (!args[0].compare(String8("config"))) {
+            return doLoadConfig(in);
+        }
     }
 
     printCmdHelp(out);
     return NO_ERROR;
 }
 
+status_t
+StatsService::doLoadConfig(FILE* in)
+{
+    string content;
+    if (!android::base::ReadFdToString(fileno(in), &content)) {
+        return UNKNOWN_ERROR;
+    }
+    StatsdConfig config;
+    if (config.ParseFromString(content)) {
+        ALOGD("Config parsed from command line: %s", config.SerializeAsString().c_str());
+        m_processor->UpdateConfig(0, config);
+        return NO_ERROR;
+    } else {
+        ALOGD("Config failed to be parsed");
+        return UNKNOWN_ERROR;
+    }
+}
+
 Status
 StatsService::systemRunning()
 {
@@ -158,4 +189,5 @@
 StatsService::printCmdHelp(FILE* out) {
     fprintf(out, "Usage:\n");
     fprintf(out, "\t print-stats-log [tag_required] [timestamp_nsec_optional]\n");
+    fprintf(out, "\t config\t Loads a new config from command-line (must be proto in wire-encoded format).\n");
 }
diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h
index 556b07b..ef52b562 100644
--- a/cmds/statsd/src/StatsService.h
+++ b/cmds/statsd/src/StatsService.h
@@ -17,9 +17,12 @@
 #ifndef STATS_SERVICE_H
 #define STATS_SERVICE_H
 
+#include "StatsLogProcessor.h"
+
 #include <android/os/BnStatsManager.h>
 #include <binder/IResultReceiver.h>
 #include <binder/IShellCallback.h>
+#include <frameworks/base/cmds/statsd/src/statsd_config.pb.h>
 #include <utils/Looper.h>
 
 #include <deque>
@@ -30,7 +33,7 @@
 using namespace android::binder;
 using namespace android::os;
 using namespace std;
-
+using android::os::statsd::StatsdConfig;
 
 // ================================================================================
 class StatsService : public BnStatsManager {
@@ -46,9 +49,13 @@
 
     virtual Status systemRunning();
 
+    virtual status_t setProcessor(const sp<StatsLogProcessor>& main_processor);
+
 private:
+    sp<StatsLogProcessor> m_processor; // Reference to the processor for updating configs.
     status_t doPrintStatsLog(FILE* out, const Vector<String8>& args);
     void printCmdHelp(FILE* out);
+    status_t doLoadConfig(FILE* in);
 };
 
 #endif // STATS_SERVICE_H
diff --git a/cmds/statsd/src/main.cpp b/cmds/statsd/src/main.cpp
index 2c721c7..f9265c6 100644
--- a/cmds/statsd/src/main.cpp
+++ b/cmds/statsd/src/main.cpp
@@ -57,7 +57,9 @@
 
     // Put the printer one first, so it will print before the real ones.
     reader->AddListener(new LogEntryPrinter(STDOUT_FILENO));
-    reader->AddListener(new StatsLogProcessor());
+    sp<StatsLogProcessor> main_processor = new StatsLogProcessor();
+    data->service->setProcessor(main_processor);
+    reader->AddListener(main_processor);
 
     // TODO: Construct and add real LogListners here.
 
