diff --git a/apps/contacts/ajax/addcard.php b/apps/contacts/ajax/addcard.php
index 9d782246a0acec2fbcb657e94493be959a136827..54e4faa6ed98914ecf77040f5c4fcbebbea856cc 100644
--- a/apps/contacts/ajax/addcard.php
+++ b/apps/contacts/ajax/addcard.php
@@ -54,11 +54,24 @@ foreach( $add as $propname){
 	$value = $values[$propname];
 	if( isset( $parameters[$propname] ) && count( $parameters[$propname] )){
 		$prop_parameters = $parameters[$propname];
-	}
 	else{
 		$prop_parameters = array();
 	}
-	$vcard->addProperty($propname, $value, $prop_parameters);
+	$vcard->addProperty($propname, $value); //, $prop_parameters);
+	$line = count($vcard->children) - 1;
+	foreach ($prop_parameters as $key=>$element) {
+		if(is_array($element) && strtoupper($key) == 'TYPE') { 
+			// FIXME: Maybe this doesn't only apply for TYPE?
+			// And it probably shouldn't be done here anyways :-/
+			foreach($element as $e){
+				if($e != '' && !is_null($e)){
+					$vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$e);
+				}
+			}
+		} else {
+			$vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$element);
+		}
+	}
 }
 $id = OC_Contacts_VCard::add($aid,$vcard->serialize());
 
diff --git a/apps/contacts/ajax/addproperty.php b/apps/contacts/ajax/addproperty.php
index 0122cf019c7fb151d648bd37fb077283b22cc40d..0f76add3c9bc0f11b56f5578e7fbf8bb54adce5c 100644
--- a/apps/contacts/ajax/addproperty.php
+++ b/apps/contacts/ajax/addproperty.php
@@ -48,6 +48,8 @@ foreach ($parameters as $key=>$element) {
 				$vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$e);
 			}
 		}
+	} else {
+			$vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$element);
 	}
 }
 
diff --git a/apps/contacts/css/styles.css b/apps/contacts/css/styles.css
index c890be8582403c2f8ae242d51e81d3b75d174520..7b56767bab024fdc84ef97570f4c8ec70a1ae3b3 100644
--- a/apps/contacts/css/styles.css
+++ b/apps/contacts/css/styles.css
@@ -4,7 +4,7 @@
 #contacts_details_name { font-weight:bold;font-size:1.1em;margin-left:25%;}
 #contacts_details_photo { margin:.5em 0em .5em 25%; }
 
-#contacts_deletecard {position:absolute;top:15px;right:0;}
+#contacts_deletecard {position:absolute;top:15px;right:15px;}
 #contacts_details_list { list-style:none; }
 #contacts_details_list li { overflow:visible; }
 #contacts_details_list li p.contacts_property_name { width:25%; float:left;text-align:right;padding-right:0.3em;color:#666; }
diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js
index b9f75bdf71ad32287a731eeb177e57a94bf7078b..4a27073c156bb52bfd6cd0839b54f0c153b891b5 100644
--- a/apps/contacts/js/interface.js
+++ b/apps/contacts/js/interface.js
@@ -18,9 +18,6 @@
  * You should have received a copy of the GNU Affero General Public
  * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  *
- * TODO:  
- * If you add a contact, its thumbnail doesnt show in the list. But when you add another one it shows up, but not for the second contact added.
- *  Place a new contact in correct alphabetic order
  */
 
 
@@ -31,6 +28,20 @@ Contacts={
 			$('#carddav_url').show();
 			$('#carddav_url_close').show();
 		},
+		messageBox:function(title, msg) {
+			var $dialog = $('<div></div>')
+				.html(msg)
+				.dialog({
+					autoOpen: true,
+					title: title,buttons: [
+						{
+							text: "Ok",
+							click: function() { $(this).dialog("close"); }
+						}
+					]
+				}
+			);			
+		},
 		Addressbooks:{
 			overview:function(){
 				if($('#chooseaddressbook_dialog').dialog('isOpen') == true){
@@ -85,7 +96,8 @@ Contacts={
 							Contacts.UI.Contacts.update();
 							Contacts.UI.Addressbooks.overview();
 						} else {
-							alert('Error: ' + data.message);
+							Contacts.UI.messageBox('Error', data.message);
+							//alert('Error: ' + data.message);
 						}
 					  });
 				}
