diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
index 2d507bd560b88282ce14e518eb0b7b548fcc9fe4..59aca12de2335757d37bd75ec17d48c238fe9db5 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -310,6 +310,7 @@ LLInventoryItem::LLInventoryItem(
 {
 	LLStringUtil::replaceNonstandardASCII(mDescription, ' ');
 	LLStringUtil::replaceChar(mDescription, '|', ' ');
+	mPermissions.initMasks(inv_type);
 }
 
 LLInventoryItem::LLInventoryItem() :
@@ -432,6 +433,9 @@ void LLInventoryItem::setDescription(const std::string& d)
 void LLInventoryItem::setPermissions(const LLPermissions& perm)
 {
 	mPermissions = perm;
+
+	// Override permissions to unrestricted if this is a landmark
+	mPermissions.initMasks(mInventoryType);
 }
 
 void LLInventoryItem::setInventoryType(LLInventoryType::EType inv_type)
@@ -503,6 +507,7 @@ BOOL LLInventoryItem::unpackMessage(LLMessageSystem* msg, const char* block, S32
 	mType = static_cast<LLAssetType::EType>(type);
 	msg->getS8(block, "InvType", type, block_num);
 	mInventoryType = static_cast<LLInventoryType::EType>(type);
+	mPermissions.initMasks(mInventoryType);
 
 	msg->getU32Fast(block, _PREHASH_Flags, mFlags, block_num);
 
@@ -693,6 +698,9 @@ BOOL LLInventoryItem::importFile(LLFILE* fp)
 		lldebugs << "Resetting inventory type for " << mUUID << llendl;
 		mInventoryType = LLInventoryType::defaultForAssetType(mType);
 	}
+
+	mPermissions.initMasks(mInventoryType);
+
 	return success;
 }
 
@@ -896,6 +904,9 @@ BOOL LLInventoryItem::importLegacyStream(std::istream& input_stream)
 		lldebugs << "Resetting inventory type for " << mUUID << llendl;
 		mInventoryType = LLInventoryType::defaultForAssetType(mType);
 	}
+
+	mPermissions.initMasks(mInventoryType);
+
 	return success;
 }
 
@@ -1118,6 +1129,8 @@ bool LLInventoryItem::fromLLSD(const LLSD& sd)
 		mInventoryType = LLInventoryType::defaultForAssetType(mType);
 	}
 
+	mPermissions.initMasks(mInventoryType);
+
 	return true;
 fail:
 	return false;
diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h
index 7b7896f74fe278c3ac9d3dff49b44580c0e13425..71baac8d89a619f96ed369b9e18c95681d6d4703 100644
--- a/indra/llinventory/llparcel.h
+++ b/indra/llinventory/llparcel.h
@@ -447,8 +447,10 @@ class LLParcel
 	BOOL	getAllowFly() const
 					{ return (mParcelFlags & PF_ALLOW_FLY) ? TRUE : FALSE; }
 
+	// Remove permission restrictions for creating landmarks.
+	// We should eventually remove this flag completely.
 	BOOL	getAllowLandmark() const
-					{ return (mParcelFlags & PF_ALLOW_LANDMARK) ? TRUE : FALSE; }
+					{ return TRUE; }
 
 	BOOL	getAllowGroupScripts() const
 					{ return (mParcelFlags & PF_ALLOW_GROUP_SCRIPTS) ? TRUE : FALSE; }
diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp
index 559a5631dcf73849b939c97bc0d8377230c4b320..0babf26457e91ee463ae662697d5c4aea7b3380f 100644
--- a/indra/llinventory/llpermissions.cpp
+++ b/indra/llinventory/llpermissions.cpp
@@ -83,6 +83,17 @@ void LLPermissions::initMasks(PermissionMask base, PermissionMask owner,
 	fix();
 }
 
