diff --git a/assets/www/index.html b/assets/www/index.html
index e34fa13..ad25ddc 100644
--- a/assets/www/index.html
+++ b/assets/www/index.html
@@ -95,10 +95,9 @@
 			var windowWidth;
 			var windowHeight;
 			
-			var tagObjects;
-			var tagObjectsSaved;
-			var tagObjects;
-			var tagObjectsSaved;
+			var tagObjects;	//Newly added tags which not yet saved
+			var tagObjectsSaved; //Tags loaded from database
+
 			// Wait for device
 			document.addEventListener("deviceready", onDeviceReady, false);
 
@@ -121,8 +120,11 @@
 				});
 				adjustScreenLayout();
 				
-				//To handle menu button clicks
-				document.addEventListener("menubutton", onMenuClick, false);		
+				//To handle menu button presses
+				document.addEventListener("menubutton", onMenuClick, false);	
+				
+				//To handle back button presses
+				document.addEventListener("backbutton", onBackKeyDown, false);	
 			}
 
 			//Document ready function
@@ -493,6 +495,10 @@
 				</div>
 
 			</div>
+			<!-- Page Footer Start -->
+			<div data-role="footer" data-position="fixed">				
+			</div>
+			<!-- Page Footer End -->
 		</div>
 		<!-- Page End -->
 		
@@ -543,6 +549,10 @@
 					<div id="map_canvas" align="center"></div>
 				</div>		
 			</div>
+			<!-- Page Footer Start -->
+			<div data-role="footer" data-position="fixed">				
+			</div>
+			<!-- Page Footer End -->
 		</div>
 		<!-- Page End -->
 		
@@ -553,10 +563,10 @@
 			</div>
 			<div data-role="content">				
 				<div id="options">
-					<a href="#"
+					<!-- <a href="#"
 					data-role="button" data-mini="false" data-icon="grid" onclick='viewAllImages()'>View all photos</a>
 					<a href="#mapView"
-					data-role="button" data-mini="false" data-icon="grid" onclick=''>View all in map</a>
+					data-role="button" data-mini="false" data-icon="grid" onclick=''>View all in map</a> -->
 					<a href="#help"
 					data-role="button" data-mini="false" data-icon="info" onclick=''>Help</a>
 					<a href="#about"
@@ -578,15 +588,19 @@
 					<img id="tagImage"/>
 				</div>
 				<a href="#" id="enableTaggingButton"
-				data-role="button" data-mini="false" data-icon="grid" onclick='enableTagging()'>Enable Tagging</a>
+				data-role="button" data-mini="false" data-icon="grid" onclick='enableTagging()'>Add Tags</a>
 				<a href="#" id="saveTagsButton"
 				data-role="button" data-mini="false" data-icon="grid" style="display: none" onclick='saveTags()'>Save tags</a>
 				<a href="#" id="clearTagsButton"
-				data-role="button" data-mini="false" data-icon="delete" style="display: none" onclick='clearTags()'>Clear tags</a>
+				data-role="button" data-mini="false" data-icon="delete" onclick='clearTags()'>Clear tags</a>
 				<a href="#" id="cancelTaggingButton"
 				data-role="button" data-mini="false" data-icon="grid" style="display: none" onclick='enableTagging()'>Cancel</a>
 				
 			</div>
+			<!-- Page Footer Start -->
+			<div data-role="footer" data-position="fixed">				
+			</div>
+			<!-- Page Footer End -->
 		</div>
 		<!-- Page End -->
 		
@@ -607,6 +621,10 @@
 					<li>For Flickr and Picasa, one needs to copy paste the code that is displayed</li>
 				</ul>
 			</div>
+			<!-- Page Footer Start -->
+			<div data-role="footer" data-position="fixed">				
+			</div>
+			<!-- Page Footer End -->
 		</div>
 		<!-- Page End -->
 		
