diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,15 @@
+# Revision history for mattermost-api-qc
+
+## 30802.1.0  -- 2017-05-13
+
+* Switched from Arbitrary instances to Gen x functions.
+* Removed dependency on quickcheck-instances
+* Updated for mattermost-api version 30802.1.0
+
+## 30802.0.0  -- 2017-05-11
+
+* Updated for mattermost-api version 30802.0.0
+	
+## 30701.1.0  -- 2017-05-09
+
+* First version.
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2017 Kevin Quick
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/mattermost-api-qc.cabal b/mattermost-api-qc.cabal
new file mode 100644
--- /dev/null
+++ b/mattermost-api-qc.cabal
@@ -0,0 +1,30 @@
+name:                mattermost-api-qc
+version:             30802.1.0
+synopsis:            QuickCheck instances for the Mattermost client API library
+homepage:            https://github.com/matterhorn-chat/mattermost-api-qc
+license:             ISC
+license-file:        LICENSE
+author:              Kevin Quick
+maintainer:          kquick@galois.com
+copyright:           2017 Kevin Quick
+category:            Testing
+build-type:          Simple
+extra-source-files:  ChangeLog.md
+cabal-version:       >=1.10
+tested-with:         GHC == 8.0.2
+
+source-repository    head
+  type: git
+  location: https://github.com/matterhorn-chat/mattermost-api-qc.git
+
+library
+  exposed-modules:     Network.Mattermost.QuickCheck
+  build-depends:       base >=4.4 && <5
+                     , containers
+                     , mattermost-api == 30802.1.0
+                     , QuickCheck
+                     , text
+                     , time
+  hs-source-dirs:      src
+  default-language:    Haskell2010
+  ghc-options:         -Wall
diff --git a/src/Network/Mattermost/QuickCheck.hs b/src/Network/Mattermost/QuickCheck.hs
new file mode 100644
--- /dev/null
+++ b/src/Network/Mattermost/QuickCheck.hs
@@ -0,0 +1,96 @@
+module Network.Mattermost.QuickCheck where
+
+import qualified Data.Sequence as Seq
+import qualified Data.Text as T
+import           Data.Time.Calendar (Day(..))
+import           Data.Time.Clock (UTCTime(..), secondsToDiffTime)
+import           Network.Mattermost.Types
+import           Test.QuickCheck
+
+
+genText :: Gen T.Text
+genText = sized $ \s ->
+          oneof [ return T.empty
+                 , return $ T.singleton 'a'
+                 , return $ T.singleton '1'
+                 , return $ T.pack "b2"
+                 , return $ T.singleton ' '
+                 , return $ T.singleton '\n'
+                 , return $ T.singleton '\r'
+                 , return $ T.singleton '\t'
+                 , return $ T.pack " \n\r\t"
+                 , T.pack <$> vectorOf s arbitrary
+                 ]
+
+genMaybe :: Gen a -> Gen (Maybe a)
+genMaybe g = frequency [ (1, return Nothing)
+                       , (11, Just <$> g)
+                       ]
+
+genSeq :: Gen a -> Gen (Seq.Seq a)
+genSeq g = sized $ \s ->
+           frequency [ (1, return Seq.empty)
+                     , (9, Seq.fromList <$> vectorOf s g)
+                     ]
+
+genTime :: Gen UTCTime
+genTime = UTCTime
+           <$> (ModifiedJulianDay <$> (2000 +) <$> arbitrary)
+           <*> (secondsToDiffTime <$> choose (0, 86400))
+
+genPostId :: Gen PostId
+genPostId = PI . Id <$> genText
+
+genChannelId :: Gen ChannelId
+genChannelId = CI . Id <$> genText
+
+genFileId :: Gen FileId
+genFileId = FI . Id <$> genText
+
+genUserId :: Gen UserId
+genUserId = UI . Id <$> genText
+
+genType :: Gen Type
+genType = oneof [ return Ordinary
+                , return Direct
+                , return Private
+                , return Group
+                , return SystemHeaderChange
+                , Unknown <$> genText
+                ]
+
+genPostProps :: Gen PostProps
+genPostProps = PostProps
+               <$> genMaybe genText
+               <*> genMaybe genText
+               <*> attached
+               <*> genMaybe genText
+               <*> genMaybe genText
+
+
+attached :: Gen (Maybe (Seq.Seq PostPropAttachment))
+attached = oneof [ return Nothing
+                 , Just <$> (genSeq genPostPropAttachment)
+                 ]
+
+genPostPropAttachment :: Gen PostPropAttachment
+genPostPropAttachment = PostPropAttachment <$> genText <*> genText
+
+genPost :: Gen Post
+genPost = Post
+          <$> genMaybe genPostId
+          <*> genMaybe genPostId
+          <*> genPostProps
+          <*> genText
+          <*> genSeq genFileId
+          <*> genPostId
+          <*> genType
+          <*> genText
+          <*> genMaybe genTime
+          <*> genText
+          <*> genTime
+          <*> genMaybe genUserId
+          <*> genTime
+          <*> genMaybe genPostId
+          <*> genChannelId
+          <*> arbitrary