+// ! BACKWARDS COMPATIBILITY ! Override masks for inventory types that
+// no longer can have restricted permissions.  This takes care of previous
+// version landmarks that could have had no copy/mod/transfer bits set.
+void LLPermissions::initMasks(LLInventoryType::EType type)
+{
+	if (LLInventoryType::cannotRestrictPermissions(type))
+	{
+		initMasks(PERM_ALL, PERM_ALL, PERM_ALL, PERM_ALL, PERM_ALL);
+	}
+}
+
 BOOL LLPermissions::getOwnership(LLUUID& owner_id, BOOL& is_group_owned) const
 {
 	if(mOwner.notNull())
diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h
index 2035b57f5c8d4356bb888c801af58713521ea771..d4ec3994361174f49813c38f535cc63a49571d51 100644
--- a/indra/llinventory/llpermissions.h
+++ b/indra/llinventory/llpermissions.h
@@ -38,6 +38,7 @@
 #include "lluuid.h"
 #include "llxmlnode.h"
 #include "reflective.h"
+#include "llinventorytype.h"
 
 // prototypes
 class LLMessageSystem;
@@ -129,6 +130,8 @@ class LLPermissions : public LLReflective
 	void initMasks(PermissionMask base, PermissionMask owner,
 				   PermissionMask everyone, PermissionMask group,
 				   PermissionMask next);
+	// adjust permissions based on inventory type.
+	void initMasks(LLInventoryType::EType type);
 
 	//
 	// ACCESSORS
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 1bc0adf68462c68516003cf2811adf036c02ee3a..421ba321688829f070d9bf12c3d2720b1d853050 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -255,7 +255,6 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p)
 	mTakesNonScrollClicks( p.takes_non_scroll_clicks ),
 	mTrackBottom( p.track_bottom ),
 	mAllowEmbeddedItems( p.allow_embedded_items ),
-	mAcceptCallingCardNames(FALSE),
 	mHandleEditKeysDirectly( FALSE ),
 	mMouseDownX(0),
 	mMouseDownY(0),
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index d0769c2a8f2ceb25ceeb7343ba69746312ccd07e..5e423f854894faf68730ef527847e327e500c0ef 100644
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -268,8 +268,6 @@ class LLTextEditor : public LLUICtrl, LLEditMenuHandler, protected LLPreeditor
 
 	void			setSourceID(const LLUUID& id) 			{ mSourceID = id; }
 	const LLUUID&	getSourceID() const						{ return mSourceID; }
-	void 			setAcceptCallingCardNames(BOOL enable)	{ mAcceptCallingCardNames = enable; }
-	BOOL			acceptsCallingCardNames() const			{ return mAcceptCallingCardNames; }
 
 	void			setHandleEditKeysDirectly( BOOL b ) 	{ mHandleEditKeysDirectly = b; }
 
@@ -586,8 +584,6 @@ class LLTextEditor : public LLUICtrl, LLEditMenuHandler, protected LLPreeditor
 
 	BOOL			mAllowEmbeddedItems;
 
-	BOOL 			mAcceptCallingCardNames;
-
 	LLUUID			mSourceID;
 
 	// If true, the standard edit keys (Ctrl-X, Delete, etc,) are handled here 
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index adc090aa4af95fdc1b090d9fc88e2029eddd201c..ced072efaabe0ef90726aa085f69f32aa6b4ea98 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -925,17 +925,6 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>BulkChangeIncludeLandmarks</key>
-    <map>
-      <key>Comment</key>
-      <string>Bulk permission changes affect landmarks</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
     <key>BulkChangeIncludeNotecards</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index efaebe311a925006afae0a1e6bf56fa3f9d00e93..29b91cab95f4d11a1167df3f11a1aa872ef9dd48 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -250,7 +250,6 @@ void LLFloaterBulkPermission::doCheckUncheckAll(BOOL check)
 	gSavedSettings.setBOOL("BulkChangeIncludeBodyParts" , check);
 	gSavedSettings.setBOOL("BulkChangeIncludeClothing"  , check);
 	gSavedSettings.setBOOL("BulkChangeIncludeGestures"  , check);
-	gSavedSettings.setBOOL("BulkChangeIncludeLandmarks" , check);
 	gSavedSettings.setBOOL("BulkChangeIncludeNotecards" , check);
 	gSavedSettings.setBOOL("BulkChangeIncludeObjects"   , check);
 	gSavedSettings.setBOOL("BulkChangeIncludeScripts"   , check);
