diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp
index a871bcbb25c3ced13be8e1b6ea70a53ba4220d3e..37c603348e3342a1ed9191e72cffcf47d125cc04 100644
--- a/indra/llinventory/llparcel.cpp
+++ b/indra/llinventory/llparcel.cpp
@@ -205,7 +205,7 @@ void LLParcel::init(const LLUUID &owner_id,
 	mAABBMin.setVec(SOME_BIG_NUMBER, SOME_BIG_NUMBER, SOME_BIG_NUMBER);
 	mAABBMax.setVec(SOME_BIG_NEG_NUMBER, SOME_BIG_NEG_NUMBER, SOME_BIG_NEG_NUMBER);
 
-	mLocalID = 0;
+	mLocalID = INVALID_PARCEL_ID;
 
 	//mSimWidePrimCorrection = 0;
 	setMaxPrimCapacity((S32)(sim_object_limit * area / (F32)(REGION_WIDTH_METERS * REGION_WIDTH_METERS)));
diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h
index 499f690e7609e79ab79d407e67d624de3e5d326c..0279e8bef970371595250a794c2bfc79bee03ded 100644
--- a/indra/llinventory/llparcel.h
+++ b/indra/llinventory/llparcel.h
@@ -97,6 +97,7 @@ const U32 RT_OTHER	= 0x1 << 3;
 const U32 RT_LIST	= 0x1 << 4;
 const U32 RT_SELL	= 0x1 << 5;
 
+const S32 INVALID_PARCEL_ID = -1;
 
 // Timeouts for parcels
 // default is 21 days * 24h/d * 60m/h * 60s/m *1000000 usec/s = 1814400000000
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 77e382b8c71956ca3c1b35130c30645183a899c4..7e524df3f63ab6c1f25ebe0cbb7b0a056b967827 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1540,6 +1540,16 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
 	// Actually extract the data.
 	if (parcel)
 	{
+		if (parcel->getLocalID() != INVALID_PARCEL_ID
+			&& parcel->getLocalID() != local_id)
+		{
+			// The parcel has a valid parcel ID but it doesn't match the parcel
+			// for the data received.
+			llinfos << "Expecting data for parcel " << parcel->getLocalID() \
+					<< " but got data for parcel " << local_id << llendl;
+			return;
+		}
+
 		parcel->init(owner_id,
 			FALSE, FALSE, FALSE,
 			claim_date, claim_price_per_meter, rent_price_per_meter,