	public ObjectStatus reqObjectStatus(int objectType, int startObject, int endObject, boolean extended) throws IOException, OmniNotConnectedException, OmniInvalidResponseException, OmniUnknownMessageTypeException {
		Status []s = null;
		switch (objectType) {
		case Message.OBJ_TYPE_AREA:{
			s = new AreaStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_AUDIO_ZONE:{
			s = new AudioZoneStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_AUX_SENSOR:{
			s = new AuxSensorStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_EXP:{
			s = new ExpansionStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_MESG:{
			s = new MessageStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_THERMO:{
			if(extended)
				s = new ExtendedThermostatStatus[endObject - startObject + 1];
			else
				s = new ThermostatStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_UNIT: {
			s = new UnitStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_ZONE: {
			s = new ZoneStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_USER_SETTING: {
			s = new UserSettingStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_CONTROL_READER: {
			s = new AccessControlReaderStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_CONTROL_LOCK: {
			s = new AccessControlReaderLockStatus[endObject - startObject + 1];
		}
		break;
		default:
			break;
		}
		int current = startObject;
		int next = 0;
		while(current < endObject){
			next += 25;
			if(next > endObject)
				next = endObject;
			Message msg = null;
			if(extended)
				msg = sendAndReceive(new ReqObjectStatus(objectType,current,next));
			else
				msg = sendAndReceive(new ReqExtenedObjectStatus(objectType,current,next));
			int curMsgType = msg.getMessageType();
			switch (curMsgType) {
			case Message.MESG_TYPE_OBJ_STATUS: 
			case Message.MESG_TYPE_EXT_OBJ_STATUS: {
				System.arraycopy(((ObjectStatus)msg).getStatuses(), 0, s, current -1, next - current + 1 );
			}
			break;
			case Message.MESG_TYPE_NEG_ACK:
				throw new OmniInvalidResponseException(msg);
			default:
				throw new OmniInvalidResponseException(msg);
			}
			current = next;
		}
		return new ObjectStatus(objectType,s);
	}

	public ObjectStatus reqObjectStatus(int objectType, int startObject, int endObject, boolean extended) throws IOException, OmniNotConnectedException, OmniInvalidResponseException, OmniUnknownMessageTypeException {
		Status []s = null;
		switch (objectType) {
		case Message.OBJ_TYPE_AREA:{
			s = new AreaStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_AUDIO_ZONE:{
			s = new AudioZoneStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_AUX_SENSOR:{
			s = new AuxSensorStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_EXP:{
			s = new ExpansionStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_MESG:{
			s = new MessageStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_THERMO:{
			if(extended)
				s = new ExtendedThermostatStatus[endObject - startObject + 1];
			else
				s = new ThermostatStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_UNIT: {
			s = new UnitStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_ZONE: {
			s = new ZoneStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_USER_SETTING: {
			s = new UserSettingStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_CONTROL_READER: {
			s = new AccessControlReaderStatus[endObject - startObject + 1];
		}
		break;
		case Message.OBJ_TYPE_CONTROL_LOCK: {
			s = new AccessControlReaderLockStatus[endObject - startObject + 1];
		}
		break;
		default:
			break;
		}
		int current = startObject;
		while(current <= endObject){
			int last = current + 24; 
			if(last > endObject)
				last = endObject;
			Message msg = null;
			if(extended)
				msg = sendAndReceive(new ReqObjectStatus(objectType,current,last));
			else
				msg = sendAndReceive(new ReqExtenedObjectStatus(objectType,current,last));
			int curMsgType = msg.getMessageType();
			switch (curMsgType) {
			case Message.MESG_TYPE_OBJ_STATUS: 
			case Message.MESG_TYPE_EXT_OBJ_STATUS: {
				System.arraycopy(((ObjectStatus)msg).getStatuses(), 0, s, current -startObject, last - current + 1 );
			}
			break;
			case Message.MESG_TYPE_NEG_ACK:
				throw new OmniInvalidResponseException(msg);
			default:
				throw new OmniInvalidResponseException(msg);
			}
			current = last+1;
		}
		return new ObjectStatus(objectType,s);
	}
