diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,27 @@
+# elm-init [![Build Status](https://travis-ci.org/JustusAdam/elm-init.svg?branch=master)](https://travis-ci.org/JustusAdam/elm-init) [![Hackage version](https://img.shields.io/hackage/v/elm-init.svg)](https://hackage.haskell.org/package/elm-init)
+
+Initialize a new empty [Elm](http://elm-lang.org) project.
+
+## Features
+
+Interactive setup tool for a new Elm project.
+
+This tool basically helps you populate your "elm-package.json" file.
+
+Including:
+
+- License chooser (automatically adds license file)
+- Version validator
+
+## Install
+
+Install the package from the [Hackage](https://hackage.haskell.org/package/elm-init) with `cabal install elm-init`.
+
+## Use
+
+Simply run
+
+- `elm-init [DIRECTORY]`
+- or `elm init [DIRECTORY]` if you have the elm platform installed
+
+`DIRECTORY = '.'` if omitted. `DIRECTORY` need not exist, though needs to be a valid directory name.
diff --git a/elm-init.cabal b/elm-init.cabal
--- a/elm-init.cabal
+++ b/elm-init.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                elm-init
-version:             1.0.0.2
+version:             1.0.1.0
 synopsis:            Set up basic structure for an elm project
 description:
   Initialize a new empty elm project with some basic scaffolding according to 'https://github.com/evancz/elm-architecture-tutorial'.
@@ -21,14 +21,17 @@
   Main.elm
   licenses/Apache
   licenses/BSD3
+  licenses/GPLv2
+  licenses/GPLv3
   licenses/LGPL2
   licenses/LGPL3
   licenses/MIT
-  licenses/GPLv3
-  licenses/GPLv2
   index.html
 
+Extra-source-files:
+  README.md
 
+
 executable elm-init
   main-is:             Main.hs
   other-modules:
@@ -46,7 +49,8 @@
       aeson >= 0.8,
       aeson-pretty >= 0.7,
       text >= 1.2,
-      containers >= 0.5
+      containers >= 0.5,
+      time
   hs-source-dirs:      src
   default-language:    Haskell2010
   ghc-options:
@@ -60,4 +64,4 @@
   type:     git
   branch:   master
   location: git://github.com/JustusAdam/elm-init.git
-  tag:      1.0.0.2
+  tag:      1.0.1.0
diff --git a/resources/licenses/Apache b/resources/licenses/Apache
--- a/resources/licenses/Apache
+++ b/resources/licenses/Apache
@@ -1,4 +1,4 @@
-Copyright [year] [name of copyright owner]
+Copyright %d %s
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/resources/licenses/BSD3 b/resources/licenses/BSD3
--- a/resources/licenses/BSD3
+++ b/resources/licenses/BSD3
@@ -1,4 +1,4 @@
-Copyright (c) [year] [name of copyright owner]
+Copyright (c) %d %s
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
diff --git a/resources/licenses/GPLv2 b/resources/licenses/GPLv2
--- a/resources/licenses/GPLv2
+++ b/resources/licenses/GPLv2
@@ -1,4 +1,4 @@
-Copyright (C) [year] [name of copyright owner]
+Copyright (C) %d %s
 
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
diff --git a/resources/licenses/GPLv3 b/resources/licenses/GPLv3
--- a/resources/licenses/GPLv3
+++ b/resources/licenses/GPLv3
@@ -1,4 +1,4 @@
-Copyright (C) [year] [name of copyright owner]
+Copyright (C) %d %s
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/resources/licenses/LGPL2 b/resources/licenses/LGPL2
--- a/resources/licenses/LGPL2
+++ b/resources/licenses/LGPL2
@@ -1,4 +1,4 @@
-Copyright (C) [year] [name of copyright owner]
+Copyright (C) %d %s
 
 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
diff --git a/resources/licenses/LGPL3 b/resources/licenses/LGPL3
--- a/resources/licenses/LGPL3
+++ b/resources/licenses/LGPL3
@@ -1,4 +1,4 @@
-Copyright (C) [year] [name of copyright owner]
+Copyright (C) %d %s
 
 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
diff --git a/resources/licenses/MIT b/resources/licenses/MIT
--- a/resources/licenses/MIT
+++ b/resources/licenses/MIT
@@ -1,4 +1,4 @@
-Copyright (c) [year] [name of copyright owner]
+Copyright (c) %d %s
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
diff --git a/src/ElmInit.hs b/src/ElmInit.hs
--- a/src/ElmInit.hs
+++ b/src/ElmInit.hs
@@ -7,9 +7,8 @@
   , exists
   , verifyElmVersion
   , makePackage
-  , flattenMaybe
   ) where
 
-import ElmInit.Interact
-import ElmInit.Types
-import ElmInit.Util
+import           ElmInit.Interact
+import           ElmInit.Types
+import           ElmInit.Util
diff --git a/src/ElmInit/Interact.hs b/src/ElmInit/Interact.hs
--- a/src/ElmInit/Interact.hs
+++ b/src/ElmInit/Interact.hs
@@ -6,14 +6,14 @@
   ) where
 
 
