diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2015 Corentin Dupont
+
+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 Brent Yorgey 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/R-pandoc.cabal b/R-pandoc.cabal
new file mode 100644
--- /dev/null
+++ b/R-pandoc.cabal
@@ -0,0 +1,40 @@
+name: R-pandoc
+version: 0.1
+cabal-version: >=1.10
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+maintainer: corentin.dupont@gmail.com
+bug-reports: http://github.com/cdupont/R-pandoc/issues
+synopsis: A pandoc filter to express R plots inside markdown
+category: Text
+author: Corentin Dupont
+extra-source-files: README.md
+
+source-repository head
+    type: git
+    location: http://github.com/cdupont/R-pandoc.git
+
+library
+    build-depends:
+        base         >=4.6  && <4.9,
+        pandoc-types >=1.12 && <1.13,
+        directory    >=1.2  && <1.3,
+        filepath     >=1.3  && <1.5,
+        process      >=1.2  && <1.3,
+        split        >=0.2  && <0.3
+    exposed-modules: Text.Pandoc.R
+    exposed: True
+    buildable: True
+    default-language: Haskell2010
+    hs-source-dirs: src
+    ghc-options: -Wall
+
+executable R-pandoc
+    build-depends:
+        base         >=4.6  && <4.9,
+        pandoc-types >=1.12 && <1.13,
+        R-pandoc     ==0.1
+    main-is: src/Main.hs
+    buildable: True
+    default-language: Haskell2010
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,59 @@
+
+Please note that this repo is work in progress.
+
+[![Build Status](https://travis-ci.org/cdupont/R-pandoc.svg?branch=master)](https://travis-ci.org/cdupont/R-pandoc)
+
+A [pandoc](http://johnmacfarlane.net/pandoc/) filter to embbed R plots inside markdown documents.
+
+## Usage
+
+Install R:
+
+    sudo apt-get install r-base
+
+
+Create a file called `demo.md` with the following text:
+
+``` markdown
+Here is a nice plot:
+    ~~~ {.Rplot}
+    require(stats)
+    D = 150
+    T = 10
+    t = seq(0, 80, 0.01)
+    x = -D*exp(-(t/T))+D
+    v = (D/T)*exp(-(t/T))
+    plot(t, x, type="l", main="position through time", xlab="time (s)", ylab="position (m)", xlim=c(0,80), ylim=c(0, D+10),  xaxs = "i", yaxs = "i")
+    ~~~
+```
+
+Now run:
+``` shell
+    pandoc -t html demo.md --filter R-pandoc -o demo.html -s
+```
+
+The file demo.html should now have a nice plot included:
+
+![plot](img/Rplot.png)
+
+
+## Details
+
+`R-pandoc` compiles code blocks containing R plots
+and includes the resulting images in the pandoc markup.  It is meant
+to be run as a
+[pandoc filter](http://johnmacfarlane.net/pandoc/scripting.html) as
+shown above.
+
+`R-pandoc` is aware of two code block classes.  A block with
+the `Rplot` class will be replaced by the resulting plot---the code
+will not appear in the output.  
+
+## Installing
+
+
+``` shell
+    git clone https://github.com/cdupont/R-pandoc.git
+    cd R-pandoc
+    cabal install
+```
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/src/Main.hs b/src/Main.hs
new file mode 100644
--- /dev/null
+++ b/src/Main.hs
@@ -0,0 +1,5 @@
+import           Text.Pandoc.JSON
+import           Text.Pandoc.R
+
+main :: IO ()
+main = toJSONFilter (insertRplots "plots")
diff --git a/src/Text/Pandoc/R.hs b/src/Text/Pandoc/R.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Pandoc/R.hs
@@ -0,0 +1,78 @@
+
+
+module Text.Pandoc.R where
+
+import           Control.Applicative
+import           Control.Monad
+import           Data.List           (delete)
+import           Data.List.Split
+import           Data.Maybe
+import           System.Directory    (createDirectoryIfMissing, doesFileExist, removeFile, renameFile)
+import           System.Exit         (ExitCode (..))
+import           System.FilePath     ((<.>), (</>), pathSeparator)
+import           System.IO           (hPutStrLn, stderr)
+import           System.Process
+import           Text.Pandoc.Generic
+import           Text.Pandoc.JSON
+
+rClass, fileAttr, defFile, defRplot, tmpRFile :: String
+rClass = "Rplot"
+fileAttr = "files"
+defFile = "Rplot.png"
+defRplot = "Rplots.pdf"
+tmpRFile = "plot.R"
+
+renderRPandoc :: FilePath -> Pandoc -> IO Pandoc
+renderRPandoc f p = bottomUpM (insertRplots f) p
+
+insertRplots :: FilePath -> Block -> IO Block
+insertRplots outDir block@(CodeBlock (ident, classes, attrs) code) = do
+   --hPutStrLn stderr $ "insertRplots classes: " ++ (show classes) ++ " attrs: " ++ (show attrs) ++ " ident: " ++ (show ident)
+   if rClass `elem` classes then do
+      let imgFiles = case lookup fileAttr attrs of
+           Just is -> splitOn "," is
+           Nothing   -> [defFile]
+      d <- renderRPlot code
+      when (imgFiles == [defFile]) $ void $ convertDefault
+      imgFiles' <- moveFiles imgFiles outDir
+      return $ if d then Plain (map insertImage imgFiles') else block
+   else return block
+insertRplots _ block = return block
+
+insertImage :: FilePath -> Inline
+insertImage file = Image [] (file,"")
+
+--plot the R graph
+--the files created will be the one specified in the R code with commands such as:
+--png(filename="fig1.png")
+--if no filename is specified, a file "Rplots.pdf" is generated.
+renderRPlot :: String -> IO Bool
+renderRPlot rcode = do
+   writeFile tmpRFile rcode
+   (code,stdout,stderr) <- readProcessWithExitCode "R" ["CMD", "BATCH", "--no-save", "--quiet", tmpRFile] ""
+   when (code /= ExitSuccess) $ do
+      putStrLnErr $ "R exited with: " ++ (show code)
+      putStrLnErr stdout
+      putStrLnErr stderr
+   whenM (doesFileExist tmpRFile) $ removeFile tmpRFile
+   whenM (doesFileExist "plot.Rout") $ removeFile "plot.Rout"
+   return $ (code==ExitSuccess)
+
+moveFiles :: [FilePath] -> FilePath -> IO [FilePath]
+moveFiles files outDir = do
+   createDirectoryIfMissing False outDir
+   mapM_ (\a -> whenM (doesFileExist a) $ renameFile a (outDir </> a)) files
+   return $ map ((pathSeparator : outDir) </>) files
+
+convertDefault :: IO Bool
+convertDefault = do
+   (code,_,_) <- readProcessWithExitCode "convert" [defRplot, defFile] ""
+   whenM (doesFileExist defRplot) $ void $ removeFile defRplot
+   return $ (code==ExitSuccess)
+
+putStrLnErr = hPutStrLn stderr
+
+whenM :: Monad m => m Bool -> m () -> m ()
+whenM cond a = do
+  c <- cond
+  if c then a else (return ())
