diff --git a/Biobase/Primary.hs b/Biobase/Primary.hs
--- a/Biobase/Primary.hs
+++ b/Biobase/Primary.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE PatternGuards #-}
+{-# LANGUAGE OverlappingInstances #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE TypeSynonymInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -46,12 +48,14 @@
 
 -- * Efficient nucleotide encoding
 
--- A 'Nuc'leotide is simply an Int wrapped up.
+-- A 'Nuc'leotide is simply an Int wrapped up. 'nIMI' provides for
+-- intermolecular initialization, 'nN' stands for "any" nucleotides, 'nA',
+-- 'nC', 'nG', 'nT' / 'nU' are normal nucleotides.
 
 newtype Nuc = Nuc {unNuc :: Int}
   deriving (Eq,Ord,Ix)
 
-(nN : nA : nC : nG : nT : _) = map Nuc [0 .. ]
+(nN : nA : nC : nG : nT : nIMI : _) = map Nuc [0 .. ]
 nU = nT
 
 acgt = [nA..nT]
diff --git a/Biobase/Secondary.hs b/Biobase/Secondary.hs
--- a/Biobase/Secondary.hs
+++ b/Biobase/Secondary.hs
@@ -1,6 +1,8 @@
+{-# LANGUAGE PatternGuards #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE OverlappingInstances #-}
 {-# LANGUAGE StandaloneDeriving #-}
 
 -- | Secondary structure: define basepairs as Int-tuples, the three edges, a
@@ -18,12 +20,24 @@
 import qualified Data.Vector.Unboxed as VU
 import Data.Ix (Ix(..))
 import Data.Tuple (swap)
+import Data.List as L
+import Data.Char (toLower, toUpper)
 
 import Biobase.Primary
 import Biobase.Primary.Bounds
 
 
 
+-- | Easy reading of a three-Char string into a triple.
+
+threeChar :: String -> ExtPairAnnotation
+threeChar s@[c,x,y]
+  | Just c' <- L.lookup (toLower c) charCTList
+  , Just x' <- L.lookup (toUpper x) charEdgeList
+  , Just y' <- L.lookup (toUpper y) charEdgeList
+  = (c',x',y')
+  | otherwise = error $ "can't convert string: " ++ s
+
 -- | A basepair is simply a pair of Ints which are 0-indexing a sequence.
 --
 -- TODO storable vector, newtype, peek/poke?
@@ -89,8 +103,8 @@
 paraCT = undefined
 
 charCTList =
-  [ ('C',cis)
-  , ('T',trans)
+  [ ('c',cis)
+  , ('t',trans)
   -- TODO antiCT, paraCT
   ]
 
@@ -164,5 +178,5 @@
 --
 -- TODO maybe newtype this triple?
 
-instance Show (CTisomerism,Edge,Edge) where
-  show (ct,eI,eJ) = concat [show ct, show eI, show eJ]
+--instance Show (CTisomerism,Edge,Edge) where
+--  show (ct,eI,eJ) = concat [show ct, show eI, show eJ]
diff --git a/Biobase/Secondary/PseudoKnots.hs b/Biobase/Secondary/PseudoKnots.hs
--- a/Biobase/Secondary/PseudoKnots.hs
+++ b/Biobase/Secondary/PseudoKnots.hs
@@ -40,6 +40,9 @@
         Just pos = VU.elemIndex mmx cnts
         incomp (i,j) = VU.length $ VU.filter (\(k,l) -> i<k&&k<j&&j<l || k<i&&i<l&&l<j) ps
 
+instance RemovePseudoKnots [PairIdx] where
+  removeByCounting = VU.toList . removeByCounting . VU.fromList
+
 -- | Remove pseudoknotted pairs from extended RNA secondary structures.
 
 instance RemovePseudoKnots (VU.Vector ExtPairIdx) where
@@ -53,3 +56,6 @@
         mmx = VU.maximum cnts
         Just pos = VU.elemIndex mmx cnts
         incomp ((i,j),_) = VU.length $ VU.filter (\((k,l),_) -> i<k&&k<j&&j<l || k<i&&i<l&&l<j) ps
+
+instance RemovePseudoKnots [ExtPairIdx] where
+  removeByCounting = VU.toList . removeByCounting . VU.fromList
diff --git a/BiobaseXNA.cabal b/BiobaseXNA.cabal
--- a/BiobaseXNA.cabal
+++ b/BiobaseXNA.cabal
@@ -1,5 +1,5 @@
 name:           BiobaseXNA
-version:        0.5.0.0
+version:        0.5.0.1
 author:         Christian Hoener zu Siederdissen
 maintainer:     choener@tbi.univie.ac.at
 homepage:       http://www.tbi.univie.ac.at/~choener/
@@ -23,12 +23,12 @@
 library
   build-depends:
     base >3 && <5,
-    text,
     bytestring,
     primitive,
+    text,
     tuple,
-    vector-read-instances,
-    vector >=0.7 && <0.8
+    vector >=0.7 && <0.8,
+    vector-read-instances
 
   exposed-modules:
     Biobase.Primary
