diff --git a/filesystemwatcher/filesystemwatcher.cpp b/filesystemwatcher/filesystemwatcher.cpp
index 9177a0a..d6e82ee 100644
--- a/filesystemwatcher/filesystemwatcher.cpp
+++ b/filesystemwatcher/filesystemwatcher.cpp
@@ -31,7 +31,7 @@
     timerCallbackSlot();
 
     // start timer
-    m_timer->start(60000);
+    m_timer->start(300000);
 }
 
 FileSystemWatcher::~FileSystemWatcher()
@@ -63,7 +63,7 @@
 void FileSystemWatcher::handleCallback(QString dirPath)
 {
     // scan directory and populate file list
-    QHash<QString, sFileInfo> currentState = scanDirectory(dirPath);
+    QHash<QString, qint64> currentState = scanDirectory(dirPath);
 
     // reconcile directory and report changes
     QVector<sEventInfo> dirChanges = reconcileDirectory(currentState, dirPath);
@@ -72,10 +72,10 @@
     printToGui(dirChanges);
 }
 
-QHash<QString, sFileInfo> FileSystemWatcher::scanDirectory(QString dirPath)
+QHash<QString, qint64> FileSystemWatcher::scanDirectory(QString dirPath)
 {   
     // list of files in directory
-    QHash<QString, sFileInfo> currentState;
+    QHash<QString, qint64> currentState;
 
     // directory iterator (recursive)
     QDirIterator dirIterator(dirPath, QDirIterator::Subdirectories |
@@ -109,13 +109,8 @@
             }
             else
             {
-                // construct struct
-                sFileInfo fileInfoStruct;
-                fileInfoStruct.fileInfo = fileInfo;
-                fileInfoStruct.hash = calcChecksum(absFilePath);
-
                 // add this file to the file list
-                currentState.insert(absFilePath, fileInfoStruct);
+                currentState.insert(absFilePath, fileInfo.created().toMSecsSinceEpoch());
             }
         }
     }
@@ -123,45 +118,42 @@
     return currentState;
 }
 
-QVector<sEventInfo> FileSystemWatcher::reconcileDirectory(QHash<QString, sFileInfo> currentState, QString dirPath)
+QVector<sEventInfo> FileSystemWatcher::reconcileDirectory(QHash<QString, qint64> currentState, QString dirPath)
 {
     // list of files changed
     QVector<sEventInfo> dirChanges;
 
     // compare result (database/stored snapshot) to fileList (current snapshot)
-    QMutableHashIterator<QString, sFileInfo> i(m_storedState);
+    QMutableHashIterator<QString, qint64> i(m_storedState);
 
     while(i.hasNext())
     {
         i.next();
 
         QString absFilePath = i.key();
+        qint64 storedCreated = i.value();
 
+        // if this file is in a level higher than
+        // this directory, ignore
         if(!absFilePath.startsWith(dirPath))
         {
             continue;
         }
 
-        sFileInfo storedFileInfoStruct = i.value();
-        QFileInfo storedFileInfo = storedFileInfoStruct.fileInfo;
-        QByteArray storedHash = storedFileInfoStruct.hash;
-
         // check file existence
         if(currentState.contains(absFilePath))
         {
-            sFileInfo currentFileInfoStruct = currentState.value(absFilePath);
-            QFileInfo currentFileInfo = currentFileInfoStruct.fileInfo;
-            QByteArray currentHash = currentFileInfoStruct.hash;
+            qint64 currentCreated = currentState.value(absFilePath);
 
-            if((storedFileInfo != currentFileInfo) || (storedHash != currentHash))
+            if(storedCreated != currentCreated)
             {
                 // update stored state
-                i.setValue(currentFileInfoStruct);
+                i.setValue(currentCreated);
 
                 // this file has been modified
                 sEventInfo eventInfo;
                 eventInfo.event = MODIFIED;
-                eventInfo.absFilePath = absFilePath;
+                eventInfo.absFilePath = absFilePath.toStdString();
                 dirChanges.push_back(eventInfo);
             }
 
@@ -176,23 +168,23 @@
             // this file has been deleted
             sEventInfo eventInfo;
             eventInfo.event = DELETED;
-            eventInfo.absFilePath = absFilePath;
+            eventInfo.absFilePath = absFilePath.toStdString();
             dirChanges.push_back(eventInfo);
         }
     }
 
     // any files left in fileList have been added
-    for(QHash<QString, sFileInfo>::iterator i = currentState.begin(); i != currentState.end(); ++i)
+    for(QHash<QString, qint64>::iterator i = currentState.begin(); i != currentState.end(); ++i)
     {
         QString absFilePath = i.key();
-        sFileInfo currentFileInfoStruct = i.value();
+        qint64 currentCreated = i.value();
 
-        m_storedState.insert(absFilePath, currentFileInfoStruct);
+        m_storedState.insert(absFilePath, currentCreated);
 
         // this file has been added
         sEventInfo eventInfo;
         eventInfo.event = ADDED;
-        eventInfo.absFilePath = absFilePath;
+        eventInfo.absFilePath = absFilePath.toStdString();
         dirChanges.push_back(eventInfo);
     }
 
@@ -228,7 +220,7 @@
             QString tempString;
 
             eEvent event = dirChanges[i].event;
-            QString absFilePath = dirChanges[i].absFilePath;
+            QString absFilePath = QString::fromStdString(dirChanges[i].absFilePath);
 
             switch(event)
             {
diff --git a/filesystemwatcher/filesystemwatcher.h b/filesystemwatcher/filesystemwatcher.h
index 002ff5f..f025769 100644
--- a/filesystemwatcher/filesystemwatcher.h
+++ b/filesystemwatcher/filesystemwatcher.h
@@ -19,12 +19,7 @@
 
 struct sEventInfo {
     eEvent event;
-    QString absFilePath;
-};
-
-struct sFileInfo {
-    QByteArray hash;
-    QFileInfo fileInfo;
+    std::string absFilePath;
 };
 
 namespace Ui {
@@ -54,10 +49,10 @@
     void handleCallback(QString dirPath);
 
     // scan directory and populate file list
-    QHash<QString, sFileInfo> scanDirectory(QString dirPath);
+    QHash<QString, qint64> scanDirectory(QString dirPath);
 
     // reconcile directory, find changes
-    QVector<sEventInfo> reconcileDirectory(QHash<QString, sFileInfo> fileList, QString dirPath);
+    QVector<sEventInfo> reconcileDirectory(QHash<QString, qint64> fileList, QString dirPath);
 
     // calculate checksum
     QByteArray calcChecksum(QString absFilePath);
@@ -73,7 +68,7 @@
     QTimer* m_timer; // timer
 
     QString m_dirPath; // monitored path
-    QHash<QString, sFileInfo> m_storedState; // stored state of directory
+    QHash<QString, qint64> m_storedState; // stored state of directory
 };
 
 #endif // FILESYSTEMWATCHER_H
