diff --git a/Opn/Guess.hs b/Opn/Guess.hs
new file mode 100644
--- /dev/null
+++ b/Opn/Guess.hs
@@ -0,0 +1,644 @@
+{-# LANGUAGE OverloadedStrings #-}
+-- |
+-- Copyright   : Anders Claesson 2014
+-- Maintainer  : Anders Claesson <anders.claesson@gmail.com>
+-- License     : BSD-3
+--
+
+module Opn.Guess (guess) where
+
+import           Data.Text (Text)
+import           Data.HashMap.Strict (HashMap)
+import qualified Data.HashMap.Strict as M
+
+-- | Guess likely file extensions from a given mime type.
+guess :: Text -> [Text]
+guess mimeType = M.lookupDefault [] mimeType mimeTypeToExtMap
+
+-- Generated from http://www.stdicon.com/mimetypes
+mimeTypeToExtMap :: HashMap Text [Text]
+mimeTypeToExtMap = M.fromList
+    [ ("application/andrew-inset",[".ez"])
+    , ("application/applixware",[".aw"])
+    , ("application/atom+xml",[".atom"])
+    , ("application/atomcat+xml",[".atomcat"])
+    , ("application/atomsvc+xml",[".atomsvc"])
+    , ("application/ccxml+xml",[".ccxml"])
+    , ("application/cu-seeme",[".cu"])
+    , ("application/davmount+xml",[".davmount"])
+    , ("application/ecmascript",[".ecma"])
+    , ("application/emma+xml",[".emma"])
+    , ("application/epub+zip",[".epub"])
+    , ("application/font-tdpfr",[".pfr"])
+    , ("application/hyperstudio",[".stk"])
+    , ("application/java-archive",[".jar"])
+    , ("application/java-serialized-object",[".ser"])
+    , ("application/java-vm",[".class"])
+    , ("application/javascript",[".js"])
+    , ("application/json",[".json"])
+    , ("application/lost+xml",[".lostxml"])
+    , ("application/mac-binhex40",[".hqx"])
+    , ("application/mac-compactpro",[".cpt"])
+    , ("application/marc",[".mrc"])
+    , ("application/mathematica",[".ma",".mb",".nb"])
+    , ("application/mathml+xml",[".mathml"])
+    , ("application/mbox",[".mbox"])
+    , ("application/mediaservercontrol+xml",[".mscml"])
+    , ("application/mp4",[".mp4s"])
+    , ("application/msword",[".doc",".dot",".wiz"])
+    , ("application/mxf",[".mxf"])
+    , ("application/octet-stream",[".a",".bin",".bpk",".deploy",".dist",".distz",".dmg",".dms",".dump",".elc",".iso",".lha",".lrf",".lzh",".o",".obj",".pkg",".so"])
+    , ("application/oda",[".oda"])
+    , ("application/oebps-package+xml",[".opf"])
+    , ("application/ogg",[".ogx"])
+    , ("application/onenote",[".onepkg",".onetmp",".onetoc",".onetoc2"])
+    , ("application/patch-ops-error+xml",[".xer"])
+    , ("application/pdf",[".pdf"])
+    , ("application/pgp-encrypted",[".pgp"])
+    , ("application/pgp-signature",[".asc",".sig"])
+    , ("application/pics-rules",[".prf"])
+    , ("application/pkcs10",[".p10"])
+    , ("application/pkcs7-mime",[".p7c",".p7m"])
+    , ("application/pkcs7-signature",[".p7s"])
+    , ("application/pkix-cert",[".cer"])
+    , ("application/pkix-crl",[".crl"])
+    , ("application/pkix-pkipath",[".pkipath"])
+    , ("application/pkixcmp",[".pki"])
+    , ("application/pls+xml",[".pls"])
+    , ("application/postscript",[".ai",".eps",".ps"])
+    , ("application/prs.cww",[".cww"])
+    , ("application/rdf+xml",[".rdf"])
+    , ("application/reginfo+xml",[".rif"])
+    , ("application/relax-ng-compact-syntax",[".rnc"])
+    , ("application/resource-lists+xml",[".rl"])
+    , ("application/resource-lists-diff+xml",[".rld"])
+    , ("application/rls-services+xml",[".rs"])
+    , ("application/rsd+xml",[".rsd"])
+    , ("application/rss+xml",[".rss"])
+    , ("application/rtf",[".rtf"])
+    , ("application/sbml+xml",[".sbml"])
+    , ("application/scvp-cv-request",[".scq"])
+    , ("application/scvp-cv-response",[".scs"])
+    , ("application/scvp-vp-request",[".spq"])
+    , ("application/scvp-vp-response",[".spp"])
+    , ("application/sdp",[".sdp"])
+    , ("application/set-payment-initiation",[".setpay"])
+    , ("application/set-registration-initiation",[".setreg"])
+    , ("application/shf+xml",[".shf"])
+    , ("application/smil+xml",[".smi",".smil"])
+    , ("application/sparql-query",[".rq"])
+    , ("application/sparql-results+xml",[".srx"])
+    , ("application/srgs",[".gram"])
+    , ("application/srgs+xml",[".grxml"])
+    , ("application/ssml+xml",[".ssml"])
+    , ("application/vnd.3gpp.pic-bw-large",[".plb"])
+    , ("application/vnd.3gpp.pic-bw-small",[".psb"])
+    , ("application/vnd.3gpp.pic-bw-var",[".pvb"])
+    , ("application/vnd.3gpp2.tcap",[".tcap"])
+    , ("application/vnd.3m.post-it-notes",[".pwn"])
+    , ("application/vnd.accpac.simply.aso",[".aso"])
+    , ("application/vnd.accpac.simply.imp",[".imp"])
+    , ("application/vnd.acucobol",[".acu"])
+    , ("application/vnd.acucorp",[".acutc",".atc"])
+    , ("application/vnd.adobe.air-application-installer-package+zip",[".air"])
+    , ("application/vnd.adobe.xdp+xml",[".xdp"])
+    , ("application/vnd.adobe.xfdf",[".xfdf"])
+    , ("application/vnd.airzip.filesecure.azf",[".azf"])
+    , ("application/vnd.airzip.filesecure.azs",[".azs"])
+    , ("application/vnd.amazon.ebook",[".azw"])
+    , ("application/vnd.americandynamics.acc",[".acc"])
+    , ("application/vnd.amiga.ami",[".ami"])
+    , ("application/vnd.android.package-archive",[".apk"])
+    , ("application/vnd.anser-web-certificate-issue-initiation",[".cii"])
+    , ("application/vnd.anser-web-funds-transfer-initiation",[".fti"])
+    , ("application/vnd.antix.game-component",[".atx"])
+    , ("application/vnd.apple.installer+xml",[".mpkg"])
+    , ("application/vnd.arastra.swi",[".swi"])
+    , ("application/vnd.audiograph",[".aep"])
+    , ("application/vnd.blueice.multipass",[".mpm"])
+    , ("application/vnd.bmi",[".bmi"])
+    , ("application/vnd.businessobjects",[".rep"])
+    , ("application/vnd.chemdraw+xml",[".cdxml"])
+    , ("application/vnd.chipnuts.karaoke-mmd",[".mmd"])
+    , ("application/vnd.cinderella",[".cdy"])
+    , ("application/vnd.claymore",[".cla"])
+    , ("application/vnd.clonk.c4group",[".c4d",".c4f",".c4g",".c4p",".c4u"])
+    , ("application/vnd.commonspace",[".csp"])
+    , ("application/vnd.contact.cmsg",[".cdbcmsg"])
+    , ("application/vnd.cosmocaller",[".cmc"])
+    , ("application/vnd.crick.clicker",[".clkx"])
+    , ("application/vnd.crick.clicker.keyboard",[".clkk"])
+    , ("application/vnd.crick.clicker.palette",[".clkp"])
+    , ("application/vnd.crick.clicker.template",[".clkt"])
+    , ("application/vnd.crick.clicker.wordbank",[".clkw"])
+    , ("application/vnd.criticaltools.wbs+xml",[".wbs"])
+    , ("application/vnd.ctc-posml",[".pml"])
+    , ("application/vnd.cups-ppd",[".ppd"])
+    , ("application/vnd.curl.car",[".car"])
+    , ("application/vnd.curl.pcurl",[".pcurl"])
+    , ("application/vnd.data-vision.rdz",[".rdz"])
+    , ("application/vnd.denovo.fcselayout-link",[".fe_launch"])
+    , ("application/vnd.dna",[".dna"])
+    , ("application/vnd.dolby.mlp",[".mlp"])
+    , ("application/vnd.dpgraph",[".dpg"])
+    , ("application/vnd.dreamfactory",[".dfac"])
+    , ("application/vnd.dynageo",[".geo"])
+    , ("application/vnd.ecowin.chart",[".mag"])
+    , ("application/vnd.enliven",[".nml"])
+    , ("application/vnd.epson.esf",[".esf"])
+    , ("application/vnd.epson.msf",[".msf"])
+    , ("application/vnd.epson.quickanime",[".qam"])
+    , ("application/vnd.epson.salt",[".slt"])
+    , ("application/vnd.epson.ssf",[".ssf"])
+    , ("application/vnd.eszigno3+xml",[".es3",".et3"])
+    , ("application/vnd.ezpix-album",[".ez2"])
+    , ("application/vnd.ezpix-package",[".ez3"])
+    , ("application/vnd.fdf",[".fdf"])
+    , ("application/vnd.fdsn.mseed",[".mseed"])
+    , ("application/vnd.fdsn.seed",[".dataless",".seed"])
+    , ("application/vnd.flographit",[".gph"])
+    , ("application/vnd.fluxtime.clip",[".ftc"])
+    , ("application/vnd.framemaker",[".book",".fm",".frame",".maker"])
+    , ("application/vnd.frogans.fnc",[".fnc"])
+    , ("application/vnd.frogans.ltf",[".ltf"])
+    , ("application/vnd.fsc.weblaunch",[".fsc"])
+    , ("application/vnd.fujitsu.oasys",[".oas"])
+    , ("application/vnd.fujitsu.oasys2",[".oa2"])
+    , ("application/vnd.fujitsu.oasys3",[".oa3"])
+    , ("application/vnd.fujitsu.oasysgp",[".fg5"])
+    , ("application/vnd.fujitsu.oasysprs",[".bh2"])
+    , ("application/vnd.fujixerox.ddd",[".ddd"])
+    , ("application/vnd.fujixerox.docuworks",[".xdw"])
+    , ("application/vnd.fujixerox.docuworks.binder",[".xbd"])
+    , ("application/vnd.fuzzysheet",[".fzs"])
+    , ("application/vnd.genomatix.tuxedo",[".txd"])
+    , ("application/vnd.geogebra.file",[".ggb"])
+    , ("application/vnd.geogebra.tool",[".ggt"])
+    , ("application/vnd.geometry-explorer",[".gex",".gre"])
+    , ("application/vnd.gmx",[".gmx"])
+    , ("application/vnd.google-earth.kml+xml",[".kml"])
+    , ("application/vnd.google-earth.kmz",[".kmz"])
+    , ("application/vnd.grafeq",[".gqf",".gqs"])
+    , ("application/vnd.groove-account",[".gac"])
+    , ("application/vnd.groove-help",[".ghf"])
+    , ("application/vnd.groove-identity-message",[".gim"])
+    , ("application/vnd.groove-injector",[".grv"])
+    , ("application/vnd.groove-tool-message",[".gtm"])
+    , ("application/vnd.groove-tool-template",[".tpl"])
+    , ("application/vnd.groove-vcard",[".vcg"])
+    , ("application/vnd.handheld-entertainment+xml",[".zmm"])
+    , ("application/vnd.hbci",[".hbci"])
+    , ("application/vnd.hhe.lesson-player",[".les"])
+    , ("application/vnd.hp-hpgl",[".hpgl"])
+    , ("application/vnd.hp-hpid",[".hpid"])
+    , ("application/vnd.hp-hps",[".hps"])
+    , ("application/vnd.hp-jlyt",[".jlt"])
+    , ("application/vnd.hp-pcl",[".pcl"])
+    , ("application/vnd.hp-pclxl",[".pclxl"])
+    , ("application/vnd.hydrostatix.sof-data",[".sfd-hdstx"])
+    , ("application/vnd.hzn-3d-crossword",[".x3d"])
+    , ("application/vnd.ibm.minipay",[".mpy"])
+    , ("application/vnd.ibm.modcap",[".afp",".list3820",".listafp"])
+    , ("application/vnd.ibm.rights-management",[".irm"])
+    , ("application/vnd.ibm.secure-container",[".sc"])
+    , ("application/vnd.iccprofile",[".icc",".icm"])
+    , ("application/vnd.igloader",[".igl"])
+    , ("application/vnd.immervision-ivp",[".ivp"])
+    , ("application/vnd.immervision-ivu",[".ivu"])
+    , ("application/vnd.intercon.formnet",[".xpw",".xpx"])
+    , ("application/vnd.intu.qbo",[".qbo"])
+    , ("application/vnd.intu.qfx",[".qfx"])
+    , ("application/vnd.ipunplugged.rcprofile",[".rcprofile"])
+    , ("application/vnd.irepository.package+xml",[".irp"])
+    , ("application/vnd.is-xpr",[".xpr"])
+    , ("application/vnd.jam",[".jam"])
+    , ("application/vnd.jcp.javame.midlet-rms",[".rms"])
+    , ("application/vnd.jisp",[".jisp"])
+    , ("application/vnd.joost.joda-archive",[".joda"])
+    , ("application/vnd.kahootz",[".ktr",".ktz"])
+    , ("application/vnd.kde.karbon",[".karbon"])
+    , ("application/vnd.kde.kchart",[".chrt"])
+    , ("application/vnd.kde.kformula",[".kfo"])
+    , ("application/vnd.kde.kivio",[".flw"])
+    , ("application/vnd.kde.kontour",[".kon"])
+    , ("application/vnd.kde.kpresenter",[".kpr",".kpt"])
+    , ("application/vnd.kde.kspread",[".ksp"])
+    , ("application/vnd.kde.kword",[".kwd",".kwt"])
+    , ("application/vnd.kenameaapp",[".htke"])
+    , ("application/vnd.kidspiration",[".kia"])
+    , ("application/vnd.kinar",[".kne",".knp"])
+    , ("application/vnd.koan",[".skd",".skm",".skp",".skt"])
+    , ("application/vnd.kodak-descriptor",[".sse"])
+    , ("application/vnd.llamagraphics.life-balance.desktop",[".lbd"])
+    , ("application/vnd.llamagraphics.life-balance.exchange+xml",[".lbe"])
+    , ("application/vnd.lotus-1-2-3",[".123"])
+    , ("application/vnd.lotus-approach",[".apr"])
+    , ("application/vnd.lotus-freelance",[".pre"])
+    , ("application/vnd.lotus-notes",[".nsf"])
+    , ("application/vnd.lotus-organizer",[".org"])
+    , ("application/vnd.lotus-screencam",[".scm"])
+    , ("application/vnd.lotus-wordpro",[".lwp"])
+    , ("application/vnd.macports.portpkg",[".portpkg"])
+    , ("application/vnd.mcd",[".mcd"])
+    , ("application/vnd.medcalcdata",[".mc1"])
+    , ("application/vnd.mediastation.cdkey",[".cdkey"])
+    , ("application/vnd.mfer",[".mwf"])
+    , ("application/vnd.mfmp",[".mfm"])
+    , ("application/vnd.micrografx.flo",[".flo"])
+    , ("application/vnd.micrografx.igx",[".igx"])
+    , ("application/vnd.mif",[".mif"])
+    , ("application/vnd.mobius.daf",[".daf"])
+    , ("application/vnd.mobius.dis",[".dis"])
+    , ("application/vnd.mobius.mbk",[".mbk"])
+    , ("application/vnd.mobius.mqy",[".mqy"])
+    , ("application/vnd.mobius.msl",[".msl"])
+    , ("application/vnd.mobius.plc",[".plc"])
+    , ("application/vnd.mobius.txf",[".txf"])
+    , ("application/vnd.mophun.application",[".mpn"])
+    , ("application/vnd.mophun.certificate",[".mpc"])
+    , ("application/vnd.mozilla.xul+xml",[".xul"])
+    , ("application/vnd.ms-artgalry",[".cil"])
+    , ("application/vnd.ms-cab-compressed",[".cab"])
+    , ("application/vnd.ms-excel",[".xla",".xlb",".xlc",".xlm",".xls",".xlt",".xlw"])
+    , ("application/vnd.ms-excel.addin.macroenabled.12",[".xlam"])
+    , ("application/vnd.ms-excel.sheet.binary.macroenabled.12",[".xlsb"])
+    , ("application/vnd.ms-excel.sheet.macroenabled.12",[".xlsm"])
+    , ("application/vnd.ms-excel.template.macroenabled.12",[".xltm"])
+    , ("application/vnd.ms-fontobject",[".eot"])
+    , ("application/vnd.ms-htmlhelp",[".chm"])
+    , ("application/vnd.ms-ims",[".ims"])
+    , ("application/vnd.ms-lrm",[".lrm"])
+    , ("application/vnd.ms-pki.seccat",[".cat"])
+    , ("application/vnd.ms-pki.stl",[".stl"])
+    , ("application/vnd.ms-powerpoint",[".pot",".ppa",".pps",".ppt",".pwz"])
+    , ("application/vnd.ms-powerpoint.addin.macroenabled.12",[".ppam"])
+    , ("application/vnd.ms-powerpoint.presentation.macroenabled.12",[".pptm"])
+    , ("application/vnd.ms-powerpoint.slide.macroenabled.12",[".sldm"])
+    , ("application/vnd.ms-powerpoint.slideshow.macroenabled.12",[".ppsm"])
+    , ("application/vnd.ms-powerpoint.template.macroenabled.12",[".potm"])
+    , ("application/vnd.ms-project",[".mpp",".mpt"])
+    , ("application/vnd.ms-word.document.macroenabled.12",[".docm"])
+    , ("application/vnd.ms-word.template.macroenabled.12",[".dotm"])
+    , ("application/vnd.ms-works",[".wcm",".wdb",".wks",".wps"])
+    , ("application/vnd.ms-wpl",[".wpl"])
+    , ("application/vnd.ms-xpsdocument",[".xps"])
+    , ("application/vnd.mseq",[".mseq"])
+    , ("application/vnd.musician",[".mus"])
+    , ("application/vnd.muvee.style",[".msty"])
+    , ("application/vnd.neurolanguage.nlu",[".nlu"])
+    , ("application/vnd.noblenet-directory",[".nnd"])
+    , ("application/vnd.noblenet-sealer",[".nns"])
+    , ("application/vnd.noblenet-web",[".nnw"])
+    , ("application/vnd.nokia.n-gage.data",[".ngdat"])
+    , ("application/vnd.nokia.n-gage.symbian.install",[".n-gage"])
+    , ("application/vnd.nokia.radio-preset",[".rpst"])
+    , ("application/vnd.nokia.radio-presets",[".rpss"])
+    , ("application/vnd.novadigm.edm",[".edm"])
+    , ("application/vnd.novadigm.edx",[".edx"])
+    , ("application/vnd.novadigm.ext",[".ext"])
+    , ("application/vnd.oasis.opendocument.chart",[".odc"])
+    , ("application/vnd.oasis.opendocument.chart-template",[".otc"])
+    , ("application/vnd.oasis.opendocument.database",[".odb"])
+    , ("application/vnd.oasis.opendocument.formula",[".odf"])
+    , ("application/vnd.oasis.opendocument.formula-template",[".odft"])
+    , ("application/vnd.oasis.opendocument.graphics",[".odg"])
+    , ("application/vnd.oasis.opendocument.graphics-template",[".otg"])
+    , ("application/vnd.oasis.opendocument.image",[".odi"])
+    , ("application/vnd.oasis.opendocument.image-template",[".oti"])
+    , ("application/vnd.oasis.opendocument.presentation",[".odp"])
+    , ("application/vnd.oasis.opendocument.presentation-template",[".otp"])
+    , ("application/vnd.oasis.opendocument.spreadsheet",[".ods"])
+    , ("application/vnd.oasis.opendocument.spreadsheet-template",[".ots"])
+    , ("application/vnd.oasis.opendocument.text",[".odt"])
+    , ("application/vnd.oasis.opendocument.text-master",[".otm"])
+    , ("application/vnd.oasis.opendocument.text-template",[".ott"])
+    , ("application/vnd.oasis.opendocument.text-web",[".oth"])
+    , ("application/vnd.olpc-sugar",[".xo"])
+    , ("application/vnd.oma.dd2+xml",[".dd2"])
+    , ("application/vnd.openofficeorg.extension",[".oxt"])
+    , ("application/vnd.openxmlformats-officedocument.presentationml.presentation",[".pptx"])
+    , ("application/vnd.openxmlformats-officedocument.presentationml.slide",[".sldx"])
+    , ("application/vnd.openxmlformats-officedocument.presentationml.slideshow",[".ppsx"])
+    , ("application/vnd.openxmlformats-officedocument.presentationml.template",[".potx"])
+    , ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",[".xlsx"])
+    , ("application/vnd.openxmlformats-officedocument.spreadsheetml.template",[".xltx"])
+    , ("application/vnd.openxmlformats-officedocument.wordprocessingml.document",[".docx"])
+    , ("application/vnd.openxmlformats-officedocument.wordprocessingml.template",[".dotx"])
+    , ("application/vnd.osgi.dp",[".dp"])
+    , ("application/vnd.palm",[".oprc",".pdb",".pqa"])
+    , ("application/vnd.pg.format",[".str"])
+    , ("application/vnd.pg.osasli",[".ei6"])
+    , ("application/vnd.picsel",[".efif"])
+    , ("application/vnd.pocketlearn",[".plf"])
+    , ("application/vnd.powerbuilder6",[".pbd"])
+    , ("application/vnd.previewsystems.box",[".box"])
+    , ("application/vnd.proteus.magazine",[".mgz"])
+    , ("application/vnd.publishare-delta-tree",[".qps"])
+    , ("application/vnd.pvi.ptid1",[".ptid"])
+    , ("application/vnd.quark.quarkxpress",[".qwd",".qwt",".qxb",".qxd",".qxl",".qxt"])
+    , ("application/vnd.recordare.musicxml",[".mxl"])
+    , ("application/vnd.recordare.musicxml+xml",[".musicxml"])
+    , ("application/vnd.rim.cod",[".cod"])
+    , ("application/vnd.rn-realmedia",[".rm"])
+    , ("application/vnd.route66.link66+xml",[".link66"])
+    , ("application/vnd.seemail",[".see"])
+    , ("application/vnd.sema",[".sema"])
+    , ("application/vnd.semd",[".semd"])
+    , ("application/vnd.semf",[".semf"])
+    , ("application/vnd.shana.informed.formdata",[".ifm"])
+    , ("application/vnd.shana.informed.formtemplate",[".itp"])
+    , ("application/vnd.shana.informed.interchange",[".iif"])
+    , ("application/vnd.shana.informed.package",[".ipk"])
+    , ("application/vnd.simtech-mindmapper",[".twd",".twds"])
+    , ("application/vnd.smaf",[".mmf"])
+    , ("application/vnd.smart.teacher",[".teacher"])
+    , ("application/vnd.solent.sdkm+xml",[".sdkd",".sdkm"])
+    , ("application/vnd.spotfire.dxp",[".dxp"])
+    , ("application/vnd.spotfire.sfs",[".sfs"])
+    , ("application/vnd.stardivision.calc",[".sdc"])
+    , ("application/vnd.stardivision.draw",[".sda"])
+    , ("application/vnd.stardivision.impress",[".sdd"])
+    , ("application/vnd.stardivision.math",[".smf"])
+    , ("application/vnd.stardivision.writer",[".sdw",".vor"])
+    , ("application/vnd.stardivision.writer-global",[".sgl"])
+    , ("application/vnd.sun.xml.calc",[".sxc"])
+    , ("application/vnd.sun.xml.calc.template",[".stc"])
+    , ("application/vnd.sun.xml.draw",[".sxd"])
+    , ("application/vnd.sun.xml.draw.template",[".std"])
+    , ("application/vnd.sun.xml.impress",[".sxi"])
+    , ("application/vnd.sun.xml.impress.template",[".sti"])
+    , ("application/vnd.sun.xml.math",[".sxm"])
+    , ("application/vnd.sun.xml.writer",[".sxw"])
+    , ("application/vnd.sun.xml.writer.global",[".sxg"])
+    , ("application/vnd.sun.xml.writer.template",[".stw"])
+    , ("application/vnd.sus-calendar",[".sus",".susp"])
+    , ("application/vnd.svd",[".svd"])
+    , ("application/vnd.symbian.install",[".sis",".sisx"])
+    , ("application/vnd.syncml+xml",[".xsm"])
+    , ("application/vnd.syncml.dm+wbxml",[".bdm"])
+    , ("application/vnd.syncml.dm+xml",[".xdm"])
+    , ("application/vnd.tao.intent-module-archive",[".tao"])
+    , ("application/vnd.tmobile-livetv",[".tmo"])
+    , ("application/vnd.trid.tpt",[".tpt"])
+    , ("application/vnd.triscape.mxs",[".mxs"])
+    , ("application/vnd.trueapp",[".tra"])
+    , ("application/vnd.ufdl",[".ufd",".ufdl"])
+    , ("application/vnd.uiq.theme",[".utz"])
+    , ("application/vnd.umajin",[".umj"])
+    , ("application/vnd.unity",[".unityweb"])
+    , ("application/vnd.uoml+xml",[".uoml"])
+    , ("application/vnd.vcx",[".vcx"])
+    , ("application/vnd.visio",[".vsd",".vss",".vst",".vsw"])
+    , ("application/vnd.visionary",[".vis"])
+    , ("application/vnd.vsf",[".vsf"])
+    , ("application/vnd.wap.sic",[".sic"])
+    , ("application/vnd.wap.slc",[".slc"])
+    , ("application/vnd.wap.wbxml",[".wbxml"])
+    , ("application/vnd.wap.wmlc",[".wmlc"])
+    , ("application/vnd.wap.wmlscriptc",[".wmlsc"])
+    , ("application/vnd.webturbo",[".wtb"])
+    , ("application/vnd.wordperfect",[".wpd"])
+    , ("application/vnd.wqd",[".wqd"])
+    , ("application/vnd.wt.stf",[".stf"])
+    , ("application/vnd.xara",[".xar"])
+    , ("application/vnd.xfdl",[".xfdl"])
+    , ("application/vnd.yamaha.hv-dic",[".hvd"])
+    , ("application/vnd.yamaha.hv-script",[".hvs"])
+    , ("application/vnd.yamaha.hv-voice",[".hvp"])
+    , ("application/vnd.yamaha.openscoreformat",[".osf"])
+    , ("application/vnd.yamaha.openscoreformat.osfpvg+xml",[".osfpvg"])
+    , ("application/vnd.yamaha.smaf-audio",[".saf"])
+    , ("application/vnd.yamaha.smaf-phrase",[".spf"])
+    , ("application/vnd.yellowriver-custom-menu",[".cmp"])
+    , ("application/vnd.zul",[".zir",".zirz"])
+    , ("application/vnd.zzazz.deck+xml",[".zaz"])
+    , ("application/voicexml+xml",[".vxml"])
+    , ("application/winhlp",[".hlp"])
+    , ("application/wsdl+xml",[".wsdl"])
+    , ("application/wspolicy+xml",[".wspolicy"])
+    , ("application/x-abiword",[".abw"])
+    , ("application/x-ace-compressed",[".ace"])
+    , ("application/x-authorware-bin",[".aab",".u32",".vox",".x32"])
+    , ("application/x-authorware-map",[".aam"])
+    , ("application/x-authorware-seg",[".aas"])
+    , ("application/x-bcpio",[".bcpio"])
+    , ("application/x-bittorrent",[".torrent"])
+    , ("application/x-bzip",[".bz"])
+    , ("application/x-bzip2",[".boz",".bz2"])
+    , ("application/x-cdlink",[".vcd"])
+    , ("application/x-chat",[".chat"])
+    , ("application/x-chess-pgn",[".pgn"])
+    , ("application/x-cpio",[".cpio"])
+    , ("application/x-csh",[".csh"])
+    , ("application/x-debian-package",[".deb",".udeb"])
+    , ("application/x-director",[".cct",".cst",".cxt",".dcr",".dir",".dxr",".fgd",".swa",".w3d"])
+    , ("application/x-doom",[".wad"])
+    , ("application/x-dtbncx+xml",[".ncx"])
+    , ("application/x-dtbook+xml",[".dtb"])
+    , ("application/x-dtbresource+xml",[".res"])
+    , ("application/x-dvi",[".dvi"])
+    , ("application/x-font-bdf",[".bdf"])
+    , ("application/x-font-ghostscript",[".gsf"])
+    , ("application/x-font-linux-psf",[".psf"])
+    , ("application/x-font-otf",[".otf"])
+    , ("application/x-font-pcf",[".pcf"])
+    , ("application/x-font-snf",[".snf"])
+    , ("application/x-font-ttf",[".ttc",".ttf"])
+    , ("application/x-font-type1",[".afm",".pfa",".pfb",".pfm"])
+    , ("application/x-futuresplash",[".spl"])
+    , ("application/x-gnumeric",[".gnumeric"])
+    , ("application/x-gtar",[".gtar"])
+    , ("application/x-gzip",[".gz",".tgz"])
+    , ("application/x-hdf",[".hdf"])
+    , ("application/x-java-jnlp-file",[".jnlp"])
+    , ("application/x-killustrator",[".kil"])
+    , ("application/x-latex",[".latex"])
+    , ("application/x-mobipocket-ebook",[".mobi",".prc"])
+    , ("application/x-ms-application",[".application"])
+    , ("application/x-ms-wmd",[".wmd"])
+    , ("application/x-ms-wmz",[".wmz"])
+    , ("application/x-ms-xbap",[".xbap"])
+    , ("application/x-msaccess",[".mdb"])
+    , ("application/x-msbinder",[".obd"])
+    , ("application/x-mscardfile",[".crd"])
+    , ("application/x-msclip",[".clp"])
+    , ("application/x-msdownload",[".bat",".com",".dll",".exe",".msi"])
+    , ("application/x-msmediaview",[".m13",".m14",".mvb"])
+    , ("application/x-msmetafile",[".wmf"])
+    , ("application/x-msmoney",[".mny"])
+    , ("application/x-mspublisher",[".pub"])
+    , ("application/x-msschedule",[".scd"])
+    , ("application/x-msterminal",[".trm"])
+    , ("application/x-mswrite",[".wri"])
+    , ("application/x-netcdf",[".cdf",".nc"])
+    , ("application/x-pkcs12",[".p12",".pfx"])
+    , ("application/x-pkcs7-certificates",[".p7b",".spc"])
+    , ("application/x-pkcs7-certreqresp",[".p7r"])
+    , ("application/x-python-code",[".pyc",".pyo"])
+    , ("application/x-rar-compressed",[".rar"])
+    , ("application/x-rpm",[".rpm"])
+    , ("application/x-sh",[".sh"])
+    , ("application/x-shar",[".shar"])
+    , ("application/x-shockwave-flash",[".swf"])
+    , ("application/x-silverlight-app",[".xap"])
+    , ("application/x-stuffit",[".sit"])
+    , ("application/x-stuffitx",[".sitx"])
+    , ("application/x-sv4cpio",[".sv4cpio"])
+    , ("application/x-sv4crc",[".sv4crc"])
+    , ("application/x-tar",[".tar"])
+    , ("application/x-tcl",[".tcl"])
+    , ("application/x-tex",[".tex"])
+    , ("application/x-tex-tfm",[".tfm"])
+    , ("application/x-texinfo",[".texi",".texinfo"])
+    , ("application/x-ustar",[".ustar"])
+    , ("application/x-wais-source",[".src"])
+    , ("application/x-x509-ca-cert",[".crt",".der"])
+    , ("application/x-xfig",[".fig"])
+    , ("application/x-xpinstall",[".xpi"])
+    , ("application/xenc+xml",[".xenc"])
+    , ("application/xhtml+xml",[".xht",".xhtml"])
+    , ("application/xml",[".xml",".xpdl",".xsl"])
+    , ("application/xml-dtd",[".dtd"])
+    , ("application/xop+xml",[".xop"])
+    , ("application/xslt+xml",[".xslt"])
+    , ("application/xspf+xml",[".xspf"])
+    , ("application/xv+xml",[".mxml",".xhvml",".xvm",".xvml"])
+    , ("application/zip",[".zip"])
+    , ("audio/adpcm",[".adp"])
+    , ("audio/basic",[".au",".snd"])
+    , ("audio/midi",[".kar",".mid",".midi",".rmi"])
+    , ("audio/mp4",[".mp4a"])
+    , ("audio/mpeg",[".m2a",".m3a",".mp2",".mp2a",".mp3",".mpga"])
+    , ("audio/ogg",[".oga",".ogg",".spx"])
+    , ("audio/vnd.digital-winds",[".eol"])
+    , ("audio/vnd.dts",[".dts"])
+    , ("audio/vnd.dts.hd",[".dtshd"])
+    , ("audio/vnd.lucent.voice",[".lvp"])
+    , ("audio/vnd.ms-playready.media.pya",[".pya"])
+    , ("audio/vnd.nuera.ecelp4800",[".ecelp4800"])
+    , ("audio/vnd.nuera.ecelp7470",[".ecelp7470"])
+    , ("audio/vnd.nuera.ecelp9600",[".ecelp9600"])
+    , ("audio/x-aac",[".aac"])
+    , ("audio/x-aiff",[".aif",".aifc",".aiff"])
+    , ("audio/x-mpegurl",[".m3u"])
+    , ("audio/x-ms-wax",[".wax"])
+    , ("audio/x-ms-wma",[".wma"])
+    , ("audio/x-pn-realaudio",[".ra",".ram"])
+    , ("audio/x-pn-realaudio-plugin",[".rmp"])
+    , ("audio/x-wav",[".wav"])
+    , ("chemical/x-cdx",[".cdx"])
+    , ("chemical/x-cif",[".cif"])
+    , ("chemical/x-cmdf",[".cmdf"])
+    , ("chemical/x-cml",[".cml"])
+    , ("chemical/x-csml",[".csml"])
+    , ("chemical/x-xyz",[".xyz"])
+    , ("image/bmp",[".bmp"])
+    , ("image/cgm",[".cgm"])
+    , ("image/g3fax",[".g3"])
+    , ("image/gif",[".gif"])
+    , ("image/ief",[".ief"])
+    , ("image/jpeg",[".jpe",".jpeg",".jpg"])
+    , ("image/png",[".png"])
+    , ("image/prs.btif",[".btif"])
+    , ("image/svg+xml",[".svg",".svgz"])
+    , ("image/tiff",[".tif",".tiff"])
+    , ("image/vnd.adobe.photoshop",[".psd"])
+    , ("image/vnd.djvu",[".djv",".djvu"])
+    , ("image/vnd.dwg",[".dwg"])
+    , ("image/vnd.dxf",[".dxf"])
+    , ("image/vnd.fastbidsheet",[".fbs"])
+    , ("image/vnd.fpx",[".fpx"])
+    , ("image/vnd.fst",[".fst"])
+    , ("image/vnd.fujixerox.edmics-mmr",[".mmr"])
+    , ("image/vnd.fujixerox.edmics-rlc",[".rlc"])
+    , ("image/vnd.ms-modi",[".mdi"])
+    , ("image/vnd.net-fpx",[".npx"])
+    , ("image/vnd.wap.wbmp",[".wbmp"])
+    , ("image/vnd.xiff",[".xif"])
+    , ("image/x-cmu-raster",[".ras"])
+    , ("image/x-cmx",[".cmx"])
+    , ("image/x-freehand",[".fh",".fh4",".fh5",".fh7",".fhc"])
+    , ("image/x-icon",[".ico"])
+    , ("image/x-pcx",[".pcx"])
+    , ("image/x-pict",[".pct",".pic"])
+    , ("image/x-portable-anymap",[".pnm"])
+    , ("image/x-portable-bitmap",[".pbm"])
+    , ("image/x-portable-graymap",[".pgm"])
+    , ("image/x-portable-pixmap",[".ppm"])
+    , ("image/x-rgb",[".rgb"])
+    , ("image/x-xbitmap",[".xbm"])
+    , ("image/x-xpixmap",[".xpm"])
+    , ("image/x-xwindowdump",[".xwd"])
+    , ("message/rfc822",[".eml",".mht",".mhtml",".mime",".nws"])
+    , ("model/iges",[".iges",".igs"])
+    , ("model/mesh",[".mesh",".msh",".silo"])
+    , ("model/vnd.dwf",[".dwf"])
+    , ("model/vnd.gdl",[".gdl"])
+    , ("model/vnd.gtw",[".gtw"])
+    , ("model/vnd.mts",[".mts"])
+    , ("model/vnd.vtu",[".vtu"])
+    , ("model/vrml",[".vrml",".wrl"])
+    , ("text/calendar",[".ics",".ifb"])
+    , ("text/css",[".css"])
+    , ("text/csv",[".csv"])
+    , ("text/html",[".htm",".html"])
+    , ("text/plain",[".conf",".def",".diff",".in",".ksh",".list",".log",".pl",".text",".txt"])
+    , ("text/prs.lines.tag",[".dsc"])
+    , ("text/richtext",[".rtx"])
+    , ("text/sgml",[".sgm",".sgml"])
+    , ("text/tab-separated-values",[".tsv"])
+    , ("text/troff",[".man",".me",".ms",".roff",".t",".tr"])
+    , ("text/uri-list",[".uri",".uris",".urls"])
+    , ("text/vnd.curl",[".curl"])
+    , ("text/vnd.curl.dcurl",[".dcurl"])
+    , ("text/vnd.curl.mcurl",[".mcurl"])
+    , ("text/vnd.curl.scurl",[".scurl"])
+    , ("text/vnd.fly",[".fly"])
+    , ("text/vnd.fmi.flexstor",[".flx"])
+    , ("text/vnd.graphviz",[".gv"])
+    , ("text/vnd.in3d.3dml",[".3dml"])
+    , ("text/vnd.in3d.spot",[".spot"])
+    , ("text/vnd.sun.j2me.app-descriptor",[".jad"])
+    , ("text/vnd.wap.si",[".si"])
+    , ("text/vnd.wap.sl",[".sl"])
+    , ("text/vnd.wap.wml",[".wml"])
+    , ("text/vnd.wap.wmlscript",[".wmls"])
+    , ("text/x-asm",[".asm",".s"])
+    , ("text/x-c",[".c",".cc",".cpp",".cxx",".dic",".h",".hh"])
+    , ("text/x-fortran",[".f",".f77",".f90",".for"])
+    , ("text/x-java-source",[".java"])
+    , ("text/x-pascal",[".p",".pas"])
+    , ("text/x-python",[".py"])
+    , ("text/x-setext",[".etx"])
+    , ("text/x-uuencode",[".uu"])
+    , ("text/x-vcalendar",[".vcs"])
+    , ("text/x-vcard",[".vcf"])
+    , ("video/3gpp",[".3gp"])
+    , ("video/3gpp2",[".3g2"])
+    , ("video/h261",[".h261"])
+    , ("video/h263",[".h263"])
+    , ("video/h264",[".h264"])
+    , ("video/jpeg",[".jpgv"])
+    , ("video/jpm",[".jpgm",".jpm"])
+    , ("video/mj2",[".mj2",".mjp2"])
+    , ("video/mp4",[".mp4",".mp4v",".mpg4"])
+    , ("video/mpeg",[".m1v",".m2v",".mpa",".mpe",".mpeg",".mpg"])
+    , ("video/ogg",[".ogv"])
+    , ("video/quicktime",[".mov",".qt"])
+    , ("video/vnd.fvt",[".fvt"])
+    , ("video/vnd.mpegurl",[".m4u",".mxu"])
+    , ("video/vnd.ms-playready.media.pyv",[".pyv"])
+    , ("video/vnd.vivo",[".viv"])
+    , ("video/x-f4v",[".f4v"])
+    , ("video/x-fli",[".fli"])
+    , ("video/x-flv",[".flv"])
+    , ("video/x-m4v",[".m4v"])
+    , ("video/x-ms-asf",[".asf",".asx"])
+    , ("video/x-ms-wm",[".wm"])
+    , ("video/x-ms-wmv",[".wmv"])
+    , ("video/x-ms-wmx",[".wmx"])
+    , ("video/x-ms-wvx",[".wvx"])
+    , ("video/x-msvideo",[".avi"])
+    , ("video/x-sgi-movie",[".movie"])
+    , ("x-conference/x-cooltalk",[".ice"])
+    ]
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -6,6 +6,8 @@
     /_/            
 ```
 
+[![Build Status](https://travis-ci.org/akc/opn.svg)](https://travis-ci.org/akc/opn)
+
 The `opn` command lets you open files and URLs with associated
 programs. It's intended to "just work" and to be trivial to
 configure. Its configuration resides in `~/.opnconfig`; here's an
diff --git a/opn.1 b/opn.1
--- a/opn.1
+++ b/opn.1
@@ -1,4 +1,4 @@
-.TH "OPN" "1" "24 Aug 2014" "Opn User Manual" "Version 0.1.0"
+.TH "OPN" "1" "6 Dec 2014" "Opn User Manual" "Version 0.1.2"
 .SH NAME
 .PP
 opn \- open files and URLs with associated programs
@@ -36,8 +36,8 @@
 .PP
 If asked to open a file with no matching extension, or a file without an
 extension, \f[C]opn\f[] tries to be a bit smart.
-For example, a header file, say \f[C]foo.h\f[], would be opened in
-\f[C]emacs\f[].
+For example, with the config above, a header file, say \f[C]foo.h\f[],
+would be opened in \f[C]emacs\f[].
 The reason is that header files have mime type \f[C]text/x\-c\f[], the
 same type as \f[C]\[aq].c\[aq]\f[] files, and thus \f[C]opn\f[]
 "guesses" that \f[C]\[aq].h\[aq]\f[] files also should be opened with
diff --git a/opn.cabal b/opn.cabal
--- a/opn.cabal
+++ b/opn.cabal
@@ -1,5 +1,5 @@
 name:                opn
-version:             0.1.1
+version:             0.1.2
 synopsis:            Open files or URLs using associated programs.
 
 description:         The `opn` command lets you open files and URLs with
@@ -23,7 +23,14 @@
 
 executable opn
   main-is:             opn.hs
+  other-modules:       Opn.Guess
   ghc-options:         -Wall
-  build-depends:       base ==4.6.*, ini, text, process,
-                       unordered-containers, optparse-applicative,
-                       network-uri, directory, filepath
+  build-depends:       base >=4 && <5,
+                       ini,
+                       text,
+                       process,
+                       unordered-containers,
+                       optparse-applicative >=0.10.0,
+                       network-uri,
+                       directory,
+                       filepath
diff --git a/opn.hs b/opn.hs
--- a/opn.hs
+++ b/opn.hs
@@ -35,7 +35,7 @@
     }
 
 name :: String
-name = "opn 0.1.1"
+name = "opn 0.1.2"
 
 optsParser :: Parser (Maybe Opts)
 optsParser = hiddenHelp <*> versionOpt <|> (Just <$> (Opts
