diff --git a/directory.cpp b/directory.cpp
deleted file mode 100644
index 2ba2536..0000000
--- a/directory.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Copyright © 2016 IBM Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <cerrno>
-#include <cstring>
-#include <iostream>
-#include "directory.hpp"
-
-Directory::Directory(const std::string& path) : entry(nullptr)
-{
-    dirp = opendir(path.c_str());
-    if (NULL == dirp)
-    {
-        auto e = errno;
-        std::cerr << "Error opening directory " << path.c_str()
-                  << " : " << strerror(e) << std::endl;
-    }
-}
-
-Directory::~Directory()
-{
-    if (dirp)
-    {
-        closedir(dirp);
-    }
-}
-
-bool Directory::next(std::string& name)
-{
-    if (!dirp)
-    {
-        return false;
-    }
-
-    dirent* entry = readdir(dirp);
-    name =  entry->d_name;
-
-    if (name == "." || name == "..")
-    {
-        return next(name);
-    }
-
-    return true;
-}
-
-// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
diff --git a/directory.hpp b/directory.hpp
deleted file mode 100644
index 0a9d580..0000000
--- a/directory.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#pragma once
-
-#include <string>
-#include <dirent.h>
-
-class Directory
-{
-    public:
-        explicit Directory(const std::string& path);
-        ~Directory();
-
-        bool next(std::string& name);
-
-    private:
-        dirent* entry;
-        DIR* dirp;
-};
-
-// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
