diff --git a/res/values/config.xml b/res/values/config.xml
index 1b3970b..4b6012b 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -7,7 +7,7 @@
 	<string name="config_xml" translatable="false">.xml</string>
 	<string name="config_sig" translatable="false">.sig</string>
 	
-    <integer name="defaultVersionNumber">1</integer>
+    <string name="defaultVersionNumber">1</string>
     <string name="defaultVersionName" translatable="false">Almond</string>
     <string name="defaultBuildNumber" translatable="false">1.0</string>
     <string name="defaultBuildDate" translatable="false">0</string>
diff --git a/src/com/fairphone/updater/FairphoneUpdater.java b/src/com/fairphone/updater/FairphoneUpdater.java
index c86898d..3976b89 100644
--- a/src/com/fairphone/updater/FairphoneUpdater.java
+++ b/src/com/fairphone/updater/FairphoneUpdater.java
@@ -200,13 +200,13 @@
     void getSelectedVersionFromSharedPreferences()
     {
         String versionImageType = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_TYPE, "");
-        int versionNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_VERSION_NUMBER, 0);
+        String versionNumber = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_NUMBER, "0");
         mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
     }
 
     void getSelectedStoreFromSharedPreferences()
     {
-        int storeNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_STORE_NUMBER, -1);
+        String storeNumber = mSharedPreferences.getString(PREFERENCE_SELECTED_STORE_NUMBER, "-1");
         mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
     }
 
@@ -698,25 +698,25 @@
 
     public void setSelectedVersion(Version selectedVersion)
     {
-        int versionNumber = selectedVersion != null ? selectedVersion.getNumber() : 0;
+        String versionNumber = selectedVersion != null ? selectedVersion.getNumber() : "0";
         String versionImageType = selectedVersion != null ? selectedVersion.getImageType() : "";
 
         clearSelectedVersion(versionNumber, versionImageType);
 
         mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
-        clearSelectedStore(-1);
+        clearSelectedStore("-1");
     }
 
     public void clearSelectedItems()
     {
-        clearSelectedVersion(0, "");
-        clearSelectedStore(-1);
+        clearSelectedVersion("0", "");
+        clearSelectedStore("-1");
     }
 
