diff --git a/BUGS b/BUGS
deleted file mode 100644
--- a/BUGS
+++ /dev/null
@@ -1,5 +0,0 @@
-
-* OneTuple needs the ability to send email.
-    Andrew Bromage points out that OneTuple isn't maximally
-    flexible until it can send email.
-
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
deleted file mode 100644
--- a/CONTRIBUTORS
+++ /dev/null
@@ -1,7 +0,0 @@
-All of the following have contributed code to the project.  Thanks for
-your help!
-
-John Dorsey -- initial version
-Luke Palmer -- corrected instance Traversable
-Neil Mitchell -- pointed out that .cabal file is backward compatible
-
diff --git a/Changelog.md b/Changelog.md
new file mode 100644
--- /dev/null
+++ b/Changelog.md
@@ -0,0 +1,4 @@
+# 0.2.2
+
+- Add `Semigroup` instances
+- Compatible with GHC-8.4
diff --git a/Data/Tuple/OneTuple.hs b/Data/Tuple/OneTuple.hs
--- a/Data/Tuple/OneTuple.hs
+++ b/Data/Tuple/OneTuple.hs
@@ -1,4 +1,3 @@
-
 -- |OneTuple fills the /tuple gap/ with a singleton tuple.
 -- 
 -- OneTuple /does not support/ the usual parenthesized tuple syntax.
@@ -16,13 +15,14 @@
 
 module Data.Tuple.OneTuple (OneTuple(OneTuple), only) where
 
-import Control.Applicative
-import Control.Monad
-import Control.Monad.Fix
-import Data.Foldable
-import Data.Ix
-import Data.Monoid
-import Data.Traversable
+import Control.Applicative (Applicative (..), liftA)
+import Control.Monad (ap)
+import Control.Monad.Fix (MonadFix (..))
+import Data.Foldable (Foldable (..))
+import Data.Ix (Ix (..))
+import Data.Monoid (Monoid (..))
+import Data.Semigroup (Semigroup (..))
+import Data.Traversable (Traversable (..))
 
 -- |OneTuple is the singleton tuple data type.
 data OneTuple a
@@ -55,23 +55,30 @@
     foldl1 _f (OneTuple x) = x
 
 instance Traversable OneTuple where
+    traverse f (OneTuple x) = fmap OneTuple (f x)
     sequenceA (OneTuple x) = fmap OneTuple x
 
 instance Functor OneTuple where
     fmap f (OneTuple x) = OneTuple (f x)
 
 instance Applicative OneTuple where
-    pure = return
-    (<*>) = ap
+    pure = OneTuple
 
+    OneTuple f <*> OneTuple x = OneTuple (f x)
+    _ *> x = x
+    x <* _ = x
+
 instance Monad OneTuple where
+    return = pure
+    (>>) = (*>)
     (OneTuple x) >>= f = f x
-    return = OneTuple
 
+instance (Semigroup a) => Semigroup (OneTuple a) where
+    OneTuple x <> OneTuple y = OneTuple (x <> y)
+
 instance (Monoid a) => Monoid (OneTuple a) where
     mempty = OneTuple mempty
     mappend (OneTuple x) (OneTuple y) = OneTuple (mappend x y)
-    mconcat = Prelude.foldr1 mappend
 
 instance MonadFix OneTuple where
     mfix f = let a = f (only a) in a
diff --git a/FAQ b/FAQ
deleted file mode 100644
--- a/FAQ
+++ /dev/null
@@ -1,22 +0,0 @@
-
-This is a list of Frequently Asked Questions about OneTuple, the
-optional Haskell singleton tuple type.
-
-Some of these are, of course, merely anticipated FAQs.
-
-Q 1.  What's the point, if you can't support the same syntax as
-      'normal' tuples?
-A 1.  You can hack it up in TH if you want -- patches are welcome!
-      Simplicity and (near) H98 compatibility were goals in building
-      OneTuple.
-
-Q 2.  Why define 'data OneTuple' instead of just a type alias?
-A 2.  For laziness and pattern matching similar to other tuples.
-
-Q 3.  Isn't this the same as <something> ?
-A 3.  Could be, but this one's sold as a tuple!
-
-Q 4.  Singleton tuples don't make sense!  They're isomorphic to their
-      component type!
-A 4.  Yes, that's true, up to laziness.
-
diff --git a/OneTuple.cabal b/OneTuple.cabal
--- a/OneTuple.cabal
+++ b/OneTuple.cabal
@@ -1,14 +1,44 @@
+cabal-version:   >=1.10
 Name:            OneTuple
-Version:         0.2.1
+Version:         0.2.2
+
 Synopsis:        Singleton Tuple
-Description:     Singleton Tuple
+Category:        Data
+Description:
+  This package provides a singleton tuple data type
+  .
+  > data OneTuple = OneTuple a
+  .
+  Note: it's not a @newtype@
 Copyright:       (c) John Dorsey 2008
 License:	 BSD3
 License-file:    LICENSE
 Author:          John Dorsey <haskell@colquitt.org>
-Maintainer:      John Dorsey <haskell@colquitt.org>
+Maintainer:      Oleg Grenrus <oleg.grenrus@iki.fi>, John Dorsey <haskell@colquitt.org>
 Stability:       experimental
 Build-type:      Simple
-Build-depends:   base
-Exposed-Modules: Data.Tuple.OneTuple
+tested-with:
+  GHC  ==7.0.4
+    || ==7.2.2
+    || ==7.4.2
+    || ==7.6.3
+    || ==7.8.4
+    || ==7.10.3
+    || ==8.0.2
+    || ==8.2.2
+    || ==8.4.2
+extra-source-files:
+  Changelog.md
+
+source-repository head
+  type:      git
+  location:  https://github.com/phadej/OneTUple.git
+
+library
+  default-language: Haskell98
+  Exposed-Modules:  Data.Tuple.OneTuple
+  Build-depends:    base >= 4.3 && <4.12
+
+  if !impl(ghc >= 8.0)
+    Build-depends:  semigroups >=0.18.4 && <0.19
 
