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
