diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -18,3 +18,6 @@
 
 * Fix `getFoscamDirectoryContents` to include directory.
 
+0.0.6
+
+* Add optics for `FoscamDirectoryFile`.
diff --git a/foscam-directory.cabal b/foscam-directory.cabal
--- a/foscam-directory.cabal
+++ b/foscam-directory.cabal
@@ -1,5 +1,5 @@
 name:               foscam-directory
-version:            0.0.5
+version:            0.0.6
 license:            BSD3
 license-file:       LICENSE
 author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>
diff --git a/src/Data/Foscam/Directory.hs b/src/Data/Foscam/Directory.hs
--- a/src/Data/Foscam/Directory.hs
+++ b/src/Data/Foscam/Directory.hs
@@ -3,15 +3,20 @@
 module Data.Foscam.Directory(
   getFoscamDirectoryContents
 , FoscamDirectoryFile(Isn't, Is)
-, filenames
+, _FoscamDirectory
+, _Isn't
+, _Is
+, _Isn'tFilename
+, _IsFilename
 ) where
 
-import Control.Category(id)
+import Control.Category((.))
+import Control.Lens(Lens', Prism', Traversal', lens, prism', _1, _2)
 import Data.ByteString.UTF8 as UTF8(fromString)
 import Data.Eq(Eq)
 import Data.Foscam.File.Filename(Filename, filename)
 import Data.Functor(fmap, (<$>))
-import Data.List(foldr)
+import Data.Maybe(Maybe(Just, Nothing))
 import Data.Ord(Ord)
 import System.Directory(getDirectoryContents)
 import System.IO(IO, FilePath)
@@ -20,7 +25,7 @@
 import Prelude(Show)
 
 data FoscamDirectoryFile =
-  Isn't FilePath
+  Isn't FilePath FilePath
   | Is FilePath Filename
   deriving (Eq, Ord, Show)
 
@@ -31,12 +36,43 @@
   (fmap (\f -> 
     case parseString filename (Directed (UTF8.fromString p) 0 0 0 0) f of
       Success n -> Is p n
-      Failure _ -> Isn't f)) <$> getDirectoryContents p
+      Failure _ -> Isn't p f)) <$> getDirectoryContents p
 
-filenames ::
-  [FoscamDirectoryFile]
-  -> [(FilePath, Filename)]
-filenames =
-  foldr (\f -> case f of
-                 Isn't _ -> id
-                 Is p n -> ((p,n):)) []
+_FoscamDirectory ::
+  Lens' FoscamDirectoryFile FilePath
+_FoscamDirectory =
+  lens
+    (\d -> case d of 
+             Isn't p _ -> p
+             Is    p _ -> p)
+    (\d p -> case d of 
+               Isn't _ x -> Isn't p x
+               Is    _ x -> Is p x)
+
+_Isn't ::
+  Prism' FoscamDirectoryFile (FilePath, FilePath)
+_Isn't =
+  prism'
+    (\(d, p) -> Isn't d p)
+    (\d -> case d of
+             Isn't p x -> Just (p, x)
+             Is    _ _ -> Nothing)
+
+_Is ::
+  Prism' FoscamDirectoryFile (FilePath, Filename)
+_Is =
+  prism'
+    (\(d, p) -> Is d p)
+    (\d -> case d of
+             Isn't _ _ -> Nothing
+             Is    p x -> Just (p, x))
+
+_IsFilename ::
+  Traversal' FoscamDirectoryFile Filename
+_IsFilename =
+  _Is . _2
+
+_Isn'tFilename ::
+  Traversal' FoscamDirectoryFile FilePath
+_Isn'tFilename =
+  _Is . _1
