diff --git a/action.h b/action.h
index 32bb302..c806b48 100644
--- a/action.h
+++ b/action.h
@@ -141,8 +141,7 @@
       // this type is a fancy way of saying: a shared_ptr to an
       // ActionPipe<InputObjectType>.
       const std::shared_ptr<ActionPipe<
-          typename ActionTraits<SubClass>::InputObjectType> >&
-          in_pipe) {
+          typename ActionTraits<SubClass>::InputObjectType>>& in_pipe) {
     in_pipe_ = in_pipe;
   }
 
@@ -154,8 +153,7 @@
       // this type is a fancy way of saying: a shared_ptr to an
       // ActionPipe<OutputObjectType>.
       const std::shared_ptr<ActionPipe<
-          typename ActionTraits<SubClass>::OutputObjectType> >&
-          out_pipe) {
+          typename ActionTraits<SubClass>::OutputObjectType>>& out_pipe) {
     out_pipe_ = out_pipe;
   }
 
@@ -196,11 +194,9 @@
   // point to when the last such shared_ptr object dies. We consider the
   // Actions on either end of a pipe to "own" the pipe. When the last Action
   // of the two dies, the ActionPipe will die, too.
-  std::shared_ptr<
-      ActionPipe<typename ActionTraits<SubClass>::InputObjectType> >
+  std::shared_ptr<ActionPipe<typename ActionTraits<SubClass>::InputObjectType>>
       in_pipe_;
-  std::shared_ptr<
-      ActionPipe<typename ActionTraits<SubClass>::OutputObjectType> >
+  std::shared_ptr<ActionPipe<typename ActionTraits<SubClass>::OutputObjectType>>
       out_pipe_;
 };
 
diff --git a/action_pipe.h b/action_pipe.h
index cd676c6..b84b0f6 100644
--- a/action_pipe.h
+++ b/action_pipe.h
@@ -57,8 +57,7 @@
   // when the last Action is destroyed.
   template<typename FromAction, typename ToAction>
   static void Bond(FromAction* from, ToAction* to) {
-    std::shared_ptr<ActionPipe<ObjectType> > pipe(
-        new ActionPipe<ObjectType>);
+    std::shared_ptr<ActionPipe<ObjectType>> pipe(new ActionPipe<ObjectType>);
     from->set_out_pipe(pipe);
 
     to->set_in_pipe(pipe);  // If you get an error on this line, then
diff --git a/bzip.cc b/bzip.cc
index eb1655c..744ea67 100644
--- a/bzip.cc
+++ b/bzip.cc
@@ -107,12 +107,12 @@
 
 bool BzipCompressString(const std::string& str,
                         std::vector<char>* out) {
-  return BzipString<BzipData<BzipBuffToBuffCompress> >(str, out);
+  return BzipString<BzipData<BzipBuffToBuffCompress>>(str, out);
 }
 
 bool BzipDecompressString(const std::string& str,
                           std::vector<char>* out) {
-  return BzipString<BzipData<BzipBuffToBuffDecompress> >(str, out);
+  return BzipString<BzipData<BzipBuffToBuffDecompress>>(str, out);
 }
 
 }  // namespace chromeos_update_engine
diff --git a/chrome_browser_proxy_resolver.h b/chrome_browser_proxy_resolver.h
index 3b8e266..80b1b2a 100644
--- a/chrome_browser_proxy_resolver.h
+++ b/chrome_browser_proxy_resolver.h
@@ -50,8 +50,8 @@
  private:
   FRIEND_TEST(ChromeBrowserProxyResolverTest, ParseTest);
   FRIEND_TEST(ChromeBrowserProxyResolverTest, SuccessTest);
-  typedef std::multimap<std::string, std::pair<ProxiesResolvedFn, void*> >
-    CallbacksMap;
+  typedef std::multimap<std::string, std::pair<ProxiesResolvedFn, void*>>
+      CallbacksMap;
   typedef std::multimap<std::string, GSource*> TimeoutsMap;
 
   // Handle a reply from Chrome:
diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index 6df65e4..9292cab 100644
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -146,7 +146,7 @@
 static bool InsertSignaturePlaceholder(int signature_size,
                                        const string& payload_path,
                                        uint64_t* out_metadata_size) {
-  vector<vector<char> > signatures;
+  vector<vector<char>> signatures;
   signatures.push_back(vector<char>(signature_size, 0));
 
   return PayloadSigner::AddSignatureToPayload(
@@ -170,7 +170,7 @@
                                       &signature));
   ASSERT_TRUE(PayloadSigner::AddSignatureToPayload(
       payload_path,
-      vector<vector<char> >(1, signature),
+      vector<vector<char>>(1, signature),
       payload_path,
       out_metadata_size));
   EXPECT_TRUE(PayloadVerifier::VerifySignedPayload(
diff --git a/http_fetcher_unittest.cc b/http_fetcher_unittest.cc
index ec074d7..531986f 100644
--- a/http_fetcher_unittest.cc
+++ b/http_fetcher_unittest.cc
@@ -924,7 +924,7 @@
 
 void MultiTest(HttpFetcher* fetcher_in,
                const string& url,
-               const vector<pair<off_t, off_t> >& ranges,
+               const vector<pair<off_t, off_t>>& ranges,
                const string& expected_prefix,
                off_t expected_size,
                HttpResponseCode expected_response_code) {
@@ -938,7 +938,7 @@
         dynamic_cast<MultiRangeHttpFetcher*>(fetcher_in);
     ASSERT_TRUE(multi_fetcher);
     multi_fetcher->ClearRanges();
-    for (vector<pair<off_t, off_t> >::const_iterator it = ranges.begin(),
+    for (vector<pair<off_t, off_t>>::const_iterator it = ranges.begin(),
              e = ranges.end(); it != e; ++it) {
       std::string tmp_str = base::StringPrintf("%jd+", it->first);
       if (it->second > 0) {
@@ -974,7 +974,7 @@
   scoped_ptr<HttpServer> server(this->test_.CreateServer());
   ASSERT_TRUE(server->started_);
 
-  vector<pair<off_t, off_t> > ranges;
+  vector<pair<off_t, off_t>> ranges;
   ranges.push_back(make_pair(0, 25));
   ranges.push_back(make_pair(99, 0));
   MultiTest(this->test_.NewLargeFetcher(),
@@ -992,7 +992,7 @@
   scoped_ptr<HttpServer> server(this->test_.CreateServer());
   ASSERT_TRUE(server->started_);
 
-  vector<pair<off_t, off_t> > ranges;
+  vector<pair<off_t, off_t>> ranges;
   ranges.push_back(make_pair(0, 24));
   MultiTest(this->test_.NewLargeFetcher(),
             this->test_.BigUrl(server->GetPort()),
@@ -1009,7 +1009,7 @@
   scoped_ptr<HttpServer> server(this->test_.CreateServer());
   ASSERT_TRUE(server->started_);
 
-  vector<pair<off_t, off_t> > ranges;
+  vector<pair<off_t, off_t>> ranges;
   ranges.push_back(make_pair(kBigLength - 2, 0));
   ranges.push_back(make_pair(kBigLength - 3, 0));
   MultiTest(this->test_.NewLargeFetcher(),
@@ -1027,7 +1027,7 @@
   scoped_ptr<HttpServer> server(this->test_.CreateServer());
   ASSERT_TRUE(server->started_);
 
-  vector<pair<off_t, off_t> > ranges;
+  vector<pair<off_t, off_t>> ranges;
   ranges.push_back(make_pair(kBigLength - 2, 4));
   for (int i = 0; i < 2; ++i) {
     LOG(INFO) << "i = " << i;
@@ -1053,7 +1053,7 @@
   scoped_ptr<HttpServer> server(this->test_.CreateServer());
   ASSERT_TRUE(server->started_);
 
-  vector<pair<off_t, off_t> > ranges;
+  vector<pair<off_t, off_t>> ranges;
   ranges.push_back(make_pair(0, 25));
   ranges.push_back(make_pair(99, 0));
   MultiTest(this->test_.NewLargeFetcher(3),
@@ -1075,7 +1075,7 @@
   scoped_ptr<HttpServer> server(this->test_.CreateServer());
   ASSERT_TRUE(server->started_);
 
-  vector<pair<off_t, off_t> > ranges;
+  vector<pair<off_t, off_t>> ranges;
   ranges.push_back(make_pair(0, 25));
   ranges.push_back(make_pair(99, 0));
   MultiTest(this->test_.NewLargeFetcher(2),
diff --git a/p2p_manager.cc b/p2p_manager.cc
index fcaae1a..5039747 100644
--- a/p2p_manager.cc
+++ b/p2p_manager.cc
@@ -310,7 +310,7 @@
   GDir* dir = nullptr;
   GError* error = nullptr;
   const char* name = nullptr;
-  vector<pair<FilePath, Time> > matches;
+  vector<pair<FilePath, Time>> matches;
 
   // Go through all files in the p2p dir and pick the ones that match
   // and get their ctime.
@@ -348,7 +348,7 @@
   std::sort(matches.begin(), matches.end(), MatchCompareFunc);
 
   // Delete starting at element num_files_to_keep_.
-  vector<pair<FilePath, Time> >::const_iterator i;
+  vector<pair<FilePath, Time>>::const_iterator i;
   for (i = matches.begin() + num_files_to_keep_; i < matches.end(); ++i) {
     const base::FilePath& file = i->first;
     LOG(INFO) << "Deleting p2p file " << file.value();
diff --git a/payload_generator/delta_diff_generator.cc b/payload_generator/delta_diff_generator.cc
index 94ceaa0..3b8f718 100644
--- a/payload_generator/delta_diff_generator.cc
+++ b/payload_generator/delta_diff_generator.cc
@@ -1194,7 +1194,7 @@
   // Find enough blocks
   ExtentRanges scratch_ranges;
   // Each block that's supplying temp blocks and the corresponding blocks:
-  typedef vector<pair<Vertex::Index, ExtentRanges> > SupplierVector;
+  typedef vector<pair<Vertex::Index, ExtentRanges>> SupplierVector;
   SupplierVector block_suppliers;
   uint64_t scratch_blocks_found = 0;
   for (vector<Vertex::Index>::size_type i = (*reverse_op_indexes)[old_dst] + 1,
diff --git a/payload_generator/full_update_generator.cc b/payload_generator/full_update_generator.cc
index 5b6a6b3..b4594a5 100644
--- a/payload_generator/full_update_generator.cc
+++ b/payload_generator/full_update_generator.cc
@@ -142,7 +142,7 @@
     int in_fd = open(path.c_str(), O_RDONLY, 0);
     TEST_AND_RETURN_FALSE(in_fd >= 0);
     ScopedFdCloser in_fd_closer(&in_fd);
-    deque<shared_ptr<ChunkProcessor> > threads;
+    deque<shared_ptr<ChunkProcessor>> threads;
     int last_progress_update = INT_MIN;
     off_t bytes_left = part_sizes[partition], counter = 0, offset = 0;
     while (bytes_left > 0 || !threads.empty()) {
diff --git a/payload_generator/generate_delta_main.cc b/payload_generator/generate_delta_main.cc
index 38c4e76..15e379f 100644
--- a/payload_generator/generate_delta_main.cc
+++ b/payload_generator/generate_delta_main.cc
@@ -215,7 +215,7 @@
       << "Must pass --out_file to sign payload.";
   LOG_IF(FATAL, FLAGS_signature_file.empty())
       << "Must pass --signature_file to sign payload.";
-  vector<vector<char> > signatures;
+  vector<vector<char>> signatures;
   vector<string> signature_files;
   base::SplitString(FLAGS_signature_file, ':', &signature_files);
   for (vector<string>::iterator it = signature_files.begin(),
diff --git a/payload_generator/payload_signer.cc b/payload_generator/payload_signer.cc
index 9a9008f..d3afb86 100644
--- a/payload_generator/payload_signer.cc
+++ b/payload_generator/payload_signer.cc
@@ -25,7 +25,7 @@
 
 // Given raw |signatures|, packs them into a protobuf and serializes it into a
 // binary blob. Returns true on success, false otherwise.
-bool ConvertSignatureToProtobufBlob(const vector<vector<char> >& signatures,
+bool ConvertSignatureToProtobufBlob(const vector<vector<char>>& signatures,
                                     vector<char>* out_signature_blob) {
   // Pack it into a protobuf
   Signatures out_message;
@@ -36,7 +36,7 @@
       << kSignatureMessageOriginalVersion << ", "
       << kSignatureMessageCurrentVersion << "] inclusive, but you only "
       << "provided " << signatures.size() << " signatures.";
-  for (vector<vector<char> >::const_iterator it = signatures.begin(),
+  for (vector<vector<char>>::const_iterator it = signatures.begin(),
            e = signatures.end(); it != e; ++it) {
     const vector<char>& signature = *it;
     Signatures_Signature* sig_message = out_message.add_signatures();
@@ -176,7 +176,7 @@
       unsigned_payload_path, -1, &hash_data) ==
                         utils::FileSize(unsigned_payload_path));
 
-  vector<vector<char> > signatures;
+  vector<vector<char>> signatures;
   for (vector<string>::const_iterator it = private_key_paths.begin(),
            e = private_key_paths.end(); it != e; ++it) {
     vector<char> signature;
@@ -215,7 +215,7 @@
   // TODO(petkov): Reduce memory usage -- the payload is manipulated in memory.
 
   // Loads the payload and adds the signature op to it.
-  vector<vector<char> > signatures;
+  vector<vector<char>> signatures;
   for (vector<int>::const_iterator it = signature_sizes.begin(),
            e = signature_sizes.end(); it != e; ++it) {
     vector<char> signature(*it, 0);
@@ -276,7 +276,7 @@
 
 bool PayloadSigner::AddSignatureToPayload(
     const string& payload_path,
-    const vector<vector<char> >& signatures,
+    const vector<vector<char>>& signatures,
     const string& signed_payload_path,
     uint64_t *out_metadata_size) {
   // TODO(petkov): Reduce memory usage -- the payload is manipulated in memory.
diff --git a/payload_generator/payload_signer.h b/payload_generator/payload_signer.h
index 8fb0a70..4a35785 100644
--- a/payload_generator/payload_signer.h
+++ b/payload_generator/payload_signer.h
@@ -86,7 +86,7 @@
   // on success, false otherwise.
   static bool AddSignatureToPayload(
       const std::string& payload_path,
-      const std::vector<std::vector<char> >& signatures,
+      const std::vector<std::vector<char>>& signatures,
       const std::string& signed_payload_path,
       uint64_t* out_metadata_size);
 
diff --git a/payload_generator/tarjan.h b/payload_generator/tarjan.h
index 48ec9a2..e3dc97f 100644
--- a/payload_generator/tarjan.h
+++ b/payload_generator/tarjan.h
@@ -32,7 +32,7 @@
   Vertex::Index index_;
   Vertex::Index required_vertex_;
   std::vector<Vertex::Index> stack_;
-  std::vector<std::vector<Vertex::Index> > components_;
+  std::vector<std::vector<Vertex::Index>> components_;
 };
 
 }  // namespace chromeos_update_engine
diff --git a/subprocess.cc b/subprocess.cc
index e2ab793..76be10c 100644
--- a/subprocess.cc
+++ b/subprocess.cc
@@ -249,7 +249,7 @@
 }
 
 bool Subprocess::SubprocessInFlight() {
-  for (std::map<int, shared_ptr<SubprocessRecord> >::iterator it =
+  for (std::map<int, shared_ptr<SubprocessRecord>>::iterator it =
            subprocess_records_.begin();
        it != subprocess_records_.end(); ++it) {
     if (it->second->callback)
diff --git a/subprocess.h b/subprocess.h
index a666849..1b11494 100644
--- a/subprocess.h
+++ b/subprocess.h
@@ -97,7 +97,7 @@
 
   // A map from the asynchronous subprocess tag (see Exec) to the subprocess
   // record structure for all active asynchronous subprocesses.
-  std::map<int, std::shared_ptr<SubprocessRecord> > subprocess_records_;
+  std::map<int, std::shared_ptr<SubprocessRecord>> subprocess_records_;
 
   DISALLOW_COPY_AND_ASSIGN(Subprocess);
 };
diff --git a/test_utils.h b/test_utils.h
index 45f409c..37d552f 100644
--- a/test_utils.h
+++ b/test_utils.h
@@ -197,7 +197,7 @@
 class ObjectFeederAction;
 
 template<typename T>
-class ActionTraits<ObjectFeederAction<T> > {
+class ActionTraits<ObjectFeederAction<T>> {
  public:
   typedef T OutputObjectType;
   typedef NoneType InputObjectType;
@@ -206,7 +206,7 @@
 // This is a simple Action class for testing. It feeds an object into
 // another action.
 template<typename T>
-class ObjectFeederAction : public Action<ObjectFeederAction<T> > {
+class ObjectFeederAction : public Action<ObjectFeederAction<T>> {
  public:
   typedef NoneType InputObjectType;
   typedef T OutputObjectType;
@@ -231,7 +231,7 @@
 class ObjectCollectorAction;
 
 template<typename T>
-class ActionTraits<ObjectCollectorAction<T> > {
+class ActionTraits<ObjectCollectorAction<T>> {
  public:
   typedef NoneType OutputObjectType;
   typedef T InputObjectType;
@@ -240,7 +240,7 @@
 // This is a simple Action class for testing. It receives an object from
 // another action.
 template<typename T>
-class ObjectCollectorAction : public Action<ObjectCollectorAction<T> > {
+class ObjectCollectorAction : public Action<ObjectCollectorAction<T>> {
  public:
   typedef T InputObjectType;
   typedef NoneType OutputObjectType;
diff --git a/update_attempter.cc b/update_attempter.cc
index d8ae609..2dc1b42 100644
--- a/update_attempter.cc
+++ b/update_attempter.cc
@@ -667,7 +667,7 @@
   actions_.push_back(shared_ptr<AbstractAction>(update_complete_action));
 
   // Enqueue the actions
-  for (vector<shared_ptr<AbstractAction> >::iterator it = actions_.begin();
+  for (vector<shared_ptr<AbstractAction>>::iterator it = actions_.begin();
        it != actions_.end(); ++it) {
     processor_->EnqueueAction(it->get());
   }
@@ -721,7 +721,7 @@
   BuildPostInstallActions(install_plan_action.get());
 
   // Enqueue the actions
-  for (vector<shared_ptr<AbstractAction> >::iterator it = actions_.begin();
+  for (vector<shared_ptr<AbstractAction>>::iterator it = actions_.begin();
        it != actions_.end(); ++it) {
     processor_->EnqueueAction(it->get());
   }
diff --git a/update_attempter.h b/update_attempter.h
index 2d274e5..221b7d8 100644
--- a/update_attempter.h
+++ b/update_attempter.h
@@ -392,7 +392,7 @@
   // set back in the middle of an update.
   base::TimeTicks last_notify_time_;
 
-  std::vector<std::shared_ptr<AbstractAction> > actions_;
+  std::vector<std::shared_ptr<AbstractAction>> actions_;
   scoped_ptr<ActionProcessor> processor_;
 
   // External state of the system outside the update_engine process
diff --git a/utils.cc b/utils.cc
index 0938704..05f7b07 100644
--- a/utils.cc
+++ b/utils.cc
@@ -81,9 +81,9 @@
 
   // At this point we want to convert the format key=value pair from mosys to
   // a vector of key value pairs.
-  vector<pair<string, string> > kv_pairs;
+  vector<pair<string, string>> kv_pairs;
   if (base::SplitStringIntoKeyValuePairs(input_line, '=', ' ', &kv_pairs)) {
-    for (vector<pair<string, string> >::iterator it = kv_pairs.begin();
+    for (vector<pair<string, string>>::iterator it = kv_pairs.begin();
          it != kv_pairs.end(); ++it) {
       // Finally match against the fw_verion which may have quotes.
       if (it->first == "fw_version") {