-import qualified Control.Arrow            as Arrow (first)
-import           Control.Applicative      ((<$>), (<*>))
-import           Data.Text                (append)
-import           Data.Bool                (bool)
-import           ElmInit.Util             (getOr, enumerate)
-import           Data.Text                as Text (Text, intercalate, pack)
-import           Data.Text.IO             as TextIO (getLine, putStrLn)
-import           Prelude                  hiding (getLine, putStrLn)
+import           Control.Applicative ((<$>), (<*>))
+import qualified Control.Arrow       as Arrow (first)
+import           Data.Bool           (bool)
+import           Data.Text           (append)
+import           Data.Text           as Text (Text, intercalate, pack)
+import           Data.Text.IO        as TextIO (getLine, putStrLn)
+import           ElmInit.Util        (enumerate, getOr)
+import           Prelude             hiding (getLine, putStrLn)
 
 
 askChoices :: Text -> Int -> [Text] -> IO Text
diff --git a/src/ElmInit/Types.hs b/src/ElmInit/Types.hs
--- a/src/ElmInit/Types.hs
+++ b/src/ElmInit/Types.hs
@@ -12,13 +12,13 @@
   ) where
 
 
-import           Data.Aeson                   as Aeson (ToJSON, object, (.=),
-                                              toJSON, Value)
-import           Control.Applicative          ((<*>), (<$>))
+import           Control.Applicative          ((<$>), (<*>))
 import           Control.Monad                ((<=<))
-import           Data.Version                 (Version(Version), makeVersion,
-                                              showVersion, parseVersion)
-import           Data.Text                    (pack, Text)
+import           Data.Aeson                   as Aeson (ToJSON, Value, object,
+                                                        toJSON, (.=))
+import           Data.Text                    (Text, pack)
+import           Data.Version                 (Version (Version), makeVersion,
+                                               parseVersion, showVersion)
 import           Text.ParserCombinators.ReadP (readP_to_S)
 
 
diff --git a/src/ElmInit/Util.hs b/src/ElmInit/Util.hs
--- a/src/ElmInit/Util.hs
+++ b/src/ElmInit/Util.hs
@@ -1,20 +1,15 @@
 module ElmInit.Util
