diff --git a/cc/arm64_device.go b/cc/arm64_device.go
index 309d01d..201c0f2 100644
--- a/cc/arm64_device.go
+++ b/cc/arm64_device.go
@@ -105,7 +105,7 @@
 }
 
 func (t *toolchainArm64) Cflags() string {
-	return "${arm64Cflags} ${arm64IncludeFlags}"
+	return "${arm64Cflags}"
 }
 
 func (t *toolchainArm64) Cppflags() string {
diff --git a/cc/arm_device.go b/cc/arm_device.go
index bc59ab8..7d65e86 100644
--- a/cc/arm_device.go
+++ b/cc/arm_device.go
@@ -295,7 +295,6 @@
 	return &toolchainArm{
 		cflags: strings.Join([]string{
 			"${armCflags}",
-			"${armIncludeFlags}",
 			armArchVariantCflagsVar[archVariant],
 			armCpuVariantCflagsVar[cpuVariant],
 		}, " "),
@@ -305,7 +304,6 @@
 		}, " "),
 		clangCflags: strings.Join([]string{
 			"${armClangCflags}",
-			"${armIncludeFlags}",
 			armClangArchVariantCflagsVar[archVariant],
 			armClangCpuVariantCflagsVar[cpuVariant],
 		}, " "),
diff --git a/cc/builder.go b/cc/builder.go
index ccf04f2..721d478 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -40,20 +40,20 @@
 		blueprint.RuleParams{
 			Depfile:     "${out}.d",
 			Deps:        blueprint.DepsGCC,
-			Command:     "$ccCmd $incFlags -c $cFlags -MD -MF ${out}.d -o $out $in",
+			Command:     "$ccCmd -c $cFlags -MD -MF ${out}.d -o $out $in",
 			Description: "cc $out",
 		},
-		"ccCmd", "incFlags", "cFlags")
+		"ccCmd", "cFlags")
 
 	ld = pctx.StaticRule("ld",
 		blueprint.RuleParams{
 			Command: "$ldCmd ${ldDirFlags} ${crtBegin} @${out}.rsp " +
-				"${libFlags} ${crtEnd} -o ${out} ${ldFlags} ${ldLibs}",
+				"${libFlags} ${crtEnd} -o ${out} ${ldFlags}",
 			Description:    "ld $out",
 			Rspfile:        "${out}.rsp",
 			RspfileContent: "${in}",
 		},
-		"ldCmd", "ldDirFlags", "crtBegin", "libFlags", "crtEnd", "ldFlags", "ldLibs")
+		"ldCmd", "ldDirFlags", "crtBegin", "libFlags", "crtEnd", "ldFlags")
 
 	partialLd = pctx.StaticRule("partialLd",
 		blueprint.RuleParams{
@@ -97,8 +97,6 @@
 	conlyFlags  string
 	cppFlags    string
 	ldFlags     string
-	ldLibs      string
-	incFlags    string
 	yaccFlags   string
 	nocrt       bool
 	toolchain   Toolchain
@@ -180,9 +178,8 @@
 			Inputs:    []string{srcFile},
 			Implicits: deps,
 			Args: map[string]string{
-				"cFlags":   moduleCflags,
-				"incFlags": flags.incFlags,
-				"ccCmd":    ccCmd,
+				"cFlags": moduleCflags,
+				"ccCmd":  ccCmd,
 			},
 		})
 	}
@@ -275,7 +272,6 @@
 			"libFlags":   strings.Join(libFlagsList, " "),
 			"ldFlags":    flags.ldFlags,
 			"crtEnd":     crtEnd,
-			"ldLibs":     flags.ldLibs,
 		},
 	})
 }
