diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -2,5 +2,29 @@
 import Distribution.Simple.UUAGC (uuagcLibUserHook)
 import UU.UUAGC (uuagc)
 
+{-
 main :: IO ()
-main = defaultMainWithHooks (uuagcLibUserHook uuagc)
+main = defaultMainWithHooks $
+         uuagcLibUserHook uuagc
+-}
+
+{-
+-}
+import Distribution.PackageDescription
+import Distribution.Simple.UserHooks
+import Distribution.Package
+import Data.Version
+
+main :: IO ()
+main = defaultMainWithHooks $
+         addHook $
+         uuagcLibUserHook uuagc
+  where addHook hooks = hooks {
+            postConf = postConf_InsertVersion hooks
+          }
+        -- postConf_InsertVersion :: Args -> ConfigFlags -> PackageDescription -> LocalBuildInfo -> IO ()
+        postConf_InsertVersion hooks args cfg pkgDescr bi = do
+          postConf hooks args cfg pkgDescr bi
+          writeFile "src/UHC/Shuffle/Version.hs" $
+            "module UHC.Shuffle.Version where\n" ++
+            "version = \"" ++ showVersion (pkgVersion $ package pkgDescr) ++ "\"\n"
diff --git a/shuffle.cabal b/shuffle.cabal
--- a/shuffle.cabal
+++ b/shuffle.cabal
@@ -1,5 +1,5 @@
 Name:                shuffle
-Version:             0.1.0.2
+Version:             0.1.1.0
 Copyright:           Utrecht University, Department of Information and Computing Sciences, Software Technology group
 Description:         Shuffle tool used by UHC (Utrecht Haskell Compiler)
 Synopsis:            Shuffle tool for UHC
@@ -26,6 +26,7 @@
   Hs-Source-Dirs:    src
   Extensions:        RankNTypes, TypeSynonymInstances, FlexibleInstances, FlexibleContexts
   Exposed-Modules:   UHC.Shuffle,
+                     UHC.Shuffle.Version,
                      Distribution.Simple.Shuffle
   Other-Modules:     UHC.Shuffle.AspectExpr,
                      UHC.Shuffle.AspectExprEval,
@@ -53,4 +54,4 @@
   Hs-Source-Dirs:    src-main
   Main-Is:           Main.hs
   Build-Depends:     base >= 4 && < 5,
-                     shuffle == 0.1.0.2
+                     shuffle == 0.1.1.0
diff --git a/src/UHC/Shuffle.hs b/src/UHC/Shuffle.hs
--- a/src/UHC/Shuffle.hs
+++ b/src/UHC/Shuffle.hs
@@ -13,22 +13,23 @@
 
 import qualified Data.Set as Set
 import qualified Data.Map as Map
-import Data.Map(Map)
-import Data.Set(Set)
-import System.Exit
-import System.Environment
-import System.IO
-import System.Console.GetOpt
-import UHC.Util.ParseUtils
-import UHC.Util.DependencyGraph
-import UHC.Util.FPath
-import UHC.Util.Pretty
-import UHC.Shuffle.Common
-import UHC.Shuffle.MainAG
-import UHC.Shuffle.ChunkParser
-import UHC.Shuffle.CDoc
-import UHC.Shuffle.CDocSubst
-import Data.Char
+import           Data.Map(Map)
+import            Data.Set(Set)
+import            System.Exit
+import            System.Environment
+import            System.IO
+import            System.Console.GetOpt
+import            UHC.Util.ParseUtils
+import            UHC.Util.DependencyGraph
+import            UHC.Util.FPath
+import            UHC.Util.Pretty
+import            UHC.Shuffle.Common
+import            UHC.Shuffle.MainAG
+import            UHC.Shuffle.ChunkParser
+import            UHC.Shuffle.CDoc
+import            UHC.Shuffle.CDocSubst
+import qualified UHC.Shuffle.Version as Version
+import            Data.Char
 
 -------------------------------------------------------------------------
 -- main
@@ -42,11 +43,13 @@
        ; let (opts,f,frest,errs) = parseOpts args
        ; if optHelp opts
          then putStrLn (usageInfo "Usage shuffle [options] [file ([alias=]file)*|-]\n\noptions:" cmdLineOpts)
+         else if optVersion opts
+         then putStrLn Version.version
          else if null errs
-              then if optGenDeps opts
-                   then genDeps f opts
-                   else shuffleCompile stdout opts f frest >> return ()
-              else  putStr (head errs)
+         then if optGenDeps opts
+              then genDeps f opts
+              else shuffleCompile stdout opts f frest >> return ()
+         else  putStr (head errs)
        }
 
 parseOpts :: [String] -> (Opts, FPath, [FPathWithAlias], [String])
