diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,8 @@
+ViennaRNAParser [![Hackage](https://img.shields.io/hackage/v/ViennaRNAParser.svg)](https://hackage.haskell.org/package/ViennaRNAParser) [![Build Status](https://travis-ci.org/eggzilla/ViennaRNAParser.svg)](https://travis-ci.org/eggzilla/ViennaRNAParser)
+=============
+
+Currently contains parsers and datatypes for: RNAalifold, RNAdistance, RNAcofold, RNAfold, RNAplex, RNAup, RNAz.
+
+For more information on the ViennaRNA package refer to <http://www.tbi.univie.ac.at/RNA/>. 
+
+The libary is tested with Version 2.1.9 of the ViennaRNA package.
diff --git a/ViennaRNAParser.cabal b/ViennaRNAParser.cabal
--- a/ViennaRNAParser.cabal
+++ b/ViennaRNAParser.cabal
@@ -5,10 +5,13 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             1.0.1
+version:             1.2.0
 synopsis:            Libary for parsing ViennaRNA package output
-description:         Currently contains parsers and datatypes for: RNAplex, RNAz. The libary is tested with Version >2.0 of the ViennaRNA package.
-                     
+description:         Currently contains parsers and datatypes for: RNAalifold, RNAdistance, RNAcofold, RNAfold, RNAplex, RNAup, RNAz.
+		     .
+		     For more information on the ViennaRNA package refer to <http://www.tbi.univie.ac.at/RNA/>.
+		     .
+		     The libary is tested with Version 2.1.9 of the ViennaRNA package.                      
 license:             GPL
 license-file:        LICENSE
 author:              Florian Eggenhofer
@@ -18,19 +21,24 @@
 build-type:          Simple
 cabal-version:       >=1.8
 
+extra-source-files:
+  README.md changelog
+
 source-repository head
   type:     git
   location: https://github.com/eggzilla/ViennaRNAParser
 
 source-repository this
   type:     git
-  location: https://github.com/eggzilla/ViennaRNAParser/tree/1.0.1
-  tag:      1.0.1
+  location: https://github.com/eggzilla/ViennaRNAParser/tree/1.2.0
+  tag:      1.2.0
 
 library
   -- Modules exported by the library.
   exposed-modules:   Bio.ViennaRNAParser
-  other-modules:     Bio.RNAfoldData
+                     Bio.RNAcofoldData
+                     Bio.RNAcofoldParser
+                     Bio.RNAfoldData
                      Bio.RNAfoldParser
                      Bio.RNAplexData
                      Bio.RNAplexParser
@@ -47,9 +55,13 @@
   ghc-options:         -Wall -O2 -fno-warn-unused-do-bind
 
   -- Other library packages from which modules are imported.
-  build-depends:       base >=4.5 && <5, parsec
+  build-depends:       base >=4.5 && <5, parsec>=3.1.9, process
   
   -- Directories containing source files.
   hs-source-dirs:      src
-  
-    
+
+test-suite hspec
+    build-depends:    base, parsec, ViennaRNAParser, hspec>=1.8
+    hs-source-dirs:   test-suite
+    main-is:          Spec.hs
+    type:             exitcode-stdio-1.0
diff --git a/changelog b/changelog
new file mode 100644
--- /dev/null
+++ b/changelog
@@ -0,0 +1,11 @@
+-*-change-log-*-
+1.2.0 Florian Eggenhofer <florian.eggenhofer@univie.ac.at> 1. July 2015
+	* Added Hspec test-suite
+	* Added RNAcofold parser
+1.1.0 Florian Eggenhofer <florian.eggenhofer@univie.ac.at> 2. June 2015
+	* Exposed submodules for imports, added systemcalls for RNAalifold,
+	RNAfold, RNAz
+1.0.1 Florian Eggenhofer <florian.eggenhofer@univie.ac.at> 1. March 2015
+	* Added Travis CI support
+	* Added -Wall and -O2 compiler options
+	* Added RNAfold, RNAalifold, RNAdistance, RNAup parsers
diff --git a/src/Bio/RNAalifoldData.hs b/src/Bio/RNAalifoldData.hs
--- a/src/Bio/RNAalifoldData.hs
+++ b/src/Bio/RNAalifoldData.hs
@@ -4,7 +4,7 @@
 module Bio.RNAalifoldData where
 
 -- | Data structure corrsponds with alifoldoutput redirected to file. Output written directly to commandline also contains number of sequences and length of consensus sequence
-data RNAalifoldOutput = RNAalifoldOutput
+data RNAalifold = RNAalifold
   {
     alignmentConsensusSequence :: String,
     alignmentConsensusDotBracket :: String,
diff --git a/src/Bio/RNAalifoldParser.hs b/src/Bio/RNAalifoldParser.hs
--- a/src/Bio/RNAalifoldParser.hs
+++ b/src/Bio/RNAalifoldParser.hs
@@ -2,6 +2,7 @@
 --   For more information on RNAalifold consult: <>
 
 module Bio.RNAalifoldParser (
+                       systemRNAalifold,
                        parseRNAalifold,
                        readRNAalifold,                                 
                        module Bio.RNAalifoldData
@@ -9,18 +10,26 @@
 
 import Bio.RNAalifoldData
 import Text.ParserCombinators.Parsec
+import System.Process
+import System.Exit
+import qualified Control.Exception.Base as CE
 
 readDouble :: String -> Double
 readDouble = read              
 
+--- | Run external RNAalifold command and read the output into the corresponding datatype
+systemRNAalifold :: String -> String -> String -> IO ExitCode
+systemRNAalifold options inputFilePath outputFilePath = system ("RNAalifold " ++ options  ++ " < " ++ inputFilePath  ++ " > " ++ outputFilePath)
+
 -- | Parse the consenus of RNAz results         
-genParserRNAalifold :: GenParser Char st RNAalifoldOutput
+genParserRNAalifold :: GenParser Char st RNAalifold
 genParserRNAalifold = do
   _sequence <- many1 (noneOf "\n")                
   newline
   secondaryStructure <- many1 (oneOf "&().,")
   string (" (")
-  foldingEnergy <- many1 (noneOf " ")
+  optional space
+  foldingEnergy <- many1 (oneOf "-.1234567890")
   string " ="
   many1 space
   initialFoldingEnergy <- many1 (noneOf " ")
@@ -30,13 +39,15 @@
   string (")")
   many1 space
   eof
-  return $ RNAalifoldOutput _sequence secondaryStructure (readDouble foldingEnergy) (readDouble initialFoldingEnergy) (readDouble covarianceContributionEnergy)
+  return $ RNAalifold _sequence secondaryStructure (readDouble foldingEnergy) (readDouble initialFoldingEnergy) (readDouble covarianceContributionEnergy)
    
 -- | parse RNAalifold output from input string
-parseRNAalifold :: [Char] -> Either ParseError RNAalifoldOutput
+parseRNAalifold :: [Char] -> Either ParseError RNAalifold
 parseRNAalifold input = parse genParserRNAalifold "genParseRNAalifold" input
 
 -- | parse RNAalifold output from input filePath                      
-readRNAalifold :: String -> IO (Either ParseError RNAalifoldOutput)                  
-readRNAalifold filePath = parseFromFile genParserRNAalifold filePath
+readRNAalifold :: String -> IO (Either ParseError RNAalifold)
+readRNAalifold filePath = do
+  parsedFile <- parseFromFile genParserRNAalifold filePath
+  CE.evaluate parsedFile
 
diff --git a/src/Bio/RNAcofoldData.hs b/src/Bio/RNAcofoldData.hs
new file mode 100644
--- /dev/null
+++ b/src/Bio/RNAcofoldData.hs
@@ -0,0 +1,14 @@
+-- | This module contains a data structure for RNAcofold output
+--   For more information on RNAcofold consult: <http://www.tbi.univie.ac.at/RNA/RNAcofold.html>
+
+module Bio.RNAcofoldData where
+-- | Data structure for cofolding of 2 nucleic acid sequences
+data RNAcofold = RNAcofold
+  { 
+    coFoldSequence1 :: String,
+    coFoldSequence2 :: String,
+    coFoldSecondaryStructure1 :: String,
+    coFoldSecondaryStructure2 :: String,
+    coFoldingEnergy :: Double
+  }
+  deriving (Show, Eq)
diff --git a/src/Bio/RNAcofoldParser.hs b/src/Bio/RNAcofoldParser.hs
new file mode 100644
--- /dev/null
+++ b/src/Bio/RNAcofoldParser.hs
@@ -0,0 +1,49 @@
+-- | Parse RNAfold output
+--   For more information on RNAcofold consult: <http://www.tbi.univie.ac.at/RNA/RNAcofold.html>
+
+module Bio.RNAcofoldParser (
+                       systemRNAcofold,
+                       parseRNAcofold,
+                       readRNAcofold,                                   
+                       module Bio.RNAcofoldData
+                      ) where
+
+import Bio.RNAcofoldData
+import Text.ParserCombinators.Parsec
+import System.Process 
+import System.Exit
+import qualified Control.Exception.Base as CE
+
+-- | Run external RNAcofold command 
+systemRNAcofold :: String -> String -> IO ExitCode
+systemRNAcofold inputFilePath outputFilePath = system ("RNAcofold  <" ++ inputFilePath  ++ " >" ++ outputFilePath)
+
+readDouble :: String -> Double
+readDouble = read              
+
+-- | Parse the consenus of RNAcofold results         
+genParserRNAcofold :: GenParser Char st RNAcofold
+genParserRNAcofold = do 
+  _coFoldSequence1 <- many1 (oneOf "NATUGCatugc")
+  string "&"
+  _coFoldSequence2 <- many1 (oneOf "NATUGCatugc")
+  newline
+  _coFoldSecondaryStructure1 <- many1 (oneOf "().,")
+  string "&"
+  _coFoldSecondaryStructure2 <- many1 (oneOf "().,")
+  space
+  string ("(")
+  optional space
+  _coFoldingEnergy <- many1 (oneOf "-1234567890.")
+  string (")")
+  return $ RNAcofold _coFoldSequence1 _coFoldSequence2 _coFoldSecondaryStructure1 _coFoldSecondaryStructure2 (readDouble _coFoldingEnergy)
+
+-- | parse RNAcofold output from input string
+parseRNAcofold :: [Char] -> Either ParseError RNAcofold
+parseRNAcofold input = parse genParserRNAcofold "genParseRNAcofold" input
+
+-- | parse RNAcofold output from input filePath                      
+readRNAcofold :: String -> IO (Either ParseError RNAcofold)                  
+readRNAcofold filePath = do
+  parsedFile <- parseFromFile genParserRNAcofold filePath
+  CE.evaluate parsedFile
diff --git a/src/Bio/RNAfoldData.hs b/src/Bio/RNAfoldData.hs
--- a/src/Bio/RNAfoldData.hs
+++ b/src/Bio/RNAfoldData.hs
@@ -1,9 +1,8 @@
--- | This module contains a hierarchical data structure for
---   RNAplex output
---   For more information on RNAplex consult: <http://www.bioinf.uni-leipzig.de/Software/RNAplex/>
+-- | This module contains a data structure for RNAfold output
+--   For more information on RNAplex consult: <http://www.tbi.univie.ac.at/RNA/RNAfold.html>
 
 module Bio.RNAfoldData where
--- | Data structure for individual interaction between a target and query nucleic acid seqence
+-- | Data structure for RNAfold
 data RNAfold = RNAfold
   { 
     sequenceIdentifier :: String,
diff --git a/src/Bio/RNAfoldParser.hs b/src/Bio/RNAfoldParser.hs
--- a/src/Bio/RNAfoldParser.hs
+++ b/src/Bio/RNAfoldParser.hs
@@ -1,7 +1,8 @@
 -- | Parse RNAfold output
---   For more information on RNAplex consult: <>
+--   For more information on RNAfold consult: <http://www.tbi.univie.ac.at/RNA/RNAfold>
 
 module Bio.RNAfoldParser (
+                       systemRNAfold,
                        parseRNAfold,
                        readRNAfold,                                   
                        module Bio.RNAfoldData
@@ -9,7 +10,14 @@
 
 import Bio.RNAfoldData
 import Text.ParserCombinators.Parsec
+import System.Process 
+import System.Exit
+import qualified Control.Exception.Base as CE
 
+-- | Run external RNAfold command and read the output into the corresponding datatype
+systemRNAfold :: String -> String -> IO ExitCode
+systemRNAfold inputFilePath outputFilePath = system ("RNAfold --noPS  <" ++ inputFilePath  ++ " >" ++ outputFilePath)
+
 readDouble :: String -> Double
 readDouble = read              
 
@@ -34,4 +42,6 @@
 
 -- | parse RNAfold output from input filePath                      
 readRNAfold :: String -> IO (Either ParseError RNAfold)                  
-readRNAfold filePath = parseFromFile genParserRNAfold filePath
+readRNAfold filePath = do
+  parsedFile <- parseFromFile genParserRNAfold filePath
+  CE.evaluate parsedFile
diff --git a/src/Bio/RNAplexParser.hs b/src/Bio/RNAplexParser.hs
--- a/src/Bio/RNAplexParser.hs
+++ b/src/Bio/RNAplexParser.hs
@@ -46,6 +46,7 @@
   _queryDuplexEnd <- many1 digit
   many1 space
   char '('
+  optional space
   _duplexEnergy <- many1 (noneOf (" )"))
   optional space
   optional (char '=')
diff --git a/src/Bio/RNAupData.hs b/src/Bio/RNAupData.hs
--- a/src/Bio/RNAupData.hs
+++ b/src/Bio/RNAupData.hs
@@ -28,6 +28,6 @@
   upTargetAccessibility :: Maybe Double,
   upQuerySequence :: String,
   upTargetSequence :: String,
-  upOutputFileName :: String
+  upOutputFileName :: Maybe String
  }
  deriving (Show, Eq)
diff --git a/src/Bio/RNAupParser.hs b/src/Bio/RNAupParser.hs
--- a/src/Bio/RNAupParser.hs
+++ b/src/Bio/RNAupParser.hs
@@ -71,9 +71,16 @@
   char '&'
   targetSequence <- many1 (noneOf ("\n"))
   newline
-  _upOutputFileName <- many1 (noneOf ("\n"))
-  newline
+  _upOutputFileName <- optionMaybe (try parseRNAupFileName)
   return $ RNAupInteractionRegion upsecondaryStructure (readInt uptargetDuplexBegin) (readInt uptargetDuplexEnd) (readInt upqueryDuplexBegin) (readInt upqueryDuplexEnd) (readDouble upduplexEnergy) (liftM readDouble upduplexEnergyWithoutAccessiblity) (liftM readDouble upqueryAccessiblity) (liftM readDouble uptargetAccessibility) querySequence targetSequence _upOutputFileName
+
+-- | Parse a RNAupFileName
+parseRNAupFileName :: GenParser Char st String
+parseRNAupFileName = do
+  string "RNAup output in file: "
+  fileName <- many1 (noneOf ("\n>"))
+  newline
+  return fileName
 
 -- | parse RNAupOutput from input string
 parseRNAup :: [Char] -> Either ParseError [RNAupInteraction]
diff --git a/src/Bio/RNAzData.hs b/src/Bio/RNAzData.hs
--- a/src/Bio/RNAzData.hs
+++ b/src/Bio/RNAzData.hs
@@ -6,7 +6,7 @@
 --import Biobase.RNA
     
 -- | All elements of RNAz output are contained in this datatype 
-data RNAzOutput = RNAzOutput
+data RNAz = RNAz
   { version :: String,
     sequenceNumber :: Int,
     columnNumber :: Int,
diff --git a/src/Bio/RNAzParser.hs b/src/Bio/RNAzParser.hs
--- a/src/Bio/RNAzParser.hs
+++ b/src/Bio/RNAzParser.hs
@@ -3,6 +3,7 @@
 -- | Parse RNAz output
 --   For more information on RNAz consult: <http://www.tbi.univie.ac.at/~wash/RNAz
 module Bio.RNAzParser (
+                       systemRNAz,
                        parseRNAz,
                        readRNAz,                                   
                        module Bio.RNAzData
@@ -10,6 +11,9 @@
 
 import Bio.RNAzData
 import Text.ParserCombinators.Parsec
+import System.Process
+import System.Exit
+import qualified Control.Exception.Base as CE
 
 readDouble :: String -> Double
 readDouble = read              
@@ -17,9 +21,13 @@
 readInt :: String -> Int
 readInt = read
 
--- | Parse the input as RNAzOutput datatype
-parseRNAzOutput :: GenParser Char st RNAzOutput
-parseRNAzOutput = do
+-- | Run external RNAz command and read the output into the corresponding datatype
+systemRNAz :: String -> String -> IO ExitCode
+systemRNAz inputFilePath outputFilePath = system ("RNAz " ++ inputFilePath ++ " >" ++ outputFilePath)
+
+-- | Parse the input as RNAz datatype
+genParseRNAz :: GenParser Char st RNAz
+genParseRNAz = do
   char '\n'
   many1 (oneOf "# ")
   string "RNAz"
@@ -54,7 +62,7 @@
   newline
   _rnaZResults  <- many1 (try parseRNAzResult)
   _rnaZConsensus <- parseRNAzConsensus         
-  return $ RNAzOutput _version _sequences _columns _readingDirection _meanPairwiseIdentity _shannonEntropy _gcContent _meanSingleSequenceMFE _consensusMFE _energyContribution _covarianceContribution _combinationsPair _meanZScore _structureConservationIndex _backgroundModel _decisionModel _svmDecisionValue _svmRNAClassProbability _prediction _rnaZResults _rnaZConsensus
+  return $ RNAz _version _sequences _columns _readingDirection _meanPairwiseIdentity _shannonEntropy _gcContent _meanSingleSequenceMFE _consensusMFE _energyContribution _covarianceContribution _combinationsPair _meanZScore _structureConservationIndex _backgroundModel _decisionModel _svmDecisionValue _svmRNAClassProbability _prediction _rnaZResults _rnaZConsensus
 
 -- | Parse a RNAz field containing a Double 
 parseRNAzDoubleField :: String -> GenParser Char st Double
@@ -92,7 +100,7 @@
   _header <- many1 (noneOf "\n")
   newline 
   notFollowedBy (string (">consensus"))
-  _resultSequence <- many1 (oneOf "~-NATUGCatugc")         
+  _resultSequence <- many1 (oneOf "~_-.NATUGCatugc")         
   newline        
   _dotBracket <- many1 (oneOf "-().,")
   space
@@ -118,7 +126,7 @@
 parseRNAzConsensus = do
   string (">consensus")
   newline
-  _consensusSequence <- many1 (oneOf "~_-NATUGCatugc")                 
+  _consensusSequence <- many1 (oneOf "~_-.NATUGCatugc")                 
   newline          
   _dotBracket <- many1 (oneOf "().,")
   space
@@ -140,10 +148,12 @@
   eof   
   return $ RNAzConsensus _consensusSequence _dotBracket
          
--- | parse RNAzOutput from input string
-parseRNAz :: [Char] -> Either ParseError RNAzOutput
-parseRNAz input = parse parseRNAzOutput "parseRNAzOutput" input
+-- | parse RNAz from input string
+parseRNAz :: [Char] -> Either ParseError RNAz
+parseRNAz input = parse genParseRNAz "parseRNAz" input
 
 -- | parse from input filePath                      
-readRNAz :: String -> IO (Either ParseError RNAzOutput)                  
-readRNAz filePath = parseFromFile parseRNAzOutput filePath
+readRNAz :: String -> IO (Either ParseError RNAz)                  
+readRNAz filePath = do 
+  parsedFile <- parseFromFile genParseRNAz filePath
+  CE.evaluate parsedFile
diff --git a/src/Bio/ViennaRNAParser.hs b/src/Bio/ViennaRNAParser.hs
--- a/src/Bio/ViennaRNAParser.hs
+++ b/src/Bio/ViennaRNAParser.hs
@@ -3,7 +3,9 @@
 -- For more information on the Vienna RNAPackage consult: <http://www.tbi.univie.ac.at/~ivo/RNA/>
 -- or the homepage of the current maintainer: <http://www.tbi.univie.ac.at/~ronny/RNA/index.html>
 
-module Bio.ViennaRNAParser (                            
+module Bio.ViennaRNAParser ( 
+                       module Bio.RNAcofoldData,
+                       module Bio.RNAcofoldParser,                           
                        module Bio.RNAplexData,
                        module Bio.RNAplexParser,
                        module Bio.RNAzData,
@@ -17,6 +19,8 @@
                        module Bio.RNAupData,
                        module Bio.RNAupParser
                       ) where
+import Bio.RNAcofoldData
+import Bio.RNAcofoldParser
 import Bio.RNAplexData
 import Bio.RNAplexParser
 import Bio.RNAzData
diff --git a/test-suite/Spec.hs b/test-suite/Spec.hs
new file mode 100644
--- /dev/null
+++ b/test-suite/Spec.hs
@@ -0,0 +1,2 @@
+-- test-suite/Spec.hs
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
