diff --git a/include/clang/Frontend/HeaderSearchOptions.h b/include/clang/Frontend/HeaderSearchOptions.h
index 967f906..500663b 100644
--- a/include/clang/Frontend/HeaderSearchOptions.h
+++ b/include/clang/Frontend/HeaderSearchOptions.h
@@ -59,11 +59,11 @@
   /// environment variable for gcc.
   std::string EnvIncPath;
 
-  /// A (system-path) delimited list of include paths to be added from the
-  /// environment following the user specified includes and the \see EnvIncPath
-  /// includes (but prior to builtin and standard includes). This is parsed in
-  /// the same manner as the CPATH environment variable for gcc.
-  std::string LangEnvIncPath;
+  /// Per-language environmental include paths, see \see EnvIncPath.
+  std::string CEnvIncPath;
+  std::string ObjCEnvIncPath;
+  std::string CXXEnvIncPath;
+  std::string ObjCXXEnvIncPath;
 
   /// If non-empty, the path to the compiler builtin include directory, which
   /// will be searched following the user and environment includes.
diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp
index 70f0b21..5964a26 100644
--- a/lib/Frontend/InitHeaderSearch.cpp
+++ b/lib/Frontend/InitHeaderSearch.cpp
@@ -636,7 +636,14 @@
 
   // Add entries from CPATH and friends.
   Init.AddDelimitedPaths(HSOpts.EnvIncPath.c_str());
-  Init.AddDelimitedPaths(HSOpts.LangEnvIncPath.c_str());
+  if (Lang.CPlusPlus && Lang.ObjC1)
+    Init.AddDelimitedPaths(HSOpts.ObjCXXEnvIncPath.c_str());
+  else if (Lang.CPlusPlus)
+    Init.AddDelimitedPaths(HSOpts.CXXEnvIncPath.c_str());
+  else if (Lang.ObjC1)
+    Init.AddDelimitedPaths(HSOpts.ObjCEnvIncPath.c_str());
+  else
+    Init.AddDelimitedPaths(HSOpts.CEnvIncPath.c_str());
 
   if (!HSOpts.BuiltinIncludePath.empty()) {
     // Ignore the sys root, we *always* look for clang headers relative to
diff --git a/tools/clang-cc/Options.cpp b/tools/clang-cc/Options.cpp
index 174143d..1dccafd 100644
--- a/tools/clang-cc/Options.cpp
+++ b/tools/clang-cc/Options.cpp
@@ -910,8 +910,7 @@
 }
 
 void clang::InitializeHeaderSearchOptions(HeaderSearchOptions &Opts,
-                                          llvm::StringRef BuiltinIncludePath,
-                                          const LangOptions &Lang) {
+                                          llvm::StringRef BuiltinIncludePath) {
   using namespace headersearchoptions;
 
   Opts.Sysroot = isysroot;
@@ -993,19 +992,14 @@
     Opts.EnvIncPath = Env;
 
   // Add language specific environment paths.
-  if (Lang.CPlusPlus && Lang.ObjC1) {
-    if (const char *Env = getenv("OBJCPLUS_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  } else if (Lang.CPlusPlus) {
-    if (const char *Env = getenv("CPLUS_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  } else if (Lang.ObjC1) {
-    if (const char *Env = getenv("OBJC_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  } else {
-    if (const char *Env = getenv("C_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  }
+  if (const char *Env = getenv("OBJCPLUS_INCLUDE_PATH"))
+    Opts.ObjCXXEnvIncPath = Env;
+  if (const char *Env = getenv("CPLUS_INCLUDE_PATH"))
+    Opts.CXXEnvIncPath = Env;
+  if (const char *Env = getenv("OBJC_INCLUDE_PATH"))
+    Opts.CEnvIncPath = Env;
+  if (const char *Env = getenv("C_INCLUDE_PATH"))
+    Opts.CEnvIncPath = Env;
 
   if (!nobuiltininc)
     Opts.BuiltinIncludePath = BuiltinIncludePath;
diff --git a/tools/clang-cc/Options.h b/tools/clang-cc/Options.h
index 0b67da3..9a2fd9d 100644
--- a/tools/clang-cc/Options.h
+++ b/tools/clang-cc/Options.h
@@ -40,8 +40,7 @@
 void InitializeFrontendOptions(FrontendOptions &Opts);
 
 void InitializeHeaderSearchOptions(HeaderSearchOptions &Opts,
-                                   llvm::StringRef BuiltinIncludePath,
-                                   const LangOptions &Lang);
+                                   llvm::StringRef BuiltinIncludePath);
 
 void InitializeLangOptions(LangOptions &Options,
                            FrontendOptions::InputKind LK,
diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp
index aea9774..fb397d5 100644
--- a/tools/clang-cc/clang-cc.cpp
+++ b/tools/clang-cc/clang-cc.cpp
@@ -52,7 +52,7 @@
 using namespace clang;
 
 //===----------------------------------------------------------------------===//
-// Utility Methods
+// Main driver
 //===----------------------------------------------------------------------===//
 
 std::string GetBuiltinIncludePath(const char *Argv0) {
@@ -74,9 +74,14 @@
   return P.str();
 }
 
-//===----------------------------------------------------------------------===//
-// Main driver
-//===----------------------------------------------------------------------===//
+static void LLVMErrorHandler(void *UserData, const std::string &Message) {
+  Diagnostic &Diags = *static_cast<Diagnostic*>(UserData);
+
+  Diags.Report(diag::err_fe_error_backend) << Message;
+
+  // We cannot recover from llvm errors.
+  exit(1);
+}
 
 /// ClangFrontendTimer - The front-end activities should charge time to it with
 /// TimeRegion.  The -ftime-report option controls whether this will do
@@ -144,15 +149,6 @@
   }
 }
 
-static void LLVMErrorHandler(void *UserData, const std::string &Message) {
-  Diagnostic &Diags = *static_cast<Diagnostic*>(UserData);
-
-  Diags.Report(diag::err_fe_error_backend) << Message;
-
-  // We cannot recover from llvm errors.
-  exit(1);
-}
-
 static TargetInfo *
 ConstructCompilerInvocation(CompilerInvocation &Opts, Diagnostic &Diags,
                             const char *Argv0, bool &IsAST) {
@@ -194,8 +190,7 @@
 
   // Initialize the header search options.
   InitializeHeaderSearchOptions(Opts.getHeaderSearchOpts(),
-                                GetBuiltinIncludePath(Argv0),
-                                Opts.getLangOpts());
+                                GetBuiltinIncludePath(Argv0));
 
   // Initialize the other preprocessor options.
   InitializePreprocessorOptions(Opts.getPreprocessorOpts());