-    private void clearSelectedVersion(int versionNumber, String versionImageType)
+    private void clearSelectedVersion(String versionNumber, String versionImageType)
     {
         Editor editor = mSharedPreferences.edit();
-        editor.putInt(PREFERENCE_SELECTED_VERSION_NUMBER, versionNumber);
+        editor.putString(PREFERENCE_SELECTED_VERSION_NUMBER, versionNumber);
         editor.putString(PREFERENCE_SELECTED_VERSION_TYPE, versionImageType);
         editor.commit();
 
@@ -725,18 +725,18 @@
 
     public void setSelectedStore(Store selectedStore)
     {
-        int storeNumber = selectedStore != null ? selectedStore.getNumber() : -1;
+        String storeNumber = selectedStore != null ? selectedStore.getNumber() : "-1";
 
         clearSelectedStore(storeNumber);
 
         mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
-        clearSelectedVersion(0, "");
+        clearSelectedVersion("0", "");
     }
 
-    private void clearSelectedStore(int storeNumber)
+    private void clearSelectedStore(String storeNumber)
     {
         Editor editor = mSharedPreferences.edit();
-        editor.putInt(PREFERENCE_SELECTED_STORE_NUMBER, storeNumber);
+        editor.putString(PREFERENCE_SELECTED_STORE_NUMBER, storeNumber);
         editor.commit();
 
         mSelectedStore = null;
diff --git a/src/com/fairphone/updater/data/DownloadableItem.java b/src/com/fairphone/updater/data/DownloadableItem.java
index 1513fca..e35f38c 100644
--- a/src/com/fairphone/updater/data/DownloadableItem.java
+++ b/src/com/fairphone/updater/data/DownloadableItem.java
@@ -16,19 +16,19 @@
 
 package com.fairphone.updater.data;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import android.text.TextUtils;
 import android.util.Log;
 
+import java.util.HashMap;
+import java.util.Map;
+
 public abstract class DownloadableItem
 {
     private static final String TAG = DownloadableItem.class.getSimpleName();
 
     public static final String DEFAULT_NOTES_LANG = "en";
 
-    private int mNumber;
+    private String mNumber;
 
     private String mName;
 
@@ -46,7 +46,7 @@
 
     DownloadableItem()
     {
-        mNumber = 0;
+        mNumber = "";
         mName = "";
         mOTADownloadLink = "";
         mOTAMd5Sum = "";
@@ -70,25 +70,13 @@
         mReleaseNotesMap = other.mReleaseNotesMap;
     }
 
-    public int getNumber()
+    public String getNumber()
     {
         return mNumber;
     }
 
     public void setNumber(String number)
     {
-        try
-        {
-            this.mNumber = Integer.valueOf(number);
-        } catch (NumberFormatException e)
-        {
-            Log.w(TAG, "Error decoding version number. Defaulting to 0: " + e.getLocalizedMessage());
-            this.mNumber = 0;
-        }
-    }
-
-    public void setNumber(int number)
-    {
         this.mNumber = number;
     }
 
@@ -129,7 +117,7 @@
 
         if (item != null)
         {
-            result = this.mNumber > item.mNumber;
+            result = !this.mNumber.equals(item.mNumber);
         }
         else
         {
diff --git a/src/com/fairphone/updater/data/Store.java b/src/com/fairphone/updater/data/Store.java
index 0b5813e..e6b8a09 100644
--- a/src/com/fairphone/updater/data/Store.java
+++ b/src/com/fairphone/updater/data/Store.java
@@ -33,7 +33,7 @@
         int retVal;
         if (another != null)
         {
-            if (this.getNumber() > another.getNumber())
+            if (!this.getNumber().equals(another.getNumber()))
             {
                 retVal = 1;
             }
diff --git a/src/com/fairphone/updater/data/UpdaterData.java b/src/com/fairphone/updater/data/UpdaterData.java
index 3daacb2..fff710d 100644
--- a/src/com/fairphone/updater/data/UpdaterData.java
+++ b/src/com/fairphone/updater/data/UpdaterData.java
@@ -16,15 +16,15 @@
 
     private static UpdaterData mInstance;
 
-    private int mLatestAOSPVersionNumber;
+    private String mLatestAOSPVersionNumber;
 
-    private int mLatestFairphoneVersionNumber;
+    private String mLatestFairphoneVersionNumber;
 
-    private final Map<Integer, Version> mAOSPVersionMap;
+    private final Map<String, Version> mAOSPVersionMap;
 
-    private final Map<Integer, Version> mFairphoneVersionMap;
+    private final Map<String, Version> mFairphoneVersionMap;
     
-    private final Map<Integer, Store> mAppStoresMap;
+    private final Map<String, Store> mAppStoresMap;
 
     public static UpdaterData getInstance()
     {
@@ -37,8 +37,8 @@
 
     private UpdaterData()
     {
-        mLatestAOSPVersionNumber = 0;
-        mLatestFairphoneVersionNumber = 0;
+        mLatestAOSPVersionNumber = "0";
+        mLatestFairphoneVersionNumber = "0";
         mAOSPVersionMap = new HashMap<>();
         mFairphoneVersionMap = new HashMap<>();
         mAppStoresMap = new HashMap<>();
@@ -46,8 +46,8 @@
 
     public void resetUpdaterData()
     {
-        mLatestAOSPVersionNumber = 0;
-        mLatestFairphoneVersionNumber = 0;
+        mLatestAOSPVersionNumber = "0";
+        mLatestFairphoneVersionNumber = "0";
         mAOSPVersionMap.clear();
         mFairphoneVersionMap.clear();
         mAppStoresMap.clear();
@@ -58,16 +58,16 @@
         mLatestAOSPVersionNumber = getLatestVersionFromTag(latestVersion);
     }
 
-    private static int getLatestVersionFromTag(String latestVersion)
+    private static String getLatestVersionFromTag(String latestVersion)
     {
-        int latestVersionNumber;
+        String latestVersionNumber;
         try
         {
-            latestVersionNumber = Integer.valueOf(latestVersion);
+            latestVersionNumber = latestVersion;
         } catch (NumberFormatException e)
         {
             Log.w(TAG, "Error decoding latest version number. Defaulting to 0: " + e.getLocalizedMessage());
-            latestVersionNumber = 0;
+            latestVersionNumber = "0";
         }
         return latestVersionNumber;
     }
@@ -145,7 +145,7 @@
 	    return mapToOrderedStoreList(mAppStoresMap.values());
     }
 
-    public Version getVersion(String imageType, int versionNumber)
+    public Version getVersion(String imageType, String versionNumber)
     {
         Version version = null;
         if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(imageType))
@@ -160,7 +160,7 @@
         return version;
     }
     
-    public Store getStore(int storeNumber)
+    public Store getStore(String storeNumber)
     {
         return mAppStoresMap.get(storeNumber);
     }
diff --git a/src/com/fairphone/updater/data/Version.java b/src/com/fairphone/updater/data/Version.java
index 29ba80a..8468515 100644
--- a/src/com/fairphone/updater/data/Version.java
+++ b/src/com/fairphone/updater/data/Version.java
@@ -45,7 +45,7 @@
 
     private final List<Integer> mDependencies;
 
-    public static final int ZIP_INSTALL_VERSION = 999;
+    public static final String ZIP_INSTALL_VERSION = "999";
 
     public Version()
     {
@@ -147,7 +147,7 @@
         int retVal;
         if (another != null)
         {
-            if (this.getNumber() < another.getNumber() && this.mImageType.equalsIgnoreCase(another.mImageType))
+            if (!this.getNumber().equals(another.getNumber()) && this.mImageType.equalsIgnoreCase(another.mImageType))
             {
                 retVal = 1;
             }
diff --git a/src/com/fairphone/updater/data/VersionParserHelper.java b/src/com/fairphone/updater/data/VersionParserHelper.java
index c2b7fcf..da466de 100644
--- a/src/com/fairphone/updater/data/VersionParserHelper.java
+++ b/src/com/fairphone/updater/data/VersionParserHelper.java
@@ -49,6 +49,8 @@
     private static final String CURRENT_ANDROID_VERSION = "fairphone.ota.android_version";
     private static final String CURRENT_VERSION_IMAGE_TYPE = "fairphone.ota.image_type";
     private static final String CURRENT_VERSION_BUILD_DATE = "ro.build.date.utc";
+    private static final String CURRENT_VERSION_FINGERPRINT = "ro.build.fingerprint";
+
 
     private static Version version;
     public static Version getDeviceVersion(Context context)
@@ -64,10 +66,10 @@
 
             try
             {
-                versionBuilder.setNumber(Integer.valueOf(getSystemData(context, CURRENT_VERSION_NUMBER, knownFPDevice)));
+                versionBuilder.setNumber(getSystemData(context, CURRENT_VERSION_FINGERPRINT, knownFPDevice));
             } catch (NumberFormatException e)
             {
-                int defaultVersionNumber = context.getResources().getInteger(R.integer.defaultVersionNumber);
+                String defaultVersionNumber = context.getResources().getString(R.string.defaultVersionNumber);
                 Log.w(TAG, "Error parsing current version number. Defaulting to " + defaultVersionNumber + ": " + e.getLocalizedMessage());
                 versionBuilder.setNumber(defaultVersionNumber);
             }
@@ -92,7 +94,7 @@
 		String result;
 	    switch (property) {
 		    case CURRENT_VERSION_NUMBER:
-			    result = Utils.getprop(CURRENT_VERSION_NUMBER, useDefaults ? String.valueOf(context.getResources().getInteger(R.integer.defaultVersionNumber)) : "");
+			    result = Utils.getprop(CURRENT_VERSION_NUMBER, useDefaults ? String.valueOf(context.getResources().getString(R.string.defaultVersionNumber)) : "");
 			    break;
 		    case CURRENT_VERSION_NAME:
 			    result = Utils.getprop(CURRENT_VERSION_NAME, useDefaults ? context.getResources().getString(R.string.defaultVersionName) : "");
@@ -112,6 +114,9 @@
 		    case CURRENT_BETA_STATUS:
 			    result = Utils.getprop(CURRENT_BETA_STATUS, useDefaults ? context.getResources().getString(R.string.defaultBetaStatus) : "0");
 			    break;
+            case CURRENT_VERSION_FINGERPRINT:
+                result = Utils.getprop(CURRENT_VERSION_FINGERPRINT, useDefaults ? "" : ""); // TODO: define default value for fingerprint
+                break;
 		    default:
 			    result = "";
 			    break;
diff --git a/src/com/fairphone/updater/tools/Utils.java b/src/com/fairphone/updater/tools/Utils.java
index 1fc64cc..bb4e038 100644
--- a/src/com/fairphone/updater/tools/Utils.java
+++ b/src/com/fairphone/updater/tools/Utils.java
@@ -80,7 +80,7 @@
     private static final double PERCENT_100 = 100d;
     private static final char CHAR_SPACE = ' ';
     private static final char CHAR_ZERO = '0';
-    public static final int GAPPS_STORE_NUMBER = 0;
+    public static final String GAPPS_STORE_NUMBER = "0";
 
     private static double getPartitionSizeInGBytes(File path)
     {
@@ -371,7 +371,6 @@
         if (item != null)
         {
             filename.append(type);
-            filename.append(item.getNumber());
         }
         filename.append(".zip");
         return filename;
