diff --git a/Biobase/GeneticCodes.hs b/Biobase/GeneticCodes.hs
new file mode 100644
--- /dev/null
+++ b/Biobase/GeneticCodes.hs
@@ -0,0 +1,70 @@
+
+module Biobase.GeneticCodes
+  ( module Biobase.GeneticCodes
+  , module Biobase.GeneticCodes.Types
+  , fromByteString
+  , fromFile
+  , geneticCodes
+  , translate
+  ) where
+
+import Control.Lens
+import Control.Monad.Except
+import Data.List (find)
+import Data.Text (pack)
+import Data.Text (Text,isInfixOf,unpack)
+import System.Directory (doesFileExist)
+import Text.Printf
+import System.Exit (exitSuccess)
+
+import Biobase.GeneticCodes.Embedded
+import Biobase.GeneticCodes.Import
+import Biobase.GeneticCodes.Translation
+import Biobase.GeneticCodes.Types
+
+
+
+codeByTableID
+  ∷ (MonadError String m)
+  ⇒ [TranslationTable c a]
+  → Int
+  → m (TranslationTable c a)
+codeByTableID ts i
+  = maybe (throwError $ printf "No TranslationTable with ID %d found!" i) return
+  $ find (\t → t^.tableID == i) ts
+
+codeByTableNameInfix
+  ∷ (MonadError String m)
+  ⇒ [TranslationTable c a]
+  → Text
+  → m (TranslationTable c a)
+codeByTableNameInfix ts n
+  = maybe (throwError $ printf "No TranslationTable with Name infix %s found!" $ unpack n) return
+  $ find (\t → n `isInfixOf` (t^.tableName)) ts
+
+-- | If the given filepath exists, then we try to load the genetic table from
+-- the file. This will fail if there is not exactly one genetic table there. If
+-- @fp@ is not a file, we try parsing @fp@ as a numeric ID and look for that
+-- table. Finally we try finding an infix with that name.
+--
+-- This is all slightly "unsafe" but captures the most common scenario where we
+-- either load such a table from file or need selection of the correct one.
+--
+-- If the given filepath is @"list"@, then a list of table id's and table names
+-- is returned.
+
+fromFileOrCached
+  ∷ (MonadIO m, MonadError String m)
+  ⇒ FilePath
+  → m (TranslationTable Char Char)
+fromFileOrCached fp = do
+  dfe ← liftIO $ doesFileExist fp
+  if | fp == "list" → do
+          mapM_ (liftIO . uncurry (printf "%3d %s\n")) [ (t^.tableID,t^.tableName) | t ← geneticCodes ]
+          liftIO exitSuccess
+     | dfe → fromFile fp >>= \case
+         [x] → return x
+         xs  → throwError $ fp ++ " should contain exactly one translation table!"
+     | [(k,"")] ← reads fp → codeByTableID geneticCodes k
+     | otherwise → codeByTableNameInfix geneticCodes $ pack fp
+
diff --git a/Biobase/GeneticCodes/Embedded.hs b/Biobase/GeneticCodes/Embedded.hs
new file mode 100644
--- /dev/null
+++ b/Biobase/GeneticCodes/Embedded.hs
@@ -0,0 +1,16 @@
+
+module Biobase.GeneticCodes.Embedded where
+
+import Control.Monad.Except
+import Data.ByteString (ByteString)
+import Data.FileEmbed
+
+import Biobase.GeneticCodes.Import
+import Biobase.GeneticCodes.Types
+
+geneticCodesFile ∷ ByteString
+geneticCodesFile = $(embedFile "sources/translation-tables")
+
+geneticCodes ∷ [TranslationTable Char Char]
+geneticCodes = either error id . runExcept $ fromByteString geneticCodesFile
+
diff --git a/Biobase/GeneticCodes/Import.hs b/Biobase/GeneticCodes/Import.hs
new file mode 100644
--- /dev/null
+++ b/Biobase/GeneticCodes/Import.hs
@@ -0,0 +1,78 @@
+
+-- |
+--
+-- The tables imported with these functions are from ENA:
+-- <https://www.ebi.ac.uk/ena/browse/translation-tables>
+
+module Biobase.GeneticCodes.Import where
+
+import Control.Monad.Except
+import Data.ByteString.Char8 as BS hiding (unpack,map)
+import Data.ByteString.Char8 (ByteString)
+import Data.Text.Encoding (decodeUtf8)
+import Data.Text.IO as TIO
+import Data.Text (Text,unpack)
+import Data.Void
+import System.Exit
+import Text.Megaparsec
+import Text.Megaparsec.Char as MC
+import Text.Megaparsec.Char.Lexer as MCL
+
+import Biobase.Types.Codon
+
+import Biobase.GeneticCodes.Types
+
+
+
+type TTParser = Parsec Void Text
+
+-- | Import translation tables from a given file. In case of parse error, print
+-- the error and exit with a failure.
+
+fromFile
+  ∷ (MonadIO m, MonadError String m)
+  ⇒ FilePath
+  → m [TranslationTable Char Char]
+fromFile fp = (liftIO $ BS.readFile fp) >>= fromByteString
+
+-- | Parse a ByteString with translation tables.
+
+fromByteString
+  ∷ (MonadError String m)
+  ⇒ ByteString
+  → m [TranslationTable Char Char]
+fromByteString bs = case runParser (some parseTranslationTable) "" (decodeUtf8 bs) of
+    -- Left err → throwError $ parseErrorPretty err -- megaparsec 6.x
+    Left err → throwError $ errorBundlePretty err   -- megaparsec 7.x
+    Right rs → return rs
+
+-- | Parses a single translation table.
+
+parseTranslationTable ∷ TTParser (TranslationTable Char Char)
+parseTranslationTable = do
+  (i,hdr) ← parseHeader
+  aas     ← parseData "amino acids"
+  starts' ← parseData "start codons"
+  base1   ← parseData "Base 1"
+  base2   ← parseData "Base 2"
+  base3   ← parseData "Base 3"
+  let triplets = zipWith3 Codon base1 base2 base3
+  let starts   = map (=='M') starts'
+  let translations = zipWith3 TranslationElement triplets starts aas
+  return $ genTranslationTable i hdr translations
+
+-- | Parse the header, returning the Identifier and the name of the table.
+
+parseHeader ∷ TTParser (Int,Text)
+parseHeader
+  = (,) <$> (fromIntegral <$> lexeme MC.space decimal)
+  <* char ':' <* MC.space
+  <*> takeWhileP Nothing (/= '\n')
+  <* MC.space
+
+parseData ∷ Text → TTParser String
+parseData t
+  = string' t <* MC.space
+  *> (unpack <$> takeP Nothing 64)
+  <* MC.space
+
diff --git a/Biobase/GeneticCodes/Translation.hs b/Biobase/GeneticCodes/Translation.hs
new file mode 100644
--- /dev/null
+++ b/Biobase/GeneticCodes/Translation.hs
@@ -0,0 +1,70 @@
+
+-- | Abstract translation functionality. Given a genetic code translation table
+-- (as provided within this module), provide translation from the nucleotide to
+-- the amino acid alphabet.
+--
+-- Limited "backtranslation" capabilities are provided. Since this process is
+-- lossy, it should only be used in very specific circumstances.
+--
+-- TODO Translation from @BioSequence RNA is missing.
+
+module Biobase.GeneticCodes.Translation where
+
+import           Control.Lens
+import qualified Data.Map.Strict as M
+import qualified Data.ByteString.Char8 as BS
+
+import           Biobase.Types.BioSequence
+import           Biobase.Types.Codon
+
+import           Biobase.GeneticCodes.Types
+
+
+
+-- |
+
+class Translation t where
+  -- | Defines the target type for a given translation input.
+  type TargetType t ∷ *
+  -- | Type of the nucleotide characters.
+  type CodonType t ∷ *
+  -- | Type of the amino acid characters.
+  type AAType t ∷ *
+  -- | Translate from a given type of sequence @t@ into the target type.
+  translate ∷ TranslationTable (CodonType t) (AAType t) → t → TargetType t
+
+-- | Very simple translation of individual base triplets.
+
+instance Translation (Codon Char) where
+  type TargetType  (Codon Char) = Char
+  type CodonType (Codon Char) = Char
+  type AAType      (Codon Char) = Char
+  translate tbl t = maybe 'X' _aminoAcid $ M.lookup t (tbl^.codonToAminoAcid)
+  {-# Inline translate #-}
+
+-- | Strings of characters are normally very inconvenient but useful in
+-- backtracking cases. Fully assumes that the alphabet is DNA. Ignores
+-- non-triplets at the end.
+
+instance Translation String where
+  type TargetType String = String
+  type CodonType String = Char
+  type AAType String = Char
+  translate tbl =
+    let go xs | [x,y,z] ← hd = translate tbl (Codon x y z) : go tl
+              | otherwise = []
+              where (hd,tl) = splitAt 3 xs
+    in  go
+
+-- | Translation of @BioSequence DNA@. The translation tables assume DNA
+-- triplets anyway. Biologically there should be a transcription step in
+-- between. Ignores non-triplets at the end.
+
+instance Translation (BioSequence DNA) where
+  type TargetType (BioSequence DNA) = BioSequence AA
+  type CodonType (BioSequence DNA) = Char
+  type AAType (BioSequence DNA) = Char
+  translate tbl (BioSequence xs) =
+    let go k = Just (translate tbl $ Codon (BS.index xs k) (BS.index xs (k+1)) (BS.index xs (k+2)) ,k+3)
+    in  BioSequence . fst $ BS.unfoldrN (BS.length xs `div` 3) go 0
+
diff --git a/Biobase/GeneticCodes/Types.hs b/Biobase/GeneticCodes/Types.hs
new file mode 100644
--- /dev/null
+++ b/Biobase/GeneticCodes/Types.hs
@@ -0,0 +1,49 @@
+
+-- |
+
+module Biobase.GeneticCodes.Types where
+
+import Control.Lens
+import Data.ByteString.Char8 (ByteString)
+import Data.Map.Strict (Map,fromList,fromListWith)
+import Data.Text (Text)
+
+import Biobase.Types.Codon
+
+
+
+data TranslationElement c a = TranslationElement
+  { _baseCodon    ∷ !(Codon c)
+  , _isStartCodon ∷ !Bool
+  , _aminoAcid    ∷ !a
+  }
+  deriving (Show)
+makeLenses ''TranslationElement
+
+data TranslationTable c a = TranslationTable
+  { _codonToAminoAcid  ∷ !(Map (Codon c) (TranslationElement c a))
+  , _aminoAcidtoCodons ∷ !(Map a [TranslationElement c a])
+  , _tableID           ∷ !Int
+  , _tableName         ∷ !Text
+  }
+  deriving (Show)
+makeLenses ''TranslationTable
+
+genTranslationTable
+  ∷ (Ord c, Ord a)
+  ⇒ Int
+  -- ^ table identifier
+  → Text
+  -- ^ table hdr / table name
+  → [TranslationElement c a]
+  -- ^ known translation elements (should be @4^3@ but is not checked)
+  → TranslationTable c a
+  -- ^ finished translation table
+{-# Inlinable genTranslationTable #-}
+genTranslationTable i hdr xs = TranslationTable
+  { _codonToAminoAcid  = fromList [ (t^.baseCodon, t) | t ← xs ]
+  , _aminoAcidtoCodons = fromListWith (++) [ (t^.aminoAcid, [t]) | t ← xs ]
+  , _tableID           = i
+  , _tableName         = hdr
+  }
+
diff --git a/BiobaseENA.cabal b/BiobaseENA.cabal
new file mode 100644
--- /dev/null
+++ b/BiobaseENA.cabal
@@ -0,0 +1,94 @@
+Cabal-version:  2.2
+Name:           BiobaseENA
+Version:        0.0.0.1
+License:        BSD-3-Clause
+License-file:   LICENSE
+Author:         Christian Hoener zu Siederdissen
+Maintainer:     choener@bioinf.uni-leipzig.de
+Copyright:      Christian Hoener zu Siederdissen, 2019
+homepage:       https://github.com/choener/BiobaseENA
+bug-reports:    https://github.com/choener/BiobaseENA/issues
+Stability:      Experimental
+Category:       Data
+Build-type:     Simple
+tested-with:    GHC == 8.4.4
+Synopsis:       European Nucleotide Archive data
+Description:
+                Provides data (and later API) access to the European Nucleotide Archive.
+                .
+                * Taxonomy Service / Translation tables (hardcoded)
+
+
+
+extra-source-files:
+  changelog.md
+  README.md
+  sources/translation-tables
+
+
+common deps
+  build-depends: base                     >= 4.7      &&  < 5.0
+               , bytestring
+               , containers
+               , directory
+               , file-embed               >= 0.0.10
+               , lens                     >= 4.0
+               , megaparsec               >= 7.0
+               , mtl                      >= 2.0
+               , text
+               , vector                   >= 0.10
+               , vector-th-unbox          >= 0.2
+               --
+               , BiobaseTypes             == 0.2.0.*
+  ghc-options:
+    -O2
+    -funbox-strict-fields
+  default-language:
+    Haskell2010
+  default-extensions: BangPatterns
+                    , FlexibleContexts
+                    , FlexibleInstances
+                    , MultiWayIf
+                    , LambdaCase
+                    , OverloadedStrings
+                    , TemplateHaskell
+                    , TypeFamilies
+                    , UnicodeSyntax
+
+
+library
+  import:
+    deps
+  exposed-modules:
+    Biobase.GeneticCodes
+    Biobase.GeneticCodes.Embedded
+    Biobase.GeneticCodes.Import
+    Biobase.GeneticCodes.Translation
+    Biobase.GeneticCodes.Types
+
+
+
+
+test-suite properties
+  import:
+    deps
+  type:
+    exitcode-stdio-1.0
+  main-is:
+    properties.hs
+  ghc-options:
+    -threaded -rtsopts -with-rtsopts=-N
+  hs-source-dirs:
+    tests
+  build-depends: BiobaseENA
+               , QuickCheck                   >= 2.7
+               , tasty                        >= 0.11
+               , tasty-quickcheck             >= 0.8
+               , tasty-th                     >= 0.1
+
+
+
+source-repository head
+  type: git
+  location: git://github.com/choener/BiobaseENA
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright Christian Hoener zu Siederdissen 2018
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Christian Hoener zu Siederdissen nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+[![Build Status](https://travis-ci.org/choener/BiobaseENA.svg?branch=master)](https://travis-ci.org/choener/BiobaseENA)
+
+# BiobaseENA
+
+Data from the European Nucleotide Archive. Currently only provides translation
+table but is supposed to, at some point, provide API access to their data.
+
+
+
+#### Contact
+
+Christian Hoener zu Siederdissen  
+Leipzig University, Leipzig, Germany  
+choener@bioinf.uni-leipzig.de  
+http://www.bioinf.uni-leipzig.de/~choener/  
+
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/changelog.md b/changelog.md
new file mode 100644
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,6 @@
+0.0.0.1
+-------
+
+- initial creation
+- using megaparsec (testing for now)
+
diff --git a/sources/translation-tables b/sources/translation-tables
new file mode 100644
--- /dev/null
+++ b/sources/translation-tables
@@ -0,0 +1,125 @@
+1: Standard
+Amino acids  FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons ---M---------------M---------------M----------------------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+2: Vertebrate Mitochondrial
+Amino acids  FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSS**VVVVAAAADDEEGGGG
+Start codons --------------------------------MMMM---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+3: Yeast Mitochondrial
+Amino acids  FFLLSSSSYY**CCWWTTTTPPPPHHQQRRRRIIMMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons ----------------------------------MM----------------------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+4: Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate Mitochondrial; Mycoplasma; Spiroplasma
+Amino acids  FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons --MM---------------M------------MMMM---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+5: Invertebrate Mitochondrial
+Amino acids  FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSSSVVVVAAAADDEEGGGG
+Start codons ---M----------------------------MMMM---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+6: Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nuclear
+Amino acids  FFLLSSSSYYQQCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons -----------------------------------M----------------------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+9: Echinoderm Mitochondrial; Flatworm Mitochondrial
+Amino acids  FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG
+Start codons -----------------------------------M---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+10: Euplotid Nuclear
+Amino acids  FFLLSSSSYY**CCCWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons -----------------------------------M----------------------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+11: Bacterial, Archaeal and Plant Plastid
+Amino acids  FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons ---M---------------M------------MMMM---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+12: Alternative Yeast Nuclear
+Amino acids  FFLLSSSSYY**CC*WLLLSPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons -------------------M---------------M----------------------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+13: Ascidian Mitochondrial
+Amino acids  FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSGGVVVVAAAADDEEGGGG
+Start codons ---M------------------------------MM---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+14: Alternative Flatworm Mitochondrial
+Amino acids  FFLLSSSSYYY*CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG
+Start codons -----------------------------------M----------------------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+16: Chlorophycean Mitochondrial
+Amino acids  FFLLSSSSYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons -----------------------------------M----------------------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+21: Trematode Mitochondrial
+Amino acids  FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNNKSSSSVVVVAAAADDEEGGGG
+Start codons -----------------------------------M---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+22: Scenedesmus obliquus mitochondrial
+Amino acids  FFLLSS*SYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons -----------------------------------M----------------------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+23: Thraustochytrium mitochondrial code
+Amino acids  FF*LSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons --------------------------------M--M---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+24: Pterobranchia Mitochondrial
+Amino acids  FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSSKVVVVAAAADDEEGGGG
+Start codons ---M---------------M---------------M---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
+
+25: Candidate Division SR1 and Gracilibacteria
+Amino acids  FFLLSSSSYY**CCGWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
+Start codons ---M-------------------------------M---------------M------------
+Base 1       TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAGGGGGGGGGGGGGGGG
+Base 2       TTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGGTTTTCCCCAAAAGGGG
+Base 3       TCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAGTCAG
diff --git a/tests/properties.hs b/tests/properties.hs
new file mode 100644
--- /dev/null
+++ b/tests/properties.hs
@@ -0,0 +1,8 @@
+
+module Main where
+
+
+
+main ∷ IO ()
+main = return ()
+
