diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 8ccd19c15..b49176252 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -2661,6 +2661,11 @@ void cmTarget::FinalizeSystemIncludeDirectories()
       end = this->Internal->LinkInterfacePropertyEntries.end();
       it != end; ++it)
     {
+    if (!cmGeneratorExpression::IsValidTargetName(it->Value)
+        && cmGeneratorExpression::Find(it->Value) == std::string::npos)
+      {
+      continue;
+      }
     {
     cmListFileBacktrace lfbt;
     cmGeneratorExpression ge(lfbt);
@@ -3037,15 +3042,11 @@ void cmTarget::SetProperty(const char* prop, const char* value)
   if (strcmp(prop, "LINK_LIBRARIES") == 0)
     {
     this->Internal->LinkInterfacePropertyEntries.clear();
-    if (cmGeneratorExpression::IsValidTargetName(value)
-        || cmGeneratorExpression::Find(value) != std::string::npos)
-      {
-      cmListFileBacktrace lfbt;
-      this->Makefile->GetBacktrace(lfbt);
-      cmValueWithOrigin entry(value, lfbt);
-      this->Internal->LinkInterfacePropertyEntries.push_back(entry);
-      }
-    // Fall through
+    cmListFileBacktrace lfbt;
+    this->Makefile->GetBacktrace(lfbt);
+    cmValueWithOrigin entry(value, lfbt);
+    this->Internal->LinkInterfacePropertyEntries.push_back(entry);
+    return;
     }
   this->Properties.SetProperty(prop, value, cmProperty::TARGET);
   this->MaybeInvalidatePropertyCache(prop);
@@ -3103,15 +3104,11 @@ void cmTarget::AppendProperty(const char* prop, const char* value,
     }
   if (strcmp(prop, "LINK_LIBRARIES") == 0)
     {
-    if (cmGeneratorExpression::IsValidTargetName(value)
-        || cmGeneratorExpression::Find(value) != std::string::npos)
-      {
-      cmListFileBacktrace lfbt;
-      this->Makefile->GetBacktrace(lfbt);
-      cmValueWithOrigin entry(value, lfbt);
-      this->Internal->LinkInterfacePropertyEntries.push_back(entry);
-      }
-    // Fall through
+    cmListFileBacktrace lfbt;
+    this->Makefile->GetBacktrace(lfbt);
+    cmValueWithOrigin entry(value, lfbt);
+    this->Internal->LinkInterfacePropertyEntries.push_back(entry);
+    return;
     }
   this->Properties.AppendProperty(prop, value, cmProperty::TARGET, asString);
   this->MaybeInvalidatePropertyCache(prop);
@@ -3391,6 +3388,11 @@ std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
         end = this->Internal->LinkInterfacePropertyEntries.end();
         it != end; ++it)
       {
+      if (!cmGeneratorExpression::IsValidTargetName(it->Value)
+          && cmGeneratorExpression::Find(it->Value) == std::string::npos)
+        {
+        continue;
+        }
       {
       cmGeneratorExpression ge(lfbt);
       cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
@@ -3589,6 +3591,11 @@ void cmTarget::GetCompileOptions(std::vector<std::string> &result,
         end = this->Internal->LinkInterfacePropertyEntries.end();
         it != end; ++it)
       {
+      if (!cmGeneratorExpression::IsValidTargetName(it->Value)
+          && cmGeneratorExpression::Find(it->Value) == std::string::npos)
+        {
+        continue;
+        }
       {
       cmGeneratorExpression ge(lfbt);
       cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
@@ -3697,6 +3704,11 @@ void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
         end = this->Internal->LinkInterfacePropertyEntries.end();
         it != end; ++it)
       {
+      if (!cmGeneratorExpression::IsValidTargetName(it->Value)
+          && cmGeneratorExpression::Find(it->Value) == std::string::npos)
+        {
+        continue;
+        }
       {
       cmGeneratorExpression ge(lfbt);
       cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
@@ -4185,6 +4197,22 @@ const char *cmTarget::GetProperty(const char* prop,
       }
     return output.c_str();
     }
+  if(strcmp(prop,"LINK_LIBRARIES") == 0)
+    {
+    static std::string output;
+    output = "";
+    std::string sep;
+    for (std::vector<cmValueWithOrigin>::const_iterator
+        it = this->Internal->LinkInterfacePropertyEntries.begin(),
+        end = this->Internal->LinkInterfacePropertyEntries.end();
+        it != end; ++it)
+      {
+      output += sep;
+      output += it->Value;
+      sep = ";";
+      }
+    return output.c_str();
+    }
 
   if (strcmp(prop,"IMPORTED") == 0)
     {