diff --git a/b9.cabal b/b9.cabal
--- a/b9.cabal
+++ b/b9.cabal
@@ -1,5 +1,5 @@
 name:                b9
-version:             0.5.7
+version:             0.5.8
 
 synopsis:            A tool and library for building virtual machine images.
 
diff --git a/src/lib/B9.hs b/src/lib/B9.hs
--- a/src/lib/B9.hs
+++ b/src/lib/B9.hs
@@ -1,4 +1,4 @@
-{-| B9 is a library and build tool with primitive operations to run a
+{-| B9 is a library and build tool with primitive operations to rmrun a
     build script inside a virtual machine and to create and convert
     virtual machine image files as well as related ISO and VFAT disk images
     for e.g. cloud-init configuration sources.
diff --git a/src/lib/B9/ArtifactGenerator.hs b/src/lib/B9/ArtifactGenerator.hs
--- a/src/lib/B9/ArtifactGenerator.hs
+++ b/src/lib/B9/ArtifactGenerator.hs
@@ -15,12 +15,14 @@
   ,instanceIdKey
   ,buildIdKey
   ,buildDateKey
+  ,getAssemblyOutputFiles
   ) where
 
 
 import Data.Data
 import Data.Monoid -- hiding ((<>))
 import Control.Applicative
+import System.FilePath ((<.>), (</>))
 
 import B9.DiskImages
 import B9.Vm
@@ -183,6 +185,21 @@
 
 data CloudInitType = CI_ISO | CI_VFAT | CI_DIR
   deriving (Read, Show, Typeable, Data, Eq)
+
+-- | Return the files that the artifact assembly consist of.
+getAssemblyOutputFiles :: ArtifactAssembly -> [FilePath]
+getAssemblyOutputFiles (VmImages ts _) =
+  concatMap getImageDestinationOutputFiles ts
+getAssemblyOutputFiles (CloudInit ts o) =
+  concatMap (getCloudInitOutputFiles o) ts
+  where
+    getCloudInitOutputFiles baseName t
+      | t == CI_ISO  = [baseName <.> "iso"]
+      | t == CI_VFAT = [baseName <.> "vfat"]
+      | t == CI_DIR  = [baseName </> "meta-data"
+                      ,baseName </> "user-data"]
+
+-- * QuickCheck instances
 
 instance Arbitrary ArtifactGenerator where
   arbitrary = oneof [ Sources <$> halfSize arbitrary <*> halfSize arbitrary
diff --git a/src/lib/B9/ArtifactGeneratorImpl.hs b/src/lib/B9/ArtifactGeneratorImpl.hs
--- a/src/lib/B9/ArtifactGeneratorImpl.hs
+++ b/src/lib/B9/ArtifactGeneratorImpl.hs
@@ -33,6 +33,16 @@
 import Text.Printf
 import Text.Show.Pretty (ppShow)
 
+-- | Return a list of relative paths for the /local/ files to be generated
+-- by the ArtifactGenerator. This excludes 'Shared' and Transient image targets.
+getArtifactOutputFiles :: ArtifactGenerator -> Either String [FilePath]
+getArtifactOutputFiles g =
+  concatMap getAssemblyOutputFiles
+  <$> map takeAssembly
+  <$> evalArtifactGenerator undefined undefined [] g
+  where
+    takeAssembly (IG _ _ a) = a
+
 -- | Run an artifact generator to produce the artifacts.
 assemble :: ArtifactGenerator -> B9 [AssembledArtifact]
 assemble artGen = do
diff --git a/src/lib/B9/Content/AST.hs b/src/lib/B9/Content/AST.hs
--- a/src/lib/B9/Content/AST.hs
+++ b/src/lib/B9/Content/AST.hs
@@ -5,15 +5,15 @@
 files containing parsable syntactic structures, such as most configuration files
 do.
 
-Imagine you would want to create a cloud-init 'user-data' file from a set
-of 'user-data' snippets which each are valid 'user-data' files in yaml syntax
-and e.g. a 'writefiles' section. Now the goal is, for b9 to be able to merge
-these snippets into one, such that all writefiles sections are combined into
-a single writefile section. Another example is OTP/Erlang sys.config files.
-This type class is the greatest commonon denominator of types describing a
-syntax that can be parsed, concatenated e.g. like in the above example and
-rendered. The actual concatenation operation is the append from Monoid,
-i.e. like monoid but without the need for an empty element.
+Imagine you would want to create a cloud-init 'user-data' file from a set of
+'user-data' snippets which each are valid 'user-data' files in yaml syntax and
+e.g. a 'write_files' section. Now the goal is, for b9 to be able to merge these
+snippets into one, such that all writefiles sections are combined into a single
+writefile section. Another example is OTP/Erlang sys.config files.  This type
+class is the greatest commonon denominator of types describing a syntax that can
+be parsed, concatenated e.g. like in the above example and rendered. The actual
+concatenation operation is the append from Monoid, i.e. like monoid but without
+the need for an empty element.
 -}
 
 module B9.Content.AST ( ConcatableSyntax (..)
diff --git a/src/lib/B9/Content/Generator.hs b/src/lib/B9/Content/Generator.hs
--- a/src/lib/B9/Content/Generator.hs
+++ b/src/lib/B9/Content/Generator.hs
@@ -7,23 +7,27 @@
 
 import B9.Content.AST
 import B9.Content.ErlangPropList
-import B9.Content.YamlObject
 import B9.Content.StringTemplate
+import B9.Content.YamlObject
+import qualified Data.ByteString.Char8 as B
 
 import Test.QuickCheck
 import B9.QCUtil
 
 data Content = RenderErlang (AST Content ErlangPropList)
              | RenderYaml (AST Content YamlObject)
+             | FromString String
              | FromTextFile SourceFile
   deriving (Read, Show, Typeable, Eq)
 
 instance Arbitrary Content where
   arbitrary = oneof [FromTextFile <$> smaller arbitrary
                     ,RenderErlang <$> smaller arbitrary
-                    ,RenderYaml <$> smaller arbitrary]
+                    ,RenderYaml <$> smaller arbitrary
+                    ,FromString <$> smaller arbitrary]
 
 instance CanRender Content where
   render (RenderErlang ast) = encodeSyntax <$> fromAST ast
   render (RenderYaml ast) = encodeSyntax <$> fromAST ast
   render (FromTextFile s) = readTemplateFile s
+  render (FromString str) = return (B.pack str)
diff --git a/src/lib/B9/DiskImages.hs b/src/lib/B9/DiskImages.hs
--- a/src/lib/B9/DiskImages.hs
+++ b/src/lib/B9/DiskImages.hs
@@ -92,6 +92,18 @@
 
 type Mounted a = (a, MountPoint)
 
+-- | Return the files generated for a local or a live image; shared and transient images
+-- are treated like they have no ouput files because the output files are manged
+-- by B9.
+getImageDestinationOutputFiles :: ImageTarget -> [FilePath]
+getImageDestinationOutputFiles (ImageTarget d _ _) =
+  case d of
+   LiveInstallerImage liName liPath _ ->
+     let path = liPath </> "machines" </> liName </> "disks" </> "raw"
+     in [path </> "0.raw", path </> "0.size", path </> "VERSION"]
+   LocalFile (Image lfPath _ _) _ -> [lfPath]
+   _ -> []
+
 itImageDestination :: ImageTarget -> ImageDestination
 itImageDestination (ImageTarget d _ _) = d
 