@@ -273,7 +272,6 @@ void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, Invent
 			( asstype == LLAssetType::AT_BODYPART  && gSavedSettings.getBOOL("BulkChangeIncludeBodyParts" )) ||
 			( asstype == LLAssetType::AT_CLOTHING  && gSavedSettings.getBOOL("BulkChangeIncludeClothing"  )) ||
 			( asstype == LLAssetType::AT_GESTURE   && gSavedSettings.getBOOL("BulkChangeIncludeGestures"  )) ||
-			( asstype == LLAssetType::AT_LANDMARK  && gSavedSettings.getBOOL("BulkChangeIncludeLandmarks" )) ||
 			( asstype == LLAssetType::AT_FAVORITE  && gSavedSettings.getBOOL("BulkChangeIncludeFavourite" )) ||
 			( asstype == LLAssetType::AT_NOTECARD  && gSavedSettings.getBOOL("BulkChangeIncludeNotecards" )) ||
 			( asstype == LLAssetType::AT_OBJECT    && gSavedSettings.getBOOL("BulkChangeIncludeObjects"   )) ||
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 4b665a789e144a2d2247915d8d1e2d470069480d..08a042707d0d5d3550d1e5ebca523276aefa16c5 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1720,7 +1720,6 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
 	mCheckFly(NULL),
 	mCheckGroupScripts(NULL),
 	mCheckOtherScripts(NULL),
-	mCheckLandmark(NULL),
 	mCheckShowDirectory(NULL),
 	mCategoryCombo(NULL),
 	mLandingTypeCombo(NULL),
@@ -1754,10 +1753,6 @@ BOOL LLPanelLandOptions::postBuild()
 	childSetCommitCallback("edit land check", onCommitAny, this);
 
 	
-	mCheckLandmark = getChild<LLCheckBoxCtrl>( "check landmark");
-	childSetCommitCallback("check landmark", onCommitAny, this);
-
-	
 	mCheckGroupScripts = getChild<LLCheckBoxCtrl>( "check group scripts");
 	childSetCommitCallback("check group scripts", onCommitAny, this);
 
@@ -1883,9 +1878,6 @@ void LLPanelLandOptions::refresh()
 		mCheckFly			->set(FALSE);
 		mCheckFly			->setEnabled(FALSE);
 
-		mCheckLandmark		->set(FALSE);
-		mCheckLandmark		->setEnabled(FALSE);
-
 		mCheckGroupScripts	->set(FALSE);
 		mCheckGroupScripts	->setEnabled(FALSE);
 
@@ -1936,9 +1928,6 @@ void LLPanelLandOptions::refresh()
 		mCheckFly			->set( parcel->getAllowFly() );
 		mCheckFly			->setEnabled( can_change_options );
 
-		mCheckLandmark		->set( parcel->getAllowLandmark() );
-		mCheckLandmark		->setEnabled( can_change_options );
-
 		mCheckGroupScripts	->set( parcel->getAllowGroupScripts() || parcel->getAllowOtherScripts());
 		mCheckGroupScripts	->setEnabled( can_change_options && !parcel->getAllowOtherScripts());
 
@@ -2153,7 +2142,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
 	BOOL allow_terraform	= self->mCheckEditLand->get();
 	BOOL allow_damage		= !self->mCheckSafe->get();
 	BOOL allow_fly			= self->mCheckFly->get();
-	BOOL allow_landmark		= self->mCheckLandmark->get();
+	BOOL allow_landmark		= TRUE; // cannot restrict landmark creation
 	BOOL allow_group_scripts	= self->mCheckGroupScripts->get() || self->mCheckOtherScripts->get();
 	BOOL allow_other_scripts	= self->mCheckOtherScripts->get();
 	BOOL allow_publish		= FALSE;
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index c04eae2c68bc32a7c056510ced638e1dca30bdd0..8f86766e3dee940d930ed7ea76db2a0b5ad39bb0 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -330,7 +330,6 @@ class LLPanelLandOptions
 	LLCheckBoxCtrl*	mCheckFly;
 	LLCheckBoxCtrl*	mCheckGroupScripts;
 	LLCheckBoxCtrl*	mCheckOtherScripts;
