diff --git a/generate_delta_main.cc b/generate_delta_main.cc
index 14af193..b64533b 100644
--- a/generate_delta_main.cc
+++ b/generate_delta_main.cc
@@ -4,45 +4,80 @@
 
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdio.h>
+#include <errno.h>
 #include <unistd.h>
-
-#include <algorithm>
+#include <set>
 #include <string>
-#include <vector>
-#include <tr1/memory>
-
 #include <glib.h>
-
 #include "chromeos/obsolete_logging.h"
+#include "update_engine/delta_diff_generator.h"
 #include "update_engine/subprocess.h"
 #include "update_engine/update_metadata.pb.h"
-
-using std::sort;
-using std::string;
-using std::vector;
-using std::tr1::shared_ptr;
+#include "update_engine/utils.h"
 
 // This file contains a simple program that takes an old path, a new path,
 // and an output file as arguments and the path to an output file and
 // generates a delta that can be sent to Chrome OS clients.
 
+using std::set;
+using std::string;
+
 namespace chromeos_update_engine {
 
-int main(int argc, char** argv) {
+namespace {
+// These paths should never be delta diffed. They should always be transmitted
+// in full in the update.
+const char* kNonDiffPaths[] = {
+  "/boot/extlinux.conf"
+};
+
+void usage(const char* argv0) {
+  printf("usage: %s old_dir new_dir out_file\n", argv0);
+  exit(1);
+}
+
+bool IsDir(const char* path) {
+  struct stat stbuf;
+  TEST_AND_RETURN_FALSE_ERRNO(lstat(path, &stbuf) == 0);
+  return S_ISDIR(stbuf.st_mode);
+}
+
+int Main(int argc, char** argv) {
   g_thread_init(NULL);
   Subprocess::Init();
   if (argc != 4) {
     usage(argv[0]);
   }
+  logging::InitLogging("",
+                       logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG,
+                       logging::DONT_LOCK_LOG_FILE,
+                       logging::APPEND_TO_OLD_LOG_FILE);
   const char* old_dir = argv[1];
   const char* new_dir = argv[2];
   if ((!IsDir(old_dir)) || (!IsDir(new_dir))) {
     usage(argv[0]);
   }
-  // TODO(adlr): implement using DeltaDiffGenerator
+  
+  set<string> non_diff_paths;
+  for (size_t i = 0; i < arraysize(kNonDiffPaths); i++)
+    non_diff_paths.insert(kNonDiffPaths[i]);
+  
+  DeltaArchiveManifest* manifest =
+      DeltaDiffGenerator::EncodeMetadataToProtoBuffer(new_dir);
+  CHECK(manifest);
+  CHECK(DeltaDiffGenerator::EncodeDataToDeltaFile(manifest,
+                                                  old_dir,
+                                                  new_dir,
+                                                  argv[3],
+                                                  non_diff_paths,
+                                                  ""));
   return 0;
-}
\ No newline at end of file
+}
+
+}  // namespace {}
+
+}  // namespace chromeos_update_engine
+
+int main(int argc, char** argv) {
+  return chromeos_update_engine::Main(argc, argv);
+}
