diff --git a/hscaffold.cabal b/hscaffold.cabal
--- a/hscaffold.cabal
+++ b/hscaffold.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hscaffold
-version:        0.1.1.0
+version:        0.2.0.0
 synopsis:       Very simple file/directory structure scaffolding writer monad EDSL
 description:     See our README on GitHub at <https://github.com/yamadapc/hscaffold> 
 homepage:       https://github.com/yamadapc/hscaffold#readme
@@ -29,6 +29,7 @@
       base >=4.8 && <4.9
     , text
     , mtl
+    , transformers
     , directory
     , filepath
     , unix
@@ -49,6 +50,7 @@
       base >=4.8 && <4.9
     , text
     , mtl
+    , transformers
     , directory
     , filepath
     , unix
diff --git a/src/Hscaffold.hs b/src/Hscaffold.hs
--- a/src/Hscaffold.hs
+++ b/src/Hscaffold.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE FlexibleInstances          #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
 module Hscaffold
     ( runHscaffold
     , runAction
@@ -13,16 +14,18 @@
     , directory
     , file
     , link
-    , Permissions(..)
+    , copy
     , fileWith
     , directoryWith
     , permissions
+    , Permissions(..)
 
     , ScaffoldActionType(..)
     , ScaffoldAction
     , ScaffoldActionV
 
     , module Data.Text
+    , module Control.Monad.IO.Class
     , module Control.Monad.Writer
     , module System.Directory
     , module System.FilePath
@@ -30,14 +33,15 @@
   where
 
 import           Control.Applicative
+import           Control.Monad.IO.Class
 import           Control.Monad.Writer
-import           Data.Text                (Text)
+import           Data.Text              (Text)
 import qualified Data.Text
-import qualified Data.Text.IO as Text
+import qualified Data.Text.IO           as Text
 import           System.Directory
 -- TODO - Disable this on Windows
-import           System.Posix.Files
 import           System.FilePath
+import           System.Posix.Files
 
 
 -- | Run the scaffolding writer on the IO monad with no extensions
@@ -69,6 +73,12 @@
 runAction root (Directory fp nested) = do
     createDirectoryIfMissing True (root </> fp)
     mapM_ (runAction (root </> fp)) nested
+runAction root (Copy fp1 fp2) = do
+    let fp1' = makeAbsolute fp1
+        fp2' = makeAbsolute fp2
+    copyFile fp1' fp2'
+  where
+    makeAbsolute fp = if isAbsolute fp then fp else root </> fp
 
 -- | Accumulator for actions
 type ScaffoldAction e = [ScaffoldActionType e]
@@ -78,11 +88,13 @@
 
 -- | Type of actions scaffolding can make, 'ScaffoldActionTypeExtension' is open
 -- for extension through other data-types
-data ScaffoldActionType e = File FilePath Text
-                          | Link FilePath FilePath
-                          | Directory FilePath (ScaffoldAction e)
-                          | SetPermissions Permissions FilePath
-                          | ScaffoldActionTypeExtension e
+data ScaffoldActionType e
+    = File FilePath Text
+    | Link FilePath FilePath
+    | Directory FilePath (ScaffoldAction e)
+    | SetPermissions Permissions FilePath
+    | Copy FilePath FilePath
+    | ScaffoldActionTypeExtension e
   deriving(Show, Eq, Ord)
 
 -- | Create a directory with the nested contents
@@ -142,3 +154,13 @@
     -> FilePath
     -> m ()
 link fp1 fp2 = tell [Link fp1 fp2]
+
+-- | Copy a file from A to B
+--
+-- *Non-absolute paths are treated relative to the root*
+copy
+    :: MonadWriter (ScaffoldAction e) m
+    => FilePath
+    -> FilePath
+    -> m ()
+copy fp1 fp2 = tell [Copy fp1 fp2]