@@ -283,6 +286,8 @@
           "file with list of strings not to be cross ref'd"
      ,  Option ""   ["help"]            (NoArg oHelp)
           "output this help"
+     ,  Option ""   ["version"]            (NoArg oVersion)
+          "output version number"
      ,  Option ""   ["dep"]             (NoArg oDep)
           "output dependencies"
      ,  Option ""   ["depnameprefix"]   (OptArg oDepNamePrefix "<name>")
@@ -335,6 +340,7 @@
                                 ('a':'p':'p':'x':'=':f) -> o {optChDest = (ChHide,f)}
                                 _                       -> o
          oHelp           o =  o {optHelp = True}
+         oVersion        o =  o {optVersion = True}
          oDep            o =  o {optGenDeps = True}
          oDepNamePrefix ms o = o { optDepNamePrefix = maybe "FILE_" id ms }
          oDepSrcVar     ms o = o { optDepSrcVar = maybe "SRC_VAR" id ms }
diff --git a/src/UHC/Shuffle/AspectExprAbsSyn.ag b/src/UHC/Shuffle/AspectExprAbsSyn.ag
--- a/src/UHC/Shuffle/AspectExprAbsSyn.ag
+++ b/src/UHC/Shuffle/AspectExprAbsSyn.ag
@@ -13,5 +13,6 @@
                         asp2            : AspectExpr
   | And                 asp1            : AspectExpr
                         asp2            : AspectExpr
+  | Not                 asp             : AspectExpr
 
 DERIVING * : Show, Eq, Ord
diff --git a/src/UHC/Shuffle/AspectExprEval.ag b/src/UHC/Shuffle/AspectExprEval.ag
--- a/src/UHC/Shuffle/AspectExprEval.ag
+++ b/src/UHC/Shuffle/AspectExprEval.ag
@@ -41,4 +41,5 @@
   | Requires    lhs         .   isAccepted  =   @asp `Set.member` @lhs.givenRefs
   | Or          lhs         .   isAccepted  =   @asp1.isAccepted || @asp2.isAccepted
   | And         lhs         .   isAccepted  =   @asp1.isAccepted && @asp2.isAccepted
+  | Not         lhs         .   isAccepted  =   not @asp.isAccepted
 
diff --git a/src/UHC/Shuffle/ChunkParser.hs b/src/UHC/Shuffle/ChunkParser.hs
--- a/src/UHC/Shuffle/ChunkParser.hs
+++ b/src/UHC/Shuffle/ChunkParser.hs
@@ -48,7 +48,7 @@
   = Map.fromList
         [ ( ScLexMeta 0
           , defaultScanOpts
-              { scoKeywordsTxt      =   Set.fromList (kwTxtAsVarTooB ++ [ "_", "-", ".", "<", "=", "@", "||", "&&" ])
+              { scoKeywordsTxt      =   Set.fromList (kwTxtAsVarTooB ++ [ "_", "-", ".", "<", "=", "@", "||", "&&", "!" ])
               , scoSpecChars        =   Set.fromList "(),%{}"
               , scoOpChars          =   Set.fromList "+-=*&^$#@!\\|><~`;:?/_."
               }
@@ -249,6 +249,7 @@
 pAspectExprBase     ::  ShPr AspectExpr
 pAspectExprBase     =   AspectExpr_Requires <$> pVar
                     <|> pParens pAspectExpr
+                    <|> AspectExpr_Not <$ pKey "!" <*> pAspectExprBase
 
 pAspectExprAnd      ::  ShPr AspectExpr
 pAspectExprAnd      =   pChainr (AspectExpr_And <$ pKey "&&") (foldr1 AspectExpr_And <$> pList1 pAspectExprBase)
diff --git a/src/UHC/Shuffle/Common.hs b/src/UHC/Shuffle/Common.hs
--- a/src/UHC/Shuffle/Common.hs
+++ b/src/UHC/Shuffle/Common.hs
@@ -132,6 +132,7 @@
       , optIndex        		:: Bool
       , optCompiler     		:: [Int]
       , optHelp         		:: Bool
+      , optVersion         		:: Bool
       , optGenDeps      		:: Bool
       , optGenText2Text   		:: Bool						-- include text2text text type annotation
       , optChDest       		:: (ChDest,String)
@@ -166,6 +167,7 @@
       , optIndex        		=  False
       , optCompiler     		=  []
       , optHelp         		=  False
+      , optVersion         		=  False
       , optGenDeps      		=  False
       , optGenText2Text			=  False
       , optChDest       		=  (ChHere,"")
diff --git a/src/UHC/Shuffle/Version.hs b/src/UHC/Shuffle/Version.hs
new file mode 100644
--- /dev/null
+++ b/src/UHC/Shuffle/Version.hs
@@ -0,0 +1,2 @@
+module UHC.Shuffle.Version where
+version = "0.1.1.0"
