diff --git a/src/tools/clangbackend/ipcsource/translationunit.cpp b/src/tools/clangbackend/ipcsource/translationunit.cpp
index 5aa1a086d91162a20306f782edbbfdf768909744..55e14bca55d39bee309e445f82e6a3f0851f5a38 100644
--- a/src/tools/clangbackend/ipcsource/translationunit.cpp
+++ b/src/tools/clangbackend/ipcsource/translationunit.cpp
@@ -213,7 +213,7 @@ const QSet<Utf8String> &TranslationUnit::dependedFilePaths() const
 
 void TranslationUnit::setDirtyIfDependencyIsMet(const Utf8String &filePath)
 {
-    if (d->dependedFilePaths.contains(filePath)) {
+    if (d->dependedFilePaths.contains(filePath) && isMainFileAndExistsOrIsOtherFile(filePath)) {
         d->needsToBeReparsed = true;
         d->hasNewDiagnostics = true;
     }
@@ -249,6 +249,14 @@ bool TranslationUnit::projectPartIsOutdated() const
     return d->projectPart.lastChangeTimePoint() >= d->lastProjectPartChangeTimePoint;
 }
 
+bool TranslationUnit::isMainFileAndExistsOrIsOtherFile(const Utf8String &filePath) const
+{
+    if (filePath == d->filePath)
+        return QFileInfo::exists(d->filePath);
+
+    return true;
+}
+
 void TranslationUnit::createTranslationUnitIfNeeded() const
 {
     if (!d->translationUnit) {
diff --git a/src/tools/clangbackend/ipcsource/translationunit.h b/src/tools/clangbackend/ipcsource/translationunit.h
index f2b4a261a987c9cd7a9544d5b565c8a6a8d121b4..2bd1f153a0aec51d893da3c1ddc5592ca945480b 100644
--- a/src/tools/clangbackend/ipcsource/translationunit.h
+++ b/src/tools/clangbackend/ipcsource/translationunit.h
@@ -111,6 +111,7 @@ private:
     void updateLastProjectPartChangeTimePoint() const;
     void removeTranslationUnitIfProjectPartWasChanged() const;
     bool projectPartIsOutdated() const;
+    bool isMainFileAndExistsOrIsOtherFile(const Utf8String &filePath) const;
     void createTranslationUnitIfNeeded() const;
     void checkTranslationUnitErrorCode(CXErrorCode errorCode) const;
     void reparseTranslationUnit() const;
diff --git a/tests/unit/unittest/translationunittest.cpp b/tests/unit/unittest/translationunittest.cpp
index 4bf26bff393c1eda5d5e13653d591e24cd62151e..f03ff8899910642cda595b9f6f943c9856104599 100644
--- a/tests/unit/unittest/translationunittest.cpp
+++ b/tests/unit/unittest/translationunittest.cpp
@@ -48,6 +48,8 @@
 #include <gtest/gtest.h>
 #include "gtest-qt-printing.h"
 
+#include <QTemporaryFile>
+
 #include <chrono>
 #include <thread>
 
@@ -68,12 +70,18 @@ namespace {
 
 class TranslationUnit : public ::testing::Test
 {
+protected:
+    ::TranslationUnit createTemporaryTranslationUnit();
+    QByteArray readContentFromTranslationUnitFile() const;
+
 protected:
     ClangBackEnd::ProjectParts projects;
+    ProjectPart projectPart{Utf8StringLiteral("/path/to/projectfile")};
+    Utf8String translationUnitFilePath = Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp");
     ClangBackEnd::UnsavedFiles unsavedFiles;
     ClangBackEnd::TranslationUnits translationUnits{projects, unsavedFiles};
-    ::TranslationUnit translationUnit{Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp"),
-                                      ProjectPart(Utf8StringLiteral("/path/to/projectfile")),
+    ::TranslationUnit translationUnit{translationUnitFilePath,
+                                      projectPart,
                                       translationUnits};
 };
 
@@ -86,13 +94,13 @@ TEST_F(TranslationUnit, DefaultTranslationUnitIsInvalid)
 
 TEST_F(TranslationUnit, ThrowExceptionForNonExistingFilePath)
 {
-    ASSERT_THROW(::TranslationUnit(Utf8StringLiteral("file.cpp"), ProjectPart(Utf8StringLiteral("/path/to/projectfile")), translationUnits),
+    ASSERT_THROW(::TranslationUnit(Utf8StringLiteral("file.cpp"), projectPart, translationUnits),
                  ClangBackEnd::TranslationUnitFileNotExitsException);
 }
 
 TEST_F(TranslationUnit, ThrowNoExceptionForNonExistingFilePathIfDoNotCheckIfFileExistsIsSet)
 {
-    ASSERT_NO_THROW(::TranslationUnit(Utf8StringLiteral("file.cpp"), ProjectPart(Utf8StringLiteral("/path/to/projectfile")), translationUnits, ::TranslationUnit::DoNotCheckIfFileExists));
+    ASSERT_NO_THROW(::TranslationUnit(Utf8StringLiteral("file.cpp"), projectPart, translationUnits, ::TranslationUnit::DoNotCheckIfFileExists));
 }
 
 TEST_F(TranslationUnit, TranslationUnitIsValid)
@@ -172,7 +180,7 @@ TEST_F(TranslationUnit, DocumentRevisionInFileContainerGetter)
 TEST_F(TranslationUnit, DependedFilePaths)
 {
     ASSERT_THAT(translationUnit.dependedFilePaths(),
-                AllOf(Contains(Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp")),
+                AllOf(Contains(translationUnitFilePath),
                       Contains(Utf8StringLiteral(TESTDATA_DIR"/translationunits.h"))));
 }
 
@@ -198,7 +206,7 @@ TEST_F(TranslationUnit, NeedsReparsingForMainFile)
 {
     translationUnit.cxTranslationUnit();
 
-    translationUnit.setDirtyIfDependencyIsMet(Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp"));
+    translationUnit.setDirtyIfDependencyIsMet(translationUnitFilePath);
 
     ASSERT_TRUE(translationUnit.isNeedingReparse());
 }
@@ -235,7 +243,7 @@ TEST_F(TranslationUnit, HasNewDiagnosticsForMainFile)
 {
     translationUnit.cxTranslationUnit();
 
-    translationUnit.setDirtyIfDependencyIsMet(Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp"));
+    translationUnit.setDirtyIfDependencyIsMet(translationUnitFilePath);
 
     ASSERT_TRUE(translationUnit.hasNewDiagnostics());
 }
@@ -243,20 +251,41 @@ TEST_F(TranslationUnit, HasNewDiagnosticsForMainFile)
 TEST_F(TranslationUnit, HasNoNewDiagnosticsAfterGettingDiagnostics)
 {
     translationUnit.cxTranslationUnit();
-    translationUnit.setDirtyIfDependencyIsMet(Utf8StringLiteral(TESTDATA_DIR"/translationunits.cpp"));
+    translationUnit.setDirtyIfDependencyIsMet(translationUnitFilePath);
 
     translationUnit.diagnostics();
 
     ASSERT_FALSE(translationUnit.hasNewDiagnostics());
 }
 
-//TEST_F(TranslationUnit, ThrowParseErrorForWrongArguments)
-//{
-//    ProjectPart project(Utf8StringLiteral("/path/to/projectfile"));
-//    project.setArguments({Utf8StringLiteral("-fblah")});
-//    TranslationUnit translationUnit(Utf8StringLiteral(TESTDATA_DIR"/complete_testfile_1.cpp"), unsavedFiles, project);
+TEST_F(TranslationUnit, DeletedFileShouldBeNotSetDirty)
+{
+    auto translationUnit = createTemporaryTranslationUnit();
+
+    translationUnit.setDirtyIfDependencyIsMet(translationUnit.filePath());
 
-//    ASSERT_THROW(translationUnit.cxTranslationUnit(), ClangBackEnd::TranslationUnitParseErrorException);
-//}
+    ASSERT_FALSE(translationUnit.isNeedingReparse());
+}
 
+::TranslationUnit TranslationUnit::createTemporaryTranslationUnit()
+{
+    QTemporaryFile temporaryFile;
+    EXPECT_TRUE(temporaryFile.open());
+    EXPECT_TRUE(temporaryFile.write(readContentFromTranslationUnitFile()));
+    ::TranslationUnit translationUnit(temporaryFile.fileName(),
+                                      projectPart,
+                                      translationUnits);
+
+return translationUnit;
 }
+
+QByteArray TranslationUnit::readContentFromTranslationUnitFile() const
+{
+    QFile contentFile(translationUnitFilePath);
+    EXPECT_TRUE(contentFile.open(QIODevice::ReadOnly));
+
+    return contentFile.readAll();
+}
+
+}
+