diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 8d0d484948d6b6330bfa85b1a8c7914e074482af..482bd39d6f85e8bc625df81510bdc60ee8bc1fe0 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -238,6 +238,8 @@ set(SRCS
   cmFileTimeComparison.cxx
   cmFileTimeComparison.h
   cmGeneratedFileStream.cxx
+  cmGeneratorExpressionContext.cxx
+  cmGeneratorExpressionContext.h
   cmGeneratorExpressionDAGChecker.cxx
   cmGeneratorExpressionDAGChecker.h
   cmGeneratorExpressionEvaluator.cxx
diff --git a/Source/cmGeneratorExpressionContext.cxx b/Source/cmGeneratorExpressionContext.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..4ed8ff2dec2b9870975190c9db33d23fcc9b0b8f
--- /dev/null
+++ b/Source/cmGeneratorExpressionContext.cxx
@@ -0,0 +1,18 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2012 Stephen Kelly <steveire@gmail.com>
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+
+#include "cmGeneratorExpressionContext.h"
+
+cmGeneratorExpressionContext::cmGeneratorExpressionContext();
+  : Backtrace(NULL)
+{
+}
diff --git a/Source/cmGeneratorExpressionContext.h b/Source/cmGeneratorExpressionContext.h
new file mode 100644
index 0000000000000000000000000000000000000000..ce6f376aae789b50255e7c7d8f95a87496b6eb96
--- /dev/null
+++ b/Source/cmGeneratorExpressionContext.h
@@ -0,0 +1,48 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2012 Stephen Kelly <steveire@gmail.com>
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+#ifndef cmGeneratorExpressionContext_h
+#define cmGeneratorExpressionContext_h
+
+#include "cmListFileCache.h"
+
+#include <set>
+#include <map>
+#include <string>
+
+class cmTarget;
+
+//----------------------------------------------------------------------------
+struct cmGeneratorExpressionContext
+{
+  cmGeneratorExpressionContext();
+
+  cmListFileBacktrace Backtrace;
+  std::set<cmTarget*> DependTargets;
+  std::set<cmTarget const*> AllTargets;
+  std::set<std::string> SeenTargetProperties;
+  std::set<cmTarget const*> SourceSensitiveTargets;
+  std::map<cmTarget const*, std::map<std::string, std::string> >
+                                                          MaxLanguageStandard;
+  cmMakefile *Makefile;
+  std::string Config;
+  std::string Language;
+  cmTarget const* HeadTarget; // The target whose property is being evaluated.
+  cmTarget const* CurrentTarget; // The dependent of HeadTarget which appears
+                                 // directly or indirectly in the property.
+  bool Quiet;
+  bool HadError;
+  bool HadContextSensitiveCondition;
+  bool HadHeadSensitiveCondition;
+  bool EvaluateForBuildsystem;
+};
+
+#endif
diff --git a/Source/cmGeneratorExpressionEvaluator.h b/Source/cmGeneratorExpressionEvaluator.h
index b1fec0b37eb71450e57d56dccc7919ccb30920e6..7c1bd8c6ffd0db0c850f958fad2c080b82405b7c 100644
--- a/Source/cmGeneratorExpressionEvaluator.h
+++ b/Source/cmGeneratorExpressionEvaluator.h
@@ -16,37 +16,10 @@
 #include <string>
 
 #include "cmListFileCache.h"
+#include "cmGeneratorExpressionContext.h"
 
 class cmTarget;
 
-//----------------------------------------------------------------------------
-struct cmGeneratorExpressionContext
-{
-  cmGeneratorExpressionContext()
-    : Backtrace(NULL)
-  {
-  }
-
-  cmListFileBacktrace Backtrace;
-  std::set<cmTarget*> DependTargets;
-  std::set<cmTarget const*> AllTargets;
-  std::set<std::string> SeenTargetProperties;
-  std::set<cmTarget const*> SourceSensitiveTargets;
-  std::map<cmTarget const*, std::map<std::string, std::string> >
-                                                          MaxLanguageStandard;
-  cmMakefile *Makefile;
-  std::string Config;
-  std::string Language;
-  cmTarget const* HeadTarget; // The target whose property is being evaluated.
-  cmTarget const* CurrentTarget; // The dependent of HeadTarget which appears
-                                 // directly or indirectly in the property.
-  bool Quiet;
-  bool HadError;
-  bool HadContextSensitiveCondition;
-  bool HadHeadSensitiveCondition;
-  bool EvaluateForBuildsystem;
-};
-
 struct cmGeneratorExpressionDAGChecker;
 struct cmGeneratorExpressionNode;
 
diff --git a/bootstrap b/bootstrap
index 6bc87ed5328b3b25635f1c0e8f0f9991cbdd5634..423980292a7c34720838604a05a0bd41f3778ecf 100755
--- a/bootstrap
+++ b/bootstrap
@@ -267,6 +267,7 @@ CMAKE_CXX_SOURCES="\
   cmInstallDirectoryGenerator \
   cmGeneratedFileStream \
   cmGeneratorTarget \
+  cmGeneratorExpressionContext \
   cmGeneratorExpressionDAGChecker \
   cmGeneratorExpressionEvaluator \
   cmGeneratorExpressionLexer \