@@ -114,37 +126,29 @@ Contacts={
 			}
 		},
 		Contacts:{
+			/**
+			 * Reload the contacts list.
+			 */
 			update:function(){
 				$.getJSON('ajax/contacts.php',{},function(jsondata){
 					if(jsondata.status == 'success'){
 						$('#contacts').html(jsondata.data.page);
 					}
 					else{
-						alert(jsondata.data.message);
+						Contacts.UI.messageBox('Error',jsondata.data.message);
+						//alert(jsondata.data.message);
 					}
 				});
-				/*
-				var contactlist = $('#contacts');
-				var contacts = contactlist.children('li').get();
-				//alert(contacts);
-				contacts.sort(function(a, b) {
-					var compA = $(a).text().toUpperCase();
-					var compB = $(b).text().toUpperCase();
-					return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
-				})
-				$.each(contacts, function(idx, itm) { contactlist.append(itm); });
-				*/
-				setTimeout(Contacts.UI.Contacts.lazyupdate(), 500);
+				setTimeout(Contacts.UI.Contacts.lazyupdate, 500);
 			},
+			/**
+			 * Add thumbnails to the contact list as they become visible in the viewport.
+			 */
 			lazyupdate:function(){
-				//alert('lazyupdate');
 				$('#contacts li').live('inview', function(){
 					if (!$(this).find('a').attr('style')) {
-						//alert($(this).data('id') + ' has background: ' + $(this).attr('style'));
 						$(this).find('a').css('background','url(thumbnail.php?id='+$(this).data('id')+') no-repeat');
-					}/* else {
-						alert($(this).data('id') + ' has style ' + $(this).attr('style').match('url'));
-					}*/
+					}
 				});
 			}
 		}
@@ -168,7 +172,8 @@ $(document).ready(function(){
 				$('#leftcontent li[data-id="'+jsondata.data.id+'"]').addClass('active');
 			}
 			else{
-				alert(jsondata.data.message);
+				Contacts.UI.messageBox('Error', jsondata.data.message);
+				//alert(jsondata.data.message);
 			}
 		});
 		return false;
@@ -183,7 +188,8 @@ $(document).ready(function(){
 				$('#rightcontent').empty();
 			}
 			else{
-				alert(jsondata.data.message);
+				Contacts.UI.messageBox('Error', jsondata.data.message);
+				//alert(jsondata.data.message);
 			}
 		});
 		return false;
@@ -197,7 +203,8 @@ $(document).ready(function(){
 				$('#contacts_addproperty').hide();
 			}
 			else{
-				alert(jsondata.data.message);
+				Contacts.UI.messageBox('Error', jsondata.data.message);
+				//alert(jsondata.data.message);
 			}
 		});
 		return false;
@@ -226,7 +233,8 @@ $(document).ready(function(){
 				$('#contacts_addpropertyform').before(jsondata.data.page);
 			}
 			else{
-				alert(jsondata.data.message);
+				Contacts.UI.messageBox('Error', jsondata.data.message);
+				//alert(jsondata.data.message);
 			}
 		}, 'json');
 		return false;
@@ -236,7 +244,10 @@ $(document).ready(function(){
 		Contacts.UI.Addressbooks.overview();
 		return false;
 	});
-	
+
+	/**
+	 * Open blank form to add new contact.
+	 */
 	$('#contacts_newcontact').click(function(){
 		$.getJSON('ajax/showaddcard.php',{},function(jsondata){
 			if(jsondata.status == 'success'){
@@ -245,27 +256,42 @@ $(document).ready(function(){
 					.find('select').chosen();
 			}
 			else{
-				alert(jsondata.data.message);
+				Contacts.UI.messageBox('Error', jsondata.data.message);
+				//alert(jsondata.data.message);
 			}
 		});
 		return false;
 	});
-
+	
+	/**
+	 * Add and insert a new contact into the list.
+	 */
 	$('#contacts_addcardform input[type="submit"]').live('click',function(){
 		$.post('ajax/addcard.php',$('#contacts_addcardform').serialize(),function(jsondata){
 			if(jsondata.status == 'success'){
 				$('#rightcontent').data('id',jsondata.data.id);
 				$('#rightcontent').html(jsondata.data.page);
 				$('#leftcontent .active').removeClass('active');
-				$('#leftcontent ul').append('<li data-id="'+jsondata.data.id+'" class="active"><a href="index.php?id='+jsondata.data.id+'">'+jsondata.data.name+'</a></li>');
+				var item = '<li data-id="'+jsondata.data.id+'" class="active"><a href="index.php?id='+jsondata.data.id+'"  style="background: url(thumbnail.php?id='+jsondata.data.id+') no-repeat scroll 0% 0% transparent;">'+jsondata.data.name+'</a></li>';
+				var added = false;
+				$('#leftcontent ul li').each(function(){
+					if ($(this).text().toLowerCase() > jsondata.data.name.toLowerCase()) {
+						$(this).before(item).fadeIn('fast');
+						added = true;
+						return false;
+					}
+				});
+				if(!added) {
+					$('#leftcontent ul').append(item);
+				}
 			}
 			else{
-				alert(jsondata.data.message);
+				Contacts.UI.messageBox('Error', jsondata.data.message);
+				//alert(jsondata.data.message);
 			}
 		}, 'json');
 		return false;
 	});
-
 	$('.contacts_property [data-use="edit"]').live('click',function(){
 		var id = $('#rightcontent').data('id');
 		var checksum = $(this).parents('.contacts_property').first().data('checksum');
@@ -275,7 +301,8 @@ $(document).ready(function(){
 					.find('select').chosen();
 			}
 			else{
-				alert(jsondata.data.message);
+				Contacts.UI.messageBox('Error', jsondata.data.message);
+				//alert(jsondata.data.message);
 			}
 		});
 		return false;
@@ -287,7 +314,8 @@ $(document).ready(function(){
 				$('.contacts_property[data-checksum="'+jsondata.data.oldchecksum+'"]').replaceWith(jsondata.data.page);
 			}
 			else{
-				alert(jsondata.data.message);
+				Contacts.UI.messageBox('Error', jsondata.data.message);
+				//alert(jsondata.data.message);
 			}
 		},'json');
 		return false;
@@ -301,7 +329,8 @@ $(document).ready(function(){
 				$('.contacts_property[data-checksum="'+checksum+'"]').remove();
 			}
 			else{
-				alert(jsondata.data.message);
+				Contacts.UI.messageBox('Error', jsondata.data.message);
+				//alert(jsondata.data.message);
 			}
 		});
 		return false;
@@ -338,4 +367,8 @@ $(document).ready(function(){
 			// element has gone out of viewport
 		}
 	});
