- Major refactoring. Still buggy.
diff --git a/FairphoneUpdater/src/com/fairphone/updater/fragments/MainFragment.java b/FairphoneUpdater/src/com/fairphone/updater/fragments/MainFragment.java
index 0da0260..183692e 100644
--- a/FairphoneUpdater/src/com/fairphone/updater/fragments/MainFragment.java
+++ b/FairphoneUpdater/src/com/fairphone/updater/fragments/MainFragment.java
@@ -1,5 +1,9 @@
 package com.fairphone.updater.fragments;
 
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -10,7 +14,9 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.fairphone.updater.FairphoneUpdater2Activity;
 import com.fairphone.updater.FairphoneUpdater2Activity.HeaderType;
+import com.fairphone.updater.FairphoneUpdater2Activity.UpdaterState;
 import com.fairphone.updater.R;
 import com.fairphone.updater.Version;
 
@@ -18,13 +24,12 @@
 
 	private TextView mCurrentVersionNameText;
 	private LinearLayout mVersionUpToDateGroup;
-	// private Button mVersionUpToDateOlderOSVersionButton;
 	private LinearLayout mUpdateAvailableGroup;
-	// private Button mUpdateAvailableOlderOSVersionButton;
 	private TextView mUpdateAvailableNameText;
 	private Button mUpdateAvailableInstallButton;
 	private Button mOtherOSOptionsButton;
 	private Version mDeviceVersion;
+	private BroadcastReceiver newVersionbroadcastReceiver;
 
 	@Override
 	public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -34,7 +39,7 @@
 
 		setupLayout(view);
 
-		mDeviceVersion =  mainActivity.getDeviceVersion();
+		mDeviceVersion = mainActivity.getDeviceVersion();
 		updateHeader();
 		updateCurrentVersionGroup();
 		toogleUpdateAvailableGroup();
@@ -44,9 +49,11 @@
 	}
 
 	private void updateHeader() {
-		if(Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(mDeviceVersion.getImageType())){
+		if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(mDeviceVersion
+				.getImageType())) {
 			mainActivity.updateHeader(HeaderType.MAIN_FAIRPHONE, "");
-		}else if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(mDeviceVersion.getImageType())){
+		} else if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(mDeviceVersion
+				.getImageType())) {
 			mainActivity.updateHeader(HeaderType.MAIN_ANDROID, "");
 		}
 	}
@@ -59,8 +66,6 @@
 		// Version up to date group
 		mVersionUpToDateGroup = (LinearLayout) view
 				.findViewById(R.id.version_up_to_date_group);
-		// mVersionUpToDateOlderOSVersionButton = (Button) view
-		// .findViewById(R.id.older_os_version_button);
 
 		// Update available group
 		mUpdateAvailableGroup = (LinearLayout) view
@@ -69,8 +74,6 @@
 				.findViewById(R.id.update_available_name_text);
 		mUpdateAvailableInstallButton = (Button) view
 				.findViewById(R.id.install_update_button);
-		// mUpdateAvailableOlderOSVersionButton = (Button) view
-		// .findViewById(R.id.other_os_version_button);
 
 		// Other OS Options group
 		mOtherOSOptionsButton = (Button) view
@@ -97,25 +100,9 @@
 		} else {
 			mUpdateAvailableGroup.setVisibility(View.GONE);
 			mVersionUpToDateGroup.setVisibility(View.VISIBLE);
-
-			// updateOlderVersionsButton();
-
 		}
 	}
 
-	// private void updateOlderVersionsButton() {
-	// mVersionUpToDateOlderOSVersionButton
-	// .setOnClickListener(new OnClickListener() {
-	//
-	// @Override
-	// public void onClick(View v) {
-	// Toast.makeText(mainActivity,
-	// "Procced to older OS Versions",
-	// Toast.LENGTH_LONG).show();
-	// }
-	// });
-	// }
-
 	private void updateUpdateAvailableGroup() {
 		mUpdateAvailableNameText.setText(mainActivity.getLatestVersionName());
 		mUpdateAvailableInstallButton.setOnClickListener(new OnClickListener() {
@@ -126,29 +113,12 @@
 
 				Version latestVersion = mainActivity.getLatestVersion();
 				if (latestVersion != null) {
-
-					fragment.setHeaderType(mainActivity
-							.getHeaderTypeFromImageType(latestVersion
-									.getImageType()), "Install update PASS",
-							"Update version PASS");
-					fragment.setVersion(latestVersion);
-
+					fragment.setupFragment(latestVersion,
+							VersionDetailFragment.DetailLayoutType.UPDATE);
+					mainActivity.changeFragment(fragment);
 				}
-
-				mainActivity.changeFragment(fragment);
 			}
 		});
-
-		// mUpdateAvailableOlderOSVersionButton
-		// .setOnClickListener(new OnClickListener() {
-		//
-		// @Override
-		// public void onClick(View v) {
-		// Toast.makeText(mainActivity,
-		// "Procced to older OS Versions",
-		// Toast.LENGTH_LONG).show();
-		// }
-		// });
 	}
 
 	private void updateCurrentVersionGroup() {
@@ -160,4 +130,58 @@
 			}
 		});
 	}
+
+	@Override
+	public void onResume() {
+		super.onResume();
+		setupBroadcastReceiver();
+
+		registerBroadCastReceiver();
+	}
+
+	@Override
+	public void onPause() {
+		super.onPause();
+
+		unregisterBroadCastReceiver();
+	}
+
+	protected void setupBroadcastReceiver() {
+		newVersionbroadcastReceiver = new BroadcastReceiver() {
+
+			@Override
+			public void onReceive(Context context, Intent intent) {
+				String action = intent.getAction();
+
+				if (FairphoneUpdater2Activity.FAIRPHONE_UPDATER_NEW_VERSION_RECEIVED
+						.equals(action)) {
+					mainActivity.updateLatestVersionFromConfig();
+					if (mainActivity.getCurrentUpdaterState() == UpdaterState.NORMAL) {
+						toogleUpdateAvailableGroup();
+					}
+				} else if (FairphoneUpdater2Activity.FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_FAILED
+						.equals(action)) {
+					String link = intent
+							.getStringExtra(FairphoneUpdater2Activity.FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_LINK);
+					Toast.makeText(
+							context.getApplicationContext(),
+							context.getResources().getString(
+									R.string.configFileDownloadLinkError)
+									+ " " + link, Toast.LENGTH_LONG).show();
+				}
+			}
+		};
+	}
+
+	private void registerBroadCastReceiver() {
+		IntentFilter iFilter = new IntentFilter();
+		iFilter.addAction(FairphoneUpdater2Activity.FAIRPHONE_UPDATER_NEW_VERSION_RECEIVED);
+		iFilter.addAction(FairphoneUpdater2Activity.FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_FAILED);
+		mainActivity.registerReceiver(newVersionbroadcastReceiver, iFilter);
+	}
+
+	private void unregisterBroadCastReceiver() {
+		mainActivity.unregisterReceiver(newVersionbroadcastReceiver);
+	}
+
 }