-	LLCheckBoxCtrl*	mCheckLandmark;
 
 	LLCheckBoxCtrl*	mCheckShowDirectory;
 	LLComboBox*		mCategoryCombo;
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index ca7c929d74e8e7a821ebb96f948dfe1245378ac4..8e86aa3ba9db86d0db2b51930c61619dd35acb78 100644
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -303,12 +303,14 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	// do not enable the UI for incomplete items.
 	LLViewerInventoryItem* i = (LLViewerInventoryItem*)item;
 	BOOL is_complete = i->isComplete();
-
+	const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(i->getInventoryType());
+	const BOOL is_calling_card = (i->getInventoryType() == LLInventoryType::IT_CALLINGCARD);
 	const LLPermissions& perm = item->getPermissions();
 	const BOOL can_agent_manipulate = gAgent.allowOperation(PERM_OWNER, perm, 
 															GP_OBJECT_MANIPULATE);
 	const BOOL can_agent_sell = gAgent.allowOperation(PERM_OWNER, perm, 
-													  GP_OBJECT_SET_SALE);
+													  GP_OBJECT_SET_SALE) &&
+		!cannot_restrict_permissions;
 	const BOOL is_link = LLAssetType::lookupIsLinkType(i->getActualType());
 
 	// You need permission to modify the object to modify an inventory
@@ -325,11 +327,11 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	// ITEM NAME & DESC //
 	//////////////////////
 	BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
-												GP_OBJECT_MANIPULATE)
-							&& is_obj_modify && is_complete;
+											   GP_OBJECT_MANIPULATE)
+		&& is_obj_modify && is_complete;
 
 	childSetEnabled("LabelItemNameTitle",TRUE);
-	childSetEnabled("LabelItemName",is_modifiable);
+	childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
 	childSetText("LabelItemName",item->getName());
 	childSetEnabled("LabelItemDescTitle",TRUE);
 	childSetEnabled("LabelItemDesc",is_modifiable);
@@ -492,7 +494,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 	/////////////
 
 	// Check for ability to change values.