diff --git a/cc/cc.go b/cc/cc.go
index 594ae25..87bce7c 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -245,7 +245,7 @@
 }
 
 type CCDeps struct {
-	StaticLibs, SharedLibs, LateStaticLibs, WholeStaticLibs, ObjFiles, IncludeDirs []string
+	StaticLibs, SharedLibs, LateStaticLibs, WholeStaticLibs, ObjFiles, Cflags []string
 
 	WholeStaticLibObjFiles []string
 
@@ -253,18 +253,17 @@
 }
 
 type CCFlags struct {
-	GlobalFlags []string
-	AsFlags     []string
-	CFlags      []string
-	ConlyFlags  []string
-	CppFlags    []string
-	YaccFlags   []string
-	LdFlags     []string
-	LdLibs      []string
-	IncludeDirs []string
-	Nocrt       bool
-	Toolchain   Toolchain
-	Clang       bool
+	GlobalFlags []string // Flags that apply to C, C++, and assembly source files
+	AsFlags     []string // Flags that apply to assembly source files
+	CFlags      []string // Flags that apply to C and C++ source files
+	ConlyFlags  []string // Flags that apply to C source files
+	CppFlags    []string // Flags that apply to C++ source files
+	YaccFlags   []string // Flags that apply to Yacc source files
+	LdFlags     []string // Flags that apply to linker command lines
+
+	Nocrt     bool
+	Toolchain Toolchain
+	Clang     bool
 }
 
 // ccBase contains the properties and members used by all C/C++ module types, and implements
@@ -311,7 +310,7 @@
 		return
 	}
 
-	flags.IncludeDirs = append(flags.IncludeDirs, deps.IncludeDirs...)
+	flags.CFlags = append(flags.CFlags, deps.Cflags...)
 
 	objFiles := c.compileObjs(ctx, flags)
 	if ctx.Failed() {
@@ -395,6 +394,29 @@
 		Toolchain:  toolchain,
 		Clang:      c.properties.Clang,
 	}
+
+	// Include dir cflags
+	rootIncludeDirs := pathtools.PrefixPaths(c.properties.Include_dirs, ctx.AConfig().SrcDir())
+	localIncludeDirs := pathtools.PrefixPaths(c.properties.Local_include_dirs, common.ModuleSrcDir(ctx))
+	flags.GlobalFlags = append(flags.GlobalFlags,
+		includeDirsToFlags(rootIncludeDirs),
+		includeDirsToFlags(localIncludeDirs))
+
+	if !c.properties.No_default_compiler_flags {
+		if c.properties.Sdk_version == "" || ctx.Host() {
+			flags.GlobalFlags = append(flags.GlobalFlags,
+				"${commonGlobalIncludes}",
+				toolchain.IncludeFlags(),
+				"-I${SrcDir}/libnativehelper/include/nativehelper")
+		}
+
+		flags.GlobalFlags = append(flags.GlobalFlags, []string{
+			"-I" + common.ModuleSrcDir(ctx),
+			"-I" + common.ModuleOutDir(ctx),
+			"-I" + common.ModuleGenDir(ctx),
+		}...)
+	}
+
 	instructionSet := c.properties.Instruction_set
 	instructionSetFlags, err := toolchain.InstructionSetFlags(instructionSet)
 	if err != nil {
@@ -440,31 +462,11 @@
 		}
 	}
 
-	flags.IncludeDirs = pathtools.PrefixPaths(c.properties.Include_dirs, ctx.AConfig().SrcDir())
-	localIncludeDirs := pathtools.PrefixPaths(c.properties.Local_include_dirs, common.ModuleSrcDir(ctx))
-	flags.IncludeDirs = append(flags.IncludeDirs, localIncludeDirs...)
-
 	if !c.properties.No_default_compiler_flags {
-		flags.IncludeDirs = append(flags.IncludeDirs, []string{
-			common.ModuleSrcDir(ctx),
-			common.ModuleOutDir(ctx),
-			common.ModuleGenDir(ctx),
-		}...)
-
-		if c.properties.Sdk_version == "" || ctx.Host() {
-			flags.IncludeDirs = append(flags.IncludeDirs, "${SrcDir}/libnativehelper/include/nativehelper")
-		}
-
 		if ctx.Device() && !c.properties.Allow_undefined_symbols {
 			flags.LdFlags = append(flags.LdFlags, "-Wl,--no-undefined")
 		}
 
-		if ctx.Host() || c.properties.Sdk_version == "" {
-			flags.GlobalFlags = append(flags.GlobalFlags,
-				"${commonGlobalIncludes}",
-				toolchain.IncludeFlags())
-		}
-
 		flags.GlobalFlags = append(flags.GlobalFlags, instructionSetFlags)
 
 		if flags.Clang {
@@ -481,10 +483,6 @@
 				fmt.Sprintf("${%sGlobalCflags}", ctx.Arch().HostOrDevice))
 		}
 
