diff --git a/lib/AST/DeclTemplate.cpp b/lib/AST/DeclTemplate.cpp
index b7a586c..6e08854 100644
--- a/lib/AST/DeclTemplate.cpp
+++ b/lib/AST/DeclTemplate.cpp
@@ -338,11 +338,8 @@
       Arg = TemplateArgument(TemplateName(TTP), TTP->isParameterPack());
     }
     
-    if ((*Param)->isTemplateParameterPack()) {
-      TemplateArgument *Pack = new (Context) TemplateArgument [1];
-      *Pack = Arg;
-      Arg = TemplateArgument(Pack, 1);
-    }
+    if ((*Param)->isTemplateParameterPack())
+      Arg = TemplateArgument::CreatePackCopy(Context, &Arg, 1);
     
     TemplateArgs.push_back(Arg);
   }
diff --git a/lib/AST/TemplateBase.cpp b/lib/AST/TemplateBase.cpp
index 68e2332..6d6fee6 100644
--- a/lib/AST/TemplateBase.cpp
+++ b/lib/AST/TemplateBase.cpp
@@ -21,6 +21,7 @@
 #include "clang/AST/TypeLoc.h"
 #include "clang/Basic/Diagnostic.h"
 #include "llvm/ADT/FoldingSet.h"
+#include <algorithm>
 
 using namespace clang;
 
@@ -28,6 +29,17 @@
 // TemplateArgument Implementation
 //===----------------------------------------------------------------------===//
 
+TemplateArgument TemplateArgument::CreatePackCopy(ASTContext &Context,
+                                                  const TemplateArgument *Args,
+                                                  unsigned NumArgs) {
+  if (NumArgs == 0)
+    return TemplateArgument(0, 0);
+  
+  TemplateArgument *Storage = new (Context) TemplateArgument [NumArgs];
+  std::copy(Args, Args + NumArgs, Storage);
+  return TemplateArgument(Storage, NumArgs);
+}
+
 bool TemplateArgument::isDependent() const {
   switch (getKind()) {
   case Null:
diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp
index d0899c8..0a319b1 100644
--- a/lib/Sema/SemaTemplate.cpp
+++ b/lib/Sema/SemaTemplate.cpp
@@ -2556,13 +2556,12 @@
     if ((*Param)->isTemplateParameterPack()) {     
       if (PartialTemplateArgs && ArgumentPack.empty()) {
         Converted.push_back(TemplateArgument());
-      } else if (ArgumentPack.empty()) {
+      } else if (ArgumentPack.empty())
         Converted.push_back(TemplateArgument(0, 0));
-      } else {
-        TemplateArgument *PackedArgs
-          = new (Context) TemplateArgument [ArgumentPack.size()];
-        std::copy(ArgumentPack.begin(), ArgumentPack.end(), PackedArgs);
-        Converted.push_back(TemplateArgument(PackedArgs, ArgumentPack.size()));
+      else {
+        Converted.push_back(TemplateArgument::CreatePackCopy(Context, 
+                                                          ArgumentPack.data(), 
+                                                         ArgumentPack.size()));
         ArgumentPack.clear();
       }
     }
diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp
index dcc1ada..ff76992 100644
--- a/lib/Sema/SemaTemplateDeduction.cpp
+++ b/lib/Sema/SemaTemplateDeduction.cpp
@@ -585,13 +585,13 @@
       NewPack = DeducedTemplateArgument(TemplateArgument(0, 0));
     } else {
       TemplateArgument *ArgumentPack
-      = new (S.Context) TemplateArgument [NewlyDeducedPacks[I].size()];
+        = new (S.Context) TemplateArgument [NewlyDeducedPacks[I].size()];
       std::copy(NewlyDeducedPacks[I].begin(), NewlyDeducedPacks[I].end(),
                 ArgumentPack);
       NewPack
-      = DeducedTemplateArgument(TemplateArgument(ArgumentPack,
-                                                 NewlyDeducedPacks[I].size()),
-                                NewlyDeducedPacks[I][0].wasDeducedFromArrayBound());        
+        = DeducedTemplateArgument(TemplateArgument(ArgumentPack,
+                                                   NewlyDeducedPacks[I].size()),
+                            NewlyDeducedPacks[I][0].wasDeducedFromArrayBound());        
     }
     
     DeducedTemplateArgument Result
@@ -1726,12 +1726,9 @@
     }
     
     // Create the resulting argument pack.
-    TemplateArgument *PackedArgs = 0;
-    if (!PackedArgsBuilder.empty()) {
-      PackedArgs = new (S.Context) TemplateArgument[PackedArgsBuilder.size()];
-      std::copy(PackedArgsBuilder.begin(), PackedArgsBuilder.end(), PackedArgs);
-    }
-    Output.push_back(TemplateArgument(PackedArgs, PackedArgsBuilder.size()));
+    Output.push_back(TemplateArgument::CreatePackCopy(S.Context, 
+                                                      PackedArgsBuilder.data(),
+                                                     PackedArgsBuilder.size()));
     return false;
   }
   