-	if (is_link)
+	if (is_link || cannot_restrict_permissions)
 	{
 		childSetEnabled("CheckShareWithGroup",FALSE);
 		childSetEnabled("CheckEveryoneCopy",FALSE);
@@ -558,9 +560,9 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
 		childSetEnabled("CheckPurchase",is_complete);
 
 		childSetEnabled("NextOwnerLabel",TRUE);
-		childSetEnabled("CheckNextOwnerModify",base_mask & PERM_MODIFY);
-		childSetEnabled("CheckNextOwnerCopy",base_mask & PERM_COPY);
-		childSetEnabled("CheckNextOwnerTransfer",next_owner_mask & PERM_COPY);
+		childSetEnabled("CheckNextOwnerModify",(base_mask & PERM_MODIFY) && !cannot_restrict_permissions);
+		childSetEnabled("CheckNextOwnerCopy",(base_mask & PERM_COPY) && !cannot_restrict_permissions);
+		childSetEnabled("CheckNextOwnerTransfer",(next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
 
 		childSetEnabled("RadioSaleType",is_complete && is_for_sale);
 		childSetEnabled("TextPrice",is_complete && is_for_sale);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index edbeed2aa4722d616eaadc22837d20ad974a09f7..a0cd0debf4fa7afe2b387384db1b851c3226451b 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1157,6 +1157,12 @@ BOOL LLItemBridge::isItemRenameable() const
 	LLViewerInventoryItem* item = getItem();
 	if(item)
 	{
+		// (For now) Don't allow calling card rename since that may confuse users as to
+		// what the calling card points to.
+		if (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
+		{
+			return FALSE;
+		}
 		return (item->getPermissions().allowModifyBy(gAgent.getID()));
 	}
 	return FALSE;
@@ -2987,7 +2993,9 @@ void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel*
 		if (item && (item->getCreatorUUID() != gAgent.getID()) &&
 			(!item->getCreatorUUID().isNull()))
 		{
-			gIMMgr->addSession(item->getName(), IM_NOTHING_SPECIAL, item->getCreatorUUID());
+			std::string callingcard_name;
+			gCacheName->getFullName(item->getCreatorUUID(), callingcard_name);
+			gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
 		}
 	}
 	else if ("lure" == action)
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 0e75681afab083325942fc974ac26a0b51f4fc0f..15ae3744472b28ede557b8ee3b6c2fa2857feef0 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -152,6 +152,7 @@ BOOL LLGroupDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 		case DAD_BODYPART:
 		case DAD_ANIMATION:
 		case DAD_GESTURE:
+		case DAD_CALLINGCARD:
 		{
 			LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data;
 			if(gInventory.getItem(inv_item->getUUID())
@@ -175,7 +176,6 @@ BOOL LLGroupDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 			break;
 		}
 		case DAD_CATEGORY:
-		case DAD_CALLINGCARD:
 		default:
 			*accept = ACCEPT_NO;
 			break;
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index d2e07f0725f6191034504452240af80a11bc12c6..dd37d41ff50027e01719fb5fc6397c5d53dc0498 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -387,8 +387,8 @@ LLToolDragAndDrop::dragOrDrop3dImpl LLToolDragAndDrop::sDragAndDrop3d[DAD_COUNT]
 	{
 		&LLToolDragAndDrop::dad3dNULL, // Dest: DT_NONE
 		&LLToolDragAndDrop::dad3dNULL, // Dest: DT_SELF
-		&LLToolDragAndDrop::dad3dNULL, // Dest: DT_AVATAR
-		&LLToolDragAndDrop::dad3dNULL, // Dest: DT_OBJECT
+		&LLToolDragAndDrop::dad3dGiveInventory, // Dest: DT_AVATAR
+		&LLToolDragAndDrop::dad3dUpdateInventory, // Dest: DT_OBJECT
 		&LLToolDragAndDrop::dad3dNULL, // Dest: DT_LAND
 	},
 	//	Source: DAD_LANDMARK
@@ -1848,9 +1848,6 @@ BOOL LLToolDragAndDrop::isInventoryGiveAcceptable(LLInventoryItem* item)
 	BOOL acceptable = TRUE;
 	switch(item->getType())
 	{
-	case LLAssetType::AT_CALLINGCARD:
-		acceptable = FALSE;
-		break;
 	case LLAssetType::AT_OBJECT:
 		if(my_avatar->isWearingAttachment(item->getUUID()))
 		{
@@ -1898,9 +1895,6 @@ BOOL LLToolDragAndDrop::isInventoryGroupGiveAcceptable(LLInventoryItem* item)
 	BOOL acceptable = TRUE;
 	switch(item->getType())
 	{
-	case LLAssetType::AT_CALLINGCARD:
-		acceptable = FALSE;
-		break;
 	case LLAssetType::AT_OBJECT:
 		if(my_avatar->isWearingAttachment(item->getUUID(), TRUE))
 		{
@@ -2003,6 +1997,7 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_
 	case DAD_BODYPART:
 	case DAD_ANIMATION:
 	case DAD_GESTURE:
+	case DAD_CALLINGCARD:
 	{
 		LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data;
 		if(gInventory.getItem(inv_item->getUUID())
@@ -2047,7 +2042,6 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_
 		}
 		break;
 	}
-	case DAD_CALLINGCARD:
 	default:
 		*accept = ACCEPT_NO;
 		break;
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 23f3f46570f71f770ab33db5f6ff4230c471a6d0..902b59c732d8989d6efb3e73cc61baba7ffd2ad0 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -44,6 +44,7 @@
 #include "llviewertexteditor.h"
 
 #include "llfloaterchat.h"
+#include "llfloateravatarinfo.h"
 #include "llfloaterworldmap.h"
 #include "llnotify.h"
 #include "llpreview.h"
@@ -372,47 +373,61 @@ void LLEmbeddedItems::bindEmbeddedChars( const LLFontGL* font ) const
 		const char* img_name;
 		switch( item->getType() )
 		{
-		  case LLAssetType::AT_TEXTURE:
-			if(item->getInventoryType() == LLInventoryType::IT_SNAPSHOT)
-			{
-				img_name = "inv_item_snapshot.tga";
-			}
-			else
-			{
-				img_name = "inv_item_texture.tga";
-			}
+			case LLAssetType::AT_TEXTURE:
+				if(item->getInventoryType() == LLInventoryType::IT_SNAPSHOT)
+				{
+					img_name = "inv_item_snapshot.tga";
+				}
+				else
+				{
+					img_name = "inv_item_texture.tga";
+				}
 
-			break;
-		  case LLAssetType::AT_SOUND:			img_name = "inv_item_sound.tga";	break;
-		  case LLAssetType::AT_LANDMARK:		
-			if (item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED)
-			{
-				img_name = "inv_item_landmark_visited.tga";	
-			}
-			else
-			{
-				img_name = "inv_item_landmark.tga";	
-			}
-			break;
-		  case LLAssetType::AT_CLOTHING:		img_name = "inv_item_clothing.tga";	break;
-		  case LLAssetType::AT_OBJECT:			
-			if (item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS)
-			{
-				img_name = "inv_item_object_multi.tga";	
-			}
-			else
+				break;
+			case LLAssetType::AT_SOUND:			img_name = "inv_item_sound.tga";	break;
+			case LLAssetType::AT_LANDMARK:		
+				if (item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED)
+				{
+					img_name = "inv_item_landmark_visited.tga";	
+				}
+				else
+				{
+					img_name = "inv_item_landmark.tga";	
+				}
+				break;
+			case LLAssetType::AT_CALLINGCARD:
 			{
-				img_name = "inv_item_object.tga";	
+				BOOL online;
+				online = LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID());				
+				if (online)
+				{
+					img_name = "inv_item_callingcard_online.tga"; break;
+				}
+				else
+				{
+					img_name = "inv_item_callingcard_offline.tga"; break;
+				}
+				break;
 			}
-			break;
-		  case LLAssetType::AT_NOTECARD:		img_name = "inv_item_notecard.tga";	break;
-		  case LLAssetType::AT_LSL_TEXT:		img_name = "inv_item_script.tga";	break;
-		  case LLAssetType::AT_BODYPART:		img_name = "inv_item_skin.tga";	break;
-		  case LLAssetType::AT_ANIMATION:		img_name = "inv_item_animation.tga";break;
-		  case LLAssetType::AT_GESTURE:			img_name = "inv_item_gesture.tga";	break;
-		  //TODO need img_name
-		  case LLAssetType::AT_FAVORITE:		img_name = "inv_item_landmark.tga";	 break;
-		  default: llassert(0); continue;
+			case LLAssetType::AT_CLOTHING:		img_name = "inv_item_clothing.tga";	break;
+			case LLAssetType::AT_OBJECT:			
+				if (item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS)
+				{
+					img_name = "inv_item_object_multi.tga";	
+				}
+				else
+				{
+					img_name = "inv_item_object.tga";	
+				}
+				break;
+			case LLAssetType::AT_NOTECARD:		img_name = "inv_item_notecard.tga";	break;
+			case LLAssetType::AT_LSL_TEXT:		img_name = "inv_item_script.tga";	break;
+			case LLAssetType::AT_BODYPART:		img_name = "inv_item_skin.tga";	break;
+			case LLAssetType::AT_ANIMATION:		img_name = "inv_item_animation.tga";break;
+			case LLAssetType::AT_GESTURE:			img_name = "inv_item_gesture.tga";	break;
+				//TODO need img_name
+			case LLAssetType::AT_FAVORITE:		img_name = "inv_item_landmark.tga";	 break;
+			default: llassert(0); continue;
 		}
 
 		LLUIImagePtr image = LLUI::getUIImage(img_name);
@@ -1019,8 +1034,6 @@ BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
 }
 
 
-// Allow calling cards to be dropped onto text fields.  Append the name and
-// a carriage return.
 // virtual
 BOOL LLViewerTextEditor::handleDragAndDrop(S32 x, S32 y, MASK mask,
 					  BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
@@ -1043,33 +1056,17 @@ BOOL LLViewerTextEditor::handleDragAndDrop(S32 x, S32 y, MASK mask,
 		{
 			switch( cargo_type )
 			{
-			case DAD_CALLINGCARD:
-				if(acceptsCallingCardNames())
-				{
-					if (drop)
-					{
-						LLInventoryItem *item = (LLInventoryItem *)cargo_data;
-						std::string name = item->getName();
-						appendText(name, true, true);
-					}
-					*accept = ACCEPT_YES_COPY_SINGLE;
-				}
-				else
-				{
-					*accept = ACCEPT_NO;
-				}
-				break;
-
-			case DAD_TEXTURE:
-			case DAD_SOUND:
-			case DAD_LANDMARK:
-			case DAD_SCRIPT:
-			case DAD_CLOTHING:
-			case DAD_OBJECT:
-			case DAD_NOTECARD:
-			case DAD_BODYPART:
-			case DAD_ANIMATION:
-			case DAD_GESTURE:
+				case DAD_CALLINGCARD:
+				case DAD_TEXTURE:
+				case DAD_SOUND:
+				case DAD_LANDMARK:
+				case DAD_SCRIPT:
+				case DAD_CLOTHING:
+				case DAD_OBJECT:
+				case DAD_NOTECARD:
+				case DAD_BODYPART:
+				case DAD_ANIMATION:
+				case DAD_GESTURE:
 				{
 					LLInventoryItem *item = (LLInventoryItem *)cargo_data;
 					if( item && allowsEmbeddedItems() )
@@ -1101,8 +1098,8 @@ BOOL LLViewerTextEditor::handleDragAndDrop(S32 x, S32 y, MASK mask,
 							{
 								// *TODO: Translate
 								tooltip_msg.assign("Only items with unrestricted\n"
-													"'next owner' permissions \n"
-													"can be attached to notecards.");
+												   "'next owner' permissions \n"
+												   "can be attached to notecards.");
 							}
 						}
 					}
@@ -1113,9 +1110,9 @@ BOOL LLViewerTextEditor::handleDragAndDrop(S32 x, S32 y, MASK mask,
 					break;
 				}
 
-			default:
-				*accept = ACCEPT_NO;
-				break;
+				default:
+					*accept = ACCEPT_NO;
+					break;
 			}
 		}
 		else
@@ -1301,32 +1298,36 @@ BOOL LLViewerTextEditor::openEmbeddedItem(LLInventoryItem* item, llwchar wc)
 
 	switch( item->getType() )
 	{
-	case LLAssetType::AT_TEXTURE:
-	  	openEmbeddedTexture( item, wc );
-		return TRUE;
+		case LLAssetType::AT_TEXTURE:
+			openEmbeddedTexture( item, wc );
+			return TRUE;
 
-	case LLAssetType::AT_SOUND:
-		openEmbeddedSound( item, wc );
-		return TRUE;
+		case LLAssetType::AT_SOUND:
+			openEmbeddedSound( item, wc );
+			return TRUE;
 
-	case LLAssetType::AT_NOTECARD:
-		openEmbeddedNotecard( item, wc );
-		return TRUE;
+		case LLAssetType::AT_NOTECARD:
+			openEmbeddedNotecard( item, wc );
+			return TRUE;
 
-	case LLAssetType::AT_LANDMARK:
-		openEmbeddedLandmark( item, wc );
-		return TRUE;
+		case LLAssetType::AT_LANDMARK:
+			openEmbeddedLandmark( item, wc );
+			return TRUE;
 
-	case LLAssetType::AT_LSL_TEXT:
-	case LLAssetType::AT_CLOTHING:
-	case LLAssetType::AT_OBJECT:
-	case LLAssetType::AT_BODYPART:
-	case LLAssetType::AT_ANIMATION:
-	case LLAssetType::AT_GESTURE:
-		showCopyToInvDialog( item, wc );
-		return TRUE;
-	default:
-		return FALSE;
+		case LLAssetType::AT_CALLINGCARD:
+			openEmbeddedCallingcard( item, wc );
+			return TRUE;
+
+		case LLAssetType::AT_LSL_TEXT:
+		case LLAssetType::AT_CLOTHING:
+		case LLAssetType::AT_OBJECT:
+		case LLAssetType::AT_BODYPART:
+		case LLAssetType::AT_ANIMATION:
+		case LLAssetType::AT_GESTURE:
+			showCopyToInvDialog( item, wc );
+			return TRUE;
+		default:
+			return FALSE;
 	}
 
 }
@@ -1376,6 +1377,16 @@ void LLViewerTextEditor::openEmbeddedNotecard( LLInventoryItem* item, llwchar wc
 	copyInventory(item, gInventoryCallbacks.registerCB(mInventoryCallback));
 }
 
+void LLViewerTextEditor::openEmbeddedCallingcard( LLInventoryItem* item, llwchar wc )
+{
+	if(item && !item->getCreatorUUID().isNull())
+	{
+		BOOL online;
+		online = LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID());
+		LLFloaterAvatarInfo::showFromFriend(item->getCreatorUUID(), online);
+	}
+}
+
 void LLViewerTextEditor::showUnsavedAlertDialog( LLInventoryItem* item )
 {
 	LLSD payload;
diff --git a/indra/newview/llviewertexteditor.h b/indra/newview/llviewertexteditor.h
index bc373c858a965812a41f084c574a0d1b063c0b11..1a69c6869df51c18899ffbe419df5508261bcdcf 100644
--- a/indra/newview/llviewertexteditor.h
+++ b/indra/newview/llviewertexteditor.h
@@ -120,6 +120,7 @@ class LLViewerTextEditor : public LLTextEditor
 	void			openEmbeddedSound( LLInventoryItem* item, llwchar wc );
 	void			openEmbeddedLandmark( LLInventoryItem* item, llwchar wc );
 	void			openEmbeddedNotecard( LLInventoryItem* item, llwchar wc);
+	void			openEmbeddedCallingcard( LLInventoryItem* item, llwchar wc);
 	void			showCopyToInvDialog( LLInventoryItem* item, llwchar wc );
 	void			showUnsavedAlertDialog( LLInventoryItem* item );
 
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 0a4aa12faa36d900cb068d569f2f44b958ac74af..aec4de7e0de65d7ca49fdc36b2a45ef8e984e584 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1232,14 +1232,6 @@ Only large parcels can be listed in search.
              tool_tip="If checked, anyone can terraform your land. It is best to leave this unchecked, as you can always edit your own land."
              top="24"
              width="268" />
-            <check_box
-             height="16"
-             label="Create Landmarks"
-             layout="topleft"
-             left_delta="0"
-             name="check landmark"
-             top_pad="4"
-             width="268" />
             <check_box
              height="16"
              label="Fly"
diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
index 843a8848bf45c0953a1272772b8221217209ccca..0414ab5fa69050a4c685a0fea9141a40c5b3bd41 100644
--- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
@@ -107,24 +107,6 @@
      name="check_gesture"
      top_delta="0"
      width="126" />
-    <icon
-     height="16"
-     image_name="inv_item_landmark_visited.tga"
-     layout="topleft"
-     left="12"
-     mouse_opaque="true"
-     name="icon_landmark"
-     top="134"
-     width="16" />
-    <check_box
-     control_name="BulkChangeIncludeLandmarks"
-     height="16"
-     label="Landmarks"
-     layout="topleft"
-     left_pad="2"
-     name="check_landmark"
-     top_delta="0"
-     width="126" />
     <icon
      height="16"
      image_name="inv_item_notecard.tga"
@@ -132,7 +114,7 @@
      left="12"
      mouse_opaque="true"
      name="icon_notecard"
-     top="154"
+     top="134"
      width="16" />
     <check_box
      control_name="BulkChangeIncludeNotecards"
@@ -150,7 +132,7 @@
      left="12"
      mouse_opaque="true"
      name="icon_object"
-     top="174"
+     top="154"
      width="16" />
     <check_box
      control_name="BulkChangeIncludeObjects"
@@ -168,7 +150,7 @@
      left="12"
      mouse_opaque="true"
      name="icon_script"
-     top="194"
+     top="174"
      width="16" />
     <check_box
      control_name="BulkChangeIncludeScripts"
@@ -186,7 +168,7 @@
      left="12"
      mouse_opaque="true"
      name="icon_sound"
-     top="214"
+     top="194"
      width="16" />
     <check_box
      control_name="BulkChangeIncludeSounds"
@@ -204,7 +186,7 @@
      left="12"
      mouse_opaque="true"
      name="icon_texture"
-     top="234"
+     top="214"
      width="16" />
     <check_box
      control_name="BulkChangeIncludeTextures"