+	
+	$('.action').tipsy();
+	$('.button').tipsy();
+	//Contacts.UI.messageBox('Hello','Sailor');
 });
diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php
index beb291b481e0d3661adb4ebb85434f6380f1d761..6a248ff59e4eac7e9cf30b9f4e1185b294efb354 100644
--- a/apps/contacts/lib/vcard.php
+++ b/apps/contacts/lib/vcard.php
@@ -130,10 +130,11 @@ class OC_Contacts_VCard{
 
 		$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_cards (addressbookid,fullname,carddata,uri,lastmodified) VALUES(?,?,?,?,?)' );
 		$result = $stmt->execute(array($id,$fn,$data,$uri,time()));
+		$newid = OC_DB::insertid('*PREFIX*contacts_cards');
 
 		OC_Contacts_Addressbook::touch($id);
 
-		return OC_DB::insertid('*PREFIX*contacts_cards');
+		return $newid;
 	}
 
 	/**
diff --git a/apps/contacts/templates/index.php b/apps/contacts/templates/index.php
index 90143f25fa6c158d92269d7e86deadadf2b1e2db..24484231af44d8b681e675afb535827fdf644c0e 100644
--- a/apps/contacts/templates/index.php
+++ b/apps/contacts/templates/index.php
@@ -31,7 +31,4 @@ OC_Util::addStyle('contacts','formtastic');
 </div>
 <!-- Dialogs -->
 <div id="dialog_holder"></div>
-<div id="parsingfail_dialog" title="Parsing Fail">
-	<?php echo $l->t("There was a fail, while parsing the file."); ?>
-</div>
 <!-- End of Dialogs -->
diff --git a/apps/contacts/templates/part.details.php b/apps/contacts/templates/part.details.php
index afad0b7f64cc36f7c4b55e79fe8cef6439b7d3dd..1482c0636857b98ade1b6630bf61ba8c4b11759a 100644
--- a/apps/contacts/templates/part.details.php
+++ b/apps/contacts/templates/part.details.php
@@ -86,3 +86,8 @@
 		</li>
 	</ul>
 <?php endif; ?>
+<script language="Javascript">
+/* Re-tipsify ;-)*/
+	$('.action').tipsy();
+	$('.button').tipsy();
+</script>
diff --git a/apps/contacts/thumbnail.php b/apps/contacts/thumbnail.php
index 622718d65c636fd9cff59eb2d7c829b788ac1688..e49098ce8209b82953e9bf333e2b146c0571cd52 100644
--- a/apps/contacts/thumbnail.php
+++ b/apps/contacts/thumbnail.php
@@ -46,8 +46,8 @@ $l10n = new OC_L10N('contacts');
 
 $card = OC_Contacts_VCard::find( $id );
 if( $card === false ){
-	OC_Log::write('contacts','thumbnail.php. Contact could not be found.',OC_Log::ERROR);
-	//echo $l10n->t('Contact could not be found.');
+	OC_Log::write('contacts','thumbnail.php. Contact could not be found: '.$id,OC_Log::ERROR);
+	getStandardImage();
 	exit();
 }
 
@@ -55,7 +55,6 @@ if( $card === false ){
 $addressbook = OC_Contacts_Addressbook::find( $card['addressbookid'] );
 if( $addressbook === false || $addressbook['userid'] != OC_USER::getUser()){
 	OC_Log::write('contacts','thumbnail.php. Wrong contact/addressbook - WTF?',OC_Log::ERROR);
-	//echo $l10n->t('This is not your contact.'); // This is a weird error, why would it come up? (Better feedback for users?)
 	exit();
 }