diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index a3cd55f..35b2066 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -446,7 +446,6 @@
     } else if (A->getOption().isLinkerInput()) {
       // Just treat as object type, we could make a special type for
       // this if necessary.
-      A->claim();
       Inputs.push_back(std::make_pair(types::TY_Object, A));
 
     } else if (A->getOption().getId() == options::OPT_x) {
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index f849c2b..25023c1 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -13,42 +13,47 @@
 using namespace clang::driver::tools;
 
 void Clang::ConstructJob(Compilation &C, const JobAction &JA,
-                         InputInfo &Output, InputInfoList &Inputs,
+                         const InputInfo &Output, 
+                         const InputInfoList &Inputs,
                          const ArgList &TCArgs,
                          const char *LinkingOutput) const {
-
 }
 
 void gcc::Preprocess::ConstructJob(Compilation &C, const JobAction &JA,
-                                   InputInfo &Output, InputInfoList &Inputs,
+                                   const InputInfo &Output, 
+                                   const InputInfoList &Inputs,
                                    const ArgList &TCArgs,
                                    const char *LinkingOutput) const {
 
 }
 
 void gcc::Precompile::ConstructJob(Compilation &C, const JobAction &JA,
-                                   InputInfo &Output, InputInfoList &Inputs,
+                                   const InputInfo &Output, 
+                                   const InputInfoList &Inputs,
                                    const ArgList &TCArgs,
                                    const char *LinkingOutput) const {
 
 }
 
 void gcc::Compile::ConstructJob(Compilation &C, const JobAction &JA,
-                                InputInfo &Output, InputInfoList &Inputs,
+                                const InputInfo &Output, 
+                                const InputInfoList &Inputs,
                                 const ArgList &TCArgs,
                                 const char *LinkingOutput) const {
 
 }
 
 void gcc::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
-                                 InputInfo &Output, InputInfoList &Inputs,
+                                 const InputInfo &Output, 
+                                 const InputInfoList &Inputs,
                                  const ArgList &TCArgs,
                                  const char *LinkingOutput) const {
 
 }
 
 void gcc::Link::ConstructJob(Compilation &C, const JobAction &JA,
-                             InputInfo &Output, InputInfoList &Inputs,
+                             const InputInfo &Output, 
+                             const InputInfoList &Inputs,
                              const ArgList &TCArgs,
                              const char *LinkingOutput) const {
 
diff --git a/lib/Driver/Tools.h b/lib/Driver/Tools.h
index da9d3e2..d774e02 100644
--- a/lib/Driver/Tools.h
+++ b/lib/Driver/Tools.h
@@ -27,7 +27,8 @@
     virtual bool hasIntegratedCPP() const { return true; }
 
     virtual void ConstructJob(Compilation &C, const JobAction &JA,
-                              InputInfo &Output, InputInfoList &Inputs, 
+                              const InputInfo &Output, 
+                              const InputInfoList &Inputs, 
                               const ArgList &TCArgs, 
                               const char *LinkingOutput) const;
   };
@@ -43,7 +44,8 @@
     virtual bool hasIntegratedCPP() const { return false; }
 
     virtual void ConstructJob(Compilation &C, const JobAction &JA,
-                              InputInfo &Output, InputInfoList &Inputs, 
+                              const InputInfo &Output, 
+                              const InputInfoList &Inputs, 
                               const ArgList &TCArgs, 
                               const char *LinkingOutput) const;
   };
@@ -57,7 +59,8 @@
     virtual bool hasIntegratedCPP() const { return true; }
 
     virtual void ConstructJob(Compilation &C, const JobAction &JA,
-                              InputInfo &Output, InputInfoList &Inputs, 
+                              const InputInfo &Output, 
+                              const InputInfoList &Inputs, 
                               const ArgList &TCArgs, 
                               const char *LinkingOutput) const;
   };
@@ -71,7 +74,8 @@
     virtual bool hasIntegratedCPP() const { return true; }
 
     virtual void ConstructJob(Compilation &C, const JobAction &JA,
-                              InputInfo &Output, InputInfoList &Inputs, 
+                              const InputInfo &Output, 
+                              const InputInfoList &Inputs, 
                               const ArgList &TCArgs, 
                               const char *LinkingOutput) const;
   };
@@ -85,7 +89,8 @@
     virtual bool hasIntegratedCPP() const { return false; }
 
     virtual void ConstructJob(Compilation &C, const JobAction &JA,
-                              InputInfo &Output, InputInfoList &Inputs, 
+                              const InputInfo &Output, 
+                              const InputInfoList &Inputs, 
                               const ArgList &TCArgs, 
                               const char *LinkingOutput) const;
   };
@@ -99,7 +104,8 @@
     virtual bool hasIntegratedCPP() const { return false; }
 
     virtual void ConstructJob(Compilation &C, const JobAction &JA,
-                              InputInfo &Output, InputInfoList &Inputs, 
+                              const InputInfo &Output, 
+                              const InputInfoList &Inputs, 
                               const ArgList &TCArgs, 
                               const char *LinkingOutput) const;
   };