-  ( flattenMaybe
-  , exists
+  ( exists
   , getOr
   , enumerate
   ) where
 
 
 import           Control.Applicative ((<$>), (<*>))
-import           Data.Maybe          (fromMaybe)
+import           Control.Exception   (IOException, catch)
 import           Data.Bool           (bool)
-import           System.Directory    (doesFileExist, doesDirectoryExist)
-import           Control.Exception   (catch, IOException)
-
-
-flattenMaybe :: Maybe (Maybe a) -> Maybe a
-flattenMaybe = fromMaybe Nothing
+import           Data.Maybe          (fromMaybe)
+import           System.Directory    (doesDirectoryExist, doesFileExist)
 
 
 exists :: FilePath -> IO Bool
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -4,31 +4,34 @@
 module Main (main) where
 
 
-import           Control.Arrow            as Arrow (first)
 import           Control.Applicative      ((<$>), (<*>))
+import           Control.Arrow            as Arrow (first)
+import           Control.Monad            (join)
 import           Data.Aeson.Encode.Pretty (encodePretty)
 import           Data.Bool                (bool)
-import qualified Data.ByteString          as ByteString (ByteString, hPut,)
+import qualified Data.ByteString          as ByteString (ByteString, hPut)
 import qualified Data.ByteString.Char8    as CBS (pack, unpack)
 import qualified Data.ByteString.Lazy     as LBS (hPut)
+import           Data.Char                (isUpper)
 import           Data.FileEmbed           (embedFile)
 import           Data.Text                as Text (Text, append, pack, unpack)
-import           Data.Text.IO             as TextIO (getLine, putStrLn)
-import           Prelude                  hiding (getLine, putStrLn)
+import qualified Data.Text.IO             as TextIO (getLine, putStrLn)
+import           Data.Time
+import           Data.Version             (Version (..), makeVersion,
+                                           showVersion)
+import           ElmInit                  (CmdArgs (..), Result,
+                                           UserDecisions (..), askChoices,
+                                           askChoicesWithOther, exists,
+                                           makePackage, verifyElmVersion)
+import           Prelude                  hiding (putStrLn)
 import           System.Directory         (createDirectoryIfMissing,
                                            doesDirectoryExist, doesFileExist,
                                            getCurrentDirectory, makeAbsolute)
 import           System.Environment       (getArgs)
-import           System.FilePath          (isValid, takeBaseName, (</>), takeExtension)
+import           System.FilePath          (isValid, takeBaseName, takeExtension,
+                                           (</>))
 import           System.IO                (IOMode (WriteMode), withFile)
-import           Data.Version             (Version(..), showVersion,
-                                          makeVersion)
-import           ElmInit                  (Result, UserDecisions(..),
-                                          CmdArgs(..), askChoicesWithOther,
-                                          exists, verifyElmVersion, makePackage,
-                                          flattenMaybe, askChoices)
-import          Text.Printf               (printf)
-import          Data.Char                 (isUpper)
+import           Text.Printf              (printf)
 
 
 standardDirectories :: [FilePath]
@@ -91,7 +94,7 @@
     bool
       (doesDirectoryExist wd >>=
         bool
-          (putStrLn "the chosen directory does not exist yet, shall I create it? [y/n]"
+          (TextIO.putStrLn "the chosen directory does not exist yet, shall I create it? [y/N]"
           >> getResp >>=
             bool
               (error "Project directory does not exist")  -- I'm so sorry
@@ -102,14 +105,13 @@
 
   where
     getResp :: IO Bool
-    getResp = flip elem ["y", "yes"] <$> getLine
+    getResp = flip elem ["y", "yes"] <$> TextIO.getLine
 
     makeDirs = createDirectoryIfMissing True wd
 
 
 getUserDecisions :: FilePath -> IO UserDecisions
-getUserDecisions wd =
-  Default
+getUserDecisions wd = Default
   <$> askChoicesWithOther
         "project name?"
         0
@@ -125,8 +127,8 @@
         0
         (verifyElmVersion . unpack)
         [pack $ showVersion defaultProjectVersion]
-  <*> (putStrLn "a quick summary" >> getLine)
-  <*> (putStrLn "project repository url" >> getLine)
+  <*> (TextIO.putStrLn "a quick summary" >> TextIO.getLine)
+  <*> (TextIO.putStrLn "project repository url" >> TextIO.getLine)
   <*> askChoicesWithOther
         "choose a license"
         0
@@ -177,7 +179,7 @@
   let mainModule = takeBaseName mfn
   mainFileRes <- mkFile (wd  </> sourceF </> mfn) $ Just $ mainFile mainModule
   indexFileRes <- if makeIndex
-    then  mkFile (wd </> "index.html") $ Just $ indexHtml mainModule
+    then mkFile (wd </> "index.html") $ Just $ indexHtml mainModule
     else return $ return ()
   others <- mkFiles $ flip map standardSourceFiles $ Arrow.first ((wd </> sourceF) </>)
   return $ mainFileRes:indexFileRes:others
@@ -195,19 +197,19 @@
     . flip LBS.hPut . encodePretty . makePackage
 
 
-
-
-putLicense :: FilePath -> Text -> IO Result
-putLicense wd =
-  maybe
-    (return $ Left "License file not found")
-    (fmap
-      Right
-      . withFile
-          (wd </> "LICENSE")
-          WriteMode
-      . flip ByteString.hPut)
-  . flattenMaybe . flip lookup standardLicenses
+putLicense :: FilePath -> Text -> IO ()
+putLicense wd name =
+  case join $ lookup name standardLicenses of
+    Nothing -> return ()
+    Just contents -> do
+      TextIO.putStrLn "The project owner(s): (for the license)"
+      authors <- getLine
+      (year, _, _) <- toGregorian . utctDay <$> getCurrentTime
+      writeFile (wd </> "LICENSE") $
+        printf (CBS.unpack contents) year $
+          if null authors
+            then "[project owners]"
+            else authors
 
 
 main :: IO ()
@@ -235,4 +237,4 @@
   _         <- putLicense wd (license decisions)
 
   -- report all errors
-  mapM_ (either putStrLn return) (resStatic ++ resSource)
+  mapM_ (either TextIO.putStrLn return) (resStatic ++ resSource)
