diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,10 @@
 Changelog for Shake
 
+0.11.4
+    Work with QuickCheck-2.7 (which defines ===)
+    #100, handle GraphViz missing gracefully
+    Fix up the profiling report generation
+    #99, add getEnvWithDefault
 0.11.3
     #97, fix a serialisation bug when > 254 arguments to need
 0.11.2
diff --git a/Development/Shake.hs b/Development/Shake.hs
--- a/Development/Shake.hs
+++ b/Development/Shake.hs
@@ -122,7 +122,7 @@
     -- * Directory rules
     doesFileExist, doesDirectoryExist, getDirectoryContents, getDirectoryFiles, getDirectoryDirs,
     -- * Environment rules
-    getEnv,
+    getEnv, getEnvWithDefault,
     -- * Oracle rules
     addOracle, askOracle, askOracleWith,
     -- * Special rules
diff --git a/Development/Shake/Rules/Directory.hs b/Development/Shake/Rules/Directory.hs
--- a/Development/Shake/Rules/Directory.hs
+++ b/Development/Shake/Rules/Directory.hs
@@ -4,13 +4,15 @@
 module Development.Shake.Rules.Directory(
     doesFileExist, doesDirectoryExist,
     getDirectoryContents, getDirectoryFiles, getDirectoryDirs,
-    getEnv,
+    getEnv, getEnvWithDefault,
     removeFiles, removeFilesAfter,
     defaultRuleDirectory
     ) where
 
+import Control.Applicative
 import Control.Monad
 import Control.Monad.IO.Class
+import Data.Maybe
 import Data.Binary
 import Data.List
 import qualified System.Directory as IO
@@ -154,6 +156,10 @@
     GetEnvA res <- apply1 $ GetEnvQ var
     return res
 
+-- | Return the value of the environment variable, or the default value if it
+--   not set. Similar to 'getEnv'.
+getEnvWithDefault :: String -> String -> Action String
+getEnvWithDefault def var = fromMaybe def <$> getEnv var
 
 -- | Get the contents of a directory. The result will be sorted, and will not contain
 --   the entries @.@ or @..@ (unlike the standard Haskell version). The resulting paths will be relative
diff --git a/Development/Shake/Value.hs b/Development/Shake/Value.hs
--- a/Development/Shake/Value.hs
+++ b/Development/Shake/Value.hs
@@ -64,7 +64,7 @@
 
 instance Eq Value where
     Value a == Value b = maybe False (a ==) $ cast b
-    Value a /= Value b = maybe False (a /=) $ cast b
+    Value a /= Value b = maybe True (a /=) $ cast b
 
 
 ---------------------------------------------------------------------
diff --git a/Examples/Test/FilePath.hs b/Examples/Test/FilePath.hs
--- a/Examples/Test/FilePath.hs
+++ b/Examples/Test/FilePath.hs
@@ -23,6 +23,8 @@
 
 
 test build obj = do
+    let a === b = a Examples.Util.=== b -- duplicate definition in QuickCheck 2.7 and above
+
     let norm x =
             let s = normalise x
                 b = BS.unpack (BS.normalise $ BS.pack x)
diff --git a/html/shake-ui.js b/html/shake-ui.js
--- a/html/shake-ui.js
+++ b/html/shake-ui.js
@@ -249,6 +249,8 @@
             var xs = ruleGraph(shakeEx, report.query);
             if (xs.length > 250)
                 $("#output").html("Viewing a graph with > 250 nodes is not supported, and you have " + xs.length + " nodes. Try grouping more aggressively");
+            else if (typeof Viz === 'undefined')
+                $("#output").html("Profile reports do not seem to have been built with GraphViz support, this feature is unavailable.");
             else
             {
                 var res = "digraph \"\"{";
diff --git a/shake.cabal b/shake.cabal
--- a/shake.cabal
+++ b/shake.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >= 1.10
 build-type:         Simple
 name:               shake
-version:            0.11.3
+version:            0.11.4
 license:            BSD3
 license-file:       LICENSE
 category:           Development
