diff --git a/tools/logicalimager/LogicalImagerConfiguration.cpp b/tools/logicalimager/LogicalImagerConfiguration.cpp
index a6d599125428e5d835c58d05c03f2986398e2e15..9307755835c53942e8431243f321d1db21ce4b50 100644
--- a/tools/logicalimager/LogicalImagerConfiguration.cpp
+++ b/tools/logicalimager/LogicalImagerConfiguration.cpp
@@ -24,6 +24,7 @@
 
 #include "LogicalImagerConfiguration.h"
 #include "LogicalImagerRuleSet.h"
+#include "Version.h"
 
 /**
 * Implement the logical imager configuration.
@@ -214,11 +215,25 @@ LogicalImagerConfiguration::LogicalImagerConfiguration(const std::string &config
         else if (it.key() == "finalize-image-writer") {
             it.value().get_to(m_finalizeImageWriter);
         }
+        else if (it.key() == "version") {
+            it.value().get_to(m_version);
+        }
     }
 
     if (hasError) {
         throw std::logic_error("ERROR: parsing configuration file " + configFilename + newline + errorStr);
     }
+
+    // check version
+    Version currentVersion(m_currentVersion);
+    Version version(m_version);
+    
+    if (!(version == currentVersion || version < currentVersion)) {
+        throw std::logic_error("ERROR: unsupported configuration version " + m_version
+         + ". Supported version is "
+         + m_currentVersion + " or less.");
+    }
+
 }
 
 /**
diff --git a/tools/logicalimager/LogicalImagerConfiguration.h b/tools/logicalimager/LogicalImagerConfiguration.h
index e4ff251d16c51d297132156a81808ce954f118a2..d64deba040afaf6727957fb69e4d1f965483a628 100644
--- a/tools/logicalimager/LogicalImagerConfiguration.h
+++ b/tools/logicalimager/LogicalImagerConfiguration.h
@@ -38,11 +38,15 @@ class LogicalImagerConfiguration
     TSK_RETVAL_ENUM matches(TSK_FS_FILE *fs_file, const char *path) const;
     const std::vector<std::pair<const RuleMatchResult *, std::list<std::string>>> getFullFilePaths() const;
     bool getFinalizeImagerWriter() { return m_finalizeImageWriter; }
+    std::string getVersion() { return m_version; }
 
 private:
     LogicalImagerConfiguration(const LogicalImagerConfiguration &) = delete;
 
     std::vector<LogicalImagerRuleSet *> m_ruleSets;
     bool m_finalizeImageWriter = false;
+    std::string m_version;
     LogicalImagerRuleSet::matchCallback m_callbackFunc;
+
+    const std::string m_currentVersion = std::string("1.0");
 };
diff --git a/tools/logicalimager/Version.h b/tools/logicalimager/Version.h
new file mode 100644
index 0000000000000000000000000000000000000000..7451982a3b814ed058679f06384312e8b18b7fc4
--- /dev/null
+++ b/tools/logicalimager/Version.h
@@ -0,0 +1,58 @@
+/*
+** The Sleuth Kit
+**
+** Brian Carrier [carrier <at> sleuthkit [dot] org]
+** Copyright (c) 2010-2019 Brian Carrier.  All Rights reserved
+**
+** This software is distributed under the Common Public License 1.0
+**
+*/
+
+/**
+* \file Version.h
+* Contains the class definitions for the Version class
+*/
+
+#pragma once
+
+#include <string>
+
+/**
+* Implement the major and minor version.
+*
+*/
+class Version {
+public:
+
+    Version(std::string version)
+    {
+        int status = std::sscanf(version.c_str(), "%d.%d", &m_major, &m_minor);
+        if (status != 2) {
+            throw std::logic_error("ERROR: Invalid version " + version + ". Expected major.minor");
+        }
+    }
+
+    bool operator < (const Version& rhs) const {
+        if (m_major < rhs.m_major)
+            return true;
+        if (m_minor < rhs.m_minor)
+            return true;
+        return false;
+    }
+
+    bool operator == (const Version& other) const {
+        return m_major == other.m_major
+            && m_minor == other.m_minor;
+    }
+
+    friend std::ostream& operator << (std::ostream& stream, const Version& ver) {
+        stream << ver.m_major;
+        stream << '.';
+        stream << ver.m_minor;
+        return stream;
+    }
+
+private:
+    int m_major = 0;
+    int m_minor = 0;
+};
\ No newline at end of file
diff --git a/tools/logicalimager/tsk_logical_imager.cpp b/tools/logicalimager/tsk_logical_imager.cpp
index d339d0511066ae674012ebe0f36dd2ec02c60e79..b81424f0b1df2f23ea569aafa4f4369f57ea0070 100644
--- a/tools/logicalimager/tsk_logical_imager.cpp
+++ b/tools/logicalimager/tsk_logical_imager.cpp
@@ -909,13 +909,6 @@ main(int argc, char **argv1)
     }
     printDebug("Using config file %s", TskHelper::toNarrow(configFilename).c_str());
 
-    // create a directory with hostname_timestamp
-    std::string directoryPath;
-    if (createDirectory(directoryPath) == -1) {
-        exit(1);
-    }
-    fprintf(stdout, "Created directory %s\n", directoryPath.c_str());
-
     std::wstring wImgPathName;
     std::vector<std::wstring> drivesToProcess;
 
@@ -942,6 +935,14 @@ main(int argc, char **argv1)
         exit(1);
     }
 
+    // create a directory with hostname_timestamp
+    std::string directoryPath;
+    if (createDirectory(directoryPath) == -1) {
+        fprintf(stderr, "Failed to create directory %s\n", directoryPath.c_str());
+        exit(1);
+    }
+    fprintf(stdout, "Created directory %s\n", directoryPath.c_str());
+
     std::string alertFileName = directoryPath + "/alert.txt";
     openAlert(alertFileName);
 
diff --git a/win32/tsk_logical_imager/tsk_logical_imager.vcxproj b/win32/tsk_logical_imager/tsk_logical_imager.vcxproj
index 15d74717664ff4768f9c935eb0ade897098b37dd..ec90958cc79406d805e696941e50b3b8ab177be3 100755
--- a/win32/tsk_logical_imager/tsk_logical_imager.vcxproj
+++ b/win32/tsk_logical_imager/tsk_logical_imager.vcxproj
@@ -464,6 +464,7 @@
     <ClInclude Include="..\..\tools\logicalimager\RuleMatchResult.h" />
     <ClInclude Include="..\..\tools\logicalimager\TskFindFiles.h" />
     <ClInclude Include="..\..\tools\logicalimager\TskHelper.h" />
+    <ClInclude Include="..\..\tools\logicalimager\Version.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\tools\logicalimager\LogicalImagerConfiguration.cpp" />
diff --git a/win32/tsk_logical_imager/tsk_logical_imager.vcxproj.filters b/win32/tsk_logical_imager/tsk_logical_imager.vcxproj.filters
index 212045af79dbe2bd8054b9e67a52b9c4b72bd3f7..226006fdc90f7a6146d21989353c90de02e8fb23 100755
--- a/win32/tsk_logical_imager/tsk_logical_imager.vcxproj.filters
+++ b/win32/tsk_logical_imager/tsk_logical_imager.vcxproj.filters
@@ -71,6 +71,9 @@
     <ClInclude Include="..\..\tools\logicalimager\LogicalImagerConfiguration.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\tools\logicalimager\Version.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\tools\logicalimager\LogicalImagerDateRule.cpp">