-		if ctx.Host() {
-			flags.LdFlags = append(flags.LdFlags, c.properties.Host_ldlibs...)
-		}
-
 		if ctx.Device() {
 			if c.properties.Rtti {
 				flags.CppFlags = append(flags.CppFlags, "-frtti")
@@ -502,6 +500,10 @@
 			flags.CppFlags = append(flags.CppFlags, toolchain.Cppflags())
 			flags.LdFlags = append(flags.LdFlags, toolchain.Ldflags())
 		}
+
+		if ctx.Host() {
+			flags.LdFlags = append(flags.LdFlags, c.properties.Host_ldlibs...)
+		}
 	}
 
 	flags = c.ccModuleType().Flags(ctx, flags)
@@ -571,7 +573,7 @@
 
 func (c *ccBase) depsToPathsFromList(ctx common.AndroidModuleContext,
 	names []string) (modules []common.AndroidModule,
-	outputFiles []string, exportedIncludeDirs []string) {
+	outputFiles []string, exportedFlags []string) {
 
 	for _, n := range names {
 		found := false
@@ -602,8 +604,8 @@
 					}
 					outputFiles = append(outputFiles, outputFile)
 					modules = append(modules, a)
-					if i, ok := a.(ccExportedIncludeDirsProducer); ok {
-						exportedIncludeDirs = append(exportedIncludeDirs, i.exportedIncludeDirs()...)
+					if i, ok := a.(ccExportedFlagsProducer); ok {
+						exportedFlags = append(exportedFlags, i.exportedFlags()...)
 					}
 					found = true
 				} else {
@@ -620,20 +622,20 @@
 		}
 	}
 
