diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index c8b03e1..d8a085e 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -353,7 +353,7 @@ cmNinjaTargetGenerator
   vars.CMTarget = this->GetTarget();
   vars.Language = lang.c_str();
   vars.Source = "$in";
-  vars.Object = "$out";
+  vars.Object = "$OBJECT_FILE";
   vars.Defines = "$DEFINES";
   vars.TargetPDB = "$TARGET_PDB";
   vars.ObjectDir = "$OBJECT_DIR";
@@ -382,7 +382,7 @@ cmNinjaTargetGenerator
                         mf->GetSafeDefinition("CMAKE_CXX_COMPILER");
       cldeps =  "\"";
       cldeps += mf->GetSafeDefinition("CMAKE_CMCLDEPS_EXECUTABLE");
-      cldeps += "\" " + lang + " $in \"$DEP_FILE\" $out \"";
+      cldeps += "\" " + lang + " $in \"$DEP_FILE\" $OBJECT_FILE \"";
       cldeps += mf->GetSafeDefinition("CMAKE_CL_SHOWINCLUDES_PREFIX");
       cldeps += "\" \"" + cl + "\" ";
       }
@@ -402,7 +402,7 @@ cmNinjaTargetGenerator
     if (!depfileFlags.empty())
       {
       cmSystemTools::ReplaceString(depfileFlags, "<DEPFILE>", "$DEP_FILE");
-      cmSystemTools::ReplaceString(depfileFlags, "<OBJECT>",  "$out");
+      cmSystemTools::ReplaceString(depfileFlags, "<OBJECT>",  "$OBJECT_FILE");
       cmSystemTools::ReplaceString(depfileFlags, "<CMAKE_C_COMPILER>",
                                    mf->GetDefinition("CMAKE_C_COMPILER"));
       flags += " " + depfileFlags;
@@ -432,7 +432,7 @@ cmNinjaTargetGenerator
   cmOStringStream comment;
   comment << "Rule for compiling " << lang << " files.";
   cmOStringStream description;
-  description << "Building " << lang << " object $out";
+  description << "Building " << lang << " object $OBJECT_FILE";
   this->GetGlobalGenerator()->AddRule(this->LanguageCompilerRule(lang),
                                       cmdLine,
                                       description.str(),
@@ -517,6 +517,18 @@ cmNinjaTargetGenerator
   // Add this object to the list of object files.
   this->Objects.push_back(objectFileName);
 
+  if(const char* objectOutputs = source->GetProperty("OBJECT_OUTPUTS")) {
+    std::vector<std::string> outputList;
+    cmSystemTools::ExpandListArgument(objectOutputs, outputList);
+    std::transform(outputList.begin(), outputList.end(), outputList.begin(),
+                   MapToNinjaPath());
+    for(std::vector<std::string>::const_iterator i = outputList.begin();
+      i != outputList.end(); ++i)
+    {
+      outputs.push_back(*i);
+    }
+  }
+
   cmNinjaDeps explicitDeps;
   std::string sourceFileName;
   if (language == "RC")
@@ -560,6 +572,7 @@ cmNinjaTargetGenerator
   }
 
   cmNinjaVars vars;
+  vars["OBJECT_FILE"] = objectFileName;
   vars["FLAGS"] = this->ComputeFlagsForObject(source, language);
   vars["DEFINES"] = this->ComputeDefines(source, language);
   if (needsDepFile(language)) {
@@ -632,16 +645,6 @@ cmNinjaTargetGenerator
                                          orderOnlyDeps,
                                          vars);
 
-  if(const char* objectOutputs = source->GetProperty("OBJECT_OUTPUTS")) {
-    std::vector<std::string> outputList;
-    cmSystemTools::ExpandListArgument(objectOutputs, outputList);
-    std::transform(outputList.begin(), outputList.end(), outputList.begin(),
-                   MapToNinjaPath());
-    this->GetGlobalGenerator()->WritePhonyBuild(this->GetBuildFileStream(),
-                                                "Additional output files.",
-                                                outputList,
-                                                outputs);
-  }
 }
 
 //----------------------------------------------------------------------------