diff --git a/assets/www/scripts/dataAccess.js b/assets/www/scripts/dataAccess.js
index 5d1d4a4..555b6b6 100644
--- a/assets/www/scripts/dataAccess.js
+++ b/assets/www/scripts/dataAccess.js
@@ -194,6 +194,15 @@
 	tx.executeSql('DELETE FROM PEOPLE WHERE URI="'+uri+'"');
 }
 
+function removeFromDB(){
+	db.transaction(deleteRecords, errorCB, successCB);
+}
+
+function deleteRecords(tx) {
+	tx.executeSql('DELETE FROM PEOPLE WHERE URI="'+uri+'"');
+	tx.executeSql('DELETE FROM MAIN WHERE URI="'+uri+'"');
+}
+
 
 
 
diff --git a/assets/www/scripts/tagging.js b/assets/www/scripts/tagging.js
index cbe73f7..c4a3f4a 100644
--- a/assets/www/scripts/tagging.js
+++ b/assets/www/scripts/tagging.js
@@ -51,13 +51,18 @@
 
 function saveTags() {
 	for (i = 0; i < tagObjects.length; i++) {
+		if(tagObjects.length==0){
+			alert("No new tags has been added.");
+		}
 		addTag(tagObjects[i].name, tagObjects[i].x, tagObjects[i].y);
+		tagObjectsSaved.push(tagObjects[i]);
 	}
+	tagObjects=new Array();	//buffer has to be cleared 
 	alert("Tags Saved Successfully.");
+	enableTagging();
 }
 
 function markTags(tagObjectsSaved) {
-
 	for (i = 0; i < tagObjectsSaved.length; i++) {
 		showTag(tagObjectsSaved[i].name, parseInt(tagObjectsSaved[i].x),
 				parseInt(tagObjectsSaved[i].y));
@@ -73,9 +78,27 @@
 }
 
 function clearTags() {
-	deleteTags();
-	$('#tagPicture').html('<img id="tagImage"/>');
-	displayTagImage(getURI());
+	$('<div>').simpledialog2({
+	    mode: 'button',
+	    headerText: 'Delete Tags',
+	    headerClose: true,
+	    buttonPrompt: 'Are you sure you want to delete all the tags in this photo?',
+	    buttons : {
+	      'OK': {
+	        click: function () { 
+	        	deleteTags();
+	        	$('#tagPicture').html('<img id="tagImage"/>');
+	        	displayTagImage(getURI());
+	        }
+	      },
+	      'Cancel': {
+	        click: function () { 
+	        	//Do nothing
+	        },
+	        icon: "delete",
+	      }
+	    }
+	})
 }
 
 function displayTagImage(uri) {
@@ -98,17 +121,14 @@
 	if(!tagEnabled){
 		tagEnabled=true;
 		$('#saveTagsButton').show();
-		$('#clearTagsButton').show();
-		$('#cancelTaggingButton').show();
-		
+		$('#clearTagsButton').hide();
+		$('#cancelTaggingButton').show();	
 		$('#enableTaggingButton').hide();
 	}else{
 		tagEnabled=false;
 		$('#saveTagsButton').hide();
-		$('#clearTagsButton').hide();
-		$('#cancelTaggingButton').hide();
-		
-		$('#enableTaggingButton').show();
-		
+		$('#clearTagsButton').show();
+		$('#cancelTaggingButton').hide();		
+		$('#enableTaggingButton').show();		
 	}
 }
diff --git a/assets/www/scripts/utils.js b/assets/www/scripts/utils.js
index ec0031c..10c5a5f 100644
--- a/assets/www/scripts/utils.js
+++ b/assets/www/scripts/utils.js
@@ -29,6 +29,7 @@
 function deleteEntry(entry) {
 	entry.remove(function(entry) {
 		alert('Removal succeeded');
+		removeFromDB();
 		onHomeButtonClicked();
 	}, function(error) {
 		alert('Error removing file: ' + error.code);