-	return modules, outputFiles, exportedIncludeDirs
+	return modules, outputFiles, exportedFlags
 }
 
 // Convert depenedency names to paths.  Takes a CCDeps containing names and returns a CCDeps
 // containing paths
 func (c *ccBase) depsToPaths(ctx common.AndroidModuleContext, depNames CCDeps) CCDeps {
 	var depPaths CCDeps
-	var newIncludeDirs []string
+	var newCflags []string
 
 	var wholeStaticLibModules []common.AndroidModule
 
-	wholeStaticLibModules, depPaths.WholeStaticLibs, newIncludeDirs =
+	wholeStaticLibModules, depPaths.WholeStaticLibs, newCflags =
 		c.depsToPathsFromList(ctx, depNames.WholeStaticLibs)
-	depPaths.IncludeDirs = append(depPaths.IncludeDirs, newIncludeDirs...)
+	depPaths.Cflags = append(depPaths.Cflags, newCflags...)
 
 	for _, m := range wholeStaticLibModules {
 		if staticLib, ok := m.(ccLibraryInterface); ok && staticLib.static() {
@@ -644,14 +646,14 @@
 		}
 	}
 
-	_, depPaths.StaticLibs, newIncludeDirs = c.depsToPathsFromList(ctx, depNames.StaticLibs)
-	depPaths.IncludeDirs = append(depPaths.IncludeDirs, newIncludeDirs...)
+	_, depPaths.StaticLibs, newCflags = c.depsToPathsFromList(ctx, depNames.StaticLibs)
+	depPaths.Cflags = append(depPaths.Cflags, newCflags...)
 
-	_, depPaths.LateStaticLibs, newIncludeDirs = c.depsToPathsFromList(ctx, depNames.LateStaticLibs)
-	depPaths.IncludeDirs = append(depPaths.IncludeDirs, newIncludeDirs...)
+	_, depPaths.LateStaticLibs, newCflags = c.depsToPathsFromList(ctx, depNames.LateStaticLibs)
+	depPaths.Cflags = append(depPaths.Cflags, newCflags...)
 
-	_, depPaths.SharedLibs, newIncludeDirs = c.depsToPathsFromList(ctx, depNames.SharedLibs)
-	depPaths.IncludeDirs = append(depPaths.IncludeDirs, newIncludeDirs...)
+	_, depPaths.SharedLibs, newCflags = c.depsToPathsFromList(ctx, depNames.SharedLibs)
+	depPaths.Cflags = append(depPaths.Cflags, newCflags...)
 
 	ctx.VisitDirectDeps(func(m blueprint.Module) {
 		if obj, ok := m.(*ccObject); ok {
@@ -744,29 +746,29 @@
 	switch stl {
 	case "libc++", "libc++_static":
 		flags.CFlags = append(flags.CFlags, "-D_USING_LIBCXX")
-		flags.IncludeDirs = append(flags.IncludeDirs, "${SrcDir}/external/libcxx/include")
+		flags.CFlags = append(flags.CFlags, "-I${SrcDir}/external/libcxx/include")
 		if ctx.Host() {
 			flags.CppFlags = append(flags.CppFlags, "-nostdinc++")
 			flags.LdFlags = append(flags.LdFlags, "-nodefaultlibs")
-			flags.LdLibs = append(flags.LdLibs, "-lc", "-lm", "-lpthread")
+			flags.LdFlags = append(flags.LdFlags, "-lc", "-lm", "-lpthread")
 		}
 	case "stlport", "stlport_static":
 		if ctx.Device() {
-			flags.IncludeDirs = append(flags.IncludeDirs,
-				"${SrcDir}/external/stlport/stlport",
-				"${SrcDir}/bionic/libstdc++/include",
-				"${SrcDir}/bionic")
+			flags.CFlags = append(flags.CFlags,
+				"-I${SrcDir}/external/stlport/stlport",
+				"-I${SrcDir}/bionic/libstdc++/include",
+				"-I${SrcDir}/bionic")
 		}
 	case "libstdc++":
 		// Using bionic's basic libstdc++. Not actually an STL. Only around until the
 		// tree is in good enough shape to not need it.
 		// Host builds will use GNU libstdc++.
 		if ctx.Device() {
-			flags.IncludeDirs = append(flags.IncludeDirs, "${SrcDir}/bionic/libstdc++/include")
+			flags.CFlags = append(flags.CFlags, "-I${SrcDir}/bionic/libstdc++/include")
 		}
 	case "ndk_system":
 		ndkSrcRoot := ctx.AConfig().SrcDir() + "/prebuilts/ndk/current/sources/"
-		flags.IncludeDirs = append(flags.IncludeDirs, ndkSrcRoot+"cxx-stl/system/include")
+		flags.CFlags = append(flags.CFlags, "-isystem "+ndkSrcRoot+"cxx-stl/system/include")
 	case "ndk_libc++_shared", "ndk_libc++_static":
 		// TODO(danalbert): This really shouldn't be here...
 		flags.CppFlags = append(flags.CppFlags, "-std=c++11")
@@ -777,7 +779,7 @@
 		if ctx.Host() {
 			flags.CppFlags = append(flags.CppFlags, "-nostdinc++")
 			flags.LdFlags = append(flags.LdFlags, "-nodefaultlibs")
-			flags.LdLibs = append(flags.LdLibs, "-lc", "-lm")
+			flags.LdFlags = append(flags.LdFlags, "-lc", "-lm")
 		}
 	default:
 		panic(fmt.Errorf("Unknown stl in ccLinked.Flags: %q", stl))
@@ -879,8 +881,8 @@
 	c.dynamicProperties.VariantIsShared = true
 }
 
-type ccExportedIncludeDirsProducer interface {
-	exportedIncludeDirs() []string
+type ccExportedFlagsProducer interface {
+	exportedFlags() []string
 }
 
 //
@@ -890,11 +892,11 @@
 type CCLibrary struct {
 	ccLinked
 
-	reuseFrom         ccLibraryInterface
-	reuseObjFiles     []string
-	objFiles          []string
-	exportIncludeDirs []string
-	out               string
+	reuseFrom     ccLibraryInterface
+	reuseObjFiles []string
+	objFiles      []string
+	exportFlags   []string
+	out           string
 
 	LibraryProperties struct {
 		BuildStatic bool `blueprint:"mutated"`
@@ -981,8 +983,8 @@
 	return c.objFiles
 }
 
-func (c *CCLibrary) exportedIncludeDirs() []string {
-	return c.exportIncludeDirs
+func (c *CCLibrary) exportedFlags() []string {
+	return c.exportFlags
 }
 
 func (c *CCLibrary) Flags(ctx common.AndroidModuleContext, flags CCFlags) CCFlags {
@@ -1028,8 +1030,8 @@
 
 	c.objFiles = objFiles
 	c.out = outputFile
-	c.exportIncludeDirs = pathtools.PrefixPaths(c.properties.Export_include_dirs,
-		common.ModuleSrcDir(ctx))
+	includeDirs := pathtools.PrefixPaths(c.properties.Export_include_dirs, common.ModuleSrcDir(ctx))
+	c.exportFlags = []string{includeDirsToFlags(includeDirs)}
 
 	ctx.CheckbuildFile(outputFile)
 }
@@ -1051,8 +1053,8 @@
 		ccFlagsToBuilderFlags(flags), outputFile)
 
 	c.out = outputFile
-	c.exportIncludeDirs = pathtools.PrefixPaths(c.properties.Export_include_dirs,
-		common.ModuleSrcDir(ctx))
+	includeDirs := pathtools.PrefixPaths(c.properties.Export_include_dirs, common.ModuleSrcDir(ctx))
+	c.exportFlags = []string{includeDirsToFlags(includeDirs)}
 }
 
 func (c *CCLibrary) compileModule(ctx common.AndroidModuleContext,
@@ -1302,12 +1304,12 @@
 	flags.CFlags = append(flags.CFlags, "-DGTEST_HAS_STD_STRING")
 	if ctx.Host() {
 		flags.CFlags = append(flags.CFlags, "-O0", "-g")
-		flags.LdLibs = append(flags.LdLibs, "-lpthread")
+		flags.LdFlags = append(flags.LdFlags, "-lpthread")
 	}
 
 	// TODO(danalbert): Make gtest export its dependencies.
-	flags.IncludeDirs = append(flags.IncludeDirs,
-		filepath.Join(ctx.AConfig().SrcDir(), "external/gtest/include"))
+	flags.CFlags = append(flags.CFlags,
+		"-I"+filepath.Join(ctx.AConfig().SrcDir(), "external/gtest/include"))
 
 	return flags
 }
@@ -1496,8 +1498,8 @@
 		ctx.ModuleErrorf("NDK prebuilts must have an ndk_lib prefixed name")
 	}
 
-	c.exportIncludeDirs = pathtools.PrefixPaths(c.properties.Export_include_dirs,
-		common.ModuleSrcDir(ctx))
+	includeDirs := pathtools.PrefixPaths(c.properties.Export_include_dirs, common.ModuleSrcDir(ctx))
+	c.exportFlags = []string{common.JoinWithPrefix(includeDirs, "-isystem ")}
 
 	// NDK prebuilt libraries are named like: ndk_LIBNAME.SDK_VERSION.
 	// We want to translate to just LIBNAME.
@@ -1566,8 +1568,8 @@
 		ctx.ModuleErrorf("NDK prebuilts must have an ndk_lib prefixed name")
 	}
 
-	c.exportIncludeDirs = pathtools.PrefixPaths(c.properties.Export_include_dirs,
-		common.ModuleSrcDir(ctx))
+	includeDirs := pathtools.PrefixPaths(c.properties.Export_include_dirs, common.ModuleSrcDir(ctx))
+	c.exportFlags = []string{includeDirsToFlags(includeDirs)}
 
 	libName := strings.TrimPrefix(ctx.ModuleName(), "ndk_")
 	libExt := sharedLibraryExtension
diff --git a/cc/util.go b/cc/util.go
index f1134a1..9ce84ee 100644
--- a/cc/util.go
+++ b/cc/util.go
@@ -77,8 +77,6 @@
 		cppFlags:    strings.Join(in.CppFlags, " "),
 		yaccFlags:   strings.Join(in.YaccFlags, " "),
 		ldFlags:     strings.Join(in.LdFlags, " "),
-		ldLibs:      strings.Join(in.LdLibs, " "),
-		incFlags:    includeDirsToFlags(in.IncludeDirs),
 		nocrt:       in.Nocrt,
 		toolchain:   in.Toolchain,
 		clang:       in.Clang,
