diff --git a/src/Exif/ExifOperations.cpp b/src/Exif/ExifOperations.cpp
index dd3d22a6..4cfe6b70 100644
--- a/src/Exif/ExifOperations.cpp
+++ b/src/Exif/ExifOperations.cpp
@@ -108,7 +108,11 @@ void copyExifData(const std::string &from, const std::string &to,
 #endif
 
     try {
+#if EXIV2_TEST_VERSION (0, 28, 0)
+        Exiv2::Image::UniquePtr sourceImage;
+#else
         Exiv2::Image::AutoPtr sourceImage;
+#endif
         Exiv2::ExifData srcExifData;
 
         if (!from.empty()) {
@@ -128,7 +132,11 @@ void copyExifData(const std::string &from, const std::string &to,
         }
 
         // get destination exif data
+#if EXIV2_TEST_VERSION (0, 28, 0)
+        Exiv2::Image::UniquePtr destinationImage = Exiv2::ImageFactory::open(to);
+#else
         Exiv2::Image::AutoPtr destinationImage = Exiv2::ImageFactory::open(to);
+#endif
 
         if (dontOverwrite) {
             // doesn't throw anything if it is empty
@@ -212,7 +220,11 @@ void copyExifData(const std::string &from, const std::string &to,
             destinationImage->setExifData(srcExifData);
         }
         destinationImage->writeMetadata();
+#if EXIV2_TEST_VERSION (0, 28, 0)
+    } catch (Exiv2::Error &e) {
+#else
     } catch (Exiv2::AnyError &e) {
+#endif
 #ifndef NDEBUG
         qDebug() << e.what();
 #endif
@@ -338,7 +350,11 @@ allowed for ev computation purposes.
 
 float getExposureTime(const std::string &filename) {
     try {
+#if EXIV2_TEST_VERSION (0, 28, 0)
+        Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open(filename);
+#else
         Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename);
+#endif
         image->readMetadata();
         Exiv2::ExifData &exifData = image->exifData();
         if (exifData.empty()) return -1;
@@ -374,14 +390,22 @@ float getExposureTime(const std::string &filename) {
         } else {
             return -1;
         }
+#if EXIV2_TEST_VERSION (0, 28, 0)
+    } catch (Exiv2::Error &e) {
+#else
     } catch (Exiv2::AnyError &e) {
+#endif
         return -1;
     }
 }
 
 float getAverageLuminance(const std::string &filename) {
     try {
+#if EXIV2_TEST_VERSION (0, 28, 0)
+        Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open(filename);
+#else
         Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename);
+#endif
         image->readMetadata();
         Exiv2::ExifData &exifData = image->exifData();
 
@@ -403,7 +427,11 @@ float getAverageLuminance(const std::string &filename) {
                   << std::endl;
 
         return -1.0;
+#if EXIV2_TEST_VERSION (0, 28, 0)
+    } catch (Exiv2::Error &e) {
+#else
     } catch (Exiv2::AnyError &e) {
+#endif
         return -1.0;
     }
 }
diff --git a/src/Libpfs/exif/exifdata.cpp b/src/Libpfs/exif/exifdata.cpp
index 38472eff..79085e43 100644
--- a/src/Libpfs/exif/exifdata.cpp
+++ b/src/Libpfs/exif/exifdata.cpp
@@ -52,7 +52,11 @@ ExifData::ExifData(const std::string &filename) { fromFile(filename); }
 void ExifData::fromFile(const std::string &filename) {
     reset();
     try {
+#if EXIV2_TEST_VERSION (0, 28, 0)
+        ::Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open(filename);
+#else
         ::Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename);
+#endif
         image->readMetadata();
         ::Exiv2::ExifData &exifData = image->exifData();
 
@@ -121,7 +125,11 @@ void ExifData::fromFile(const std::string &filename) {
          */
         if ((it = exifData.findKey(Exiv2::ExifKey("Exif.Image.Orientation"))) !=
             exifData.end()) {
+#if EXIV2_TEST_VERSION (0, 28, 0)
+            long rotation = it->toUint32();
+#else
             long rotation = it->toLong();
+#endif
             switch (rotation) {
                 case 3:
                     m_orientation = 180;
@@ -134,7 +142,11 @@ void ExifData::fromFile(const std::string &filename) {
                     break;
             }
         }
+#if EXIV2_TEST_VERSION (0, 28, 0)
+    } catch (Exiv2::Error &e) {
+#else
     } catch (Exiv2::AnyError &e) {
+#endif
         return;
     }
 }
diff --git a/src/TransplantExif/TransplantExifDialog.cpp b/src/TransplantExif/TransplantExifDialog.cpp
index 8364b595..a7683703 100644
--- a/src/TransplantExif/TransplantExifDialog.cpp
+++ b/src/TransplantExif/TransplantExifDialog.cpp
@@ -347,7 +347,11 @@ void TransplantExifDialog::transplant_requested() {
                 QFile::encodeName((*i_dest)).constData(),
                 m_Ui->checkBox_dont_overwrite->isChecked());
             m_Ui->rightlist->item(index)->setBackground(QBrush("#a0ff87"));
+#if EXIV2_TEST_VERSION (0, 28, 0)
+        } catch (Exiv2::Error &e) {
+#else
         } catch (Exiv2::AnyError &e) {
+#endif
             add_log_message("ERROR:" + QString::fromStdString(e.what()));
             m_Ui->rightlist->item(index)->setBackground(QBrush("#ff743d"));
         }