static int updateProperties( gpointer data)
{

	OBD2Source* src = (OBD2Source*)data;
	
	while (gpointer retval = g_async_queue_try_pop(src->statusQueue))
	{
		StatusMessage *reply = (StatusMessage*)retval;
		if (reply->statusStr == "disconnected")
		{
			OBD2Source::Obd2ConnectType val(Obd2Connected,false);
			src->updateProperty(Obd2Connected,&val);
		}
		else if (reply->statusStr == "connected")
		{
			OBD2Source::Obd2ConnectType val(Obd2Connected, true);
			src->updateProperty(Obd2Connected,&val);
		}
		else if (reply->statusStr == "error:nodata" || reply->statusStr == "error:timeout")
		{
			if (src->propertyReplyMap.find(reply->property) != src->propertyReplyMap.end())
			{
				DebugOut(5) << __SMALLFILE__ <<":"<< __LINE__ << reply->statusStr << " on property:" << reply->property << endl;
				src->propertyReplyMap[reply->property]->success = false;
				src->propertyReplyMap[reply->property]->error = AsyncPropertyReply::InvalidOperation;
				src->propertyReplyMap[reply->property]->completed(src->propertyReplyMap[reply->property]);
				src->propertyReplyMap.erase(reply->property);

				/// Remove support for this pid:
				PropertyList list = src->supported();
				list.remove(reply->property);
				src->setSupported(list);
			}
			else
			{
				DebugOut(5) << __SMALLFILE__ <<":"<< __LINE__ << reply->statusStr << " on unrequested property:" << reply->property << endl;
			}
		}
		delete reply;
	}
	while(gpointer retval = g_async_queue_try_pop(src->responseQueue))
	{
		ObdPid *reply = (ObdPid*)retval;

		
		AbstractPropertyType* value = VehicleProperty::getPropertyTypeForPropertyNameValue(reply->property, reply->value);
		src->updateProperty(reply->property, value);
		delete value;
	}

	return true;
}