diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
--- a/.travis.yml
+++ /dev/null
@@ -1,110 +0,0 @@
-# This Travis job script has been generated by a script via
-#
-#   haskell-ci './extensible.cabal'
-#
-# For more information, see https://github.com/haskell-CI/haskell-ci
-#
-# version: 0.2.1
-#
-language: c
-dist: xenial
-
-git:
-  submodules: false  # whether to recursively clone submodules
-
-cache:
-  directories:
-    - $HOME/.cabal/packages
-    - $HOME/.cabal/store
-
-before_cache:
-  - rm -fv $CABALHOME/packages/hackage.haskell.org/build-reports.log
-  # remove files that are regenerated by 'cabal update'
-  - rm -fv $CABALHOME/packages/hackage.haskell.org/00-index.*
-  - rm -fv $CABALHOME/packages/hackage.haskell.org/*.json
-  - rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.cache
-  - rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar
-  - rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar.idx
-
-  - rm -rfv $CABALHOME/packages/head.hackage
-
-matrix:
-  include:
-    - compiler: "ghc-8.6.3"
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.3], sources: [hvr-ghc]}}
-    - compiler: "ghc-8.4.4"
-      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.4.4], sources: [hvr-ghc]}}
-
-before_install:
-  - HC=/opt/ghc/bin/${CC}
-  - HCPKG=${HC/ghc/ghc-pkg}
-  - unset CC
-  - CABAL=/opt/ghc/bin/cabal
-  - CABALHOME=$HOME/.cabal
-  - export PATH="$CABALHOME/bin:$PATH"
-  - ROOTDIR=$(pwd)
-  - HCNUMVER=$(( $(${HC} --numeric-version|sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/\1 * 10000 + \2 * 100 + \3/') ))
-  - echo $HCNUMVER
-
-install:
-  - ${CABAL} --version
-  - echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]"
-  - TEST=--enable-tests
-  - BENCH=--enable-benchmarks
-  - GHCHEAD=${GHCHEAD-false}
-  - travis_retry ${CABAL} update -v
-  - sed -i.bak 's/^jobs:/-- jobs:/' $CABALHOME/config
-  - rm -fv cabal.project cabal.project.local
-  - grep -Ev -- '^\s*--' $CABALHOME/config | grep -Ev '^\s*$'
-  - rm -f cabal.project
-  - touch cabal.project
-  - "printf 'packages: \".\"\\n' >> cabal.project"
-  - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
-  - touch cabal.project.local
-  - "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | grep -vE -- '^(extensible)$' | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
-  - cat cabal.project || true
-  - cat cabal.project.local || true
-  - if [ -f "./configure.ac" ]; then (cd "." && autoreconf -i); fi
-  - rm -f cabal.project.freeze
-  - ${CABAL} new-freeze -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dry
-  - "cat \"cabal.project.freeze\" | sed -E 's/^(constraints: *| *)//' | sed 's/any.//'"
-  - rm  "cabal.project.freeze"
-  - ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dep -j2 all
-  - ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks --project-file="cabal.project" --dep -j2 all
-  - rm -rf .ghc.environment.* "."/dist
-  - DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)
-
-# Here starts the actual work to be performed for the package under test;
-# any command which exits with a non-zero exit code causes the build to fail.
-script:
-  # test that source-distributions can be generated
-  - ${CABAL} new-sdist all
-  - mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/
-  - cd ${DISTDIR} || false
-  - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
-  - rm -f cabal.project
-  - touch cabal.project
-  - "printf 'packages: \"extensible-*/*.cabal\"\\n' >> cabal.project"
-  - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
-  - touch cabal.project.local
-  - "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | grep -vE -- '^(extensible)$' | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
-  - cat cabal.project || true
-  - cat cabal.project.local || true
-  # this builds all libraries and executables (without tests/benchmarks)
-  - ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks all
-
-  # build & run tests, build benchmarks
-  - ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all
-  - if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all; fi
-
-  # cabal check
-  - (cd extensible-* && ${CABAL} check)
-
-  # haddock
-  - ${CABAL} new-haddock -w ${HC} ${TEST} ${BENCH} all
-
-  # Build without installed constraints for packages in global-db
-  - rm -f cabal.project.local; ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks all;
-
-# REGENDATA ["./extensible.cabal"]
-# EOF
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+0.7.1
+------------------------------------------------
+* Removed `vector` and `prettyprinter` orphans
+* Deprecated `Data.Extensible.Tangle`; use [tangle](https://hackage.haskell.org/package/tangle)
+* `parseJSON` gives more informative failure messages on failure
+* Supported `barbies ^>= 2`
+
 0.7
 -------------------------------------------------
 * Moved `Data.Extensible.Effect` into new `extensible-skeleton` package
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,8 @@
 ![logo](https://github.com/fumieval/extensible/blob/master/artwork/logo.png?raw=true)
 
-[![Build Status](https://travis-ci.org/fumieval/extensible.svg?branch=master)](https://travis-ci.org/fumieval/extensible)
+![Haskell CI](https://github.com/fumieval/extensible/workflows/Haskell%20CI/badge.svg)
 [![Hackage](https://img.shields.io/hackage/v/extensible.svg)](https://hackage.haskell.org/package/extensible)
+[![Discord](https://img.shields.io/discord/664807830116892674?color=%237095ec&label=Discord&style=plastic)](https://discord.gg/DG93Tgs)
 
 This package provides extensible poly-kinded records, variants and effects.
 
diff --git a/extensible.cabal b/extensible.cabal
--- a/extensible.cabal
+++ b/extensible.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.4
 name:                extensible
-version:             0.7
+version:             0.7.1
 synopsis:            Extensible, efficient, optics-friendly data types and effects
 homepage:            https://github.com/fumieval/extensible
 bug-reports:         http://github.com/fumieval/extensible/issues
@@ -16,12 +16,11 @@
 category:            Data, Records
 build-type:          Simple
 stability:           experimental
-Tested-With:         GHC == 8.4.4, GHC == 8.6.3
+Tested-With:         GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.2
 
 extra-source-files:
   examples/*.hs
   .gitignore
-  .travis.yml
   README.md
   CHANGELOG.md
 
@@ -81,7 +80,7 @@
     , hashable
     , membership
     , monad-skeleton >= 0.1.2
-    , prettyprinter
+    , prettyprinter >= 1.2.1 && <2
     , primitive
     , profunctors
     , QuickCheck
@@ -92,9 +91,9 @@
     , th-lift
     , transformers
     , unordered-containers
-    , vector
+    , vector >= 0.12.1.2
   if flag(barbies)
-    build-depends: barbies
+    build-depends: barbies ^>= 2
     cpp-options: -DBARBIES
   if flag(cassava)
     build-depends: cassava
diff --git a/src/Data/Extensible/Dictionary.hs b/src/Data/Extensible/Dictionary.hs
--- a/src/Data/Extensible/Dictionary.hs
+++ b/src/Data/Extensible/Dictionary.hs
@@ -21,6 +21,7 @@
 module Data.Extensible.Dictionary (library, WrapForall, Instance1, And) where
 import Control.DeepSeq
 import qualified Data.Aeson as J
+import qualified Data.Aeson.Types as J
 #ifdef CASSAVA
 import qualified Data.Csv as Csv
 import qualified Data.ByteString.Char8 as BC
@@ -35,7 +36,6 @@
 import Data.Constraint
 import Data.Extensible.Struct
 import Data.Extensible.Wrapper
-import Data.Functor.Identity
 import Data.Hashable
 import qualified Data.HashMap.Strict as HM
 import Data.Text.Prettyprint.Doc
@@ -52,8 +52,7 @@
 import Type.Membership
 
 #ifdef BARBIES
-import Data.Barbie
-import qualified Data.Barbie.Constraints as B
+import Barbies
 import Data.Functor.Product
 #endif
 
@@ -71,14 +70,6 @@
     (\i r -> showsPrec 0 (hlookup i xs) . showString " <: " . r)
     (showString "nil")
 
-#if !MIN_VERSION_prettyprinter(1,2,1)
-instance Pretty a => Pretty (Identity a) where
-  pretty = pretty . runIdentity
-
-instance Pretty a => Pretty (Const a b) where
-  pretty = pretty . getConst
-#endif
-
 instance WrapForall Pretty h xs => Pretty (xs :& h) where
   pretty xs = align
     $ encloseSep (flatAlt "" "{ ") (flatAlt "" " }") (flatAlt "" "; ")
@@ -163,9 +154,7 @@
   basicUnsafeNew n = fmap MV_Product
     $ hgenerateFor (Proxy :: Proxy (Instance1 U.Unbox h))
     (const $ Comp <$> M.basicUnsafeNew n)
-#if MIN_VERSION_vector(0,11,0)
   basicInitialize (MV_Product v) = henumerateFor (Proxy :: Proxy (Instance1 U.Unbox h)) (Proxy :: Proxy (x ': xs)) ((>>) . \i -> M.basicInitialize $ hlookupC i v) (return ())
-#endif
   basicUnsafeReplicate n x = fmap MV_Product
     $ hgenerateFor (Proxy :: Proxy (Instance1 U.Unbox h))
     $ \m -> fmap Comp $ M.basicUnsafeReplicate n $ hlookup m x
@@ -221,7 +210,7 @@
   parseJSON = J.withObject "Object" $ \v -> hgenerateFor
     (Proxy :: Proxy (KeyTargetAre KnownSymbol (Instance1 J.FromJSON h)))
     $ \m -> let k = symbolVal (proxyKeyOf m)
-      in fmap Field $ J.parseJSON $ maybe J.Null id $ HM.lookup (T.pack k) v
+      in fmap Field $ J.prependFailure ("parsing #" ++ k ++ ": ") $ J.parseJSON $ maybe J.Null id $ HM.lookup (T.pack k) v
 
 instance Forall (KeyTargetAre KnownSymbol (Instance1 J.ToJSON h)) xs => J.ToJSON (xs :& Field h) where
   toJSON = J.Object . hfoldlWithIndexFor
@@ -300,56 +289,6 @@
 class c (h x) => Instance1 c h x
 instance c (h x) => Instance1 c h x
 
-#if !MIN_VERSION_vector(0,12,1)
-newtype instance U.MVector s (Identity a) = MV_Identity (U.MVector s a)
-newtype instance U.Vector (Identity a) = V_Identity (U.Vector a)
-
-instance (U.Unbox a) => M.MVector U.MVector (Identity a) where
-  {-# INLINE basicLength #-}
-  {-# INLINE basicUnsafeSlice #-}
-  {-# INLINE basicOverlaps #-}
-  {-# INLINE basicUnsafeNew #-}
-  {-# INLINE basicUnsafeReplicate #-}
-  {-# INLINE basicUnsafeRead #-}
-  {-# INLINE basicUnsafeWrite #-}
-  {-# INLINE basicClear #-}
-  {-# INLINE basicSet #-}
-  {-# INLINE basicUnsafeCopy #-}
-  {-# INLINE basicUnsafeGrow #-}
-  basicLength (MV_Identity v) = M.basicLength v
-  basicUnsafeSlice i n (MV_Identity v) = MV_Identity $ M.basicUnsafeSlice i n v
-  basicOverlaps (MV_Identity v1) (MV_Identity v2) = M.basicOverlaps v1 v2
-  basicUnsafeNew n = MV_Identity <$> M.basicUnsafeNew n
-#if MIN_VERSION_vector(0,11,0)
-  basicInitialize (MV_Identity v) = M.basicInitialize v
-  {-# INLINE basicInitialize #-}
-#endif
-  basicUnsafeReplicate n (Identity x) = MV_Identity <$> M.basicUnsafeReplicate n x
-  basicUnsafeRead (MV_Identity v) i = Identity <$> M.basicUnsafeRead v i
-  basicUnsafeWrite (MV_Identity v) i (Identity x) = M.basicUnsafeWrite v i x
-  basicClear (MV_Identity v) = M.basicClear v
-  basicSet (MV_Identity v) (Identity x) = M.basicSet v x
-  basicUnsafeCopy (MV_Identity v1) (MV_Identity v2) = M.basicUnsafeCopy v1 v2
-  basicUnsafeMove (MV_Identity v1) (MV_Identity v2) = M.basicUnsafeMove v1 v2
-  basicUnsafeGrow (MV_Identity v) n = MV_Identity <$> M.basicUnsafeGrow v n
-
-instance (U.Unbox a) => G.Vector U.Vector (Identity a) where
-  {-# INLINE basicUnsafeFreeze #-}
-  {-# INLINE basicUnsafeThaw #-}
-  {-# INLINE basicLength #-}
-  {-# INLINE basicUnsafeSlice #-}
-  {-# INLINE basicUnsafeIndexM #-}
-  basicUnsafeFreeze (MV_Identity v) = V_Identity <$> G.basicUnsafeFreeze v
-  basicUnsafeThaw (V_Identity v) = MV_Identity <$> G.basicUnsafeThaw v
-  basicLength (V_Identity v) = G.basicLength v
-  basicUnsafeSlice i n (V_Identity v) = V_Identity $ G.basicUnsafeSlice i n v
-  basicUnsafeIndexM (V_Identity v) i = Identity <$> G.basicUnsafeIndexM v i
-  basicUnsafeCopy (MV_Identity mv) (V_Identity v) = G.basicUnsafeCopy mv v
-
-instance (U.Unbox a) => U.Unbox (Identity a)
-
-#endif
-
 #ifdef BARBIES
 instance FunctorB ((:&) xs) where
   bmap = hmap
@@ -363,9 +302,9 @@
 instance TraversableB ((:/) xs) where
   btraverse f (EmbedAt i x) = EmbedAt i <$> f x
 
-instance Generate xs => ProductB ((:&) xs) where
+instance Generate xs => ApplicativeB ((:&) xs) where
   bprod = hzipWith Pair
-  buniq = hrepeat
+  bpure = hrepeat
 
 instance ConstraintsB ((:&) xs) where
   type AllB c ((:&) xs) = Forall c xs
@@ -375,7 +314,4 @@
   type AllB c ((:/) xs) = Forall c xs
   baddDicts (EmbedAt i x) = EmbedAt i (Pair (hlookup i bdicts) x)
 
-instance Generate xs => ProductBC ((:&) xs) where
-  bdicts :: forall c ys. Forall c ys => ys :& B.Dict c
-  bdicts = hrepeatFor (Proxy :: Proxy c) $ B.Dict
 #endif
diff --git a/src/Data/Extensible/Tangle.hs b/src/Data/Extensible/Tangle.hs
--- a/src/Data/Extensible/Tangle.hs
+++ b/src/Data/Extensible/Tangle.hs
@@ -32,6 +32,7 @@
 newtype TangleT xs h m a = TangleT
   { unTangleT :: RWST (xs :& Comp (TangleT xs h m) h) () (xs :& Nullable h) m a }
   deriving (Functor, Applicative, Monad)
+{-# DEPRECATED TangleT "Use the tangle package instead" #-}
 
 instance MonadTrans (TangleT xs h) where
   lift = TangleT . lift
@@ -48,6 +49,7 @@
   => FieldName k -> TangleT xs h m (Repr h (k ':> v))
 lasso _ = view _Wrapper <$> hitchAt (association :: Membership xs (k ':> v))
 {-# INLINE lasso #-}
+{-# DEPRECATED lasso "Use the tangle package instead" #-}
 
 -- | Take a value from the tangles. The result is memoized.
 hitchAt :: Monad m => Membership xs x -> TangleT xs h m (h x)
@@ -60,6 +62,7 @@
       a <- unTangleT $ getComp $ hlookup k tangles
       modify $ over (pieceAt k) $ const $ Nullable $ Just a
       return a
+{-# DEPRECATED hitchAt "Use the tangle package instead" #-}
 
 -- | Run a 'TangleT' action and return the result and the calculated values.
 runTangleT :: Monad m
@@ -70,6 +73,7 @@
 runTangleT tangles rec0 (TangleT m) = (\(a, s, _) -> (a, s))
   <$> runRWST m tangles rec0
 {-# INLINE runTangleT #-}
+{-# DEPRECATED runTangleT "Use the tangle package instead" #-}
 
 -- | Run a 'TangleT' action.
 evalTangleT :: Monad m
@@ -79,6 +83,7 @@
   -> m a
 evalTangleT tangles rec0 (TangleT m) = fst <$> evalRWST m tangles rec0
 {-# INLINE evalTangleT #-}
+{-# DEPRECATED evalTangleT "Use the tangle package instead" #-}
 
 -- | Run tangles and collect all the results as a 'Record'.
 runTangles :: Monad m
