diff --git a/grid.cabal b/grid.cabal
--- a/grid.cabal
+++ b/grid.cabal
@@ -1,5 +1,5 @@
 name:           grid
-version:        7.0
+version:        7.1
 synopsis:       Tools for working with regular grids (graphs, lattices).
 description:    Provides tools for working with regular arrangements
                 of tiles, such as might be used in a board game or some
diff --git a/src/Math/Geometry/Grid/Triangular.hs b/src/Math/Geometry/Grid/Triangular.hs
--- a/src/Math/Geometry/Grid/Triangular.hs
+++ b/src/Math/Geometry/Grid/Triangular.hs
@@ -31,9 +31,15 @@
     rectTriGrid,
     -- * Toroidal grid with triangular tiles
     TorTriGrid,
-    torTriGrid
+    torTriGrid,
+    -- * Cylindrical grids with triangular tiles
+    YCylTriGrid,
+    yCylTriGrid,
+    XCylTriGrid,
+    xCylTriGrid
   ) where
 
-import Math.Geometry.Grid.TriangularInternal (UnboundedTriGrid, TriTriGrid, 
-  triTriGrid, ParaTriGrid, paraTriGrid, RectTriGrid, rectTriGrid, 
-  TorTriGrid, torTriGrid)
+import Math.Geometry.Grid.TriangularInternal (UnboundedTriGrid,
+  TriTriGrid, triTriGrid, ParaTriGrid, paraTriGrid,
+  RectTriGrid, rectTriGrid, TorTriGrid, torTriGrid,
+  YCylTriGrid, yCylTriGrid, XCylTriGrid, xCylTriGrid)
diff --git a/src/Math/Geometry/Grid/TriangularInternal.hs b/src/Math/Geometry/Grid/TriangularInternal.hs
--- a/src/Math/Geometry/Grid/TriangularInternal.hs
+++ b/src/Math/Geometry/Grid/TriangularInternal.hs
@@ -321,48 +321,48 @@
 yCylTriGrid :: Int -> Int -> YCylTriGrid
 yCylTriGrid r c = YCylTriGrid (r,c) (parallelogramIndices r c)
 
--- -- | A cylindrical grid with triangular tiles, where the cylinder is
--- --   along the x-axis.
--- --   The grid and its indexing scheme are illustrated in the user guide,
--- --   available at <https://github.com/mhwombat/grid/wiki>.
--- data XCylTriGrid = XCylTriGrid (Int, Int) [(Int, Int)] deriving Eq
+-- | A cylindrical grid with triangular tiles, where the cylinder is
+--   along the x-axis.
+--   The grid and its indexing scheme are illustrated in the user guide,
+--   available at <https://github.com/mhwombat/grid/wiki>.
+data XCylTriGrid = XCylTriGrid (Int, Int) [(Int, Int)] deriving Eq
 
--- instance Show XCylTriGrid where 
---   show (XCylTriGrid (r,c) _) = "yCylTriGrid " ++ show r ++ " " ++ show c
+instance Show XCylTriGrid where 
+  show (XCylTriGrid (r,c) _) = "yCylTriGrid " ++ show r ++ " " ++ show c
 
--- instance Grid XCylTriGrid where
---   type Index XCylTriGrid = (Int, Int)
---   type Direction XCylTriGrid = TriDirection
---   indices (XCylTriGrid _ xs) = xs
---   neighbours = neighboursWrappedBasedOn UnboundedTriGrid
---   neighbour = neighbourWrappedBasedOn UnboundedTriGrid
---   distance = distanceWrappedBasedOn UnboundedTriGrid
---   directionTo = directionToWrappedBasedOn UnboundedTriGrid
---   isAdjacent g a b = distance g a b <= 1
---   contains g (x, y) = 0 <= x && x <= 2*c-1 && even (x+y) 
---     where (_, c) = size g
+instance Grid XCylTriGrid where
+  type Index XCylTriGrid = (Int, Int)
+  type Direction XCylTriGrid = TriDirection
+  indices (XCylTriGrid _ xs) = xs
+  neighbours = neighboursWrappedBasedOn UnboundedTriGrid
+  neighbour = neighbourWrappedBasedOn UnboundedTriGrid
+  distance = distanceWrappedBasedOn UnboundedTriGrid
+  directionTo = directionToWrappedBasedOn UnboundedTriGrid
+  isAdjacent g a b = distance g a b <= 1
+  contains g (x, y) = 0 <= x && x <= 2*c-1 && even (x+y) 
+    where (_, c) = size g
 
--- instance FiniteGrid XCylTriGrid where
---   type Size XCylTriGrid = (Int, Int)
---   size (XCylTriGrid s _) = s
---   maxPossibleDistance g = -- TODO: make more efficient
---     maximum . map (distance g (0,0)) . indices $ g
+instance FiniteGrid XCylTriGrid where
+  type Size XCylTriGrid = (Int, Int)
+  size (XCylTriGrid s _) = s
+  maxPossibleDistance g = -- TODO: make more efficient
+    maximum . map (distance g (0,0)) . indices $ g
 
--- instance WrappedGrid XCylTriGrid where
---   normalise g (x,y) | y < 0     = normalise g (x,y+2*r)
---                     | y > 2*r-1 = normalise g (x,y-2*r)
---                     | otherwise = (x,y)
---     where (r, _) = size g
---   denormalise g a = nub [ (x,y-2*r), (x,y), (x,y+2*r) ]
---     where (r, _) = size g
---           (x, y) = normalise g a
+instance WrappedGrid XCylTriGrid where
+  normalise g (x,y) | y < 0     = normalise g (x,y+2*r)
+                    | y > 2*r-1 = normalise g (x,y-2*r)
+                    | otherwise = (x,y)
+    where (r, _) = size g
+  denormalise g a = nub [ (x,y-2*r), (x,y), (x,y+2*r) ]
+    where (r, _) = size g
+          (x, y) = normalise g a
 
--- -- | @'xCylTriGrid' r c@ returns a cylindrical grid with @r@ rows and 
--- --   @c@ columns, using triangular tiles, where the cylinder is along 
--- --   the y-axis. The indexing method is the same as for @ParaTriGrid@. 
--- --   If @r@ and @c@ are both nonnegative, the resulting grid will have 
--- --   @2*r*c@ tiles. Otherwise, the resulting grid will be null and the 
--- --   list of indices will be null.
--- xCylTriGrid :: Int -> Int -> XCylTriGrid
--- xCylTriGrid r c = XCylTriGrid (r,c) (parallelogramIndices r c)
+-- | @'xCylTriGrid' r c@ returns a cylindrical grid with @r@ rows and 
+--   @c@ columns, using triangular tiles, where the cylinder is along 
+--   the y-axis. The indexing method is the same as for @ParaTriGrid@. 
+--   If @r@ and @c@ are both nonnegative, the resulting grid will have 
+--   @2*r*c@ tiles. Otherwise, the resulting grid will be null and the 
+--   list of indices will be null.
+xCylTriGrid :: Int -> Int -> XCylTriGrid
+xCylTriGrid r c = XCylTriGrid (r,c) (parallelogramIndices r c)
 
