diff --git a/Data/Array/Repa/Stencil.hs b/Data/Array/Repa/Stencil.hs
--- a/Data/Array/Repa/Stencil.hs
+++ b/Data/Array/Repa/Stencil.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE    MagicHash, PatternGuards, BangPatterns, TemplateHaskell, QuasiQuotes,
-                ParallelListComp, TypeOperators, ExplicitForAll, ScopedTypeVariables #-}
 {-# OPTIONS -Wnot #-}
 
 -- | Efficient computation of stencil based convolutions.
@@ -14,6 +12,5 @@
 import Data.Array.Repa
 import Data.Array.Repa.Base
 import Data.Array.Repa.Stencil.Base
-import Data.Array.Repa.Stencil.Template
 import Data.Array.Repa.Specialised.Dim2
 
diff --git a/Data/Array/Repa/Stencil/Dim2.hs b/Data/Array/Repa/Stencil/Dim2.hs
--- a/Data/Array/Repa/Stencil/Dim2.hs
+++ b/Data/Array/Repa/Stencil/Dim2.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE CPP, MagicHash #-}
 --   This is specialised for stencils up to 7x7.
 --   Due to limitations in the GHC optimiser, using larger stencils doesn't
 --   work, and will yield `error` at runtime. We can probably increase the
@@ -12,10 +12,12 @@
 --
 module Data.Array.Repa.Stencil.Dim2
         ( -- * Stencil creation
-          makeStencil2, stencil2
-
+          makeStencil2,
+#ifndef REPA_NO_TH
+          stencil2,
+#endif
           -- * Stencil operators
-        , PC5, mapStencil2, forStencil2)
+          PC5, mapStencil2, forStencil2)
 where
 import Data.Array.Repa.Base
 import Data.Array.Repa.Index
@@ -26,7 +28,9 @@
 import Data.Array.Repa.Repr.HintSmall
 import Data.Array.Repa.Repr.Undefined
 import Data.Array.Repa.Stencil.Base
+#ifndef REPA_NO_TH
 import Data.Array.Repa.Stencil.Template
+#endif
 import Data.Array.Repa.Stencil.Partition
 import GHC.Exts
 
diff --git a/repa.cabal b/repa.cabal
--- a/repa.cabal
+++ b/repa.cabal
@@ -1,11 +1,11 @@
 Name:                repa
-Version:             3.4.1.4
+Version:             3.4.1.5
 License:             BSD3
 License-file:        LICENSE
 Author:              The DPH Team
 Maintainer:          Ben Lippmeier <benl@ouroborus.net>
 Build-Type:          Simple
-Cabal-Version:       >=1.6
+Cabal-Version:       >=1.10
 Stability:           experimental
 Category:            Data Structures
 Homepage:            http://repa.ouroborus.net
@@ -19,14 +19,18 @@
 Synopsis:
         High performance, regular, shape polymorphic parallel arrays.
 
+Flag no-template-haskell
+  Default: False
+  Description: Disable Template Haskell
+
 Library
   Build-Depends:
-        base                 >= 4.8 && < 4.13
+        base                 >= 4.8 && < 4.17
       , template-haskell
       , ghc-prim
       , vector               >= 0.11 && < 0.13
-      , bytestring           == 0.10.*
-      , QuickCheck           >= 2.8 && < 2.12
+      , bytestring           >= 0.10 && < 0.12
+      , QuickCheck           >= 2.8  && < 2.15
 
   ghc-options:
         -Wall
@@ -41,7 +45,12 @@
   else
     ghc-options: -fcpr-off
 
-  extensions:
+  if flag(no-template-haskell)
+    cpp-options: -DREPA_NO_TH
+
+  default-language:    Haskell2010
+
+  default-extensions:
         NoMonomorphismRestriction
         ExplicitForAll
         EmptyDataDecls
@@ -55,6 +64,13 @@
         PatternGuards
         ExistentialQuantification
 
+  other-extensions:
+        CPP
+
+  if !flag(no-template-haskell)
+    other-extensions:
+        TemplateHaskell
+
   Exposed-modules:
         Data.Array.Repa.Eval.Gang
         Data.Array.Repa.Operators.IndexSpace
@@ -94,8 +110,11 @@
         Data.Array.Repa.Eval.Reduction
         Data.Array.Repa.Eval.Selection
         Data.Array.Repa.Stencil.Base
-        Data.Array.Repa.Stencil.Template
         Data.Array.Repa.Stencil.Partition
         Data.Array.Repa.Base
+
+  if !flag(no-template-haskell)
+    Other-modules:
+        Data.Array.Repa.Stencil.Template
 
 -- vim: nospell
