[Scummvm-git-logs] scummvm master -> 9720d2144744e13369d060ef68dbadb20d6a63fb

aquadran noreply at scummvm.org
Sun Jul 13 16:06:08 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
9720d21447 WINTERMUTE: Restore original array code


Commit: 9720d2144744e13369d060ef68dbadb20d6a63fb
    https://github.com/scummvm/scummvm/commit/9720d2144744e13369d060ef68dbadb20d6a63fb
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-07-13T18:06:03+02:00

Commit Message:
WINTERMUTE: Restore original array code

Changed paths:
    engines/wintermute/ad/ad_actor.cpp
    engines/wintermute/ad/ad_actor_3dx.cpp
    engines/wintermute/ad/ad_entity.cpp
    engines/wintermute/ad/ad_game.cpp
    engines/wintermute/ad/ad_geom_ext.cpp
    engines/wintermute/ad/ad_inventory.cpp
    engines/wintermute/ad/ad_inventory_box.cpp
    engines/wintermute/ad/ad_layer.cpp
    engines/wintermute/ad/ad_object.cpp
    engines/wintermute/ad/ad_object_3d.cpp
    engines/wintermute/ad/ad_path.cpp
    engines/wintermute/ad/ad_path3d.cpp
    engines/wintermute/ad/ad_region.cpp
    engines/wintermute/ad/ad_response_box.cpp
    engines/wintermute/ad/ad_scene.cpp
    engines/wintermute/ad/ad_scene_geometry.cpp
    engines/wintermute/ad/ad_scene_state.cpp
    engines/wintermute/ad/ad_sentence.cpp
    engines/wintermute/ad/ad_talk_def.cpp
    engines/wintermute/ad/ad_talk_holder.cpp
    engines/wintermute/ad/ad_waypoint_group.cpp
    engines/wintermute/ad/ad_waypoint_group3d.cpp
    engines/wintermute/base/base_frame.cpp
    engines/wintermute/base/base_game.cpp
    engines/wintermute/base/base_region.cpp
    engines/wintermute/base/base_script_holder.cpp
    engines/wintermute/base/base_sprite.cpp
    engines/wintermute/base/base_surface_storage.cpp
    engines/wintermute/base/font/base_font_bitmap.cpp
    engines/wintermute/base/font/base_font_storage.cpp
    engines/wintermute/base/font/base_font_truetype.cpp
    engines/wintermute/base/gfx/3deffect_params.cpp
    engines/wintermute/base/gfx/3dloader_3ds.cpp
    engines/wintermute/base/gfx/3dshadow_volume.cpp
    engines/wintermute/base/gfx/base_renderer.cpp
    engines/wintermute/base/gfx/base_renderer.h
    engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
    engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
    engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp
    engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
    engines/wintermute/base/gfx/xanimation.cpp
    engines/wintermute/base/gfx/xanimation_set.cpp
    engines/wintermute/base/gfx/xframe_node.cpp
    engines/wintermute/base/gfx/xmesh.cpp
    engines/wintermute/base/gfx/xmodel.cpp
    engines/wintermute/base/particles/part_emitter.cpp
    engines/wintermute/base/particles/part_particle.cpp
    engines/wintermute/base/scriptables/debuggable/debuggable_script.cpp
    engines/wintermute/base/scriptables/script.cpp
    engines/wintermute/base/scriptables/script_engine.cpp
    engines/wintermute/base/scriptables/script_stack.cpp
    engines/wintermute/base/sound/base_sound_manager.cpp
    engines/wintermute/base/sound/base_sound_manager.h
    engines/wintermute/coll_templ.h
    engines/wintermute/debugger/debugger_controller.cpp
    engines/wintermute/ext/wme_shadowmanager.cpp
    engines/wintermute/ui/ui_button.cpp
    engines/wintermute/ui/ui_edit.cpp
    engines/wintermute/ui/ui_entity.cpp
    engines/wintermute/ui/ui_object.cpp
    engines/wintermute/ui/ui_text.cpp
    engines/wintermute/ui/ui_window.cpp


diff --git a/engines/wintermute/ad/ad_actor.cpp b/engines/wintermute/ad/ad_actor.cpp
index 4879c233a4f..27fe37e4a49 100644
--- a/engines/wintermute/ad/ad_actor.cpp
+++ b/engines/wintermute/ad/ad_actor.cpp
@@ -98,22 +98,21 @@ AdActor::~AdActor() {
 
 	_animSprite2 = nullptr; // ref only
 
-	for (uint32 i = 0; i < _talkSprites.size(); i++) {
+	for (uint32 i = 0; i < _talkSprites.getSize(); i++) {
 		delete _talkSprites[i];
 	}
-	_talkSprites.clear();
+	_talkSprites.removeAll();
 
-	for (uint32 i = 0; i < _talkSpritesEx.size(); i++) {
+	for (uint32 i = 0; i < _talkSpritesEx.getSize(); i++) {
 		delete _talkSpritesEx[i];
 	}
-	_talkSpritesEx.clear();
+	_talkSpritesEx.removeAll();
 
-	for (uint32 i = 0; i < _anims.size(); i++) {
+	for (uint32 i = 0; i < _anims.getSize(); i++) {
 		delete _anims[i];
 		_anims[i] = nullptr;
 	}
-	_anims.clear();
-
+	_anims.removeAll();
 }
 
 
@@ -1088,7 +1087,7 @@ bool AdActor::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		const char *animName = stack->pop()->getString();
 
 		bool found = false;
-		for (uint32 i = 0; i < _anims.size(); i++) {
+		for (uint32 i = 0; i < _anims.getSize(); i++) {
 			if (scumm_stricmp(_anims[i]->getName(), animName) == 0) {
 				// invalidate sprites in use
 				if (_anims[i]->containsSprite(_tempSprite2)) {
@@ -1103,7 +1102,7 @@ bool AdActor::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 
 				delete _anims[i];
 				_anims[i] = nullptr;
-				_anims.remove_at(i);
+				_anims.removeAt(i);
 				i--;
 				found = true;
 			}
@@ -1291,7 +1290,7 @@ BaseSprite *AdActor::getTalkStance(const char *stance) {
 	}
 
 	// old way
-	if (_talkSprites.size() > 0 || _talkSpritesEx.size() > 0) {
+	if (_talkSprites.getSize() > 0 || _talkSpritesEx.getSize() > 0) {
 		return getTalkStanceOld(stance);
 	}
 
@@ -1307,14 +1306,14 @@ BaseSprite *AdActor::getTalkStance(const char *stance) {
 	// not - get a random talk
 	if (!ret) {
 		BaseArray<AdSpriteSet *> talkAnims;
-		for (uint32 i = 0; i < _anims.size(); i++) {
+		for (uint32 i = 0; i < _anims.getSize(); i++) {
 			if (_talkAnimName.compareToIgnoreCase(_anims[i]->getName()) == 0) {
 				talkAnims.add(_anims[i]);
 			}
 		}
 
-		if (talkAnims.size() > 0) {
-			int rnd = BaseEngine::instance().randInt(0, talkAnims.size() - 1);
+		if (talkAnims.getSize() > 0) {
+			int rnd = BaseEngine::instance().randInt(0, talkAnims.getSize() - 1);
 			ret = talkAnims[rnd]->getSprite(_dir);
 		} else {
 			if (_standSprite) {
@@ -1336,7 +1335,7 @@ BaseSprite *AdActor::getTalkStanceOld(const char *stance) {
 
 	if (stance != nullptr) {
 		// search special stances
-		for (uint32 i = 0; i < _talkSpritesEx.size(); i++) {
+		for (uint32 i = 0; i < _talkSpritesEx.getSize(); i++) {
 			if (scumm_stricmp(_talkSpritesEx[i]->getName(), stance) == 0) {
 				ret = _talkSpritesEx[i]->getSprite(_dir);
 				break;
@@ -1344,7 +1343,7 @@ BaseSprite *AdActor::getTalkStanceOld(const char *stance) {
 		}
 		if (ret == nullptr) {
 			// search generic stances
-			for (uint32 i = 0; i < _talkSprites.size(); i++) {
+			for (uint32 i = 0; i < _talkSprites.getSize(); i++) {
 				if (scumm_stricmp(_talkSprites[i]->getName(), stance) == 0) {
 					ret = _talkSprites[i]->getSprite(_dir);
 					break;
@@ -1355,11 +1354,11 @@ BaseSprite *AdActor::getTalkStanceOld(const char *stance) {
 
 	// not a valid stance? get a random one
 	if (ret == nullptr) {
-		if (_talkSprites.size() < 1) {
+		if (_talkSprites.getSize() < 1) {
 			ret = _standSprite->getSprite(_dir);
 		} else {
 			// TODO: remember last
-			int rnd = BaseEngine::instance().randInt(0, _talkSprites.size() - 1);
+			int rnd = BaseEngine::instance().randInt(0, _talkSprites.getSize() - 1);
 			ret = _talkSprites[rnd]->getSprite(_dir);
 		}
 	}
@@ -1447,7 +1446,7 @@ int32 AdActor::getHeight() {
 
 //////////////////////////////////////////////////////////////////////////
 AdSpriteSet *AdActor::getAnimByName(const Common::String &animName) {
-	for (uint32 i = 0; i < _anims.size(); i++) {
+	for (uint32 i = 0; i < _anims.getSize(); i++) {
 		if (animName.compareToIgnoreCase(_anims[i]->getName()) == 0) {
 			return _anims[i];
 		}
diff --git a/engines/wintermute/ad/ad_actor_3dx.cpp b/engines/wintermute/ad/ad_actor_3dx.cpp
index b85a375588f..c0210a9aea5 100644
--- a/engines/wintermute/ad/ad_actor_3dx.cpp
+++ b/engines/wintermute/ad/ad_actor_3dx.cpp
@@ -104,16 +104,16 @@ AdActor3DX::AdActor3DX(BaseGame *inGame) : AdObject3D(inGame) {
 //////////////////////////////////////////////////////////////////////////
 AdActor3DX::~AdActor3DX() {
 	// delete attachments
-	for (uint32 i = 0; i < _attachments.size(); i++) {
+	for (uint32 i = 0; i < _attachments.getSize(); i++) {
 		delete _attachments[i];
 	}
-	_attachments.clear();
+	_attachments.removeAll();
 
 	// delete transition times
-	for (uint32 i = 0; i < _transitionTimes.size(); i++) {
+	for (uint32 i = 0; i < _transitionTimes.getSize(); i++) {
 		delete _transitionTimes[i];
 	}
-	_transitionTimes.clear();
+	_transitionTimes.removeAll();
 
 	delete _path2D;
 	_path2D = nullptr;
@@ -499,7 +499,7 @@ bool AdActor3DX::displayShadowVolume() {
 	_gameRef->_renderer3D->getWorldTransform(&origWorld);
 
 	// handle the attachments
-	for (uint32 i = 0; i < _attachments.size(); i++) {
+	for (uint32 i = 0; i < _attachments.getSize(); i++) {
 		AdAttach3DX *at = _attachments[i];
 
 		if (!at->_active) {
@@ -557,7 +557,7 @@ bool AdActor3DX::displayFlatShadow() {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdActor3DX::updateAttachments() {
-	for (uint32 i = 0; i < _attachments.size(); i++) {
+	for (uint32 i = 0; i < _attachments.getSize(); i++) {
 		if (_attachments[i]->_active) {
 			_attachments[i]->update();
 		}
@@ -571,14 +571,14 @@ bool AdActor3DX::displayAttachments(bool registerObjects) {
 		return false;
 	}
 
-	if (_attachments.size() == 0) {
+	if (_attachments.getSize() == 0) {
 		return true;
 	}
 
 	DXMatrix origView;
 	_gameRef->_renderer3D->getWorldTransform(&origView);
 
-	for (uint32 i = 0; i < _attachments.size(); i++) {
+	for (uint32 i = 0; i < _attachments.getSize(); i++) {
 		AdAttach3DX *at = _attachments[i];
 		if (!at->_active) {
 			continue;
@@ -1454,7 +1454,7 @@ bool AdActor3DX::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 					stack->pushBool(false);
 				} else {
 					bool isSet = false;
-					for (uint32 i = 0; i < _attachments.size(); i++) {
+					for (uint32 i = 0; i < _attachments.getSize(); i++) {
 						if (scumm_stricmp(_attachments[i]->getName(), attachName) == 0) {
 							delete _attachments[i];
 							_attachments[i] = at;
@@ -1488,10 +1488,10 @@ bool AdActor3DX::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 			stack->pushBool(false);
 		} else {
 			bool isFound = false;
-			for (uint32 i = 0; i < _attachments.size(); i++) {
+			for (uint32 i = 0; i < _attachments.getSize(); i++) {
 				if (scumm_stricmp(_attachments[i]->getName(), attachmentName) == 0) {
 					delete _attachments[i];
-					_attachments.remove_at(i);
+					_attachments.removeAt(i);
 					isFound = true;
 					break;
 				}
@@ -1512,7 +1512,7 @@ bool AdActor3DX::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 			stack->pushNULL();
 		} else {
 			bool isFound = false;
-			for (uint32 i = 0; i < _attachments.size(); i++) {
+			for (uint32 i = 0; i < _attachments.getSize(); i++) {
 				if (scumm_stricmp(_attachments[i]->getName(), attachmentName) == 0) {
 					stack->pushNative(_attachments[i], true);
 					isFound = true;
@@ -1978,13 +1978,13 @@ bool AdActor3DX::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 		int time = stack->pop()->getInt();
 
 		bool found = false;
-		for (uint32 i = 0; i < _transitionTimes.size(); i++) {
+		for (uint32 i = 0; i < _transitionTimes.getSize(); i++) {
 			BaseAnimationTransitionTime *trans = _transitionTimes[i];
 			if (!trans->_animFrom.empty() && !trans->_animTo.empty() && trans->_animFrom.compareToIgnoreCase(animFrom) == 0 && trans->_animTo.compareToIgnoreCase(animTo) == 0) {
 				found = true;
 				if (time < 0) {
 					delete trans;
-					_transitionTimes.remove_at(i);
+					_transitionTimes.removeAt(i);
 				} else
 					trans->_time = (uint32)time;
 				break;
@@ -2009,7 +2009,7 @@ bool AdActor3DX::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 		const char *animTo = stack->pop()->getString();
 
 		int time = -1;
-		for (uint32 i = 0; i < _transitionTimes.size(); i++) {
+		for (uint32 i = 0; i < _transitionTimes.getSize(); i++) {
 			BaseAnimationTransitionTime *trans = _transitionTimes[i];
 
 			if (!trans->_animFrom.empty() && !trans->_animTo.empty() && trans->_animFrom.compareToIgnoreCase(animFrom) == 0 && trans->_animTo.compareToIgnoreCase(animTo) == 0) {
@@ -2309,13 +2309,13 @@ bool AdActor3DX::persist(BasePersistenceManager *persistMgr) {
 	persistMgr->transferUint32(TMEMBER(_defaultStopTransTime));
 
 	if (persistMgr->getIsSaving()) {
-		int32 numItems = _transitionTimes.size();
+		int32 numItems = _transitionTimes.getSize();
 		persistMgr->transferSint32(TMEMBER(numItems));
-		for (uint32 i = 0; i < _transitionTimes.size(); i++) {
+		for (uint32 i = 0; i < _transitionTimes.getSize(); i++) {
 			_transitionTimes[i]->persist(persistMgr);
 		}
 	} else {
-		int32 numItems = _transitionTimes.size();
+		int32 numItems = _transitionTimes.getSize();
 		persistMgr->transferSint32(TMEMBER(numItems));
 		for (int i = 0; i < numItems; i++) {
 			BaseAnimationTransitionTime *trans = new BaseAnimationTransitionTime();
@@ -2339,7 +2339,7 @@ bool AdActor3DX::invalidateDeviceObjects() {
 	if (_shadowModel)
 		_shadowModel->invalidateDeviceObjects();
 
-	for (uint32 i = 0; i < _attachments.size(); i++) {
+	for (uint32 i = 0; i < _attachments.getSize(); i++) {
 		_attachments[i]->invalidateDeviceObjects();
 	}
 
@@ -2356,7 +2356,7 @@ bool AdActor3DX::restoreDeviceObjects() {
 		_shadowModel->restoreDeviceObjects();
 	}
 
-	for (uint32 i = 0; i < _attachments.size(); i++) {
+	for (uint32 i = 0; i < _attachments.getSize(); i++) {
 		_attachments[i]->restoreDeviceObjects();
 	}
 
@@ -2445,7 +2445,7 @@ bool AdActor3DX::isGoToNeeded(int x, int y) {
 
 //////////////////////////////////////////////////////////////////////////
 uint32 AdActor3DX::getAnimTransitionTime(char *from, char *to) {
-	for (uint32 i = 0; i < _transitionTimes.size(); i++) {
+	for (uint32 i = 0; i < _transitionTimes.getSize(); i++) {
 		BaseAnimationTransitionTime *trans = _transitionTimes[i];
 		if (!trans->_animFrom.empty() && !trans->_animTo.empty() && trans->_animFrom.compareToIgnoreCase(from) == 0 && trans->_animTo.compareToIgnoreCase(to) == 0) {
 			return trans->_time;
diff --git a/engines/wintermute/ad/ad_entity.cpp b/engines/wintermute/ad/ad_entity.cpp
index 5d5a42e2cbd..1859f0b32f1 100644
--- a/engines/wintermute/ad/ad_entity.cpp
+++ b/engines/wintermute/ad/ad_entity.cpp
@@ -1168,7 +1168,7 @@ bool AdEntity::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	buffer->putTextIndent(indent + 2, "HINT_Y=%d\n", _hintY);
 #endif
 
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index a83296c5dd7..9b9a18b7e7b 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -129,42 +129,42 @@ AdGame::~AdGame() {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::cleanup() {
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		unregisterObject(_objects[i]);
 		_objects[i] = nullptr;
 	}
-	_objects.clear();
+	_objects.removeAll();
 
 
-	for (uint32 i = 0; i < _dlgPendingBranches.size(); i++) {
+	for (uint32 i = 0; i < _dlgPendingBranches.getSize(); i++) {
 		delete[] _dlgPendingBranches[i];
 	}
-	_dlgPendingBranches.clear();
+	_dlgPendingBranches.removeAll();
 
-	for (uint32 i = 0; i < _speechDirs.size(); i++) {
+	for (uint32 i = 0; i < _speechDirs.getSize(); i++) {
 		delete[] _speechDirs[i];
 	}
-	_speechDirs.clear();
+	_speechDirs.removeAll();
 
 
 	unregisterObject(_scene);
 	_scene = nullptr;
 
 	// remove items
-	for (uint32 i = 0; i < _items.size(); i++) {
+	for (uint32 i = 0; i < _items.getSize(); i++) {
 		_gameRef->unregisterObject(_items[i]);
 	}
-	_items.clear();
+	_items.removeAll();
 
 
 	// clear remaining inventories
 	delete _invObject;
 	_invObject = nullptr;
 
-	for (uint32 i = 0; i < _inventories.size(); i++) {
+	for (uint32 i = 0; i < _inventories.getSize(); i++) {
 		delete _inventories[i];
 	}
-	_inventories.clear();
+	_inventories.removeAll();
 
 
 	if (_responseBox) {
@@ -192,20 +192,20 @@ bool AdGame::cleanup() {
 	delete _sceneViewport;
 	_sceneViewport = nullptr;
 
-	for (uint32 i = 0; i < _sceneStates.size(); i++) {
+	for (uint32 i = 0; i < _sceneStates.getSize(); i++) {
 		delete _sceneStates[i];
 	}
-	_sceneStates.clear();
+	_sceneStates.removeAll();
 
-	for (uint32 i = 0; i < _responsesBranch.size(); i++) {
+	for (uint32 i = 0; i < _responsesBranch.getSize(); i++) {
 		delete _responsesBranch[i];
 	}
-	_responsesBranch.clear();
+	_responsesBranch.removeAll();
 
-	for (uint32 i = 0; i < _responsesGame.size(); i++) {
+	for (uint32 i = 0; i < _responsesGame.getSize(); i++) {
 		delete _responsesGame[i];
 	}
-	_responsesGame.clear();
+	_responsesGame.removeAll();
 
 	return BaseGame::cleanup();
 }
@@ -232,7 +232,7 @@ bool AdGame::initLoop() {
 		res = _scene->initLoop();
 	}
 
-	_sentences.clear();
+	_sentences.removeAll();
 
 	return res;
 }
@@ -255,9 +255,9 @@ bool AdGame::removeObject(AdObject *object) {
 		}
 	}
 
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i] == object) {
-			_objects.remove_at(i);
+			_objects.removeAt(i);
 			break;
 		}
 	}
@@ -285,7 +285,7 @@ bool AdGame::changeScene(const char *filename, bool fadeIn) {
 
 	if (_scene) {
 		// reset objects
-		for (uint32 i = 0; i < _objects.size(); i++) {
+		for (uint32 i = 0; i < _objects.getSize(); i++) {
 			_objects[i]->reset();
 		}
 
@@ -305,7 +305,7 @@ bool AdGame::changeScene(const char *filename, bool fadeIn) {
 
 		if (DID_SUCCEED(ret)) {
 			// invalidate references to the original scene
-			for (uint32 i = 0; i < _objects.size(); i++) {
+			for (uint32 i = 0; i < _objects.getSize(); i++) {
 				_objects[i]->invalidateCurrRegions();
 				_objects[i]->_stickRegion = nullptr;
 			}
@@ -331,7 +331,7 @@ void AdGame::addSentence(AdSentence *sentence) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::displaySentences(bool frozen) {
-	for (uint32 i = 0; i < _sentences.size(); i++) {
+	for (uint32 i = 0; i < _sentences.getSize(); i++) {
 		if (frozen && _sentences[i]->_freezable) {
 			continue;
 		} else {
@@ -344,7 +344,7 @@ bool AdGame::displaySentences(bool frozen) {
 
 //////////////////////////////////////////////////////////////////////////
 void AdGame::finishSentences() {
-	for (uint32 i = 0; i < _sentences.size(); i++) {
+	for (uint32 i = 0; i < _sentences.getSize(); i++) {
 		if (_sentences[i]->canSkip()) {
 			_sentences[i]->_duration = 0;
 			if (_sentences[i]->_sound) {
@@ -535,7 +535,7 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		AdItem *item = nullptr;
 		if (val->isInt()) {
 			int index = val->getInt();
-			if (index >= 0 && index < (int32)_items.size()) {
+			if (index >= 0 && index < (int32)_items.getSize()) {
 				item = _items[index];
 			}
 		} else {
@@ -721,8 +721,8 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 	else if (strcmp(name, "GetCurrentDlgBranch") == 0) {
 		stack->correctParams(0);
 
-		if (_dlgPendingBranches.size() > 0) {
-			stack->pushString(_dlgPendingBranches[_dlgPendingBranches.size() - 1]);
+		if (_dlgPendingBranches.getSize() > 0) {
+			stack->pushString(_dlgPendingBranches[_dlgPendingBranches.getSize() - 1]);
 		} else {
 			stack->pushNULL();
 		}
@@ -766,10 +766,10 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 
 		ScValue *val = stack->pop();
 		if (!val->isNULL()) {
-			for (uint32 i = 0; i < _inventories.size(); i++) {
+			for (uint32 i = 0; i < _inventories.getSize(); i++) {
 				AdInventory *inv = _inventories[i];
 
-				for (uint32 j = 0; j < inv->_takenItems.size(); j++) {
+				for (uint32 j = 0; j < inv->_takenItems.getSize(); j++) {
 					if (val->getNative() == inv->_takenItems[j]) {
 						stack->pushBool(true);
 						return STATUS_OK;
@@ -1085,7 +1085,7 @@ ScValue *AdGame::scGetProperty(const Common::String &name) {
 	// TotalNumItems
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "TotalNumItems") {
-		_scValue->setInt(_items.size());
+		_scValue->setInt(_items.getSize());
 		return _scValue;
 	}
 
@@ -1143,7 +1143,7 @@ bool AdGame::scSetProperty(const char *name, ScValue *value) {
 		} else {
 			if (value->isNative()) {
 				_selectedItem = nullptr;
-				for (uint32 i = 0; i < _items.size(); i++) {
+				for (uint32 i = 0; i < _items.getSize(); i++) {
 					if (_items[i] == value->getNative()) {
 						_selectedItem = (AdItem *)value->getNative();
 						break;
@@ -1656,7 +1656,7 @@ bool AdGame::handleCustomActionStart(BaseGameCustomAction action) {
 		p.y = yCenter;
 		// Looking through all objects for entities near to the center
 		if (_scene && _scene->getSceneObjects(objects, true)) {
-			for (uint32 i = 0; i < objects.size(); i++) {
+			for (uint32 i = 0; i < objects.getSize(); i++) {
 				BaseRegion *region;
 				if (objects[i]->getType() != OBJECT_ENTITY ||
 					!objects[i]->_active ||
@@ -1764,7 +1764,7 @@ bool AdGame::loadItemsBuffer(char *buffer, bool merge) {
 	BaseParser parser;
 
 	if (!merge) {
-		while (_items.size() > 0) {
+		while (_items.getSize() > 0) {
 			deleteItem(_items[0]);
 		}
 	}
@@ -1819,7 +1819,7 @@ AdSceneState *AdGame::getSceneState(const char *filename, bool saving) {
 		}
 	}
 
-	for (uint32 i = 0; i < _sceneStates.size(); i++) {
+	for (uint32 i = 0; i < _sceneStates.getSize(); i++) {
 		if (scumm_stricmp(_sceneStates[i]->getFilename(), filenameCor) == 0) {
 			delete[] filenameCor;
 			return _sceneStates[i];
@@ -1914,8 +1914,8 @@ bool AdGame::startDlgBranch(const char *branchName, const char *scriptName, cons
 bool AdGame::endDlgBranch(const char *branchName, const char *scriptName, const char *eventName) {
 	char *name = nullptr;
 	bool deleteName = false;
-	if (branchName == nullptr && _dlgPendingBranches.size() > 0) {
-		name = _dlgPendingBranches[_dlgPendingBranches.size() - 1];
+	if (branchName == nullptr && _dlgPendingBranches.getSize() > 0) {
+		name = _dlgPendingBranches[_dlgPendingBranches.getSize() - 1];
 	} else {
 		if (branchName != nullptr) {
 			size_t sz = strlen(branchName) + 1 + strlen(scriptName) + 1 + strlen(eventName) + 1;
@@ -1931,27 +1931,27 @@ bool AdGame::endDlgBranch(const char *branchName, const char *scriptName, const
 
 
 	int startIndex = -1;
-	for (int i = _dlgPendingBranches.size() - 1; i >= 0; i--) {
+	for (int i = _dlgPendingBranches.getSize() - 1; i >= 0; i--) {
 		if (scumm_stricmp(name, _dlgPendingBranches[i]) == 0) {
 			startIndex = i;
 			break;
 		}
 	}
 	if (startIndex >= 0) {
-		for (uint32 i = startIndex; i < _dlgPendingBranches.size(); i++) {
+		for (uint32 i = startIndex; i < _dlgPendingBranches.getSize(); i++) {
 			//ClearBranchResponses(_dlgPendingBranches[i]);
 			delete[] _dlgPendingBranches[i];
 			_dlgPendingBranches[i] = nullptr;
 		}
-		_dlgPendingBranches.remove_at(startIndex, _dlgPendingBranches.size() - startIndex);
+		_dlgPendingBranches.removeAt(startIndex, _dlgPendingBranches.getSize() - startIndex);
 	}
 
 	// dialogue is over, forget selected responses
-	if (_dlgPendingBranches.size() == 0) {
-		for (uint32 i = 0; i < _responsesBranch.size(); i++) {
+	if (_dlgPendingBranches.getSize() == 0) {
+		for (uint32 i = 0; i < _responsesBranch.getSize(); i++) {
 			delete _responsesBranch[i];
 		}
-		_responsesBranch.clear();
+		_responsesBranch.removeAll();
 	}
 
 	if (deleteName) {
@@ -1964,10 +1964,10 @@ bool AdGame::endDlgBranch(const char *branchName, const char *scriptName, const
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::clearBranchResponses(char *name) {
-	for (int32 i = 0; i < (int32)_responsesBranch.size(); i++) {
+	for (int32 i = 0; i < (int32)_responsesBranch.getSize(); i++) {
 		if (scumm_stricmp(name, _responsesBranch[i]->getContext()) == 0) {
 			delete _responsesBranch[i];
-			_responsesBranch.remove_at(i);
+			_responsesBranch.removeAt(i);
 			i--;
 		}
 	}
@@ -1982,7 +1982,7 @@ bool AdGame::addBranchResponse(int id) {
 	}
 	AdResponseContext *r = new AdResponseContext(_gameRef);
 	r->_id = id;
-	r->setContext(_dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr);
+	r->setContext(_dlgPendingBranches.getSize() > 0 ? _dlgPendingBranches[_dlgPendingBranches.getSize() - 1] : nullptr);
 	_responsesBranch.add(r);
 	return STATUS_OK;
 }
@@ -1990,8 +1990,8 @@ bool AdGame::addBranchResponse(int id) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::branchResponseUsed(int id) const {
-	char *context = _dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr;
-	for (uint32 i = 0; i < _responsesBranch.size(); i++) {
+	char *context = _dlgPendingBranches.getSize() > 0 ? _dlgPendingBranches[_dlgPendingBranches.getSize() - 1] : nullptr;
+	for (uint32 i = 0; i < _responsesBranch.getSize(); i++) {
 		if (_responsesBranch[i]->_id == id) {
 			if ((context == nullptr && _responsesBranch[i]->getContext() == nullptr) || (context != nullptr && scumm_stricmp(context, _responsesBranch[i]->getContext()) == 0)) {
 				return true;
@@ -2009,7 +2009,7 @@ bool AdGame::addGameResponse(int id) {
 	}
 	AdResponseContext *r = new AdResponseContext(_gameRef);
 	r->_id = id;
-	r->setContext(_dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr);
+	r->setContext(_dlgPendingBranches.getSize() > 0 ? _dlgPendingBranches[_dlgPendingBranches.getSize() - 1] : nullptr);
 	_responsesGame.add(r);
 	return STATUS_OK;
 }
@@ -2017,8 +2017,8 @@ bool AdGame::addGameResponse(int id) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::gameResponseUsed(int id) const {
-	char *context = _dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr;
-	for (uint32 i = 0; i < _responsesGame.size(); i++) {
+	char *context = _dlgPendingBranches.getSize() > 0 ? _dlgPendingBranches[_dlgPendingBranches.getSize() - 1] : nullptr;
+	for (uint32 i = 0; i < _responsesGame.getSize(); i++) {
 		const AdResponseContext *respContext = _responsesGame[i];
 		if (respContext->_id == id) {
 			if ((context == nullptr && respContext->getContext() == nullptr) || ((context != nullptr && respContext->getContext() != nullptr) && (context != nullptr && scumm_stricmp(context, respContext->getContext()) == 0))) {
@@ -2032,23 +2032,23 @@ bool AdGame::gameResponseUsed(int id) const {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::resetResponse(int id) {
-	char *context = _dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr;
+	char *context = _dlgPendingBranches.getSize() > 0 ? _dlgPendingBranches[_dlgPendingBranches.getSize() - 1] : nullptr;
 
-	for (uint32 i = 0; i < _responsesGame.size(); i++) {
+	for (uint32 i = 0; i < _responsesGame.getSize(); i++) {
 		if (_responsesGame[i]->_id == id) {
 			if ((context == nullptr && _responsesGame[i]->getContext() == nullptr) || (context != nullptr && scumm_stricmp(context, _responsesGame[i]->getContext()) == 0)) {
 				delete _responsesGame[i];
-				_responsesGame.remove_at(i);
+				_responsesGame.removeAt(i);
 				break;
 			}
 		}
 	}
 
-	for (uint32 i = 0; i < _responsesBranch.size(); i++) {
+	for (uint32 i = 0; i < _responsesBranch.getSize(); i++) {
 		if (_responsesBranch[i]->_id == id) {
 			if ((context == nullptr && _responsesBranch[i]->getContext() == nullptr) || (context != nullptr && scumm_stricmp(context, _responsesBranch[i]->getContext()) == 0)) {
 				delete _responsesBranch[i];
-				_responsesBranch.remove_at(i);
+				_responsesBranch.removeAt(i);
 				break;
 			}
 		}
@@ -2149,7 +2149,7 @@ bool AdGame::displayContent(bool doUpdate, bool displayAll) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::registerInventory(AdInventory *inv) {
-	for (uint32 i = 0; i < _inventories.size(); i++) {
+	for (uint32 i = 0; i < _inventories.getSize(); i++) {
 		if (_inventories[i] == inv) {
 			return STATUS_OK;
 		}
@@ -2162,10 +2162,10 @@ bool AdGame::registerInventory(AdInventory *inv) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::unregisterInventory(AdInventory *inv) {
-	for (uint32 i = 0; i < _inventories.size(); i++) {
+	for (uint32 i = 0; i < _inventories.getSize(); i++) {
 		if (_inventories[i] == inv) {
 			unregisterObject(_inventories[i]);
-			_inventories.remove_at(i);
+			_inventories.removeAt(i);
 			return STATUS_OK;
 		}
 	}
@@ -2174,10 +2174,10 @@ bool AdGame::unregisterInventory(AdInventory *inv) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::isItemTaken(char *itemName) {
-	for (uint32 i = 0; i < _inventories.size(); i++) {
+	for (uint32 i = 0; i < _inventories.getSize(); i++) {
 		AdInventory *inv = _inventories[i];
 
-		for (uint32 j = 0; j < inv->_takenItems.size(); j++) {
+		for (uint32 j = 0; j < inv->_takenItems.getSize(); j++) {
 			if (scumm_stricmp(itemName, inv->_takenItems[j]->getName()) == 0) {
 				return true;
 			}
@@ -2188,7 +2188,7 @@ bool AdGame::isItemTaken(char *itemName) {
 
 //////////////////////////////////////////////////////////////////////////
 AdItem *AdGame::getItemByName(const char *name) const {
-	for (uint32 i = 0; i < _items.size(); i++) {
+	for (uint32 i = 0; i < _items.getSize(); i++) {
 		if (scumm_stricmp(_items[i]->getName(), name) == 0) {
 			return _items[i];
 		}
@@ -2207,34 +2207,34 @@ bool AdGame::addItem(AdItem *item) {
 //////////////////////////////////////////////////////////////////////////
 bool AdGame::resetContent() {
 	// clear pending dialogs
-	for (uint32 i = 0; i < _dlgPendingBranches.size(); i++) {
+	for (uint32 i = 0; i < _dlgPendingBranches.getSize(); i++) {
 		delete[] _dlgPendingBranches[i];
 	}
-	_dlgPendingBranches.clear();
+	_dlgPendingBranches.removeAll();
 
 
 	// clear inventories
-	for (uint32 i = 0; i < _inventories.size(); i++) {
-		_inventories[i]->_takenItems.clear();
+	for (uint32 i = 0; i < _inventories.getSize(); i++) {
+		_inventories[i]->_takenItems.removeAll();
 	}
 
 	// clear scene states
-	for (uint32 i = 0; i < _sceneStates.size(); i++) {
+	for (uint32 i = 0; i < _sceneStates.getSize(); i++) {
 		delete _sceneStates[i];
 	}
-	_sceneStates.clear();
+	_sceneStates.removeAll();
 
 	// clear once responses
-	for (uint32 i = 0; i < _responsesBranch.size(); i++) {
+	for (uint32 i = 0; i < _responsesBranch.getSize(); i++) {
 		delete _responsesBranch[i];
 	}
-	_responsesBranch.clear();
+	_responsesBranch.removeAll();
 
 	// clear once game responses
-	for (uint32 i = 0; i < _responsesGame.size(); i++) {
+	for (uint32 i = 0; i < _responsesGame.getSize(); i++) {
 		delete _responsesGame[i];
 	}
-	_responsesGame.clear();
+	_responsesGame.removeAll();
 
 	// reload inventory items
 	if (_itemsFile) {
@@ -2259,15 +2259,15 @@ bool AdGame::deleteItem(AdItem *item) {
 	_scene->handleItemAssociations(item->getName(), false);
 
 	// remove from all inventories
-	for (uint32 i = 0; i < _inventories.size(); i++) {
+	for (uint32 i = 0; i < _inventories.getSize(); i++) {
 		_inventories[i]->removeItem(item);
 	}
 
 	// remove object
-	for (uint32 i = 0; i < _items.size(); i++) {
+	for (uint32 i = 0; i < _items.getSize(); i++) {
 		if (_items[i] == item) {
 			unregisterObject(_items[i]);
-			_items.remove_at(i);
+			_items.removeAt(i);
 			break;
 		}
 	}
@@ -2289,7 +2289,7 @@ bool AdGame::addSpeechDir(const char *dir) {
 		Common::strcat_s(temp, dirSize, "\\");
 	}
 
-	for (uint32 i = 0; i < _speechDirs.size(); i++) {
+	for (uint32 i = 0; i < _speechDirs.getSize(); i++) {
 		if (scumm_stricmp(_speechDirs[i], temp) == 0) {
 			delete[] temp;
 			return STATUS_OK;
@@ -2315,10 +2315,10 @@ bool AdGame::removeSpeechDir(const char *dir) {
 	}
 
 	bool found = false;
-	for (uint32 i = 0; i < _speechDirs.size(); i++) {
+	for (uint32 i = 0; i < _speechDirs.getSize(); i++) {
 		if (scumm_stricmp(_speechDirs[i], temp) == 0) {
 			delete[] _speechDirs[i];
-			_speechDirs.remove_at(i);
+			_speechDirs.removeAt(i);
 			found = true;
 			break;
 		}
@@ -2333,7 +2333,7 @@ bool AdGame::removeSpeechDir(const char *dir) {
 char *AdGame::findSpeechFile(char *stringID) {
 	char *ret = new char[MAX_PATH_LENGTH];
 
-	for (uint32 i = 0; i < _speechDirs.size(); i++) {
+	for (uint32 i = 0; i < _speechDirs.getSize(); i++) {
 		Common::sprintf_s(ret, MAX_PATH_LENGTH, "%s%s.ogg", _speechDirs[i], stringID);
 		if (BaseFileManager::getEngineInstance()->hasFile(ret)) {
 			return ret;
diff --git a/engines/wintermute/ad/ad_geom_ext.cpp b/engines/wintermute/ad/ad_geom_ext.cpp
index ff1af1f9476..e432aadd54f 100644
--- a/engines/wintermute/ad/ad_geom_ext.cpp
+++ b/engines/wintermute/ad/ad_geom_ext.cpp
@@ -41,10 +41,10 @@ AdGeomExt::AdGeomExt(BaseGame *in_gameRef) : BaseClass(in_gameRef) {
 
 //////////////////////////////////////////////////////////////////////////
 AdGeomExt::~AdGeomExt() {
-	for (uint i = 0; i < _nodes.size(); i++) {
+	for (uint i = 0; i < _nodes.getSize(); i++) {
 		delete _nodes[i];
 	}
-	_nodes.clear();
+	_nodes.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -144,7 +144,7 @@ AdGeomExtNode *AdGeomExt::matchName(const char *name) {
 		return nullptr;
 	}
 
-	for (uint i = 0; i < _nodes.size(); i++) {
+	for (uint i = 0; i < _nodes.getSize(); i++) {
 		if (_nodes[i]->matchesName(name)) {
 			return _nodes[i];
 		}
diff --git a/engines/wintermute/ad/ad_inventory.cpp b/engines/wintermute/ad/ad_inventory.cpp
index d80372419b1..9dc0c9df1f7 100644
--- a/engines/wintermute/ad/ad_inventory.cpp
+++ b/engines/wintermute/ad/ad_inventory.cpp
@@ -43,7 +43,7 @@ AdInventory::AdInventory(BaseGame *inGame) : BaseObject(inGame) {
 
 //////////////////////////////////////////////////////////////////////////
 AdInventory::~AdInventory() {
-	_takenItems.clear(); // ref only
+	_takenItems.removeAll(); // ref only
 }
 
 
@@ -59,9 +59,9 @@ bool AdInventory::insertItem(const char *name, const char *insertAfter) {
 	}
 
 	int32 insertIndex = -1;
-	for (int32 i = 0; i < (int32)_takenItems.size(); i++) {
+	for (int32 i = 0; i < (int32)_takenItems.getSize(); i++) {
 		if (scumm_stricmp(_takenItems[i]->getName(), name) == 0) {
-			_takenItems.remove_at(i);
+			_takenItems.removeAt(i);
 			i--;
 			continue;
 		}
@@ -74,7 +74,7 @@ bool AdInventory::insertItem(const char *name, const char *insertAfter) {
 	if (insertIndex == -1) {
 		_takenItems.add(item);
 	} else {
-		_takenItems.insert_at(insertIndex, item);
+		_takenItems.insertAt(insertIndex, item);
 	}
 
 	return STATUS_OK;
@@ -87,12 +87,12 @@ bool AdInventory::removeItem(const char *name) {
 		return STATUS_FAILED;
 	}
 
-	for (uint32 i = 0; i < _takenItems.size(); i++) {
+	for (uint32 i = 0; i < _takenItems.getSize(); i++) {
 		if (scumm_stricmp(_takenItems[i]->getName(), name) == 0) {
 			if (((AdGame *)_gameRef)->_selectedItem == _takenItems[i]) {
 				((AdGame *)_gameRef)->_selectedItem = nullptr;
 			}
-			_takenItems.remove_at(i);
+			_takenItems.removeAt(i);
 			return STATUS_OK;
 		}
 	}
@@ -108,12 +108,12 @@ bool AdInventory::removeItem(AdItem *item) {
 		return STATUS_FAILED;
 	}
 
-	for (uint32 i = 0; i < _takenItems.size(); i++) {
+	for (uint32 i = 0; i < _takenItems.getSize(); i++) {
 		if (_takenItems[i] == item) {
 			if (((AdGame *)_gameRef)->_selectedItem == _takenItems[i]) {
 				((AdGame *)_gameRef)->_selectedItem = nullptr;
 			}
-			_takenItems.remove_at(i);
+			_takenItems.removeAt(i);
 			return STATUS_OK;
 		}
 	}
diff --git a/engines/wintermute/ad/ad_inventory_box.cpp b/engines/wintermute/ad/ad_inventory_box.cpp
index 8041565b734..235ecd091f7 100644
--- a/engines/wintermute/ad/ad_inventory_box.cpp
+++ b/engines/wintermute/ad/ad_inventory_box.cpp
@@ -113,7 +113,7 @@ bool AdInventoryBox::display() {
 
 	if (_window) {
 		_window->enableWidget("prev", _scrollOffset > 0);
-		_window->enableWidget("next", _scrollOffset + itemsX * itemsY < (int32)adGame->_inventoryOwner->getInventory()->_takenItems.size());
+		_window->enableWidget("next", _scrollOffset + itemsX * itemsY < (int32)adGame->_inventoryOwner->getInventory()->_takenItems.getSize());
 	}
 
 
@@ -142,7 +142,7 @@ bool AdInventoryBox::display() {
 		int xxx = rect.left;
 		for (int i = 0; i < itemsX; i++) {
 			int itemIndex = _scrollOffset + j * itemsX + i;
-			if (itemIndex >= 0 && itemIndex < (int32)adGame->_inventoryOwner->getInventory()->_takenItems.size()) {
+			if (itemIndex >= 0 && itemIndex < (int32)adGame->_inventoryOwner->getInventory()->_takenItems.getSize()) {
 				AdItem *item = adGame->_inventoryOwner->getInventory()->_takenItems[itemIndex];
 				if (item != ((AdGame *)_gameRef)->_selectedItem || !_hideSelected) {
 					item->update();
@@ -324,7 +324,7 @@ bool AdInventoryBox::loadBuffer(char *buffer, bool complete) {
 	_visible = alwaysVisible;
 
 	if (_window) {
-		for (uint32 i = 0; i < _window->_widgets.size(); i++) {
+		for (uint32 i = 0; i < _window->_widgets.getSize(); i++) {
 			if (!_window->_widgets[i]->getListener()) {
 				_window->_widgets[i]->setListener(this, _window->_widgets[i], 0);
 			}
diff --git a/engines/wintermute/ad/ad_layer.cpp b/engines/wintermute/ad/ad_layer.cpp
index 30a9dcaaefa..54e3f4f2312 100644
--- a/engines/wintermute/ad/ad_layer.cpp
+++ b/engines/wintermute/ad/ad_layer.cpp
@@ -52,10 +52,10 @@ AdLayer::AdLayer(BaseGame *inGame) : BaseObject(inGame) {
 
 //////////////////////////////////////////////////////////////////////////
 AdLayer::~AdLayer() {
-	for (uint32 i = 0; i < _nodes.size(); i++) {
+	for (uint32 i = 0; i < _nodes.getSize(); i++) {
 		delete _nodes[i];
 	}
-	_nodes.clear();
+	_nodes.removeAll();
 }
 
 
@@ -245,7 +245,7 @@ bool AdLayer::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		if (val->_type == VAL_INT) {
 			node = val->getInt();
 		} else { // get by name
-			for (uint32 i = 0; i < _nodes.size(); i++) {
+			for (uint32 i = 0; i < _nodes.getSize(); i++) {
 				if ((_nodes[i]->_type == OBJECT_ENTITY && scumm_stricmp(_nodes[i]->_entity->getName(), val->getString()) == 0) ||
 				        (_nodes[i]->_type == OBJECT_REGION && scumm_stricmp(_nodes[i]->_region->getName(), val->getString()) == 0)) {
 					node = i;
@@ -254,7 +254,7 @@ bool AdLayer::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 			}
 		}
 
-		if (node < 0 || node >= (int32)_nodes.size()) {
+		if (node < 0 || node >= (int32)_nodes.getSize()) {
 			stack->pushNULL();
 		} else {
 			switch (_nodes[node]->_type) {
@@ -325,8 +325,8 @@ bool AdLayer::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		if (index < 0) {
 			index = 0;
 		}
-		if (index <= (int32)_nodes.size() - 1) {
-			_nodes.insert_at(index, node);
+		if (index <= (int32)_nodes.getSize() - 1) {
+			_nodes.insertAt(index, node);
 		} else {
 			_nodes.add(node);
 		}
@@ -344,7 +344,7 @@ bool AdLayer::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		AdSceneNode *toDelete = nullptr;
 		if (val->isNative()) {
 			BaseScriptable *temp = val->getNative();
-			for (uint32 i = 0; i < _nodes.size(); i++) {
+			for (uint32 i = 0; i < _nodes.getSize(); i++) {
 				if (_nodes[i]->_region == temp || _nodes[i]->_entity == temp) {
 					toDelete = _nodes[i];
 					break;
@@ -352,7 +352,7 @@ bool AdLayer::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 			}
 		} else {
 			int index = val->getInt();
-			if (index >= 0 && index < (int32)_nodes.size()) {
+			if (index >= 0 && index < (int32)_nodes.getSize()) {
 				toDelete = _nodes[index];
 			}
 		}
@@ -361,11 +361,11 @@ bool AdLayer::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 			return STATUS_OK;
 		}
 
-		for (uint32 i = 0; i < _nodes.size(); i++) {
+		for (uint32 i = 0; i < _nodes.getSize(); i++) {
 			if (_nodes[i] == toDelete) {
 				delete _nodes[i];
 				_nodes[i] = nullptr;
-				_nodes.remove_at(i);
+				_nodes.removeAt(i);
 				break;
 			}
 		}
@@ -393,7 +393,7 @@ ScValue *AdLayer::scGetProperty(const Common::String &name) {
 	// NumNodes (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumNodes") {
-		_scValue->setInt(_nodes.size());
+		_scValue->setInt(_nodes.getSize());
 		return _scValue;
 	}
 
@@ -518,7 +518,7 @@ bool AdLayer::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 		buffer->putTextIndent(indent + 2, "CLOSE_UP=%s\n", _closeUp ? "TRUE" : "FALSE");
 	}
 
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
@@ -526,7 +526,7 @@ bool AdLayer::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 		_scProp->saveAsText(buffer, indent + 2);
 	}
 
-	for (uint32 i = 0; i < _nodes.size(); i++) {
+	for (uint32 i = 0; i < _nodes.getSize(); i++) {
 		switch (_nodes[i]->_type) {
 		case OBJECT_ENTITY:
 			_nodes[i]->_entity->saveAsText(buffer, indent + 2);
diff --git a/engines/wintermute/ad/ad_object.cpp b/engines/wintermute/ad/ad_object.cpp
index 342eac8016b..1083c8944e4 100644
--- a/engines/wintermute/ad/ad_object.cpp
+++ b/engines/wintermute/ad/ad_object.cpp
@@ -143,15 +143,15 @@ AdObject::~AdObject() {
 	}
 
 
-	for (uint32 i = 0; i < _attachmentsPre.size(); i++) {
+	for (uint32 i = 0; i < _attachmentsPre.getSize(); i++) {
 		_gameRef->unregisterObject(_attachmentsPre[i]);
 	}
-	_attachmentsPre.clear();
+	_attachmentsPre.removeAll();
 
-	for (uint32 i = 0; i < _attachmentsPost.size(); i++) {
+	for (uint32 i = 0; i < _attachmentsPost.getSize(); i++) {
 		_gameRef->unregisterObject(_attachmentsPost[i]);
 	}
-	_attachmentsPost.clear();
+	_attachmentsPost.removeAll();
 }
 
 
@@ -313,7 +313,7 @@ bool AdObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 			regFound = true;
 		} else if (val->isString()) {
 			const char *regionName = val->getString();
-			for (i = 0; i < main->_nodes.size(); i++) {
+			for (i = 0; i < main->_nodes.getSize(); i++) {
 				if (main->_nodes[i]->_type == OBJECT_REGION && main->_nodes[i]->_region->getName() && scumm_stricmp(main->_nodes[i]->_region->getName(), regionName) == 0) {
 					_stickRegion = main->_nodes[i]->_region;
 					regFound = true;
@@ -323,7 +323,7 @@ bool AdObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		} else if (val->isNative()) {
 			BaseScriptable *obj = val->getNative();
 
-			for (i = 0; i < main->_nodes.size(); i++) {
+			for (i = 0; i < main->_nodes.getSize(); i++) {
 				if (main->_nodes[i]->_type == OBJECT_REGION && main->_nodes[i]->_region == obj) {
 					_stickRegion = main->_nodes[i]->_region;
 					regFound = true;
@@ -447,7 +447,7 @@ bool AdObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 			} else {
 				stack->pushNULL();
 			}
-		} else if (val->isNULL() || val->getInt() < 0 || val->getInt() >= (int32)_inventory->_takenItems.size()) {
+		} else if (val->isNULL() || val->getInt() < 0 || val->getInt() >= (int32)_inventory->_takenItems.getSize()) {
 			stack->pushNULL();
 		} else {
 			stack->pushNative(_inventory->_takenItems[val->getInt()], true);
@@ -469,7 +469,7 @@ bool AdObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 
 		ScValue *val = stack->pop();
 		if (!val->isNULL()) {
-			for (uint32 i = 0; i < _inventory->_takenItems.size(); i++) {
+			for (uint32 i = 0; i < _inventory->_takenItems.getSize(); i++) {
 				if (val->getNative() == _inventory->_takenItems[i]) {
 					stack->pushBool(true);
 					return STATUS_OK;
@@ -564,37 +564,37 @@ bool AdObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		bool found = false;
 		if (val->isNative()) {
 			BaseScriptable *obj = val->getNative();
-			for (uint32 i = 0; i < _attachmentsPre.size(); i++) {
+			for (uint32 i = 0; i < _attachmentsPre.getSize(); i++) {
 				if (_attachmentsPre[i] == obj) {
 					found = true;
 					_gameRef->unregisterObject(_attachmentsPre[i]);
-					_attachmentsPre.remove_at(i);
+					_attachmentsPre.removeAt(i);
 					i--;
 				}
 			}
-			for (uint32 i = 0; i < _attachmentsPost.size(); i++) {
+			for (uint32 i = 0; i < _attachmentsPost.getSize(); i++) {
 				if (_attachmentsPost[i] == obj) {
 					found = true;
 					_gameRef->unregisterObject(_attachmentsPost[i]);
-					_attachmentsPost.remove_at(i);
+					_attachmentsPost.removeAt(i);
 					i--;
 				}
 			}
 		} else {
 			const char *attachmentName = val->getString();
-			for (int32 i = 0; i < (int32)_attachmentsPre.size(); i++) {
+			for (int32 i = 0; i < (int32)_attachmentsPre.getSize(); i++) {
 				if (_attachmentsPre[i]->getName() && scumm_stricmp(_attachmentsPre[i]->getName(), attachmentName) == 0) {
 					found = true;
 					_gameRef->unregisterObject(_attachmentsPre[i]);
-					_attachmentsPre.remove_at(i);
+					_attachmentsPre.removeAt(i);
 					i--;
 				}
 			}
-			for (int32 i = 0; i < (int32)_attachmentsPost.size(); i++) {
+			for (int32 i = 0; i < (int32)_attachmentsPost.getSize(); i++) {
 				if (_attachmentsPost[i]->getName() && scumm_stricmp(_attachmentsPost[i]->getName(), attachmentName) == 0) {
 					found = true;
 					_gameRef->unregisterObject(_attachmentsPost[i]);
-					_attachmentsPost.remove_at(i);
+					_attachmentsPost.removeAt(i);
 					i--;
 				}
 			}
@@ -615,13 +615,13 @@ bool AdObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		if (val->isInt()) {
 			int index = val->getInt();
 			int currIndex = 0;
-			for (uint32 i = 0; i < _attachmentsPre.size(); i++) {
+			for (uint32 i = 0; i < _attachmentsPre.getSize(); i++) {
 				if (currIndex == index) {
 					ret = _attachmentsPre[i];
 				}
 				currIndex++;
 			}
-			for (uint32 i = 0; i < _attachmentsPost.size(); i++) {
+			for (uint32 i = 0; i < _attachmentsPost.getSize(); i++) {
 				if (currIndex == index) {
 					ret = _attachmentsPost[i];
 				}
@@ -629,14 +629,14 @@ bool AdObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 			}
 		} else {
 			const char *attachmentName = val->getString();
-			for (uint32 i = 0; i < _attachmentsPre.size(); i++) {
+			for (uint32 i = 0; i < _attachmentsPre.getSize(); i++) {
 				if (_attachmentsPre[i]->getName() && scumm_stricmp(_attachmentsPre[i]->getName(), attachmentName) == 0) {
 					ret = _attachmentsPre[i];
 					break;
 				}
 			}
 			if (!ret) {
-				for (uint32 i = 0; i < _attachmentsPost.size(); i++) {
+				for (uint32 i = 0; i < _attachmentsPost.getSize(); i++) {
 					if (_attachmentsPost[i]->getName() && scumm_stricmp(_attachmentsPost[i]->getName(), attachmentName) == 0) {
 						ret = _attachmentsPre[i];
 						break;
@@ -738,7 +738,7 @@ ScValue *AdObject::scGetProperty(const Common::String &name) {
 	// NumItems (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumItems") {
-		_scValue->setInt(getInventory()->_takenItems.size());
+		_scValue->setInt(getInventory()->_takenItems.getSize());
 		return _scValue;
 	}
 
@@ -759,7 +759,7 @@ ScValue *AdObject::scGetProperty(const Common::String &name) {
 	// NumAttachments (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumAttachments") {
-		_scValue->setInt(_attachmentsPre.size() + _attachmentsPost.size());
+		_scValue->setInt(_attachmentsPre.getSize() + _attachmentsPost.getSize());
 		return _scValue;
 	} else {
 		return BaseObject::scGetProperty(name);
@@ -861,12 +861,12 @@ bool AdObject::setFont(const char *filename) {
 
 //////////////////////////////////////////////////////////////////////////
 int32 AdObject::getHeight() {
-	if (!_currentSprite || (int32)_currentSprite->_frames.size() <= _currentSprite->_currentFrame) {
+	if (!_currentSprite || (int32)_currentSprite->_frames.getSize() <= _currentSprite->_currentFrame) {
 		return 0;
 	} else {
 		BaseFrame *frame = _currentSprite->_frames[_currentSprite->_currentFrame];
 		int32 ret = 0;
-		for (uint32 i = 0; i < frame->_subframes.size(); i++) {
+		for (uint32 i = 0; i < frame->_subframes.getSize(); i++) {
 			ret = MAX(ret, frame->_subframes[i]->_hotspotY);
 		}
 
@@ -1205,10 +1205,10 @@ bool AdObject::getScale(float *scaleX, float *scaleY) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdObject::updateSpriteAttachments() {
-	for (uint32 i = 0; i < _attachmentsPre.size(); i++) {
+	for (uint32 i = 0; i < _attachmentsPre.getSize(); i++) {
 		_attachmentsPre[i]->update();
 	}
-	for (uint32 i = 0; i < _attachmentsPost.size(); i++) {
+	for (uint32 i = 0; i < _attachmentsPost.getSize(); i++) {
 		_attachmentsPost[i]->update();
 	}
 	return STATUS_OK;
@@ -1217,11 +1217,11 @@ bool AdObject::updateSpriteAttachments() {
 //////////////////////////////////////////////////////////////////////////
 bool AdObject::displaySpriteAttachments(bool preDisplay) {
 	if (preDisplay) {
-		for (uint32 i = 0; i < _attachmentsPre.size(); i++) {
+		for (uint32 i = 0; i < _attachmentsPre.getSize(); i++) {
 			displaySpriteAttachment(_attachmentsPre[i]);
 		}
 	} else {
-		for (uint32 i = 0; i < _attachmentsPost.size(); i++) {
+		for (uint32 i = 0; i < _attachmentsPost.getSize(); i++) {
 			displaySpriteAttachment(_attachmentsPost[i]);
 		}
 	}
diff --git a/engines/wintermute/ad/ad_object_3d.cpp b/engines/wintermute/ad/ad_object_3d.cpp
index 05ca4ca89ba..eb2e4f26fc8 100644
--- a/engines/wintermute/ad/ad_object_3d.cpp
+++ b/engines/wintermute/ad/ad_object_3d.cpp
@@ -73,16 +73,16 @@ AdObject3D::~AdObject3D() {
 
 //////////////////////////////////////////////////////////////////////////
 void AdObject3D::clearIgnoredLights() {
-	for (uint32 i = 0; i < _ignoredLights.size(); ++i) {
+	for (uint32 i = 0; i < _ignoredLights.getSize(); ++i) {
 		delete _ignoredLights[i];
 	}
 
-	_ignoredLights.clear();
+	_ignoredLights.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////////
 bool AdObject3D::addIgnoredLight(char *lightName) {
-	for (uint32 i = 0; i < _ignoredLights.size(); i++) {
+	for (uint32 i = 0; i < _ignoredLights.getSize(); i++) {
 		if (scumm_stricmp(_ignoredLights[i], lightName) == 0) {
 			return true;
 		}
@@ -94,10 +94,10 @@ bool AdObject3D::addIgnoredLight(char *lightName) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdObject3D::removeIgnoredLight(char *lightName) {
-	for (uint32 i = 0; i < _ignoredLights.size(); i++) {
+	for (uint32 i = 0; i < _ignoredLights.getSize(); i++) {
 		if (scumm_stricmp(_ignoredLights[i], lightName) == 0) {
 			delete[] _ignoredLights[i];
-			_ignoredLights.remove_at(i);
+			_ignoredLights.removeAt(i);
 			return true;
 		}
 	}
diff --git a/engines/wintermute/ad/ad_path.cpp b/engines/wintermute/ad/ad_path.cpp
index 9bbdacfc880..534b192a9e5 100644
--- a/engines/wintermute/ad/ad_path.cpp
+++ b/engines/wintermute/ad/ad_path.cpp
@@ -47,11 +47,11 @@ AdPath::~AdPath() {
 
 //////////////////////////////////////////////////////////////////////////
 void AdPath::reset() {
-	for (uint32 i = 0; i < _points.size(); i++) {
+	for (uint32 i = 0; i < _points.getSize(); i++) {
 		delete _points[i];
 	}
 
-	_points.clear();
+	_points.removeAll();
 	_currIndex = -1;
 	_ready = false;
 }
@@ -59,7 +59,7 @@ void AdPath::reset() {
 
 //////////////////////////////////////////////////////////////////////////
 BasePoint *AdPath::getFirst() {
-	if (_points.size() > 0) {
+	if (_points.getSize() > 0) {
 		_currIndex = 0;
 		return _points[_currIndex];
 	} else {
@@ -71,7 +71,7 @@ BasePoint *AdPath::getFirst() {
 //////////////////////////////////////////////////////////////////////////
 BasePoint *AdPath::getNext() {
 	_currIndex++;
-	if (_currIndex < (int32)_points.size()) {
+	if (_currIndex < (int32)_points.getSize()) {
 		return _points[_currIndex];
 	} else {
 		return nullptr;
@@ -81,7 +81,7 @@ BasePoint *AdPath::getNext() {
 
 //////////////////////////////////////////////////////////////////////////
 BasePoint *AdPath::getCurrent() {
-	if (_currIndex >= 0 && _currIndex < (int32)_points.size()) {
+	if (_currIndex >= 0 && _currIndex < (int32)_points.getSize()) {
 		return _points[_currIndex];
 	} else {
 		return nullptr;
diff --git a/engines/wintermute/ad/ad_path3d.cpp b/engines/wintermute/ad/ad_path3d.cpp
index fa28f711fb5..fde893b1246 100644
--- a/engines/wintermute/ad/ad_path3d.cpp
+++ b/engines/wintermute/ad/ad_path3d.cpp
@@ -45,11 +45,11 @@ AdPath3D::~AdPath3D() {
 
 //////////////////////////////////////////////////////////////////////////
 void AdPath3D::reset() {
-	for (uint i = 0; i < _points.size(); i++) {
+	for (uint i = 0; i < _points.getSize(); i++) {
 		delete _points[i];
 	}
 
-	_points.clear();
+	_points.removeAll();
 	_currIndex = -1;
 	_ready = false;
 }
@@ -74,7 +74,7 @@ bool AdPath3D::setReady(bool ready) {
 
 //////////////////////////////////////////////////////////////////////////
 DXVector3 *AdPath3D::getFirst() {
-	if (_points.size() > 0) {
+	if (_points.getSize() > 0) {
 		_currIndex = 0;
 		return _points[_currIndex];
 	} else {
@@ -85,7 +85,7 @@ DXVector3 *AdPath3D::getFirst() {
 //////////////////////////////////////////////////////////////////////////
 DXVector3 *AdPath3D::getNext() {
 	_currIndex++;
-	if (static_cast<uint>(_currIndex) < _points.size()) {
+	if (static_cast<uint>(_currIndex) < _points.getSize()) {
 		return _points[_currIndex];
 	} else {
 		return nullptr;
@@ -94,7 +94,7 @@ DXVector3 *AdPath3D::getNext() {
 
 //////////////////////////////////////////////////////////////////////////
 DXVector3 *AdPath3D::getCurrent() {
-	if (_currIndex >= 0 && static_cast<uint>(_currIndex) < _points.size()) {
+	if (_currIndex >= 0 && static_cast<uint>(_currIndex) < _points.getSize()) {
 		return _points[_currIndex];
 	} else {
 		return nullptr;
@@ -109,7 +109,7 @@ bool AdPath3D::persist(BasePersistenceManager *persistMgr) {
 	persistMgr->transferBool(TMEMBER(_ready));
 
 	if (persistMgr->getIsSaving()) {
-		int32 j = _points.size();
+		int32 j = _points.getSize();
 		persistMgr->transferSint32("ArraySize", &j);
 		for (int i = 0; i < j; i++) {
 			persistMgr->transferFloat("x", &_points[i]->_x);
diff --git a/engines/wintermute/ad/ad_region.cpp b/engines/wintermute/ad/ad_region.cpp
index 88d5961ea87..054def279aa 100644
--- a/engines/wintermute/ad/ad_region.cpp
+++ b/engines/wintermute/ad/ad_region.cpp
@@ -142,10 +142,10 @@ bool AdRegion::loadBuffer(char *buffer, bool complete) {
 		buffer = params;
 	}
 
-	for (uint32 i = 0; i < _points.size(); i++) {
+	for (uint32 i = 0; i < _points.getSize(); i++) {
 		delete _points[i];
 	}
-	_points.clear();
+	_points.removeAll();
 
 	int ar = 255, ag = 255, ab = 255, alpha = 255;
 
@@ -379,7 +379,7 @@ bool AdRegion::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	buffer->putTextIndent(indent + 2, "ALPHA = %d\n", RGBCOLGetA(_alpha));
 	buffer->putTextIndent(indent + 2, "EDITOR_SELECTED=%s\n", _editorSelected ? "TRUE" : "FALSE");
 
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
@@ -387,7 +387,7 @@ bool AdRegion::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 		_scProp->saveAsText(buffer, indent + 2);
 	}
 
-	for (uint32 i = 0; i < _points.size(); i++) {
+	for (uint32 i = 0; i < _points.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "POINT {%d,%d}\n", _points[i]->x, _points[i]->y);
 	}
 
diff --git a/engines/wintermute/ad/ad_response_box.cpp b/engines/wintermute/ad/ad_response_box.cpp
index f4a0166746b..0e52e9f49d2 100644
--- a/engines/wintermute/ad/ad_response_box.cpp
+++ b/engines/wintermute/ad/ad_response_box.cpp
@@ -97,30 +97,30 @@ AdResponseBox::~AdResponseBox() {
 }
 
 uint32 AdResponseBox::getNumResponses() const {
-	return _responses.size();
+	return _responses.getSize();
 }
 
 //////////////////////////////////////////////////////////////////////////
 void AdResponseBox::clearResponses() {
-	for (uint32 i = 0; i < _responses.size(); i++) {
+	for (uint32 i = 0; i < _responses.getSize(); i++) {
 		delete _responses[i];
 	}
-	_responses.clear();
+	_responses.removeAll();
 }
 
 
 //////////////////////////////////////////////////////////////////////////
 void AdResponseBox::clearButtons() {
-	for (uint32 i = 0; i < _respButtons.size(); i++) {
+	for (uint32 i = 0; i < _respButtons.getSize(); i++) {
 		delete _respButtons[i];
 	}
-	_respButtons.clear();
+	_respButtons.removeAll();
 }
 
 
 //////////////////////////////////////////////////////////////////////////
 bool AdResponseBox::invalidateButtons() {
-	for (uint32 i = 0; i < _respButtons.size(); i++) {
+	for (uint32 i = 0; i < _respButtons.getSize(); i++) {
 		_respButtons[i]->setImage(nullptr);
 		_respButtons[i]->setFont(nullptr);
 		_respButtons[i]->setText("");
@@ -137,7 +137,7 @@ bool AdResponseBox::createButtons() {
 	clearButtons();
 
 	_scrollOffset = 0;
-	for (uint32 i = 0; i < _responses.size(); i++) {
+	for (uint32 i = 0; i < _responses.getSize(); i++) {
 		UIButton *btn = new UIButton(_gameRef);
 		if (btn) {
 			btn->_parent = _window;
@@ -390,7 +390,7 @@ bool AdResponseBox::loadBuffer(char *buffer, bool complete) {
 	}
 
 	if (_window) {
-		for (uint32 i = 0; i < _window->_widgets.size(); i++) {
+		for (uint32 i = 0; i < _window->_widgets.getSize(); i++) {
 			if (!_window->_widgets[i]->getListener()) {
 				_window->_widgets[i]->setListener(this, _window->_widgets[i], 0);
 			}
@@ -484,7 +484,7 @@ bool AdResponseBox::display() {
 	// shift down if needed
 	if (!_horizontal) {
 		int totalHeight = 0;
-		for (i = 0; i < (int32) _respButtons.size(); i++) {
+		for (i = 0; i < (int32) _respButtons.getSize(); i++) {
 			totalHeight += (_respButtons[i]->getHeight() + _spacing);
 		}
 		totalHeight -= _spacing;
@@ -511,7 +511,7 @@ bool AdResponseBox::display() {
 
 	// prepare response buttons
 	bool scrollNeeded = false;
-	for (i = _scrollOffset; i < (int32) _respButtons.size(); i++) {
+	for (i = _scrollOffset; i < (int32) _respButtons.getSize(); i++) {
 
 #ifdef ENABLE_FOXTAIL
 		// FoxTail's "HORIZONTAL=TRUE" display boxes are actual 2x3 display boxes
@@ -569,7 +569,7 @@ bool AdResponseBox::display() {
 
 
 	// display response buttons
-	for (i = _scrollOffset; i < (int32) _respButtons.size(); i++) {
+	for (i = _scrollOffset; i < (int32) _respButtons.getSize(); i++) {
 		_respButtons[i]->display();
 	}
 
@@ -639,12 +639,12 @@ bool AdResponseBox::persist(BasePersistenceManager *persistMgr) {
 bool AdResponseBox::weedResponses() {
 	AdGame *adGame = (AdGame *)_gameRef;
 
-	for (int32 i = 0; i < (int32)_responses.size(); i++) {
+	for (int32 i = 0; i < (int32)_responses.getSize(); i++) {
 		switch (_responses[i]->_responseType) {
 		case RESPONSE_ONCE:
 			if (adGame->branchResponseUsed(_responses[i]->getID())) {
 				delete _responses[i];
-				_responses.remove_at(i);
+				_responses.removeAt(i);
 				i--;
 			}
 			break;
@@ -652,7 +652,7 @@ bool AdResponseBox::weedResponses() {
 		case RESPONSE_ONCE_GAME:
 			if (adGame->gameResponseUsed(_responses[i]->getID())) {
 				delete _responses[i];
-				_responses.remove_at(i);
+				_responses.removeAt(i);
 				i--;
 			}
 			break;
@@ -688,7 +688,7 @@ void AdResponseBox::addResponse(const AdResponse *response) {
 }
 
 int32 AdResponseBox::getIdForResponseNum(uint32 num) const {
-	assert(num < _responses.size());
+	assert(num < _responses.getSize());
 	return _responses[num]->getID();
 }
 
@@ -723,13 +723,13 @@ BaseObject *AdResponseBox::getNextAccessObject(BaseObject *currObject) {
 	BaseArray<UIObject *> objects;
 	getObjects(objects, true);
 
-	if (objects.size() == 0) {
+	if (objects.getSize() == 0) {
 		return nullptr;
 	} else {
 		if (currObject != nullptr) {
-			for (uint32 i = 0; i < objects.size(); i++) {
+			for (uint32 i = 0; i < objects.getSize(); i++) {
 				if (objects[i] == currObject) {
-					if (i < objects.size() - 1) {
+					if (i < objects.getSize() - 1) {
 						return objects[i + 1];
 					} else {
 						break;
@@ -747,11 +747,11 @@ BaseObject *AdResponseBox::getPrevAccessObject(BaseObject *currObject) {
 	BaseArray<UIObject *> objects;
 	getObjects(objects, true);
 
-	if (objects.size() == 0) {
+	if (objects.getSize() == 0) {
 		return nullptr;
 	} else {
 		if (currObject != nullptr) {
-			for (int i = objects.size() - 1; i >= 0; i--) {
+			for (int i = objects.getSize() - 1; i >= 0; i--) {
 				if (objects[i] == currObject) {
 					if (i > 0) {
 						return objects[i - 1];
@@ -761,14 +761,14 @@ BaseObject *AdResponseBox::getPrevAccessObject(BaseObject *currObject) {
 				}
 			}
 		}
-		return objects[objects.size() - 1];
+		return objects[objects.getSize() - 1];
 	}
 	return nullptr;
 }
 
 //////////////////////////////////////////////////////////////////////////
 bool AdResponseBox::getObjects(BaseArray<UIObject *> &objects, bool interactiveOnly) {
-	for (uint32 i = 0; i < _respButtons.size(); i++) {
+	for (uint32 i = 0; i < _respButtons.getSize(); i++) {
 		objects.add(_respButtons[i]);
 	}
 	if (_window) {
diff --git a/engines/wintermute/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp
index 40e09743307..cbf08352122 100644
--- a/engines/wintermute/ad/ad_scene.cpp
+++ b/engines/wintermute/ad/ad_scene.cpp
@@ -185,38 +185,38 @@ void AdScene::cleanup() {
 	_gameRef->unregisterObject(_fader);
 	_fader = nullptr;
 
-	for (uint32 i = 0; i < _layers.size(); i++) {
+	for (uint32 i = 0; i < _layers.getSize(); i++) {
 		_gameRef->unregisterObject(_layers[i]);
 	}
-	_layers.clear();
+	_layers.removeAll();
 
 
-	for (uint32 i = 0; i < _waypointGroups.size(); i++) {
+	for (uint32 i = 0; i < _waypointGroups.getSize(); i++) {
 		_gameRef->unregisterObject(_waypointGroups[i]);
 	}
-	_waypointGroups.clear();
+	_waypointGroups.removeAll();
 
-	for (uint32 i = 0; i < _scaleLevels.size(); i++) {
+	for (uint32 i = 0; i < _scaleLevels.getSize(); i++) {
 		_gameRef->unregisterObject(_scaleLevels[i]);
 	}
-	_scaleLevels.clear();
+	_scaleLevels.removeAll();
 
-	for (uint32 i = 0; i < _rotLevels.size(); i++) {
+	for (uint32 i = 0; i < _rotLevels.getSize(); i++) {
 		_gameRef->unregisterObject(_rotLevels[i]);
 	}
-	_rotLevels.clear();
+	_rotLevels.removeAll();
 
 
-	for (uint32 i = 0; i < _pfPath.size(); i++) {
+	for (uint32 i = 0; i < _pfPath.getSize(); i++) {
 		delete _pfPath[i];
 	}
-	_pfPath.clear();
+	_pfPath.removeAll();
 	_pfPointsNum = 0;
 
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		_gameRef->unregisterObject(_objects[i]);
 	}
-	_objects.clear();
+	_objects.removeAll();
 
 #ifdef ENABLE_WME3D
 	delete _geom;
@@ -278,7 +278,7 @@ bool AdScene::getPath(const BasePoint &source, const BasePoint &target, AdPath *
 		pfPointsAdd(target.x, target.y, INT_MAX_VALUE);
 
 		// active waypoints
-		for (uint32 i = 0; i < _waypointGroups.size(); i++) {
+		for (uint32 i = 0; i < _waypointGroups.getSize(); i++) {
 			if (_waypointGroups[i]->_active) {
 				pfAddWaypointGroup(_waypointGroups[i], requester);
 			}
@@ -286,13 +286,13 @@ bool AdScene::getPath(const BasePoint &source, const BasePoint &target, AdPath *
 
 
 		// free waypoints
-		for (uint32 i = 0; i < _objects.size(); i++) {
+		for (uint32 i = 0; i < _objects.getSize(); i++) {
 			if (_objects[i]->_active && _objects[i] != requester && _objects[i]->_currentWptGroup) {
 				pfAddWaypointGroup(_objects[i]->_currentWptGroup, requester);
 			}
 		}
 		AdGame *adGame = (AdGame *)_gameRef;
-		for (uint32 i = 0; i < adGame->_objects.size(); i++) {
+		for (uint32 i = 0; i < adGame->_objects.getSize(); i++) {
 			if (adGame->_objects[i]->_active && adGame->_objects[i] != requester && adGame->_objects[i]->_currentWptGroup) {
 				pfAddWaypointGroup(adGame->_objects[i]->_currentWptGroup, requester);
 			}
@@ -309,7 +309,7 @@ void AdScene::pfAddWaypointGroup(AdWaypointGroup *wpt, BaseObject *requester) {
 		return;
 	}
 
-	for (uint32 i = 0; i < wpt->_points.size(); i++) {
+	for (uint32 i = 0; i < wpt->_points.getSize(); i++) {
 		if (isBlockedAt(wpt->_points[i]->x, wpt->_points[i]->y, true, requester)) {
 			continue;
 		}
@@ -326,7 +326,7 @@ float AdScene::getZoomAt(int x, int y) {
 
 	bool found = false;
 	if (_mainLayer) {
-		for (int i = _mainLayer->_nodes.size() - 1; i >= 0; i--) {
+		for (int i = _mainLayer->_nodes.getSize() - 1; i >= 0; i--) {
 			AdSceneNode *node = _mainLayer->_nodes[i];
 			if (node->_type == OBJECT_REGION && node->_region->_active && !node->_region->isBlocked() && node->_region->pointInRegion(x, y)) {
 				if (node->_region->getZoom() != 0) {
@@ -359,7 +359,7 @@ uint32 AdScene::getAlphaAt(int x, int y, bool colorCheck) {
 	}
 
 	if (_mainLayer) {
-		for (int i = _mainLayer->_nodes.size() - 1; i >= 0; i--) {
+		for (int i = _mainLayer->_nodes.getSize() - 1; i >= 0; i--) {
 			AdSceneNode *node = _mainLayer->_nodes[i];
 			if (node->_type == OBJECT_REGION && node->_region->_active && (colorCheck || !node->_region->isBlocked()) && node->_region->pointInRegion(x, y)) {
 				if (!node->_region->isBlocked()) {
@@ -378,7 +378,7 @@ bool AdScene::isBlockedAt(int x, int y, bool checkFreeObjects, BaseObject *reque
 	bool ret = true;
 
 	if (checkFreeObjects) {
-		for (uint32 i = 0; i < _objects.size(); i++) {
+		for (uint32 i = 0; i < _objects.getSize(); i++) {
 			if (_objects[i]->_active && _objects[i] != requester && _objects[i]->_currentBlockRegion) {
 				if (_objects[i]->_currentBlockRegion->pointInRegion(x, y)) {
 					return true;
@@ -386,7 +386,7 @@ bool AdScene::isBlockedAt(int x, int y, bool checkFreeObjects, BaseObject *reque
 			}
 		}
 		AdGame *adGame = (AdGame *)_gameRef;
-		for (uint32 i = 0; i < adGame->_objects.size(); i++) {
+		for (uint32 i = 0; i < adGame->_objects.getSize(); i++) {
 			if (adGame->_objects[i]->_active && adGame->_objects[i] != requester && adGame->_objects[i]->_currentBlockRegion) {
 				if (adGame->_objects[i]->_currentBlockRegion->pointInRegion(x, y)) {
 					return true;
@@ -397,7 +397,7 @@ bool AdScene::isBlockedAt(int x, int y, bool checkFreeObjects, BaseObject *reque
 
 
 	if (_mainLayer) {
-		for (uint32 i = 0; i < _mainLayer->_nodes.size(); i++) {
+		for (uint32 i = 0; i < _mainLayer->_nodes.getSize(); i++) {
 			AdSceneNode *node = _mainLayer->_nodes[i];
 			/*
 			if (Node->_type == OBJECT_REGION && Node->_region->_active && Node->_region->_blocked && Node->_region->PointInRegion(X, Y))
@@ -425,7 +425,7 @@ bool AdScene::isWalkableAt(int x, int y, bool checkFreeObjects, BaseObject *requ
 	bool ret = false;
 
 	if (checkFreeObjects) {
-		for (uint32 i = 0; i < _objects.size(); i++) {
+		for (uint32 i = 0; i < _objects.getSize(); i++) {
 			if (_objects[i]->_active && _objects[i] != requester && _objects[i]->_currentBlockRegion) {
 				if (_objects[i]->_currentBlockRegion->pointInRegion(x, y)) {
 					return false;
@@ -433,7 +433,7 @@ bool AdScene::isWalkableAt(int x, int y, bool checkFreeObjects, BaseObject *requ
 			}
 		}
 		AdGame *adGame = (AdGame *)_gameRef;
-		for (uint32 i = 0; i < adGame->_objects.size(); i++) {
+		for (uint32 i = 0; i < adGame->_objects.getSize(); i++) {
 			if (adGame->_objects[i]->_active && adGame->_objects[i] != requester && adGame->_objects[i]->_currentBlockRegion) {
 				if (adGame->_objects[i]->_currentBlockRegion->pointInRegion(x, y)) {
 					return false;
@@ -444,7 +444,7 @@ bool AdScene::isWalkableAt(int x, int y, bool checkFreeObjects, BaseObject *requ
 
 
 	if (_mainLayer) {
-		for (uint32 i = 0; i < _mainLayer->_nodes.size(); i++) {
+		for (uint32 i = 0; i < _mainLayer->_nodes.getSize(); i++) {
 			AdSceneNode *node = _mainLayer->_nodes[i];
 			if (node->_type == OBJECT_REGION && node->_region->_active && !node->_region->hasDecoration() && node->_region->pointInRegion(x, y)) {
 				if (node->_region->isBlocked()) {
@@ -533,7 +533,7 @@ void AdScene::pathFinderStep() {
 	// target point marked, generate path and terminate
 	if (lowestPt->x == _pfTarget->x && lowestPt->y == _pfTarget->y) {
 		while (lowestPt != nullptr) {
-			_pfTargetPath->_points.insert_at(0, new BasePoint(lowestPt->x, lowestPt->y));
+			_pfTargetPath->_points.insertAt(0, new BasePoint(lowestPt->x, lowestPt->y));
 			lowestPt = lowestPt->_origin;
 		}
 
@@ -1175,7 +1175,7 @@ bool AdScene::traverseNodes(bool doUpdate) {
 	int mainOffsetY = 0;
 #endif
 
-	for (uint32 j = 0; j < _layers.size(); j++) {
+	for (uint32 j = 0; j < _layers.getSize(); j++) {
 		if (!_layers[j]->_active) {
 			continue;
 		}
@@ -1224,7 +1224,7 @@ bool AdScene::traverseNodes(bool doUpdate) {
 #endif
 
 		// for each node
-		for (uint32 k = 0; k < _layers[j]->_nodes.size(); k++) {
+		for (uint32 k = 0; k < _layers[j]->_nodes.getSize(); k++) {
 			AdSceneNode *node = _layers[j]->_nodes[k];
 			switch (node->_type) {
 			case OBJECT_ENTITY:
@@ -1322,7 +1322,7 @@ bool AdScene::display3DContent(DXMatrix &viewMat, DXMatrix &projMat) {
 	_gameRef->_renderer3D->setup3DCustom(viewMat, projMat);
 
 	// for each layer
-	for (uint32 j = 0; j < _layers.size(); j++) {
+	for (uint32 j = 0; j < _layers.getSize(); j++) {
 		if (!_layers[j]->_active)
 			continue;
 
@@ -1334,7 +1334,7 @@ bool AdScene::display3DContent(DXMatrix &viewMat, DXMatrix &projMat) {
 
 
 		// for each node
-		for (uint32 k = 0; k < _layers[j]->_nodes.size(); k++) {
+		for (uint32 k = 0; k < _layers[j]->_nodes.getSize(); k++) {
 			AdSceneNode *node = _layers[j]->_nodes[k];
 			if (node->_type == OBJECT_REGION) {
 				if (node->_region->isBlocked())
@@ -1369,7 +1369,7 @@ bool AdScene::updateFreeObjects() {
 #endif
 
 	// *** update all active objects
-	for (uint32 i = 0; i < adGame->_objects.size(); i++) {
+	for (uint32 i = 0; i < adGame->_objects.getSize(); i++) {
 		if (!adGame->_objects[i]->_active) {
 			continue;
 		}
@@ -1388,7 +1388,7 @@ bool AdScene::updateFreeObjects() {
 	}
 
 
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (!_objects[i]->_active) {
 			continue;
 		}
@@ -1423,26 +1423,26 @@ bool AdScene::displayRegionContent(AdRegion *region, bool display3DOnly) {
 	AdObject *obj;
 
 	// global objects
-	for (uint32 i = 0; i < adGame->_objects.size(); i++) {
+	for (uint32 i = 0; i < adGame->_objects.getSize(); i++) {
 		obj = adGame->_objects[i];
 		if (obj->_active && !obj->_drawn && (obj->_stickRegion == region || region == nullptr || (obj->_stickRegion == nullptr && region->pointInRegion(obj->_posX, obj->_posY)))) {
-			objects.push_back(obj);
+			objects.add(obj);
 		}
 	}
 
 	// scene objects
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		obj = _objects[i];
 		if (obj->_active && !obj->_editorOnly && !obj->_drawn && (obj->_stickRegion == region || region == nullptr || (obj->_stickRegion == nullptr && region->pointInRegion(obj->_posX, obj->_posY)))) {
-			objects.push_back(obj);
+			objects.add(obj);
 		}
 	}
 
 	// sort by _posY
-	qsort(objects.data(), objects.size(), sizeof(AdObject *), AdScene::compareObjs);
+	qsort(objects.getData(), objects.getSize(), sizeof(AdObject *), AdScene::compareObjs);
 
 	// display them
-	for (uint32 i = 0; i < objects.size(); i++) {
+	for (uint32 i = 0; i < objects.getSize(); i++) {
 		obj = objects[i];
 
 		if (display3DOnly && !obj->_is3D) {
@@ -1472,7 +1472,7 @@ bool AdScene::displayRegionContent(AdRegion *region, bool display3DOnly) {
 	// display design only objects
 	if (!display3DOnly) {
 		if (_gameRef->_editorMode && region == nullptr) {
-			for (uint32 i = 0; i < _objects.size(); i++) {
+			for (uint32 i = 0; i < _objects.getSize(); i++) {
 				if (_objects[i]->_active && _objects[i]->_editorOnly) {
 					_objects[i]->display();
 					_objects[i]->_drawn = true;
@@ -1510,7 +1510,7 @@ bool AdScene::displayRegionContentOld(AdRegion *region) {
 		int minY = INT_MAX_VALUE;
 
 		// global objects
-		for (uint32 i = 0; i < adGame->_objects.size(); i++) {
+		for (uint32 i = 0; i < adGame->_objects.getSize(); i++) {
 			if (adGame->_objects[i]->_active && !adGame->_objects[i]->_drawn && adGame->_objects[i]->_posY < minY && (adGame->_objects[i]->_stickRegion == region || region == nullptr || (adGame->_objects[i]->_stickRegion == nullptr && region->pointInRegion(adGame->_objects[i]->_posX, adGame->_objects[i]->_posY)))) {
 				obj = adGame->_objects[i];
 				minY = adGame->_objects[i]->_posY;
@@ -1518,7 +1518,7 @@ bool AdScene::displayRegionContentOld(AdRegion *region) {
 		}
 
 		// scene objects
-		for (uint32 i = 0; i < _objects.size(); i++) {
+		for (uint32 i = 0; i < _objects.getSize(); i++) {
 			if (_objects[i]->_active && !_objects[i]->_editorOnly && !_objects[i]->_drawn && _objects[i]->_posY < minY && (_objects[i]->_stickRegion == region || region == nullptr || (_objects[i]->_stickRegion == nullptr && region->pointInRegion(_objects[i]->_posX, _objects[i]->_posY)))) {
 				obj = _objects[i];
 				minY = _objects[i]->_posY;
@@ -1549,7 +1549,7 @@ bool AdScene::displayRegionContentOld(AdRegion *region) {
 
 	// design only objects
 	if (_gameRef->_editorMode && region == nullptr) {
-		for (uint32 i = 0; i < _objects.size(); i++) {
+		for (uint32 i = 0; i < _objects.getSize(); i++) {
 			if (_objects[i]->_active && _objects[i]->_editorOnly) {
 				_objects[i]->display();
 				_objects[i]->_drawn = true;
@@ -1758,7 +1758,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		ScValue *val = stack->pop();
 		if (val->isInt()) {
 			int layer = val->getInt();
-			if (layer < 0 || layer >= (int32)_layers.size()) {
+			if (layer < 0 || layer >= (int32)_layers.getSize()) {
 				stack->pushNULL();
 			} else {
 				stack->pushNative(_layers[layer], true);
@@ -1766,7 +1766,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		} else {
 			const char *layerName = val->getString();
 			bool layerFound = false;
-			for (uint32 i = 0; i < _layers.size(); i++) {
+			for (uint32 i = 0; i < _layers.getSize(); i++) {
 				if (scumm_stricmp(layerName, _layers[i]->getName()) == 0) {
 					stack->pushNative(_layers[i], true);
 					layerFound = true;
@@ -1786,7 +1786,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 	else if (strcmp(name, "GetWaypointGroup") == 0) {
 		stack->correctParams(1);
 		int group = stack->pop()->getInt();
-		if (group < 0 || group >= (int32)_waypointGroups.size()) {
+		if (group < 0 || group >= (int32)_waypointGroups.getSize()) {
 			stack->pushNULL();
 		} else {
 			stack->pushNative(_waypointGroups[group], true);
@@ -1833,12 +1833,12 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		AdObject *ret = nullptr;
 		if (val->isInt()) {
 			int index = val->getInt();
-			if (index >= 0 && index < (int32)_objects.size()) {
+			if (index >= 0 && index < (int32)_objects.getSize()) {
 				ret = _objects[index];
 			}
 		} else {
 			const char *nodeName = val->getString();
-			for (uint32 i = 0; i < _objects.size(); i++) {
+			for (uint32 i = 0; i < _objects.getSize(); i++) {
 				if (_objects[i] && _objects[i]->getName() && scumm_stricmp(_objects[i]->getName(), nodeName) == 0) {
 					ret = _objects[i];
 					break;
@@ -1869,7 +1869,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		}
 
 		if (_mainLayer) {
-			for (int i = _mainLayer->_nodes.size() - 1; i >= 0; i--) {
+			for (int i = _mainLayer->_nodes.getSize() - 1; i >= 0; i--) {
 				AdSceneNode *node = _mainLayer->_nodes[i];
 				if (node->_type == OBJECT_REGION && node->_region->_active && node->_region->pointInRegion(x, y)) {
 					if (node->_region->hasDecoration() && !includeDecors) {
@@ -2125,7 +2125,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 
 		int index = stack->pop()->getInt();
 
-		if (_geom && index >= 0 && static_cast<uint>(index) < _geom->_lights.size()) {
+		if (_geom && index >= 0 && static_cast<uint>(index) < _geom->_lights.getSize()) {
 			stack->pushString(_geom->_lights[index]->getName());
 		} else {
 			stack->pushNULL();
@@ -2288,8 +2288,8 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		if (index < 0) {
 			index = 0;
 		}
-		if (index <= (int32)_layers.size() - 1) {
-			_layers.insert_at(index, layer);
+		if (index <= (int32)_layers.getSize() - 1) {
+			_layers.insertAt(index, layer);
 		} else {
 			_layers.add(layer);
 		}
@@ -2310,7 +2310,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 		AdLayer *toDelete = nullptr;
 		if (val->isNative()) {
 			BaseScriptable *temp = val->getNative();
-			for (uint32 i = 0; i < _layers.size(); i++) {
+			for (uint32 i = 0; i < _layers.getSize(); i++) {
 				if (_layers[i] == temp) {
 					toDelete = _layers[i];
 					break;
@@ -2318,7 +2318,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 			}
 		} else {
 			int index = val->getInt();
-			if (index >= 0 && index < (int32)_layers.size()) {
+			if (index >= 0 && index < (int32)_layers.getSize()) {
 				toDelete = _layers[index];
 			}
 		}
@@ -2333,9 +2333,9 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
 			return STATUS_OK;
 		}
 
-		for (uint32 i = 0; i < _layers.size(); i++) {
+		for (uint32 i = 0; i < _layers.getSize(); i++) {
 			if (_layers[i] == toDelete) {
-				_layers.remove_at(i);
+				_layers.removeAt(i);
 				_gameRef->unregisterObject(toDelete);
 				break;
 			}
@@ -2393,7 +2393,7 @@ ScValue *AdScene::scGetProperty(const Common::String &name) {
 	// NumLayers (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumLayers") {
-		_scValue->setInt(_layers.size());
+		_scValue->setInt(_layers.getSize());
 		return _scValue;
 	}
 
@@ -2401,7 +2401,7 @@ ScValue *AdScene::scGetProperty(const Common::String &name) {
 	// NumWaypointGroups (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumWaypointGroups") {
-		_scValue->setInt(_waypointGroups.size());
+		_scValue->setInt(_waypointGroups.getSize());
 		return _scValue;
 	}
 
@@ -2422,7 +2422,7 @@ ScValue *AdScene::scGetProperty(const Common::String &name) {
 	// NumFreeNodes (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumFreeNodes") {
-		_scValue->setInt(_objects.size());
+		_scValue->setInt(_objects.getSize());
 		return _scValue;
 	}
 
@@ -2605,7 +2605,7 @@ ScValue *AdScene::scGetProperty(const Common::String &name) {
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumLights") {
 		if (_geom) {
-			_scValue->setInt(_geom->_lights.size());
+			_scValue->setInt(_geom->_lights.getSize());
 		} else {
 			_scValue->setInt(0);
 		}
@@ -2787,9 +2787,9 @@ bool AdScene::addObject(AdObject *object) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdScene::removeObject(AdObject *object) {
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i] == object) {
-			_objects.remove_at(i);
+			_objects.removeAt(i);
 			return _gameRef->unregisterObject(object);
 		}
 	}
@@ -2854,7 +2854,7 @@ bool AdScene::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 #endif
 
 	// scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
@@ -2902,7 +2902,7 @@ bool AdScene::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 
 	// waypoints
 	buffer->putTextIndent(indent + 2, "; ----- waypoints\n");
-	for (uint32 i = 0; i < _waypointGroups.size(); i++) {
+	for (uint32 i = 0; i < _waypointGroups.getSize(); i++) {
 		_waypointGroups[i]->saveAsText(buffer, indent + 2);
 	}
 
@@ -2910,19 +2910,19 @@ bool AdScene::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 
 	// layers
 	buffer->putTextIndent(indent + 2, "; ----- layers\n");
-	for (uint32 i = 0; i < _layers.size(); i++) {
+	for (uint32 i = 0; i < _layers.getSize(); i++) {
 		_layers[i]->saveAsText(buffer, indent + 2);
 	}
 
 	// scale levels
 	buffer->putTextIndent(indent + 2, "; ----- scale levels\n");
-	for (uint32 i = 0; i < _scaleLevels.size(); i++) {
+	for (uint32 i = 0; i < _scaleLevels.getSize(); i++) {
 		_scaleLevels[i]->saveAsText(buffer, indent + 2);
 	}
 
 	// rotation levels
 	buffer->putTextIndent(indent + 2, "; ----- rotation levels\n");
-	for (uint32 i = 0; i < _rotLevels.size(); i++) {
+	for (uint32 i = 0; i < _rotLevels.getSize(); i++) {
 		_rotLevels[i]->saveAsText(buffer, indent + 2);
 	}
 
@@ -2931,7 +2931,7 @@ bool AdScene::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 
 	// free entities
 	buffer->putTextIndent(indent + 2, "; ----- free entities\n");
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->getType() == OBJECT_ENTITY) {
 			_objects[i]->saveAsText(buffer, indent + 2);
 
@@ -2945,13 +2945,13 @@ bool AdScene::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdScene::sortScaleLevels() {
-	if (_scaleLevels.size() == 0) {
+	if (_scaleLevels.getSize() == 0) {
 		return STATUS_OK;
 	}
 	bool changed;
 	do {
 		changed = false;
-		for (uint32 i = 0; i < _scaleLevels.size() - 1; i++) {
+		for (uint32 i = 0; i < _scaleLevels.getSize() - 1; i++) {
 			if (_scaleLevels[i]->_posY > _scaleLevels[i + 1]->_posY) {
 				AdScaleLevel *sl = _scaleLevels[i];
 				_scaleLevels[i] = _scaleLevels[i + 1];
@@ -2969,13 +2969,13 @@ bool AdScene::sortScaleLevels() {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdScene::sortRotLevels() {
-	if (_rotLevels.size() == 0) {
+	if (_rotLevels.getSize() == 0) {
 		return STATUS_OK;
 	}
 	bool changed;
 	do {
 		changed = false;
-		for (uint32 i = 0; i < _rotLevels.size() - 1; i++) {
+		for (uint32 i = 0; i < _rotLevels.getSize() - 1; i++) {
 			if (_rotLevels[i]->_posX > _rotLevels[i + 1]->_posX) {
 				AdRotLevel *rl = _rotLevels[i];
 				_rotLevels[i] = _rotLevels[i + 1];
@@ -2996,7 +2996,7 @@ float AdScene::getScaleAt(int Y) {
 	AdScaleLevel *prev = nullptr;
 	AdScaleLevel *next = nullptr;
 
-	for (uint32 i = 0; i < _scaleLevels.size(); i++) {
+	for (uint32 i = 0; i < _scaleLevels.getSize(); i++) {
 		/* AdScaleLevel *xxx = _scaleLevels[i];*/
 		/* int j = _scaleLevels.size(); */
 		if (_scaleLevels[i]->_posY < Y) {
@@ -3128,7 +3128,7 @@ bool AdScene::afterLoad() {
 #ifdef ENABLE_WME3D
 	if (_geom) {
 		int activeCamera = _geom->_activeCamera;
-		if (activeCamera >= 0 && static_cast<uint>(activeCamera) < _geom->_cameras.size()) {
+		if (activeCamera >= 0 && static_cast<uint>(activeCamera) < _geom->_cameras.getSize()) {
 			_geom->setActiveCamera(activeCamera, _fov, _nearClipPlane, _farClipPlane);
 		}
 	}
@@ -3283,7 +3283,7 @@ void AdScene::pfPointsStart() {
 
 //////////////////////////////////////////////////////////////////////////
 void AdScene::pfPointsAdd(int x, int y, int distance) {
-	if (_pfPointsNum >= (int32)_pfPath.size()) {
+	if (_pfPointsNum >= (int32)_pfPath.getSize()) {
 		_pfPath.add(new AdPathPoint(x, y, distance));
 	} else {
 		_pfPath[_pfPointsNum]->x = x;
@@ -3396,9 +3396,9 @@ BaseObject *AdScene::getNodeByName(const char *name) {
 	BaseObject *ret = nullptr;
 
 	// dependent objects
-	for (uint32 i = 0; i < _layers.size(); i++) {
+	for (uint32 i = 0; i < _layers.getSize(); i++) {
 		AdLayer *layer = _layers[i];
-		for (uint32 j = 0; j < layer->_nodes.size(); j++) {
+		for (uint32 j = 0; j < layer->_nodes.getSize(); j++) {
 			AdSceneNode *node = layer->_nodes[j];
 			if ((node->_type == OBJECT_ENTITY && !scumm_stricmp(name, node->_entity->getName())) ||
 			    (node->_type == OBJECT_REGION && !scumm_stricmp(name, node->_region->getName()))) {
@@ -3418,14 +3418,14 @@ BaseObject *AdScene::getNodeByName(const char *name) {
 	}
 
 	// free entities
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->getType() == OBJECT_ENTITY && !scumm_stricmp(name, _objects[i]->getName())) {
 			return _objects[i];
 		}
 	}
 
 	// waypoint groups
-	for (uint32 i = 0; i < _waypointGroups.size(); i++) {
+	for (uint32 i = 0; i < _waypointGroups.getSize(); i++) {
 		if (!scumm_stricmp(name, _waypointGroups[i]->getName())) {
 			return _waypointGroups[i];
 		}
@@ -3462,9 +3462,9 @@ bool AdScene::persistState(bool saving) {
 	AdNodeState *nodeState;
 
 	// dependent objects
-	for (uint32 i = 0; i < _layers.size(); i++) {
+	for (uint32 i = 0; i < _layers.getSize(); i++) {
 		AdLayer *layer = _layers[i];
-		for (uint32 j = 0; j < layer->_nodes.size(); j++) {
+		for (uint32 j = 0; j < layer->_nodes.getSize(); j++) {
 			AdSceneNode *node = layer->_nodes[j];
 			switch (node->_type) {
 			case OBJECT_ENTITY:
@@ -3499,7 +3499,7 @@ bool AdScene::persistState(bool saving) {
 	}
 
 	// free entities
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (!_objects[i]->_saveState) {
 			continue;
 		}
@@ -3514,7 +3514,7 @@ bool AdScene::persistState(bool saving) {
 	}
 
 	// waypoint groups
-	for (uint32 i = 0; i < _waypointGroups.size(); i++) {
+	for (uint32 i = 0; i < _waypointGroups.getSize(); i++) {
 		nodeState = state->getNodeState(_waypointGroups[i]->getName(), saving);
 		if (nodeState) {
 			if (saving) {
@@ -3534,7 +3534,7 @@ float AdScene::getRotationAt(int x, int y) {
 	AdRotLevel *prev = nullptr;
 	AdRotLevel *next = nullptr;
 
-	for (uint32 i = 0; i < _rotLevels.size(); i++) {
+	for (uint32 i = 0; i < _rotLevels.getSize(); i++) {
 		/*  AdRotLevel *xxx = _rotLevels[i];
 		    int j = _rotLevels.size();*/
 		if (_rotLevels[i]->_posX < x) {
@@ -3560,9 +3560,9 @@ float AdScene::getRotationAt(int x, int y) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdScene::handleItemAssociations(const char *itemName, bool show) {
-	for (uint32 i = 0; i < _layers.size(); i++) {
+	for (uint32 i = 0; i < _layers.getSize(); i++) {
 		AdLayer *layer = _layers[i];
-		for (uint32 j = 0; j < layer->_nodes.size(); j++) {
+		for (uint32 j = 0; j < layer->_nodes.getSize(); j++) {
 			if (layer->_nodes[j]->_type == OBJECT_ENTITY) {
 				AdEntity *ent = layer->_nodes[j]->_entity;
 
@@ -3573,7 +3573,7 @@ bool AdScene::handleItemAssociations(const char *itemName, bool show) {
 		}
 	}
 
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->getType() == OBJECT_ENTITY) {
 			AdEntity *ent = (AdEntity *)_objects[i];
 			if (ent->getItemName() && strcmp(ent->getItemName(), itemName) == 0) {
@@ -3590,7 +3590,7 @@ bool AdScene::handleItemAssociations(const char *itemName, bool show) {
 bool AdScene::getRegionsAt(int x, int y, AdRegion **regionList, int numRegions) {
 	int numUsed = 0;
 	if (_mainLayer) {
-		for (int i = _mainLayer->_nodes.size() - 1; i >= 0; i--) {
+		for (int i = _mainLayer->_nodes.getSize() - 1; i >= 0; i--) {
 			AdSceneNode *node = _mainLayer->_nodes[i];
 			if (node->_type == OBJECT_REGION && node->_region->_active && node->_region->pointInRegion(x, y)) {
 				if (numUsed < numRegions - 1) {
@@ -3620,13 +3620,13 @@ BaseObject *AdScene::getNextAccessObject(BaseObject *currObject) {
 	BaseArray<AdObject *> objects;
 	getSceneObjects(objects, true);
 
-	if (objects.size() == 0) {
+	if (objects.getSize() == 0) {
 		return nullptr;
 	} else {
 		if (currObject != nullptr) {
-			for (uint32 i = 0; i < objects.size(); i++) {
+			for (uint32 i = 0; i < objects.getSize(); i++) {
 				if (objects[i] == currObject) {
-					if (i < objects.size() - 1) {
+					if (i < objects.getSize() - 1) {
 						return objects[i + 1];
 					} else {
 						break;
@@ -3644,11 +3644,11 @@ BaseObject *AdScene::getPrevAccessObject(BaseObject *currObject) {
 	BaseArray<AdObject *> objects;
 	getSceneObjects(objects, true);
 
-	if (objects.size() == 0) {
+	if (objects.getSize() == 0) {
 		return nullptr;
 	} else {
 		if (currObject != nullptr) {
-			for (int i = objects.size() - 1; i >= 0; i--) {
+			for (int i = objects.getSize() - 1; i >= 0; i--) {
 				if (objects[i] == currObject) {
 					if (i > 0) {
 						return objects[i - 1];
@@ -3658,7 +3658,7 @@ BaseObject *AdScene::getPrevAccessObject(BaseObject *currObject) {
 				}
 			}
 		}
-		return objects[objects.size() - 1];
+		return objects[objects.getSize() - 1];
 	}
 	return nullptr;
 }
@@ -3666,14 +3666,14 @@ BaseObject *AdScene::getPrevAccessObject(BaseObject *currObject) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdScene::getSceneObjects(BaseArray<AdObject *> &objects, bool interactiveOnly) {
-	for (uint32 i = 0; i < _layers.size(); i++) {
+	for (uint32 i = 0; i < _layers.getSize(); i++) {
 		// close-up layer -> remove everything below it
 		if (interactiveOnly && _layers[i]->_closeUp) {
-			objects.clear();
+			objects.removeAll();
 		}
 
 
-		for (uint32 j = 0; j < _layers[i]->_nodes.size(); j++) {
+		for (uint32 j = 0; j < _layers[i]->_nodes.getSize(); j++) {
 			AdSceneNode *node = _layers[i]->_nodes[j];
 			switch (node->_type) {
 			case OBJECT_ENTITY: {
@@ -3687,9 +3687,9 @@ bool AdScene::getSceneObjects(BaseArray<AdObject *> &objects, bool interactiveOn
 			case OBJECT_REGION: {
 				BaseArray<AdObject *> regionObj;
 				getRegionObjects(node->_region, regionObj, interactiveOnly);
-				for (uint32 newIndex = 0; newIndex < regionObj.size(); newIndex++) {
+				for (uint32 newIndex = 0; newIndex < regionObj.getSize(); newIndex++) {
 					bool found = false;
-					for (uint32 old = 0; old < objects.size(); old++) {
+					for (uint32 old = 0; old < objects.getSize(); old++) {
 						if (objects[old] == regionObj[newIndex]) {
 							found = true;
 							break;
@@ -3713,9 +3713,9 @@ bool AdScene::getSceneObjects(BaseArray<AdObject *> &objects, bool interactiveOn
 	// objects outside any region
 	BaseArray<AdObject *> regionObj;
 	getRegionObjects(NULL, regionObj, interactiveOnly);
-	for (uint32 newIndex = 0; newIndex < regionObj.size(); newIndex++) {
+	for (uint32 newIndex = 0; newIndex < regionObj.getSize(); newIndex++) {
 		bool found = false;
-		for (uint32 old = 0; old < objects.size(); old++) {
+		for (uint32 old = 0; old < objects.getSize(); old++) {
 			if (objects[old] == regionObj[newIndex]) {
 				found = true;
 				break;
@@ -3737,7 +3737,7 @@ bool AdScene::getRegionObjects(AdRegion *region, BaseArray<AdObject *> &objects,
 	AdObject *obj;
 
 	// global objects
-	for (uint32 i = 0; i < adGame->_objects.size(); i++) {
+	for (uint32 i = 0; i < adGame->_objects.getSize(); i++) {
 		obj = adGame->_objects[i];
 		if (obj->_active && (obj->_stickRegion == region || region == nullptr || (obj->_stickRegion == nullptr && region->pointInRegion(obj->_posX, obj->_posY)))) {
 			if (interactiveOnly && !obj->_registrable) {
@@ -3749,7 +3749,7 @@ bool AdScene::getRegionObjects(AdRegion *region, BaseArray<AdObject *> &objects,
 	}
 
 	// scene objects
-	for (uint32 i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		obj = _objects[i];
 		if (obj->_active && !obj->_editorOnly && (obj->_stickRegion == region || region == nullptr || (obj->_stickRegion == nullptr && region->pointInRegion(obj->_posX, obj->_posY)))) {
 			if (interactiveOnly && !obj->_registrable) {
@@ -3761,7 +3761,7 @@ bool AdScene::getRegionObjects(AdRegion *region, BaseArray<AdObject *> &objects,
 	}
 
 	// sort by _posY
-	qsort(objects.data(), objects.size(), sizeof(AdObject *), AdScene::compareObjs);
+	qsort(objects.getData(), objects.getSize(), sizeof(AdObject *), AdScene::compareObjs);
 
 	return STATUS_OK;
 }
diff --git a/engines/wintermute/ad/ad_scene_geometry.cpp b/engines/wintermute/ad/ad_scene_geometry.cpp
index 3abebcaefe4..79e09285086 100644
--- a/engines/wintermute/ad/ad_scene_geometry.cpp
+++ b/engines/wintermute/ad/ad_scene_geometry.cpp
@@ -96,45 +96,45 @@ AdSceneGeometry::~AdSceneGeometry() {
 void AdSceneGeometry::cleanup() {
 	uint i;
 
-	for (i = 0; i < _planes.size(); i++) {
+	for (i = 0; i < _planes.getSize(); i++) {
 		delete _planes[i];
 	}
-	_planes.clear();
+	_planes.removeAll();
 
-	for (i = 0; i < _blocks.size(); i++) {
+	for (i = 0; i < _blocks.getSize(); i++) {
 		delete _blocks[i];
 	}
-	_blocks.clear();
+	_blocks.removeAll();
 
-	for (i = 0; i < _generics.size(); i++) {
+	for (i = 0; i < _generics.getSize(); i++) {
 		delete _generics[i];
 	}
-	_generics.clear();
+	_generics.removeAll();
 
-	for (i = 0; i < _waypointGroups.size(); i++) {
+	for (i = 0; i < _waypointGroups.getSize(); i++) {
 		delete _waypointGroups[i];
 	}
-	_waypointGroups.clear();
+	_waypointGroups.removeAll();
 
-	for (i = 0; i < _cameras.size(); i++) {
+	for (i = 0; i < _cameras.getSize(); i++) {
 		if (_gameRef->_renderer3D->_camera == _cameras[i])
 			_gameRef->_renderer3D->_camera = nullptr;
 		delete _cameras[i];
 	}
-	_cameras.clear();
+	_cameras.removeAll();
 
-	for (i = 0; i < _lights.size(); i++) {
+	for (i = 0; i < _lights.getSize(); i++) {
 		delete _lights[i];
 	}
-	_lights.clear();
+	_lights.removeAll();
 
 	_activeCamera = _activeLight = -1;
 	DXMatrixIdentity(&_viewMatrix);
 
-	for (i = 0; i < _PFPath.size(); i++) {
+	for (i = 0; i < _PFPath.getSize(); i++) {
 		delete _PFPath[i];
 	}
-	_PFPath.clear();
+	_PFPath.removeAll();
 
 	_PFTargetPath = nullptr;
 }
@@ -249,7 +249,7 @@ bool AdSceneGeometry::loadFile(const char *filename) {
 					delete geomExt;
 					return false;
 				} else {
-					if (_waypointGroups.size() == 0) {
+					if (_waypointGroups.getSize() == 0) {
 						_waypointGroups.add(new AdWaypointGroup3D(_gameRef));
 					}
 					_waypointGroups[0]->addFromMesh(mesh);
@@ -305,12 +305,12 @@ bool AdSceneGeometry::loadFile(const char *filename) {
 
 	SystemClassRegistry::getInstance()->_disabled = false;
 
-	if (_cameras.size() > 0) {
+	if (_cameras.getSize() > 0) {
 		setActiveCamera(0, -1.0f, -1.0f, -1.0f);
 	}
 	createLights();
 
-	if (_lights.size() > 0) {
+	if (_lights.getSize() > 0) {
 		setActiveLight(0);
 	}
 
@@ -329,8 +329,8 @@ bool AdSceneGeometry::loadFile(const char *filename) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::dropWaypoints() {
-	for (uint i = 0; i < _waypointGroups.size(); i++) {
-		for (uint j = 0; j < _waypointGroups[i]->_points.size(); j++) {
+	for (uint i = 0; i < _waypointGroups.getSize(); i++) {
+		for (uint j = 0; j < _waypointGroups[i]->_points.getSize(); j++) {
 			DXVector3 *point = _waypointGroups[i]->_points[j];
 			point->_y = getHeightAt(*point) + _waypointHeight;
 		}
@@ -340,7 +340,7 @@ bool AdSceneGeometry::dropWaypoints() {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::setActiveCamera(int camera, float fov, float nearClipPlane, float farClipPlane) {
-	if (camera < 0 || static_cast<uint>(camera) >= _cameras.size()) {
+	if (camera < 0 || static_cast<uint>(camera) >= _cameras.getSize()) {
 		_gameRef->LOG(0, "Warning: Camera %d is out of bounds.", camera);
 		return false;
 	} else {
@@ -362,7 +362,7 @@ bool AdSceneGeometry::setActiveCamera(int camera, float fov, float nearClipPlane
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::setActiveCamera(const char *camera, float fov, float nearClipPlane, float farClipPlane) {
-	for (uint i = 0; i < _cameras.size(); i++) {
+	for (uint i = 0; i < _cameras.getSize(); i++) {
 		if (scumm_stricmp(_cameras[i]->getName(), camera) == 0)
 			return setActiveCamera(i, fov, nearClipPlane, farClipPlane);
 	}
@@ -373,7 +373,7 @@ bool AdSceneGeometry::setActiveCamera(const char *camera, float fov, float nearC
 
 //////////////////////////////////////////////////////////////////////////
 Camera3D *AdSceneGeometry::getActiveCamera() {
-	if (_activeCamera >= 0 && static_cast<uint>(_activeCamera) < _cameras.size()) {
+	if (_activeCamera >= 0 && static_cast<uint>(_activeCamera) < _cameras.getSize()) {
 		return _cameras[_activeCamera];
 	} else {
 		return nullptr;
@@ -382,7 +382,7 @@ Camera3D *AdSceneGeometry::getActiveCamera() {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::setActiveLight(int light) {
-	if (light < 0 || static_cast<uint>(light) >= _lights.size()) {
+	if (light < 0 || static_cast<uint>(light) >= _lights.getSize()) {
 		_gameRef->LOG(0, "Warning: Light %d is out of bounds.", light);
 		return false;
 	} else {
@@ -393,7 +393,7 @@ bool AdSceneGeometry::setActiveLight(int light) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::setActiveLight(char *light) {
-	for (uint i = 0; i < _lights.size(); i++) {
+	for (uint i = 0; i < _lights.getSize(); i++) {
 		if (scumm_stricmp(_lights[i]->getName(), light) == 0) {
 			return setActiveLight(i);
 		}
@@ -475,7 +475,7 @@ float AdSceneGeometry::getHeightAt(DXVector3 pos, float tolerance, bool *intFoun
 
 	bool intFoundTmp = false;
 
-	for (uint32 i = 0; i < _planes.size(); i++) {
+	for (uint32 i = 0; i < _planes.getSize(); i++) {
 		for (int j = 0; j < _planes[i]->_mesh->_numFaces; j++) {
 			if (C3DUtils::intersectTriangle(pos, dir,
 				                        _planes[i]->_mesh->_vertices[_planes[i]->_mesh->_faces[j]._vertices[0]]._pos,
@@ -507,7 +507,7 @@ bool AdSceneGeometry::directPathExists(DXVector3 *p1, DXVector3 *p2) {
 	DXVector3 v0, v1, v2;
 
 	// test walkplanes
-	for (uint i = 0; i < _planes.size(); i++) {
+	for (uint i = 0; i < _planes.getSize(); i++) {
 		for (int j = 0; j < _planes[i]->_mesh->_numFaces; j++) {
 			v0 = _planes[i]->_mesh->_vertices[_planes[i]->_mesh->_faces[j]._vertices[0]]._pos;
 			v1 = _planes[i]->_mesh->_vertices[_planes[i]->_mesh->_faces[j]._vertices[1]]._pos;
@@ -529,7 +529,7 @@ bool AdSceneGeometry::directPathExists(DXVector3 *p1, DXVector3 *p2) {
 	}
 
 	// test blocks
-	for (uint i = 0; i < _blocks.size(); i++) {
+	for (uint i = 0; i < _blocks.getSize(); i++) {
 		if (!_blocks[i]->_active) {
 			continue;
 		}
@@ -564,7 +564,7 @@ DXVector3 AdSceneGeometry::getBlockIntersection(DXVector3 *p1, DXVector3 *p2) {
 	DXVector3 v0, v1, v2;
 
 	// test blocks
-	for (uint i = 0; i < _blocks.size(); i++) {
+	for (uint i = 0; i < _blocks.getSize(); i++) {
 		if (!_blocks[i]->_active) {
 			continue;
 		}
@@ -724,7 +724,7 @@ bool AdSceneGeometry::convert2Dto3D(int x, int y, DXVector3 *pos) {
 	bool intFound = false;
 	float minDist = FLT_MAX;
 	DXVector3 intersection, ray;
-	for (uint32 i = 0; i < _planes.size(); i++) {
+	for (uint32 i = 0; i < _planes.getSize(); i++) {
 		for (int j = 0; j < _planes[i]->_mesh->_numFaces; j++) {
 			if (C3DUtils::intersectTriangle(vPickRayOrig, vPickRayDir,
 								  _planes[i]->_mesh->_vertices[_planes[i]->_mesh->_faces[j]._vertices[0]]._pos,
@@ -766,10 +766,10 @@ bool AdSceneGeometry::getPath(DXVector3 source, DXVector3 target, AdPath3D *path
 
 		// prepare working path
 		uint i, j;
-		for (i = 0; i < _PFPath.size(); i++) {
+		for (i = 0; i < _PFPath.getSize(); i++) {
 			delete _PFPath[i];
 		}
-		_PFPath.clear();
+		_PFPath.removeAll();
 
 		// first point
 		_PFPath.add(new AdPathPoint3D(source, 0));
@@ -778,9 +778,9 @@ bool AdSceneGeometry::getPath(DXVector3 source, DXVector3 target, AdPath3D *path
 		_PFPath.add(new AdPathPoint3D(target, FLT_MAX));
 
 		// add all active waypoints
-		for (i = 0; i < _waypointGroups.size(); i++) {
+		for (i = 0; i < _waypointGroups.getSize(); i++) {
 			if (_waypointGroups[i]->_active) {
-				for (j = 0; j < _waypointGroups[i]->_points.size(); j++) {
+				for (j = 0; j < _waypointGroups[i]->_points.getSize(); j++) {
 					_PFPath.add(new AdPathPoint3D(*_waypointGroups[i]->_points[j], FLT_MAX));
 				}
 			}
@@ -798,7 +798,7 @@ void AdSceneGeometry::pathFinderStep() {
 	float lowestDist = FLT_MAX;
 	AdPathPoint3D *lowestPt = NULL;
 
-	for (i = 0; i < _PFPath.size(); i++) {
+	for (i = 0; i < _PFPath.getSize(); i++) {
 		if (!_PFPath[i]->_marked && _PFPath[i]->_distance < lowestDist) {
 			lowestDist = _PFPath[i]->_distance;
 			lowestPt = _PFPath[i];
@@ -825,13 +825,13 @@ void AdSceneGeometry::pathFinderStep() {
 	// target point marked, generate path and terminate
 	if (lowestPt->_pos == _PFTarget) {
 		while (lowestPt != nullptr) {
-			_PFTargetPath->_points.insert_at(0, new DXVector3(lowestPt->_pos));
+			_PFTargetPath->_points.insertAt(0, new DXVector3(lowestPt->_pos));
 			lowestPt = lowestPt->_origin;
 		}
 		// remove current position
-		if (_PFTargetPath->_points.size() > 0) {
+		if (_PFTargetPath->_points.getSize() > 0) {
 			delete _PFTargetPath->_points[0];
-			_PFTargetPath->_points.remove_at(0);
+			_PFTargetPath->_points.removeAt(0);
 		}
 
 		_PFReady = true;
@@ -840,7 +840,7 @@ void AdSceneGeometry::pathFinderStep() {
 	}
 
 	// otherwise keep on searching
-	for (i = 0; i < _PFPath.size(); i++) {
+	for (i = 0; i < _PFPath.getSize(); i++) {
 		if (!_PFPath[i]->_marked) {
 			float dist = getPointsDist(lowestPt->_pos, _PFPath[i]->_pos);
 			if (dist >= 0 && lowestPt->_distance + dist < _PFPath[i]->_distance) {
@@ -893,7 +893,7 @@ bool AdSceneGeometry::createLights() {
 		_gameRef->_renderer3D->lightEnable(i, false);
 	}
 
-	int lightCount = MIN(static_cast<int>(_lights.size()), maxLights);
+	int lightCount = MIN(static_cast<int>(_lights.getSize()), maxLights);
 
 	for (int i = 0; i < lightCount; i++) {
 		_lights[i]->setLight(i);
@@ -908,7 +908,7 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
 	int maxLights = _gameRef->_renderer3D->getMaxActiveLights();
 
 	int numActiveLights = 0;
-	for (uint i = 0; i < _lights.size(); i++) {
+	for (uint i = 0; i < _lights.getSize(); i++) {
 		_lights[i]->_isAvailable = false;
 		if (_lights[i]->_active) {
 			numActiveLights++;
@@ -916,7 +916,7 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
 	}
 
 	if (numActiveLights <= maxLights) {
-		for (uint i = 0; i < _lights.size(); i++) {
+		for (uint i = 0; i < _lights.getSize(); i++) {
 			_lights[i]->_isAvailable = true;
 		}
 	} else {
@@ -928,7 +928,7 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
 		BaseArray<Light3D *> activeLights;
 
 		// compute distance to point
-		for (uint i = 0; i < _lights.size(); i++) {
+		for (uint i = 0; i < _lights.getSize(); i++) {
 			if (!_lights[i]->_active) {
 				continue;
 			}
@@ -944,14 +944,14 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
 
 			_lights[i]->_distance = fabs(DXVec3Length(&dif));
 
-			activeLights.push_back(_lights[i]);
+			activeLights.add(_lights[i]);
 		}
 
 		// sort by distance
-		if (activeLights.size() > 0) {
-			qsort(activeLights.begin(), activeLights.size(), sizeof(Light3D *), AdSceneGeometry::compareLights);
+		if (activeLights.getSize() > 0) {
+			qsort(activeLights.getData(), activeLights.getSize(), sizeof(Light3D *), AdSceneGeometry::compareLights);
 
-			for (uint i = 0; i < activeLights.size(); i++) {
+			for (uint i = 0; i < activeLights.getSize(); i++) {
 				activeLights[i]->_isAvailable = static_cast<int>(i) < maxLights;
 			}
 		}
@@ -963,14 +963,14 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
 	}
 
 	numActiveLights = 0;
-	for (uint i = 0; i < _lights.size(); i++) {
+	for (uint i = 0; i < _lights.getSize(); i++) {
 		if (numActiveLights >= maxLights) {
 			break;
 		}
 
-		if (ignoreLights.size()) {
+		if (ignoreLights.getSize()) {
 			bool ignore = false;
-			for (uint j = 0; j < ignoreLights.size(); j++) {
+			for (uint j = 0; j < ignoreLights.getSize(); j++) {
 				if (scumm_stricmp(_lights[i]->getName(), ignoreLights[j]) == 0) {
 					ignore = true;
 					break;
@@ -1106,21 +1106,21 @@ bool AdSceneGeometry::enableNode(const char *nodeName, bool enable) {
 	bool ret = false;
 
 	uint i;
-	for (i = 0; i < _blocks.size(); i++) {
+	for (i = 0; i < _blocks.getSize(); i++) {
 		if (scumm_stricmp(nodeName, _blocks[i]->getName()) == 0) {
 			_blocks[i]->_active = enable;
 			ret = true;
 		}
 	}
 
-	for (i = 0; i < _planes.size(); i++) {
+	for (i = 0; i < _planes.getSize(); i++) {
 		if (scumm_stricmp(nodeName, _planes[i]->getName()) == 0) {
 			_planes[i]->_active = enable;
 			ret = true;
 		}
 	}
 
-	for (i = 0; i < _generics.size(); i++) {
+	for (i = 0; i < _generics.getSize(); i++) {
 		if (scumm_stricmp(nodeName, _generics[i]->getName()) == 0) {
 			_generics[i]->_active = enable;
 			ret = true;
@@ -1132,18 +1132,18 @@ bool AdSceneGeometry::enableNode(const char *nodeName, bool enable) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::isNodeEnabled(const char *nodeName) {
-	for (uint i = 0; i < _blocks.size(); i++) {
+	for (uint i = 0; i < _blocks.getSize(); i++) {
 		if (scumm_stricmp(nodeName, _blocks[i]->getName()) == 0) {
 			return _blocks[i]->_active;
 		}
 	}
-	for (uint i = 0; i < _planes.size(); i++) {
+	for (uint i = 0; i < _planes.getSize(); i++) {
 		if (scumm_stricmp(nodeName, _planes[i]->getName()) == 0) {
 			return _planes[i]->_active;
 		}
 	}
 
-	for (uint i = 0; i < _generics.size(); i++) {
+	for (uint i = 0; i < _generics.getSize(); i++) {
 		if (scumm_stricmp(nodeName, _generics[i]->getName()) == 0) {
 			return _generics[i]->_active;
 		}
@@ -1157,7 +1157,7 @@ bool AdSceneGeometry::enableLight(const char *lightName, bool enable) {
 	bool ret = false;
 
 	uint i;
-	for (i = 0; i < _lights.size(); i++) {
+	for (i = 0; i < _lights.getSize(); i++) {
 		if (scumm_stricmp(lightName, _lights[i]->getName()) == 0) {
 			_lights[i]->_active = enable;
 			ret = true;
@@ -1170,7 +1170,7 @@ bool AdSceneGeometry::enableLight(const char *lightName, bool enable) {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdSceneGeometry::isLightEnabled(const char *lightName) {
-	for (uint i = 0; i < _lights.size(); i++) {
+	for (uint i = 0; i < _lights.getSize(); i++) {
 		if (scumm_stricmp(lightName, _lights[i]->getName()) == 0) {
 			return _lights[i]->_active;
 		}
@@ -1183,7 +1183,7 @@ bool AdSceneGeometry::setLightColor(const char *lightName, uint32 color) {
 	bool ret = false;
 
 	uint i;
-	for (i = 0; i < _lights.size(); i++) {
+	for (i = 0; i < _lights.getSize(); i++) {
 		if (scumm_stricmp(lightName, _lights[i]->getName()) == 0) {
 			_lights[i]->_diffuseColor = color;
 			ret = true;
@@ -1196,7 +1196,7 @@ bool AdSceneGeometry::setLightColor(const char *lightName, uint32 color) {
 
 //////////////////////////////////////////////////////////////////////////
 uint32 AdSceneGeometry::getLightColor(const char *lightName) {
-	for (uint i = 0; i < _lights.size(); i++) {
+	for (uint i = 0; i < _lights.getSize(); i++) {
 		if (scumm_stricmp(lightName, _lights[i]->getName()) == 0) {
 			return _lights[i]->_diffuseColor;
 		}
@@ -1206,7 +1206,7 @@ uint32 AdSceneGeometry::getLightColor(const char *lightName) {
 
 //////////////////////////////////////////////////////////////////////////
 DXVector3 AdSceneGeometry::getLightPos(const char *lightName) {
-	for (uint i = 0; i < _lights.size(); i++) {
+	for (uint i = 0; i < _lights.getSize(); i++) {
 		if (scumm_stricmp(lightName, _lights[i]->getName()) == 0) {
 			return _lights[i]->_pos;
 		}
@@ -1244,7 +1244,7 @@ bool AdSceneGeometry::persist(BasePersistenceManager *persistMgr) {
 	int i;
 
 	//////////////////////////////////////////////////////////////////////////
-	int32 numLights = _lights.size();
+	int32 numLights = _lights.getSize();
 	persistMgr->transferSint32(TMEMBER(numLights));
 	for (i = 0; i < numLights; i++) {
 		if (persistMgr->getIsSaving()) {
@@ -1255,7 +1255,7 @@ bool AdSceneGeometry::persist(BasePersistenceManager *persistMgr) {
 			persistMgr->transferCharPtr(TMEMBER(name));
 			bool found = false;
 
-			for (uint j = 0; j < _lights.size(); j++) {
+			for (uint j = 0; j < _lights.getSize(); j++) {
 				if (scumm_stricmp(name, _lights[j]->getName()) == 0) {
 					_lights[j]->persist(persistMgr);
 					found = true;
@@ -1278,7 +1278,7 @@ bool AdSceneGeometry::persist(BasePersistenceManager *persistMgr) {
 	createLights();
 
 	//////////////////////////////////////////////////////////////////////////
-	int32 numBlocks = _blocks.size();
+	int32 numBlocks = _blocks.getSize();
 	persistMgr->transferSint32(TMEMBER(numBlocks));
 	for (i = 0; i < numBlocks; i++) {
 		if (persistMgr->getIsSaving()) {
@@ -1288,7 +1288,7 @@ bool AdSceneGeometry::persist(BasePersistenceManager *persistMgr) {
 			char *name = nullptr;
 			persistMgr->transferCharPtr(TMEMBER(name));
 			bool found = false;
-			for (uint j = 0; j < _blocks.size(); j++) {
+			for (uint j = 0; j < _blocks.getSize(); j++) {
 				if (scumm_stricmp(name, _blocks[j]->getName()) == 0) {
 					_blocks[j]->persist(persistMgr);
 					found = true;
@@ -1309,7 +1309,7 @@ bool AdSceneGeometry::persist(BasePersistenceManager *persistMgr) {
 	}
 
 	//////////////////////////////////////////////////////////////////////////
-	int32 numPlanes = _planes.size();
+	int32 numPlanes = _planes.getSize();
 	persistMgr->transferSint32(TMEMBER(numPlanes));
 	for (i = 0; i < numPlanes; i++) {
 		if (persistMgr->getIsSaving()) {
@@ -1319,7 +1319,7 @@ bool AdSceneGeometry::persist(BasePersistenceManager *persistMgr) {
 			char *name = nullptr;
 			persistMgr->transferCharPtr(TMEMBER(name));
 			bool found = false;
-			for (uint j = 0; j < _planes.size(); j++) {
+			for (uint j = 0; j < _planes.getSize(); j++) {
 				if (scumm_stricmp(name, _planes[j]->getName()) == 0) {
 					_planes[j]->persist(persistMgr);
 					found = true;
@@ -1340,7 +1340,7 @@ bool AdSceneGeometry::persist(BasePersistenceManager *persistMgr) {
 	}
 
 	//////////////////////////////////////////////////////////////////////////
-	int32 numGenerics = _generics.size();
+	int32 numGenerics = _generics.getSize();
 	persistMgr->transferSint32(TMEMBER(numGenerics));
 	for (i = 0; i < numGenerics; i++) {
 		if (persistMgr->getIsSaving()) {
@@ -1350,7 +1350,7 @@ bool AdSceneGeometry::persist(BasePersistenceManager *persistMgr) {
 			char *name = nullptr;
 			persistMgr->transferCharPtr(TMEMBER(name));
 			bool found = false;
-			for (uint j = 0; j < _generics.size(); j++) {
+			for (uint j = 0; j < _generics.getSize(); j++) {
 				if (scumm_stricmp(name, _generics[j]->getName()) == 0) {
 					_generics[j]->persist(persistMgr);
 					found = true;
diff --git a/engines/wintermute/ad/ad_scene_state.cpp b/engines/wintermute/ad/ad_scene_state.cpp
index 2959cd4d99b..153f951e7af 100644
--- a/engines/wintermute/ad/ad_scene_state.cpp
+++ b/engines/wintermute/ad/ad_scene_state.cpp
@@ -46,10 +46,10 @@ AdSceneState::~AdSceneState() {
 	delete[] _filename;
 	_filename = nullptr;
 
-	for (uint32 i = 0; i < _nodeStates.size(); i++) {
+	for (uint32 i = 0; i < _nodeStates.getSize(); i++) {
 		delete _nodeStates[i];
 	}
-	_nodeStates.clear();
+	_nodeStates.removeAll();
 }
 
 
@@ -76,7 +76,7 @@ const char *AdSceneState::getFilename() const {
 
 //////////////////////////////////////////////////////////////////////////
 AdNodeState *AdSceneState::getNodeState(const char *name, bool saving) {
-	for (uint32 i = 0; i < _nodeStates.size(); i++) {
+	for (uint32 i = 0; i < _nodeStates.getSize(); i++) {
 		if (scumm_stricmp(_nodeStates[i]->getName(), name) == 0) {
 			return _nodeStates[i];
 		}
diff --git a/engines/wintermute/ad/ad_sentence.cpp b/engines/wintermute/ad/ad_sentence.cpp
index 3f30d36c8c6..b0b5acc8c8c 100644
--- a/engines/wintermute/ad/ad_sentence.cpp
+++ b/engines/wintermute/ad/ad_sentence.cpp
@@ -312,7 +312,7 @@ bool AdSentence::update(TDirection dir) {
 	currentTime = _gameRef->getTimer()->getTime() - _startTime;
 
 	bool talkNodeFound = false;
-	for (uint32 i = 0; i < _talkDef->_nodes.size(); i++) {
+	for (uint32 i = 0; i < _talkDef->_nodes.getSize(); i++) {
 		if (_talkDef->_nodes[i]->isInTimeInterval(currentTime, dir)) {
 			talkNodeFound = true;
 
diff --git a/engines/wintermute/ad/ad_talk_def.cpp b/engines/wintermute/ad/ad_talk_def.cpp
index 75a57a9f3c1..20b1d882010 100644
--- a/engines/wintermute/ad/ad_talk_def.cpp
+++ b/engines/wintermute/ad/ad_talk_def.cpp
@@ -51,10 +51,10 @@ AdTalkDef::AdTalkDef(BaseGame *inGame) : BaseObject(inGame) {
 
 //////////////////////////////////////////////////////////////////////////
 AdTalkDef::~AdTalkDef() {
-	for (uint32 i = 0; i < _nodes.size(); i++) {
+	for (uint32 i = 0; i < _nodes.getSize(); i++) {
 		delete _nodes[i];
 	}
-	_nodes.clear();
+	_nodes.removeAll();
 
 	delete[] _defaultSpriteFilename;
 	delete _defaultSprite;
@@ -234,7 +234,7 @@ bool AdTalkDef::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 		_defaultSpriteSet->saveAsText(buffer, indent + 2);
 	}
 
-	for (uint32 i = 0; i < _nodes.size(); i++) {
+	for (uint32 i = 0; i < _nodes.getSize(); i++) {
 		_nodes[i]->saveAsText(buffer, indent + 2);
 		buffer->putTextIndent(indent, "\n");
 	}
diff --git a/engines/wintermute/ad/ad_talk_holder.cpp b/engines/wintermute/ad/ad_talk_holder.cpp
index fb541163dbc..c4a49c3a570 100644
--- a/engines/wintermute/ad/ad_talk_holder.cpp
+++ b/engines/wintermute/ad/ad_talk_holder.cpp
@@ -52,15 +52,15 @@ AdTalkHolder::~AdTalkHolder() {
 	delete _sprite;
 	_sprite = nullptr;
 
-	for (uint32 i = 0; i < _talkSprites.size(); i++) {
+	for (uint32 i = 0; i < _talkSprites.getSize(); i++) {
 		delete _talkSprites[i];
 	}
-	_talkSprites.clear();
+	_talkSprites.removeAll();
 
-	for (uint32 i = 0; i < _talkSpritesEx.size(); i++) {
+	for (uint32 i = 0; i < _talkSpritesEx.getSize(); i++) {
 		delete _talkSpritesEx[i];
 	}
-	_talkSpritesEx.clear();
+	_talkSpritesEx.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -88,7 +88,7 @@ BaseSprite *AdTalkHolder::getTalkStance(const char *stance) {
 
 	if (stance != nullptr) {
 		// search special talk stances
-		for (uint32 i = 0; i < _talkSpritesEx.size(); i++) {
+		for (uint32 i = 0; i < _talkSpritesEx.getSize(); i++) {
 			if (scumm_stricmp(_talkSpritesEx[i]->getName(), stance) == 0) {
 				ret = _talkSpritesEx[i];
 				break;
@@ -96,7 +96,7 @@ BaseSprite *AdTalkHolder::getTalkStance(const char *stance) {
 		}
 		if (ret == nullptr) {
 			// serach generic talk stances
-			for (uint32 i = 0; i < _talkSprites.size(); i++) {
+			for (uint32 i = 0; i < _talkSprites.getSize(); i++) {
 				if (scumm_stricmp(_talkSprites[i]->getName(), stance) == 0) {
 					ret = _talkSprites[i];
 					break;
@@ -107,11 +107,11 @@ BaseSprite *AdTalkHolder::getTalkStance(const char *stance) {
 
 	// not a valid stance? get a random one
 	if (ret == nullptr) {
-		if (_talkSprites.size() < 1) {
+		if (_talkSprites.getSize() < 1) {
 			ret = _sprite;
 		} else {
 			// TODO: remember last
-			int rnd = BaseEngine::instance().randInt(0, _talkSprites.size() - 1);
+			int rnd = BaseEngine::instance().randInt(0, _talkSprites.getSize() - 1);
 			ret = _talkSprites[rnd];
 		}
 	}
@@ -222,7 +222,7 @@ bool AdTalkHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisS
 		bool ex = stack->pop()->getBool();
 		BaseArray<BaseSprite *> &sprites = ex ? _talkSpritesEx : _talkSprites;
 
-		for (uint32 i = 0; i < sprites.size(); i++) {
+		for (uint32 i = 0; i < sprites.getSize(); i++) {
 			if (scumm_stricmp(sprites[i]->getFilename(), filename) == 0) {
 				if (_currentSprite == sprites[i]) {
 					_currentSprite = _sprite;
@@ -231,7 +231,7 @@ bool AdTalkHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisS
 					_tempSprite2 = _sprite;
 				}
 				delete sprites[i];
-				sprites.remove_at(i);
+				sprites.removeAt(i);
 				break;
 			}
 		}
@@ -278,7 +278,7 @@ bool AdTalkHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisS
 			stack->pushBool(false);
 			script->runtimeError("SetTalkSprite method failed for file '%s'", filename);
 		} else {
-			for (uint32 i = 0; i < sprites.size(); i++) {
+			for (uint32 i = 0; i < sprites.getSize(); i++) {
 				if (_currentSprite == sprites[i]) {
 					_currentSprite = spr;
 				}
@@ -287,7 +287,7 @@ bool AdTalkHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisS
 				}
 				delete sprites[i];
 			}
-			sprites.clear();
+			sprites.removeAll();
 			sprites.add(spr);
 			stack->pushBool(true);
 		}
@@ -337,13 +337,13 @@ const char *AdTalkHolder::scToString() {
 
 //////////////////////////////////////////////////////////////////////////
 bool AdTalkHolder::saveAsText(BaseDynamicBuffer *buffer, int indent) {
-	for (uint32 i = 0; i < _talkSprites.size(); i++) {
+	for (uint32 i = 0; i < _talkSprites.getSize(); i++) {
 		if (_talkSprites[i]->getFilename()) {
 			buffer->putTextIndent(indent + 2, "TALK=\"%s\"\n", _talkSprites[i]->getFilename());
 		}
 	}
 
-	for (uint32 i = 0; i < _talkSpritesEx.size(); i++) {
+	for (uint32 i = 0; i < _talkSpritesEx.getSize(); i++) {
 		if (_talkSpritesEx[i]->getFilename()) {
 			buffer->putTextIndent(indent + 2, "TALK_SPECIAL=\"%s\"\n", _talkSpritesEx[i]->getFilename());
 		}
diff --git a/engines/wintermute/ad/ad_waypoint_group.cpp b/engines/wintermute/ad/ad_waypoint_group.cpp
index 322d0177257..e8cad57f218 100644
--- a/engines/wintermute/ad/ad_waypoint_group.cpp
+++ b/engines/wintermute/ad/ad_waypoint_group.cpp
@@ -55,10 +55,10 @@ AdWaypointGroup::~AdWaypointGroup() {
 
 //////////////////////////////////////////////////////////////////////////
 void AdWaypointGroup::cleanup() {
-	for (uint32 i = 0; i < _points.size(); i++) {
+	for (uint32 i = 0; i < _points.getSize(); i++) {
 		delete _points[i];
 	}
-	_points.clear();
+	_points.removeAll();
 	_editorSelectedPoint = -1;
 }
 
@@ -181,7 +181,7 @@ bool AdWaypointGroup::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	}
 	BaseClass::saveAsText(buffer, indent + 2);
 
-	for (uint32 i = 0; i < _points.size(); i++) {
+	for (uint32 i = 0; i < _points.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "POINT {%d,%d}\n", _points[i]->x, _points[i]->y);
 	}
 
@@ -255,7 +255,7 @@ bool AdWaypointGroup::mimic(AdWaypointGroup *wpt, float scale, int argX, int arg
 
 	cleanup();
 
-	for (uint32 i = 0; i < wpt->_points.size(); i++) {
+	for (uint32 i = 0; i < wpt->_points.getSize(); i++) {
 		int x = (int)((float)wpt->_points[i]->x * scale / 100.0f);
 		int y = (int)((float)wpt->_points[i]->y * scale / 100.0f);
 
diff --git a/engines/wintermute/ad/ad_waypoint_group3d.cpp b/engines/wintermute/ad/ad_waypoint_group3d.cpp
index c19fda41510..fc3e022f4e6 100644
--- a/engines/wintermute/ad/ad_waypoint_group3d.cpp
+++ b/engines/wintermute/ad/ad_waypoint_group3d.cpp
@@ -39,10 +39,10 @@ AdWaypointGroup3D::AdWaypointGroup3D(BaseGame *inGame) : BaseClass(inGame) {
 
 //////////////////////////////////////////////////////////////////////////
 AdWaypointGroup3D::~AdWaypointGroup3D() {
-	for (uint i = 0; i < _points.size(); i++) {
+	for (uint i = 0; i < _points.getSize(); i++) {
 		delete _points[i];
 	}
-	_points.clear();
+	_points.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/base/base_frame.cpp b/engines/wintermute/base/base_frame.cpp
index 6d5e3b38e81..ed1b7d1ae48 100644
--- a/engines/wintermute/base/base_frame.cpp
+++ b/engines/wintermute/base/base_frame.cpp
@@ -62,16 +62,16 @@ BaseFrame::~BaseFrame() {
 	delete _sound;
 	_sound = nullptr;
 
-	for (uint32 i = 0; i < _subframes.size(); i++) {
+	for (uint32 i = 0; i < _subframes.getSize(); i++) {
 		delete _subframes[i];
 	}
-	_subframes.clear();
+	_subframes.removeAll();
 
-	for (uint32 i = 0; i < _applyEvent.size(); i++) {
+	for (uint32 i = 0; i < _applyEvent.getSize(); i++) {
 		delete[] _applyEvent[i];
 		_applyEvent[i] = nullptr;
 	}
-	_applyEvent.clear();
+	_applyEvent.removeAll();
 }
 
 
@@ -79,7 +79,7 @@ BaseFrame::~BaseFrame() {
 bool BaseFrame::draw(int x, int y, BaseObject *registerOwner, float zoomX, float zoomY, bool precise, uint32 alpha, bool allFrames, float rotate, Graphics::TSpriteBlendMode blendMode) {
 	bool res;
 
-	for (uint32 i = 0; i < _subframes.size(); i++) {
+	for (uint32 i = 0; i < _subframes.getSize(); i++) {
 		// filter out subframes unsupported by current renderer
 		if (!allFrames) {
 			if ((_subframes[i]->_2DOnly && _gameRef->_useD3D) || (_subframes[i]->_3DOnly && !_gameRef->_useD3D))
@@ -114,7 +114,7 @@ bool BaseFrame::oneTimeDisplay(BaseObject *owner, bool muted) {
 		*/
 	}
 	if (owner) {
-		for (uint32 i = 0; i < _applyEvent.size(); i++) {
+		for (uint32 i = 0; i < _applyEvent.getSize(); i++) {
 			owner->applyEvent(_applyEvent[i]);
 		}
 	}
@@ -350,7 +350,7 @@ bool BaseFrame::loadBuffer(char *buffer, int lifeTime, bool keepLoaded) {
 
 
 	sub->_editorSelected = editorSelected;
-	_subframes.insert_at(0, sub);
+	_subframes.insertAt(0, sub);
 
 	return STATUS_OK;
 }
@@ -365,7 +365,7 @@ bool BaseFrame::getBoundingRect(Rect32 *rect, int x, int y, float scaleX, float
 
 	Rect32 subRect;
 
-	for (uint32 i = 0; i < _subframes.size(); i++) {
+	for (uint32 i = 0; i < _subframes.getSize(); i++) {
 		_subframes[i]->getBoundingRect(&subRect, x, y, scaleX, scaleY);
 		BasePlatform::unionRect(rect, rect, &subRect);
 	}
@@ -397,15 +397,15 @@ bool BaseFrame::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 		buffer->putTextIndent(indent + 2, "EDITOR_EXPANDED=%s\n", _editorExpanded ? "TRUE" : "FALSE");
 	}
 
-	if (_subframes.size() > 0) {
+	if (_subframes.getSize() > 0) {
 		_subframes[0]->saveAsText(buffer, indent, false);
 	}
 
-	for (uint32 i = 1; i < _subframes.size(); i++) {
+	for (uint32 i = 1; i < _subframes.getSize(); i++) {
 		_subframes[i]->saveAsText(buffer, indent + 2);
 	}
 
-	for (uint32 i = 0; i < _applyEvent.size(); i++) {
+	for (uint32 i = 0; i < _applyEvent.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "APPLY_EVENT=\"%s\"\n", _applyEvent[i]);
 	}
 
@@ -485,7 +485,7 @@ bool BaseFrame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStac
 	if (strcmp(name, "GetSubframe") == 0) {
 		stack->correctParams(1);
 		int index = stack->pop()->getInt(-1);
-		if (index < 0 || index >= (int32)_subframes.size()) {
+		if (index < 0 || index >= (int32)_subframes.getSize()) {
 			script->runtimeError("Frame.GetSubframe: Subframe index %d is out of range.", index);
 			stack->pushNULL();
 		} else {
@@ -503,15 +503,15 @@ bool BaseFrame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStac
 		ScValue *val = stack->pop();
 		if (val->isInt()) {
 			int index = val->getInt(-1);
-			if (index < 0 || index >= (int32)_subframes.size()) {
+			if (index < 0 || index >= (int32)_subframes.getSize()) {
 				script->runtimeError("Frame.DeleteSubframe: Subframe index %d is out of range.", index);
 			}
 		} else {
 			BaseSubFrame *sub = (BaseSubFrame *)val->getNative();
-			for (uint32 i = 0; i < _subframes.size(); i++) {
+			for (uint32 i = 0; i < _subframes.getSize(); i++) {
 				if (_subframes[i] == sub) {
 					delete _subframes[i];
-					_subframes.remove_at(i);
+					_subframes.removeAt(i);
 					break;
 				}
 			}
@@ -563,10 +563,10 @@ bool BaseFrame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStac
 			sub->setSurface(filename);
 		}
 
-		if (index >= (int32)_subframes.size()) {
+		if (index >= (int32)_subframes.getSize()) {
 			_subframes.add(sub);
 		} else {
-			_subframes.insert_at(index, sub);
+			_subframes.insertAt(index, sub);
 		}
 
 		stack->pushNative(sub, true);
@@ -579,7 +579,7 @@ bool BaseFrame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStac
 	else if (strcmp(name, "GetSubframe") == 0) {
 		stack->correctParams(1);
 		int index = stack->pop()->getInt(-1);
-		if (index < 0 || index >= (int32)_applyEvent.size()) {
+		if (index < 0 || index >= (int32)_applyEvent.getSize()) {
 			script->runtimeError("Frame.GetEvent: Event index %d is out of range.", index);
 			stack->pushNULL();
 		} else {
@@ -594,7 +594,7 @@ bool BaseFrame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStac
 	else if (strcmp(name, "AddEvent") == 0) {
 		stack->correctParams(1);
 		const char *event = stack->pop()->getString();
-		for (uint32 i = 0; i < _applyEvent.size(); i++) {
+		for (uint32 i = 0; i < _applyEvent.getSize(); i++) {
 			if (scumm_stricmp(_applyEvent[i], event) == 0) {
 				stack->pushNULL();
 				return STATUS_OK;
@@ -611,10 +611,10 @@ bool BaseFrame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStac
 	else if (strcmp(name, "DeleteEvent") == 0) {
 		stack->correctParams(1);
 		const char *event = stack->pop()->getString();
-		for (uint32 i = 0; i < _applyEvent.size(); i++) {
+		for (uint32 i = 0; i < _applyEvent.getSize(); i++) {
 			if (scumm_stricmp(_applyEvent[i], event) == 0) {
 				delete[] _applyEvent[i];
-				_applyEvent.remove_at(i);
+				_applyEvent.removeAt(i);
 				break;
 			}
 		}
@@ -624,7 +624,7 @@ bool BaseFrame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStac
 
 	//////////////////////////////////////////////////////////////////////////
 	else {
-		if (_subframes.size() == 1) {
+		if (_subframes.getSize() == 1) {
 			return _subframes[0]->scCallMethod(script, stack, thisStack, name);
 		} else {
 			return BaseScriptable::scCallMethod(script, stack, thisStack, name);
@@ -692,7 +692,7 @@ ScValue *BaseFrame::scGetProperty(const Common::String &name) {
 	// NumSubframes (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumSubframes") {
-		_scValue->setInt(_subframes.size());
+		_scValue->setInt(_subframes.getSize());
 		return _scValue;
 	}
 
@@ -700,13 +700,13 @@ ScValue *BaseFrame::scGetProperty(const Common::String &name) {
 	// NumEvents (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumEvents") {
-		_scValue->setInt(_applyEvent.size());
+		_scValue->setInt(_applyEvent.getSize());
 		return _scValue;
 	}
 
 	//////////////////////////////////////////////////////////////////////////
 	else {
-		if (_subframes.size() == 1) {
+		if (_subframes.getSize() == 1) {
 			return _subframes[0]->scGetProperty(name);
 		} else {
 			return BaseScriptable::scGetProperty(name);
@@ -759,7 +759,7 @@ bool BaseFrame::scSetProperty(const char *name, ScValue *value) {
 
 	//////////////////////////////////////////////////////////////////////////
 	else {
-		if (_subframes.size() == 1) {
+		if (_subframes.getSize() == 1) {
 			return _subframes[0]->scSetProperty(name, value);
 		} else {
 			return BaseScriptable::scSetProperty(name, value);
@@ -774,6 +774,6 @@ const char *BaseFrame::scToString() {
 }
 
 Common::String BaseFrame::debuggerToString() const {
-	return Common::String::format("%p: Frame \"%s\": #subframes %d ", (const void *)this, getName(), _subframes.size());
+	return Common::String::format("%p: Frame \"%s\": #subframes %d ", (const void *)this, getName(), _subframes.getSize());
 }
 } // End of namespace Wintermute
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index 0f5e2505a66..f421463114f 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -330,13 +330,13 @@ bool BaseGame::cleanup() {
 	unregisterObject(_fader);
 	_fader = nullptr;
 
-	for (uint32 i = 0; i < _regObjects.size(); i++) {
+	for (uint32 i = 0; i < _regObjects.getSize(); i++) {
 		delete _regObjects[i];
 		_regObjects[i] = nullptr;
 	}
-	_regObjects.clear();
+	_regObjects.removeAll();
 
-	_windows.clear(); // refs only
+	_windows.removeAll(); // refs only
 	_focusedWindow = nullptr; // ref only
 
 	delete _cursorNoninteractive;
@@ -351,11 +351,11 @@ bool BaseGame::cleanup() {
 	_scValue = nullptr;
 	_sFX = nullptr;
 
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		_scripts[i]->_owner = nullptr;
 		_scripts[i]->finish();
 	}
-	_scripts.clear();
+	_scripts.removeAll();
 
 	_fontStorage->removeFont(_systemFont);
 	_systemFont = nullptr;
@@ -370,12 +370,12 @@ bool BaseGame::cleanup() {
 	}
 #endif
 
-	for (uint32 i = 0; i < _quickMessages.size(); i++) {
+	for (uint32 i = 0; i < _quickMessages.getSize(); i++) {
 		delete _quickMessages[i];
 	}
-	_quickMessages.clear();
+	_quickMessages.removeAll();
 
-	_viewportStack.clear();
+	_viewportStack.removeAll();
 	_viewportSP = -1;
 
 	setName(nullptr);
@@ -707,7 +707,7 @@ bool BaseGame::initLoop() {
 	getMousePos(&_mousePos);
 
 	_focusedWindow = nullptr;
-	for (int i = _windows.size() - 1; i >= 0; i--) {
+	for (int i = _windows.getSize() - 1; i >= 0; i--) {
 		if (_windows[i]->isVisible()) {
 			_focusedWindow = _windows[i];
 			break;
@@ -1877,7 +1877,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 	else if (strcmp(name, "DeleteWindow") == 0) {
 		stack->correctParams(1);
 		BaseObject *obj = (BaseObject *)stack->pop()->getNative();
-		for (uint32 i = 0; i < _windows.size(); i++) {
+		for (uint32 i = 0; i < _windows.getSize(); i++) {
 			if (_windows[i] == obj) {
 				unregisterObject(_windows[i]);
 				stack->pushBool(true);
@@ -3278,15 +3278,15 @@ const char *BaseGame::scToString() {
 #define QUICK_MSG_DURATION 3000
 //////////////////////////////////////////////////////////////////////////
 bool BaseGame::displayQuickMsg() {
-	if (_quickMessages.size() == 0 || !_systemFont) {
+	if (_quickMessages.getSize() == 0 || !_systemFont) {
 		return STATUS_OK;
 	}
 
 	// update
-	for (int32 i = 0; i < (int32)_quickMessages.size(); i++) {
+	for (int32 i = 0; i < (int32)_quickMessages.getSize(); i++) {
 		if (_currentTime - _quickMessages[i]->getStartTime() >= QUICK_MSG_DURATION) {
 			delete _quickMessages[i];
-			_quickMessages.remove_at(i);
+			_quickMessages.removeAt(i);
 			i--;
 		}
 	}
@@ -3294,7 +3294,7 @@ bool BaseGame::displayQuickMsg() {
 	int posY = 20;
 
 	// display
-	for (uint32 i = 0; i < _quickMessages.size(); i++) {
+	for (uint32 i = 0; i < _quickMessages.getSize(); i++) {
 		_systemFont->drawText((const byte *)_quickMessages[i]->getText(), 0, posY, _renderer->getWidth());
 		posY += _systemFont->getTextHeight((const byte *)_quickMessages[i]->getText(), _renderer->getWidth());
 	}
@@ -3305,9 +3305,9 @@ bool BaseGame::displayQuickMsg() {
 #define MAX_QUICK_MSG 5
 //////////////////////////////////////////////////////////////////////////
 void BaseGame::quickMessage(const char *text) {
-	if (_quickMessages.size() >= MAX_QUICK_MSG) {
+	if (_quickMessages.getSize() >= MAX_QUICK_MSG) {
 		delete _quickMessages[0];
-		_quickMessages.remove_at(0);
+		_quickMessages.removeAt(0);
 	}
 	_quickMessages.add(new BaseQuickMsg(_currentTime,  text));
 }
@@ -3340,9 +3340,9 @@ bool BaseGame::unregisterObject(BaseObject *object) {
 	}
 
 	// is it a window?
-	for (uint32 i = 0; i < _windows.size(); i++) {
+	for (uint32 i = 0; i < _windows.getSize(); i++) {
 		if ((BaseObject *)_windows[i] == object) {
-			_windows.remove_at(i);
+			_windows.removeAt(i);
 
 			// get new focused window
 			if (_focusedWindow == object) {
@@ -3364,9 +3364,9 @@ bool BaseGame::unregisterObject(BaseObject *object) {
 	}
 
 	// destroy object
-	for (uint32 i = 0; i < _regObjects.size(); i++) {
+	for (uint32 i = 0; i < _regObjects.getSize(); i++) {
 		if (_regObjects[i] == object) {
-			_regObjects.remove_at(i);
+			_regObjects.removeAt(i);
 			if (!_loadInProgress) {
 				SystemClassRegistry::getInstance()->enumInstances(invalidateValues, "ScValue", (void *)object);
 			}
@@ -3402,7 +3402,7 @@ bool BaseGame::validObject(BaseObject *object) {
 		return true;
 	}
 
-	for (uint32 i = 0; i < _regObjects.size(); i++) {
+	for (uint32 i = 0; i < _regObjects.getSize(); i++) {
 		if (_regObjects[i] == object) {
 			return true;
 		}
@@ -3858,7 +3858,7 @@ bool BaseGame::displayWindows(bool inGame) {
 	// did we lose focus? focus topmost window
 	if (_focusedWindow == nullptr || !_focusedWindow->isVisible() || _focusedWindow->isDisabled()) {
 		_focusedWindow = nullptr;
-		for (int i = _windows.size() - 1; i >= 0; i--) {
+		for (int i = _windows.getSize() - 1; i >= 0; i--) {
 			if (_windows[i]->isVisible() && !_windows[i]->isDisabled()) {
 				_focusedWindow = _windows[i];
 				break;
@@ -3867,7 +3867,7 @@ bool BaseGame::displayWindows(bool inGame) {
 	}
 
 	// display all windows
-	for (uint32 i = 0; i < _windows.size(); i++) {
+	for (uint32 i = 0; i < _windows.getSize(); i++) {
 		if (_windows[i]->isVisible() && _windows[i]->getInGame() == inGame) {
 
 			res = _windows[i]->display();
@@ -3973,10 +3973,10 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) {
 bool BaseGame::focusWindow(UIWindow *window) {
 	UIWindow *prev = _focusedWindow;
 
-	for (uint32 i = 0; i < _windows.size(); i++) {
+	for (uint32 i = 0; i < _windows.getSize(); i++) {
 		if (_windows[i] == window) {
-			if (i < _windows.size() - 1) {
-				_windows.remove_at(i);
+			if (i < _windows.getSize() - 1) {
+				_windows.removeAt(i);
 				_windows.add(window);
 
 				_gameRef->_focusedWindow = window;
@@ -4180,7 +4180,7 @@ bool BaseGame::setActiveObject(BaseObject *obj) {
 //////////////////////////////////////////////////////////////////////////
 bool BaseGame::pushViewport(BaseViewport *viewport) {
 	_viewportSP++;
-	if (_viewportSP >= (int32)_viewportStack.size()) {
+	if (_viewportSP >= (int32)_viewportStack.getSize()) {
 		_viewportStack.add(viewport);
 	} else {
 		_viewportStack[_viewportSP] = viewport;
@@ -4199,7 +4199,7 @@ bool BaseGame::popViewport() {
 		_gameRef->LOG(0, "Fatal: Viewport stack underflow!");
 	}
 
-	if (_viewportSP >= 0 && _viewportSP < (int32)_viewportStack.size()) {
+	if (_viewportSP >= 0 && _viewportSP < (int32)_viewportStack.getSize()) {
 		_renderer->setViewport(_viewportStack[_viewportSP]->getRect());
 	} else _renderer->setViewport(_renderer->_drawOffsetX,
 		                              _renderer->_drawOffsetY,
@@ -4328,7 +4328,7 @@ void BaseGame::DEBUG_DumpClassRegistry() {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseGame::invalidateDeviceObjects() {
-	for (uint32 i = 0; i < _regObjects.size(); i++) {
+	for (uint32 i = 0; i < _regObjects.getSize(); i++) {
 		_regObjects[i]->invalidateDeviceObjects();
 	}
 	return STATUS_OK;
@@ -4337,7 +4337,7 @@ bool BaseGame::invalidateDeviceObjects() {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseGame::restoreDeviceObjects() {
-	for (uint32 i = 0; i < _regObjects.size(); i++) {
+	for (uint32 i = 0; i < _regObjects.getSize(); i++) {
 		_regObjects[i]->restoreDeviceObjects();
 	}
 	return STATUS_OK;
diff --git a/engines/wintermute/base/base_region.cpp b/engines/wintermute/base/base_region.cpp
index 32ee3245253..a29a36ae96f 100644
--- a/engines/wintermute/base/base_region.cpp
+++ b/engines/wintermute/base/base_region.cpp
@@ -59,10 +59,10 @@ BaseRegion::~BaseRegion() {
 
 //////////////////////////////////////////////////////////////////////////
 void BaseRegion::cleanup() {
-	for (uint32 i = 0; i < _points.size(); i++) {
+	for (uint32 i = 0; i < _points.getSize(); i++) {
 		delete _points[i];
 	}
-	_points.clear();
+	_points.removeAll();
 
 	_rect.setEmpty();
 	_editorSelectedPoint = -1;
@@ -77,7 +77,7 @@ bool BaseRegion::createRegion() {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseRegion::pointInRegion(int x, int y) {
-	if (_points.size() < 3) {
+	if (_points.getSize() < 3) {
 		return false;
 	}
 
@@ -159,10 +159,10 @@ bool BaseRegion::loadBuffer(char *buffer, bool complete) {
 		buffer = params;
 	}
 
-	for (uint32 i = 0; i < _points.size(); i++) {
+	for (uint32 i = 0; i < _points.getSize(); i++) {
 		delete _points[i];
 	}
-	_points.clear();
+	_points.removeAll();
 
 	while ((cmd = parser.getCommand(&buffer, commands, &params)) > 0) {
 		switch (cmd) {
@@ -248,8 +248,8 @@ bool BaseRegion::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 		int x = stack->pop()->getInt();
 		int y = stack->pop()->getInt();
 
-		if (index >= 0 && index < (int32)_points.size()) {
-			_points.insert_at(index, new BasePoint(x, y));
+		if (index >= 0 && index < (int32)_points.getSize()) {
+			_points.insertAt(index, new BasePoint(x, y));
 			createRegion();
 
 			stack->pushBool(true);
@@ -269,7 +269,7 @@ bool BaseRegion::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 		int x = stack->pop()->getInt();
 		int y = stack->pop()->getInt();
 
-		if (index >= 0 && index < (int32)_points.size()) {
+		if (index >= 0 && index < (int32)_points.getSize()) {
 			_points[index]->x = x;
 			_points[index]->y = y;
 			createRegion();
@@ -289,11 +289,11 @@ bool BaseRegion::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 		stack->correctParams(1);
 		int index = stack->pop()->getInt();
 
-		if (index >= 0 && index < (int32)_points.size()) {
+		if (index >= 0 && index < (int32)_points.getSize()) {
 			delete _points[index];
 			_points[index] = nullptr;
 
-			_points.remove_at(index);
+			_points.removeAt(index);
 			createRegion();
 
 			stack->pushBool(true);
@@ -311,7 +311,7 @@ bool BaseRegion::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 		stack->correctParams(1);
 		int index = stack->pop()->getInt();
 
-		if (index >= 0 && index < (int32)_points.size()) {
+		if (index >= 0 && index < (int32)_points.getSize()) {
 			ScValue *val = stack->getPushValue();
 			if (val) {
 				val->setProperty("X", _points[index]->x);
@@ -360,7 +360,7 @@ ScValue *BaseRegion::scGetProperty(const Common::String &name) {
 	// NumPoints
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumPoints") {
-		_scValue->setInt(_points.size());
+		_scValue->setInt(_points.getSize());
 		return _scValue;
 	} else {
 		return BaseObject::scGetProperty(name);
@@ -409,11 +409,11 @@ bool BaseRegion::saveAsText(BaseDynamicBuffer *buffer, int indent, const char *n
 	buffer->putTextIndent(indent + 2, "ACTIVE=%s\n", _active ? "TRUE" : "FALSE");
 	buffer->putTextIndent(indent + 2, "EDITOR_SELECTED_POINT=%d\n", _editorSelectedPoint);
 
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
-	for (uint32 i = 0; i < _points.size(); i++) {
+	for (uint32 i = 0; i < _points.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "POINT {%d,%d}\n", _points[i]->x, _points[i]->y);
 	}
 
@@ -449,7 +449,7 @@ typedef struct {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseRegion::ptInPolygon(int32 x, int32 y) {
-	if (_points.size() < 3) {
+	if (_points.getSize() < 3) {
 		return false;
 	}
 
@@ -463,9 +463,9 @@ bool BaseRegion::ptInPolygon(int32 x, int32 y) {
 	p1.x = (double)_points[0]->x;
 	p1.y = (double)_points[0]->y;
 
-	for (uint32 i = 1; i <= _points.size(); i++) {
-		p2.x = (double)_points[i % _points.size()]->x;
-		p2.y = (double)_points[i % _points.size()]->y;
+	for (uint32 i = 1; i <= _points.getSize(); i++) {
+		p2.x = (double)_points[i % _points.getSize()]->x;
+		p2.y = (double)_points[i % _points.getSize()]->y;
 
 		if (p.y > MIN(p1.y, p2.y)) {
 			if (p.y <= MAX(p1.y, p2.y)) {
@@ -492,12 +492,12 @@ bool BaseRegion::ptInPolygon(int32 x, int32 y) {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseRegion::getBoundingRect(Rect32 *rect) {
-	if (_points.size() == 0) {
+	if (_points.getSize() == 0) {
 		rect->setEmpty();
 	} else {
 		int32 minX = INT_MAX_VALUE, minY = INT_MAX_VALUE, maxX = INT_MIN_VALUE, maxY = INT_MIN_VALUE;
 
-		for (uint32 i = 0; i < _points.size(); i++) {
+		for (uint32 i = 0; i < _points.getSize(); i++) {
 			minX = MIN(minX, _points[i]->x);
 			minY = MIN(minY, _points[i]->y);
 
@@ -518,7 +518,7 @@ bool BaseRegion::mimic(BaseRegion *region, float scale, int x, int y) {
 
 	cleanup();
 
-	for (uint32 i = 0; i < region->_points.size(); i++) {
+	for (uint32 i = 0; i < region->_points.getSize(); i++) {
 		int xVal, yVal;
 
 		xVal = (int)((float)region->_points[i]->x * scale / 100.0f);
diff --git a/engines/wintermute/base/base_script_holder.cpp b/engines/wintermute/base/base_script_holder.cpp
index 81b247e4f5f..09201d1b692 100644
--- a/engines/wintermute/base/base_script_holder.cpp
+++ b/engines/wintermute/base/base_script_holder.cpp
@@ -58,11 +58,11 @@ bool BaseScriptHolder::cleanup() {
 	delete[] _filename;
 	_filename = nullptr;
 
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		_scripts[i]->finish(true);
 		_scripts[i]->_owner = nullptr;
 	}
-	_scripts.clear();
+	_scripts.removeAll();
 
 	return STATUS_OK;
 }
@@ -87,7 +87,7 @@ bool BaseScriptHolder::applyEvent(const char *eventName, bool unbreakable) {
 	int numHandlers = 0;
 
 	bool ret = STATUS_FAILED;
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (!_scripts[i]->_thread) {
 			ScScript *handler = _scripts[i]->invokeEventHandler(eventName, unbreakable);
 			if (handler) {
@@ -183,7 +183,7 @@ bool BaseScriptHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *t
 		const char *filename = stack->pop()->getString();
 		bool killThreads = stack->pop()->getBool(false);
 		bool ret = false;
-		for (uint32 i = 0; i < _scripts.size(); i++) {
+		for (uint32 i = 0; i < _scripts.getSize(); i++) {
 			if (scumm_stricmp(_scripts[i]->_filename, filename) == 0) {
 				_scripts[i]->finish(killThreads);
 				ret = true;
@@ -202,7 +202,7 @@ bool BaseScriptHolder::scCallMethod(ScScript *script, ScStack *stack, ScStack *t
 		stack->correctParams(1);
 		const char *filename = stack->pop()->getString();
 		bool ret = false;
-		for (uint32 i = 0; i < _scripts.size(); i++) {
+		for (uint32 i = 0; i < _scripts.getSize(); i++) {
 			if (scumm_stricmp(_scripts[i]->_filename, filename) == 0 && _scripts[i]->_state != SCRIPT_FINISHED && _scripts[i]->_state != SCRIPT_ERROR) {
 				ret = true;
 				break;
@@ -297,7 +297,7 @@ bool BaseScriptHolder::persist(BasePersistenceManager *persistMgr) {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseScriptHolder::addScript(const char *filename) {
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (scumm_stricmp(_scripts[i]->_filename, filename) == 0) {
 			if (_scripts[i]->_state != SCRIPT_FINISHED) {
 				BaseEngine::LOG(0, "BaseScriptHolder::AddScript - trying to add script '%s' multiple times (obj: '%s')", filename, getName());
@@ -336,9 +336,9 @@ bool BaseScriptHolder::addScript(const char *filename) {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseScriptHolder::removeScript(ScScript *script) {
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (_scripts[i] == script) {
-			_scripts.remove_at(i);
+			_scripts.removeAt(i);
 			break;
 		}
 	}
@@ -347,7 +347,7 @@ bool BaseScriptHolder::removeScript(ScScript *script) {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseScriptHolder::canHandleEvent(const char *EventName) const {
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (!_scripts[i]->_thread && _scripts[i]->canHandleEvent(EventName)) {
 			return true;
 		}
@@ -358,7 +358,7 @@ bool BaseScriptHolder::canHandleEvent(const char *EventName) const {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseScriptHolder::canHandleMethod(const char *MethodName) const {
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (!_scripts[i]->_thread && _scripts[i]->canHandleMethod(MethodName)) {
 			return true;
 		}
@@ -451,7 +451,7 @@ bool BaseScriptHolder::parseProperty(char *buffer, bool complete) {
 //////////////////////////////////////////////////////////////////////////
 void BaseScriptHolder::makeFreezable(bool freezable) {
 	_freezable = freezable;
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		_scripts[i]->_freezable = freezable;
 	}
 
@@ -460,7 +460,7 @@ void BaseScriptHolder::makeFreezable(bool freezable) {
 
 //////////////////////////////////////////////////////////////////////////
 ScScript *BaseScriptHolder::invokeMethodThread(const char *methodName) {
-	for (int i = _scripts.size() - 1; i >= 0; i--) {
+	for (int i = _scripts.getSize() - 1; i >= 0; i--) {
 		if (_scripts[i]->canHandleMethod(methodName)) {
 #if EXTENDED_DEBUGGER_ENABLED
 			DebuggableScEngine* debuggableEngine;
diff --git a/engines/wintermute/base/base_sprite.cpp b/engines/wintermute/base/base_sprite.cpp
index 6810aacb8ce..5c3e1fa3a95 100644
--- a/engines/wintermute/base/base_sprite.cpp
+++ b/engines/wintermute/base/base_sprite.cpp
@@ -89,10 +89,10 @@ void BaseSprite::setDefaults() {
 void BaseSprite::cleanup() {
 	BaseScriptHolder::cleanup();
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		delete _frames[i];
 	}
-	_frames.clear();
+	_frames.removeAll();
 
 	delete[] _editorBgFile;
 	_editorBgFile = nullptr;
@@ -104,7 +104,7 @@ void BaseSprite::cleanup() {
 //////////////////////////////////////////////////////////////////////////
 bool BaseSprite::draw(int x, int y, BaseObject *registerOwner, float zoomX, float zoomY, uint32 alpha) {
 	getCurrentFrame(zoomX, zoomY);
-	if (_currentFrame < 0 || _currentFrame >= (int32)_frames.size()) {
+	if (_currentFrame < 0 || _currentFrame >= (int32)_frames.getSize()) {
 		return STATUS_OK;
 	}
 
@@ -340,7 +340,7 @@ bool BaseSprite::loadBuffer(char *buffer, bool complete, int lifeTime, TSpriteCa
 
 //////////////////////////////////////////////////////////////////////
 void BaseSprite::reset() {
-	if (_frames.size() > 0) {
+	if (_frames.getSize() > 0) {
 		_currentFrame = 0;
 	} else {
 		_currentFrame = -1;
@@ -381,10 +381,10 @@ bool BaseSprite::getCurrentFrame(float zoomX, float zoomY) {
 
 	// get current frame
 	if (!_paused && !_finished && timer >= _lastFrameTime + _frames[_currentFrame]->_delay && _lastFrameTime != 0) {
-		if (_currentFrame < (int32)_frames.size() - 1) {
+		if (_currentFrame < (int32)_frames.getSize() - 1) {
 			_currentFrame++;
 			if (_continuous) {
-				_canBreak = (_currentFrame == (int32)_frames.size() - 1);
+				_canBreak = (_currentFrame == (int32)_frames.getSize() - 1);
 			}
 		} else {
 			if (_looping) {
@@ -399,13 +399,13 @@ bool BaseSprite::getCurrentFrame(float zoomX, float zoomY) {
 		_lastFrameTime = timer;
 	}
 
-	_changed = (lastFrame != _currentFrame || (_looping && (int32)_frames.size() == 1));
+	_changed = (lastFrame != _currentFrame || (_looping && (int32)_frames.getSize() == 1));
 
 	if (_lastFrameTime == 0) {
 		_lastFrameTime = timer;
 		_changed = true;
 		if (_continuous) {
-			_canBreak = (_currentFrame == (int32)_frames.size() - 1);
+			_canBreak = (_currentFrame == (int32)_frames.getSize() - 1);
 		}
 	}
 
@@ -425,7 +425,7 @@ bool BaseSprite::getCurrentFrame(float zoomX, float zoomY) {
 
 //////////////////////////////////////////////////////////////////////
 bool BaseSprite::display(int x, int y, BaseObject *registerVal, float zoomX, float zoomY, uint32 alpha, float rotate, Graphics::TSpriteBlendMode blendMode) {
-	if (_currentFrame < 0 || _currentFrame >= (int32)_frames.size()) {
+	if (_currentFrame < 0 || _currentFrame >= (int32)_frames.getSize()) {
 		return STATUS_OK;
 	}
 
@@ -446,11 +446,11 @@ bool BaseSprite::display(int x, int y, BaseObject *registerVal, float zoomX, flo
 //////////////////////////////////////////////////////////////////////////
 BaseSurface *BaseSprite::getSurface() {
 	// only used for animated textures for 3D models
-	if (_currentFrame < 0 || _currentFrame >= (int32)_frames.size()) {
+	if (_currentFrame < 0 || _currentFrame >= (int32)_frames.getSize()) {
 		return nullptr;
 	}
 	BaseFrame *frame = _frames[_currentFrame];
-	if (frame && frame->_subframes.size() > 0) {
+	if (frame && frame->_subframes.getSize() > 0) {
 		BaseSubFrame *subframe = frame->_subframes[0];
 		if (subframe) {
 			return subframe->_surface;
@@ -469,7 +469,7 @@ bool BaseSprite::getBoundingRect(Rect32 *rect, int x, int y, float scaleX, float
 	}
 
 	rect->setEmpty();
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		Rect32 frame;
 		Rect32 temp;
 		BasePlatform::copyRect(&temp, rect);
@@ -508,11 +508,11 @@ bool BaseSprite::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	BaseScriptHolder::saveAsText(buffer, indent + 2);
 
 	// scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->saveAsText(buffer, indent + 2);
 	}
 
@@ -565,7 +565,7 @@ bool BaseSprite::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 	if (strcmp(name, "GetFrame") == 0) {
 		stack->correctParams(1);
 		int index = stack->pop()->getInt(-1);
-		if (index < 0 || index >= (int32)_frames.size()) {
+		if (index < 0 || index >= (int32)_frames.getSize()) {
 			script->runtimeError("Sprite.GetFrame: Frame index %d is out of range.", index);
 			stack->pushNULL();
 		} else {
@@ -582,18 +582,18 @@ bool BaseSprite::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 		ScValue *val = stack->pop();
 		if (val->isInt()) {
 			int index = val->getInt(-1);
-			if (index < 0 || index >= (int32)_frames.size()) {
+			if (index < 0 || index >= (int32)_frames.getSize()) {
 				script->runtimeError("Sprite.DeleteFrame: Frame index %d is out of range.", index);
 			}
 		} else {
 			BaseFrame *frame = (BaseFrame *)val->getNative();
-			for (uint32 i = 0; i < _frames.size(); i++) {
+			for (uint32 i = 0; i < _frames.getSize(); i++) {
 				if (_frames[i] == frame) {
 					if (i == (uint32)_currentFrame) {
 						_lastFrameTime = 0;
 					}
 					delete _frames[i];
-					_frames.remove_at(i);
+					_frames.removeAt(i);
 					break;
 				}
 			}
@@ -665,10 +665,10 @@ bool BaseSprite::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 			}
 		}
 
-		if (index >= (int32)_frames.size()) {
+		if (index >= (int32)_frames.getSize()) {
 			_frames.add(frame);
 		} else {
-			_frames.insert_at(index, frame);
+			_frames.insertAt(index, frame);
 		}
 
 		stack->pushNative(frame, true);
@@ -715,7 +715,7 @@ ScValue *BaseSprite::scGetProperty(const Common::String &name) {
 	// NumFrames (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumFrames") {
-		_scValue->setInt(_frames.size());
+		_scValue->setInt(_frames.getSize());
 		return _scValue;
 	}
 
@@ -782,7 +782,7 @@ bool BaseSprite::scSetProperty(const char *name, ScValue *value) {
 	//////////////////////////////////////////////////////////////////////////
 	if (strcmp(name, "CurrentFrame") == 0) {
 		_currentFrame = value->getInt(0);
-		if (_currentFrame >= (int32)_frames.size() || _currentFrame < 0) {
+		if (_currentFrame >= (int32)_frames.getSize() || _currentFrame < 0) {
 			_currentFrame = -1;
 		}
 		_lastFrameTime = 0;
@@ -817,7 +817,7 @@ const char *BaseSprite::scToString() {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseSprite::killAllSounds() {
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->stopSound();
 	}
 	return STATUS_OK;
diff --git a/engines/wintermute/base/base_surface_storage.cpp b/engines/wintermute/base/base_surface_storage.cpp
index cc00f875e15..0057a4e8e8e 100644
--- a/engines/wintermute/base/base_surface_storage.cpp
+++ b/engines/wintermute/base/base_surface_storage.cpp
@@ -52,13 +52,13 @@ BaseSurfaceStorage::~BaseSurfaceStorage() {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseSurfaceStorage::cleanup(bool warn) {
-	for (uint32 i = 0; i < _surfaces.size(); i++) {
+	for (uint32 i = 0; i < _surfaces.getSize(); i++) {
 		if (warn) {
 			BaseEngine::LOG(0, "BaseSurfaceStorage warning: purging surface '%s', usage:%d", _surfaces[i]->getFileName(), _surfaces[i]->_referenceCount);
 		}
 		delete _surfaces[i];
 	}
-	_surfaces.clear();
+	_surfaces.removeAll();
 
 	return STATUS_OK;
 }
@@ -69,7 +69,7 @@ bool BaseSurfaceStorage::initLoop() {
 	if (_gameRef->_smartCache && _gameRef->getLiveTimer()->getTime() - _lastCleanupTime >= _gameRef->_surfaceGCCycleTime) {
 		_lastCleanupTime = _gameRef->getLiveTimer()->getTime();
 		sortSurfaces();
-		for (uint32 i = 0; i < _surfaces.size(); i++) {
+		for (uint32 i = 0; i < _surfaces.getSize(); i++) {
 			if (_surfaces[i]->_lifeTime <= 0) {
 				break;
 			}
@@ -86,12 +86,12 @@ bool BaseSurfaceStorage::initLoop() {
 
 //////////////////////////////////////////////////////////////////////
 bool BaseSurfaceStorage::removeSurface(BaseSurface *surface) {
-	for (uint32 i = 0; i < _surfaces.size(); i++) {
+	for (uint32 i = 0; i < _surfaces.getSize(); i++) {
 		if (_surfaces[i] == surface) {
 			_surfaces[i]->_referenceCount--;
 			if (_surfaces[i]->_referenceCount <= 0) {
 				delete _surfaces[i];
-				_surfaces.remove_at(i);
+				_surfaces.removeAt(i);
 			}
 			break;
 		}
@@ -102,7 +102,7 @@ bool BaseSurfaceStorage::removeSurface(BaseSurface *surface) {
 
 //////////////////////////////////////////////////////////////////////
 BaseSurface *BaseSurfaceStorage::addSurface(const Common::String &filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
-	for (uint32 i = 0; i < _surfaces.size(); i++) {
+	for (uint32 i = 0; i < _surfaces.getSize(); i++) {
 		if (scumm_stricmp(_surfaces[i]->getFileName(), filename.c_str()) == 0) {
 			_surfaces[i]->_referenceCount++;
 			return _surfaces[i];
@@ -132,7 +132,7 @@ BaseSurface *BaseSurfaceStorage::addSurface(const Common::String &filename, bool
 		return nullptr;
 	} else {
 		surface->_referenceCount = 1;
-		_surfaces.push_back(surface);
+		_surfaces.add(surface);
 		return surface;
 	}
 }
@@ -141,7 +141,7 @@ BaseSurface *BaseSurfaceStorage::addSurface(const Common::String &filename, bool
 //////////////////////////////////////////////////////////////////////
 bool BaseSurfaceStorage::restoreAll() {
 	bool ret;
-	for (uint32 i = 0; i < _surfaces.size(); i++) {
+	for (uint32 i = 0; i < _surfaces.getSize(); i++) {
 		ret = _surfaces[i]->restore();
 		if (ret != STATUS_OK) {
 			BaseEngine::LOG(0, "BaseSurfaceStorage::RestoreAll failed");
@@ -170,7 +170,7 @@ bool BaseSurfaceStorage::persist(BasePersistenceManager *persistMgr)
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseSurfaceStorage::sortSurfaces() {
-	qsort(_surfaces.data(), _surfaces.size(), sizeof(BaseSurface *), surfaceSortCB);
+	qsort(_surfaces.getData(), _surfaces.getSize(), sizeof(BaseSurface *), surfaceSortCB);
 	return STATUS_OK;
 }
 
diff --git a/engines/wintermute/base/font/base_font_bitmap.cpp b/engines/wintermute/base/font/base_font_bitmap.cpp
index d7471fe4b57..498cfbbdf47 100644
--- a/engines/wintermute/base/font/base_font_bitmap.cpp
+++ b/engines/wintermute/base/font/base_font_bitmap.cpp
@@ -264,8 +264,8 @@ void BaseFontBitmap::drawChar(byte c, int x, int y) {
 	bool handled = false;
 	if (_sprite) {
 		_sprite->getCurrentFrame();
-		if (_sprite->_currentFrame >= 0 && _sprite->_currentFrame < (int32)_sprite->_frames.size() && _sprite->_frames[_sprite->_currentFrame]) {
-			if (_sprite->_frames[_sprite->_currentFrame]->_subframes.size() > 0) {
+		if (_sprite->_currentFrame >= 0 && _sprite->_currentFrame < (int32)_sprite->_frames.getSize() && _sprite->_frames[_sprite->_currentFrame]) {
+			if (_sprite->_frames[_sprite->_currentFrame]->_subframes.getSize() > 0) {
 				_sprite->_frames[_sprite->_currentFrame]->_subframes[0]->_surface->displayTrans(x, y, rect);
 			}
 			handled = true;
@@ -573,8 +573,8 @@ bool BaseFontBitmap::getWidths() {
 	BaseSurface *surf = nullptr;
 
 	if (_sprite) {
-		if (_widthsFrame >= 0 && _widthsFrame < (int32)_sprite->_frames.size()) {
-			if (_sprite->_frames[_widthsFrame] && (int32)_sprite->_frames[_widthsFrame]->_subframes.size() > 0) {
+		if (_widthsFrame >= 0 && _widthsFrame < (int32)_sprite->_frames.getSize()) {
+			if (_sprite->_frames[_widthsFrame] && (int32)_sprite->_frames[_widthsFrame]->_subframes.getSize() > 0) {
 				surf = _sprite->_frames[_widthsFrame]->_subframes[0]->_surface;
 			}
 		}
diff --git a/engines/wintermute/base/font/base_font_storage.cpp b/engines/wintermute/base/font/base_font_storage.cpp
index 8c12bf43814..310d57c0f91 100644
--- a/engines/wintermute/base/font/base_font_storage.cpp
+++ b/engines/wintermute/base/font/base_font_storage.cpp
@@ -49,20 +49,20 @@ BaseFontStorage::~BaseFontStorage() {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseFontStorage::cleanup(bool warn) {
-	for (uint32 i = 0; i < _fonts.size(); i++) {
+	for (uint32 i = 0; i < _fonts.getSize(); i++) {
 		if (warn) {
 			_gameRef->LOG(0, "Removing orphan font '%s'", _fonts[i]->getFilename());
 		}
 		delete _fonts[i];
 	}
-	_fonts.clear();
+	_fonts.removeAll();
 
 	return STATUS_OK;
 }
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseFontStorage::initLoop() {
-	for (uint32 i = 0; i < _fonts.size(); i++) {
+	for (uint32 i = 0; i < _fonts.getSize(); i++) {
 		_fonts[i]->initLoop();
 	}
 	return STATUS_OK;
@@ -74,7 +74,7 @@ BaseFont *BaseFontStorage::addFont(const Common::String &filename) {
 		return nullptr;
 	}
 
-	for (uint32 i = 0; i < _fonts.size(); i++) {
+	for (uint32 i = 0; i < _fonts.getSize(); i++) {
 		if (scumm_stricmp(_fonts[i]->getFilename(), filename.c_str()) == 0) {
 			_fonts[i]->_refCount++;
 			return _fonts[i];
@@ -110,12 +110,12 @@ bool BaseFontStorage::removeFont(BaseFont *font) {
 		return STATUS_FAILED;
 	}
 
-	for (uint32 i = 0; i < _fonts.size(); i++) {
+	for (uint32 i = 0; i < _fonts.getSize(); i++) {
 		if (_fonts[i] == font) {
 			_fonts[i]->_refCount--;
 			if (_fonts[i]->_refCount <= 0) {
 				delete _fonts[i];
-				_fonts.remove_at(i);
+				_fonts.removeAt(i);
 			}
 			break;
 		}
diff --git a/engines/wintermute/base/font/base_font_truetype.cpp b/engines/wintermute/base/font/base_font_truetype.cpp
index ccdc6cb848e..c3dff1c80a7 100644
--- a/engines/wintermute/base/font/base_font_truetype.cpp
+++ b/engines/wintermute/base/font/base_font_truetype.cpp
@@ -67,10 +67,10 @@ BaseFontTT::BaseFontTT(BaseGame *inGame) : BaseFont(inGame) {
 BaseFontTT::~BaseFontTT() {
 	clearCache();
 
-	for (uint32 i = 0; i < _layers.size(); i++) {
+	for (uint32 i = 0; i < _layers.getSize(); i++) {
 		delete _layers[i];
 	}
-	_layers.clear();
+	_layers.removeAll();
 
 	delete[] _fontFile;
 	_fontFile = nullptr;
@@ -227,7 +227,7 @@ void BaseFontTT::drawText(const byte *text, int x, int y, int width, TTextAlign
 	if (surface) {
 		Rect32 rc;
 		rc.setRect(0, 0, surface->getWidth(), surface->getHeight());
-		for (uint32 i = 0; i < _layers.size(); i++) {
+		for (uint32 i = 0; i < _layers.getSize(); i++) {
 			uint32 color = _layers[i]->_color;
 			uint32 origForceAlpha = renderer->_forceAlphaColor;
 			if (renderer->_forceAlphaColor != 0) {
@@ -439,7 +439,7 @@ bool BaseFontTT::loadBuffer(char *buffer) {
 	}
 
 	// create at least one layer
-	if (_layers.size() == 0) {
+	if (_layers.getSize() == 0) {
 		BaseTTFontLayer *layer = new BaseTTFontLayer;
 		layer->_color = baseColor;
 		_layers.add(layer);
@@ -518,13 +518,13 @@ bool BaseFontTT::persist(BasePersistenceManager *persistMgr) {
 	// persist layers
 	int32 numLayers;
 	if (persistMgr->getIsSaving()) {
-		numLayers = _layers.size();
+		numLayers = _layers.getSize();
 		persistMgr->transferSint32(TMEMBER(numLayers));
 		for (int i = 0; i < numLayers; i++) {
 			_layers[i]->persist(persistMgr);
 		}
 	} else {
-		numLayers = _layers.size();
+		numLayers = _layers.getSize();
 		persistMgr->transferSint32(TMEMBER(numLayers));
 		for (int i = 0; i < numLayers; i++) {
 			BaseTTFontLayer *layer = new BaseTTFontLayer;
diff --git a/engines/wintermute/base/gfx/3deffect_params.cpp b/engines/wintermute/base/gfx/3deffect_params.cpp
index 397a8d8ddbb..a5c3fc69414 100644
--- a/engines/wintermute/base/gfx/3deffect_params.cpp
+++ b/engines/wintermute/base/gfx/3deffect_params.cpp
@@ -121,18 +121,18 @@ Effect3DParams::~Effect3DParams() {
 
 //////////////////////////////////////////////////////////////////////////
 void Effect3DParams::clear() {
-	for (size_t i = 0; i < _params.size(); i++) {
+	for (size_t i = 0; i < _params.getSize(); i++) {
 		delete _params[i];
 		_params[i] = nullptr;
 	}
 
-	_params.clear();
+	_params.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////////
 bool Effect3DParams::persist(BasePersistenceManager *persistMgr) {
 	if (persistMgr->getIsSaving()) {
-		uint32 numItems = _params.size();
+		uint32 numItems = _params.getSize();
 		persistMgr->transferUint32(TMEMBER(numItems));
 
 		for (uint32 i = 0; i < numItems; i++) {
@@ -182,7 +182,7 @@ void Effect3DParams::setParam(const char *paramName, DXVector4 val) {
 Effect3DParams::Effect3DParam *Effect3DParams::getParamByName(const char *paramName) {
 	Effect3DParam *param = nullptr;
 
-	for (uint32 i = 0; i < _params.size(); i++) {
+	for (uint32 i = 0; i < _params.getSize(); i++) {
 		if (_params[i]->getParamName() && strcmp(paramName, _params[i]->getParamName()) == 0) {
 			param = _params[i];
 			break;
diff --git a/engines/wintermute/base/gfx/3dloader_3ds.cpp b/engines/wintermute/base/gfx/3dloader_3ds.cpp
index b78f9e7c345..e1da68e30d3 100644
--- a/engines/wintermute/base/gfx/3dloader_3ds.cpp
+++ b/engines/wintermute/base/gfx/3dloader_3ds.cpp
@@ -60,9 +60,9 @@ Loader3DS::Loader3DS(BaseGame *inGame) : BaseNamedObject(inGame) {
 
 //////////////////////////////////////////////////////////////////////////
 Loader3DS::~Loader3DS() {
-	for (size_t i = 0; i < _objects.size(); i++)
+	for (size_t i = 0; i < _objects.getSize(); i++)
 		delete _objects[i];
-	_objects.clear();
+	_objects.removeAll();
 }
 
 
@@ -313,7 +313,7 @@ bool Loader3DS::parseFile(const Common::String &filename) {
 
 						// inject this roll value to the camera
 						if (key == 0) {
-							for (size_t index = 0; index < _objects.size(); index++) {
+							for (uint32 index = 0; index < _objects.getSize(); index++) {
 								if (_objects[index]->_type == OBJ_3DS_CAMERA && _objects[index]->_name == keyframerObject) {
 									_objects[index]->_cameraBank = cameraRoll;
 									break;
@@ -344,7 +344,7 @@ bool Loader3DS::parseFile(const Common::String &filename) {
 uint Loader3DS::getNumMeshes() {
 	int ret = 0;
 
-	for (size_t i = 0; i < _objects.size(); i++)
+	for (uint32 i = 0; i < _objects.getSize(); i++)
 		if (_objects[i]->_type == OBJ_3DS_MESH)
 			ret++;
 
@@ -356,7 +356,7 @@ uint Loader3DS::getNumMeshes() {
 Common::String Loader3DS::getMeshName(int index) {
 	int pos = -1;
 
-	for (size_t i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->_type == OBJ_3DS_MESH)
 			pos++;
 		if (pos == index)
@@ -372,7 +372,7 @@ bool Loader3DS::loadMesh(int index, Mesh3DS *mesh) {
 		return false;
 
 	int pos = -1;
-	for (size_t i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->_type == OBJ_3DS_MESH)
 			pos++;
 		if (pos == index){
@@ -412,7 +412,7 @@ bool Loader3DS::loadMesh(int index, Mesh3DS *mesh) {
 uint Loader3DS::getNumLights() {
 	int ret = 0;
 
-	for (size_t i = 0; i < _objects.size(); i++)
+	for (uint32 i = 0; i < _objects.getSize(); i++)
 		if (_objects[i]->_type == OBJ_3DS_LIGHT)
 			ret++;
 
@@ -424,7 +424,7 @@ uint Loader3DS::getNumLights() {
 Common::String Loader3DS::getLightName(int index) {
 	int pos = -1;
 
-	for (size_t i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->_type == OBJ_3DS_LIGHT)
 			pos++;
 		if (pos == index)
@@ -440,7 +440,7 @@ bool Loader3DS::loadLight(int index, Light3D *light) {
 		return false;
 
 	int pos = -1;
-	for (size_t i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->_type == OBJ_3DS_LIGHT) {
 			pos++;
 			if (pos == index) {
@@ -464,7 +464,7 @@ bool Loader3DS::loadLight(int index, Light3D *light) {
 uint Loader3DS::getNumCameras() {
 	int ret = 0;
 
-	for (size_t i = 0; i < _objects.size(); i++)
+	for (uint32 i = 0; i < _objects.getSize(); i++)
 		if (_objects[i]->_type == OBJ_3DS_CAMERA)
 			ret++;
 
@@ -475,7 +475,7 @@ uint Loader3DS::getNumCameras() {
 //////////////////////////////////////////////////////////////////////////
 Common::String Loader3DS::getCameraName(int index) {
 	int pos = -1;
-	for (size_t i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->_type == OBJ_3DS_CAMERA)
 			pos++;
 		if (pos == index)
@@ -491,7 +491,7 @@ bool Loader3DS::loadCamera(int index, Camera3D *camera) {
 		false;
 
 	int pos = -1;
-	for (size_t i = 0; i < _objects.size(); i++) {
+	for (uint32 i = 0; i < _objects.getSize(); i++) {
 		if (_objects[i]->_type == OBJ_3DS_CAMERA)
 			pos++;
 		if (pos == index) {
diff --git a/engines/wintermute/base/gfx/3dshadow_volume.cpp b/engines/wintermute/base/gfx/3dshadow_volume.cpp
index 64986ce8d21..322237ad700 100644
--- a/engines/wintermute/base/gfx/3dshadow_volume.cpp
+++ b/engines/wintermute/base/gfx/3dshadow_volume.cpp
@@ -44,7 +44,7 @@ ShadowVolume::~ShadowVolume() {
 
 //////////////////////////////////////////////////////////////////////////
 bool ShadowVolume::reset() {
-	_vertices.clear();
+	_vertices.removeAll();
 	return true;
 }
 
diff --git a/engines/wintermute/base/gfx/base_renderer.cpp b/engines/wintermute/base/gfx/base_renderer.cpp
index 3e71866edf0..fbe342a472f 100644
--- a/engines/wintermute/base/gfx/base_renderer.cpp
+++ b/engines/wintermute/base/gfx/base_renderer.cpp
@@ -189,7 +189,7 @@ BaseObject *BaseRenderer::getObjectAt(int x, int y) {
 	point.x = x;
 	point.y = y;
 
-	for (int i = _rectList.size() - 1; i >= 0; i--) {
+	for (int i = _rectList.getSize() - 1; i >= 0; i--) {
 		if (BasePlatform::ptInRect(&_rectList[i]->_rect, point)) {
 			if (_rectList[i]->_precise) {
 				// frame
@@ -236,10 +236,10 @@ BaseObject *BaseRenderer::getObjectAt(int x, int y) {
 
 //////////////////////////////////////////////////////////////////////////
 void BaseRenderer::deleteRectList() {
-	for (uint32 i = 0; i < _rectList.size(); i++) {
+	for (uint32 i = 0; i < _rectList.getSize(); i++) {
 		delete _rectList[i];
 	}
-	_rectList.clear();
+	_rectList.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////
@@ -339,7 +339,7 @@ bool BaseRenderer::pointInViewport(Point32 *p) {
 }
 
 void BaseRenderer::addRectToList(BaseActiveRect *rect) {
-	_rectList.push_back(rect);
+	_rectList.add(rect);
 }
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/base/gfx/base_renderer.h b/engines/wintermute/base/gfx/base_renderer.h
index ef9f96b38fe..3d171a4edaf 100644
--- a/engines/wintermute/base/gfx/base_renderer.h
+++ b/engines/wintermute/base/gfx/base_renderer.h
@@ -30,6 +30,7 @@
 
 #include "engines/wintermute/math/rect32.h"
 #include "engines/wintermute/base/base.h"
+#include "engines/wintermute/coll_templ.h"
 
 #include "common/rect.h"
 #include "common/array.h"
@@ -222,7 +223,7 @@ protected:
 	Rect32 _screenRect;
 	Rect32 _monitorRect;
 private:
-	Common::Array<BaseActiveRect *> _rectList;
+	BaseArray<BaseActiveRect *> _rectList;
 	bool displaySaveloadImage();
 	bool displaySaveloadRect();
 };
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 295f871a252..d905f734d65 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -818,21 +818,21 @@ void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &pla
 
 
 	// render walk planes
-	for (uint i = 0; i < planes.size(); i++) {
+	for (uint i = 0; i < planes.getSize(); i++) {
 		if (planes[i]->_active) {
 			planes[i]->_mesh->render(true);
 		}
 	}
 
 	// render blocks
-	for (uint i = 0; i < blocks.size(); i++) {
+	for (uint i = 0; i < blocks.getSize(); i++) {
 		if (blocks[i]->_active) {
 			blocks[i]->_mesh->render(true);
 		}
 	}
 
 	// render generic objects
-	for (uint i = 0; i < generics.size(); i++) {
+	for (uint i = 0; i < generics.getSize(); i++) {
 		if (generics[i]->_active) {
 			generics[i]->_mesh->render(true);
 		}
@@ -853,8 +853,8 @@ void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &pla
 
 		setup2D();
 
-		for (uint i = 0; i < geom->_waypointGroups.size(); i++) {
-			for (uint j = 0; j < geom->_waypointGroups[i]->_points.size(); j++) {
+		for (uint i = 0; i < geom->_waypointGroups.getSize(); i++) {
+			for (uint j = 0; j < geom->_waypointGroups[i]->_points.getSize(); j++) {
 				DXVec3Project(&vec2d, geom->_waypointGroups[i]->_points[j], &vport, &projMat, &viewMat, &worldMat);
 				geom->_wptMarker->display(vec2d._x + scene->getOffsetLeft() - _drawOffsetX, vec2d._y + scene->getOffsetTop() - _drawOffsetY);
 			}
@@ -889,21 +889,21 @@ void BaseRenderOpenGL3D::renderShadowGeometry(const BaseArray<AdWalkplane *> &pl
 	glFrontFace(GL_CW); // WME DX have CCW
 
 	// render blocks
-	for (uint i = 0; i < blocks.size(); i++) {
+	for (uint i = 0; i < blocks.getSize(); i++) {
 		if (blocks[i]->_active && blocks[i]->_receiveShadows) {
 			blocks[i]->_mesh->render();
 		}
 	}
 
 	// render walk planes
-	for (uint i = 0; i < planes.size(); i++) {
+	for (uint i = 0; i < planes.getSize(); i++) {
 		if (planes[i]->_active && planes[i]->_receiveShadows) {
 			planes[i]->_mesh->render();
 		}
 	}
 
 	// render generic objects
-	for (uint i = 0; i < generics.size(); i++) {
+	for (uint i = 0; i < generics.getSize(); i++) {
 		if (generics[i]->_active && generics[i]->_receiveShadows) {
 			generics[i]->_mesh->render();
 		}
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
index 4adb1b9fc3c..28767b14403 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -906,21 +906,21 @@ void BaseRenderOpenGL3DShader::renderSceneGeometry(const BaseArray<AdWalkplane *
 	glBindTexture(GL_TEXTURE_2D, 0);
 	glDisable(GL_TEXTURE_2D);
 
-	for (uint i = 0; i < planes.size(); i++) {
+	for (uint i = 0; i < planes.getSize(); i++) {
 		if (planes[i]->_active) {
 			planes[i]->_mesh->render(true);
 		}
 	}
 
 	// render blocks
-	for (uint i = 0; i < blocks.size(); i++) {
+	for (uint i = 0; i < blocks.getSize(); i++) {
 		if (blocks[i]->_active) {
 			blocks[i]->_mesh->render(true);
 		}
 	}
 
 	// render generic objects
-	for (uint i = 0; i < generics.size(); i++) {
+	for (uint i = 0; i < generics.getSize(); i++) {
 		if (generics[i]->_active) {
 			generics[i]->_mesh->render(true);
 		}
@@ -941,8 +941,8 @@ void BaseRenderOpenGL3DShader::renderSceneGeometry(const BaseArray<AdWalkplane *
 
 		setup2D();
 
-		for (uint i = 0; i < geom->_waypointGroups.size(); i++) {
-			for (uint j = 0; j < geom->_waypointGroups[i]->_points.size(); j++) {
+		for (uint i = 0; i < geom->_waypointGroups.getSize(); i++) {
+			for (uint j = 0; j < geom->_waypointGroups[i]->_points.getSize(); j++) {
 				DXVec3Project(&vec2d, geom->_waypointGroups[i]->_points[j], &vport, &projMat, &viewMat, &worldMat);
 				geom->_wptMarker->display(vec2d._x + scene->getOffsetLeft() - _drawOffsetX, vec2d._y + scene->getOffsetTop() - _drawOffsetY);
 			}
@@ -974,21 +974,21 @@ void BaseRenderOpenGL3DShader::renderShadowGeometry(const BaseArray<AdWalkplane
 	glFrontFace(GL_CW); // WME DX have CCW
 
 	// render blocks
-	for (uint i = 0; i < blocks.size(); i++) {
+	for (uint i = 0; i < blocks.getSize(); i++) {
 		if (blocks[i]->_active && blocks[i]->_receiveShadows) {
 			blocks[i]->_mesh->render();
 		}
 	}
 
 	// render walk planes
-	for (uint i = 0; i < planes.size(); i++) {
+	for (uint i = 0; i < planes.getSize(); i++) {
 		if (planes[i]->_active && planes[i]->_receiveShadows) {
 			planes[i]->_mesh->render();
 		}
 	}
 
 	// render generic objects
-	for (uint i = 0; i < generics.size(); i++) {
+	for (uint i = 0; i < generics.getSize(); i++) {
 		if (generics[i]->_active && generics[i]->_receiveShadows) {
 			generics[i]->_mesh->render();
 		}
diff --git a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp
index 766f70c1b53..9e98fe6ed99 100644
--- a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp
+++ b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl.cpp
@@ -53,8 +53,8 @@ bool ShadowVolumeOpenGL::render() {
 
 	glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
 	glEnableClientState(GL_VERTEX_ARRAY);
-	glVertexPointer(3, GL_FLOAT, 0, _vertices.data());
-	glDrawArrays(GL_TRIANGLES, 0, _vertices.size());
+	glVertexPointer(3, GL_FLOAT, 0, _vertices.getData());
+	glDrawArrays(GL_TRIANGLES, 0, _vertices.getSize());
 	glDisableClientState(GL_VERTEX_ARRAY);
 
 	return true;
diff --git a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
index f84d58ad9e4..304fc860b05 100644
--- a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
@@ -50,7 +50,7 @@ ShadowVolumeOpenGLShader::ShadowVolumeOpenGLShader(BaseGame *inGame, OpenGL::Sha
 
 	glGenBuffers(1, &_shadowVolumeVertexBuffer);
 	glBindBuffer(GL_ARRAY_BUFFER, _shadowVolumeVertexBuffer);
-	glBufferData(GL_ARRAY_BUFFER, 12 * _vertices.size(), _vertices.data(), GL_STATIC_DRAW);
+	glBufferData(GL_ARRAY_BUFFER, 12 * _vertices.getSize(), _vertices.getData(), GL_STATIC_DRAW);
 	glBindBuffer(GL_ARRAY_BUFFER, 0);
 
 	glGenBuffers(1, &_shadowMaskVertexBuffer);
@@ -76,7 +76,7 @@ bool ShadowVolumeOpenGLShader::render() {
 	colorValue.w() = 1.0f;
 	_volumeShader->setUniform("color", colorValue);
 
-	glDrawArrays(GL_TRIANGLES, 0, _vertices.size());
+	glDrawArrays(GL_TRIANGLES, 0, _vertices.getSize());
 
 	return true;
 }
@@ -90,7 +90,7 @@ bool ShadowVolumeOpenGLShader::renderToStencilBuffer() {
 	glDeleteBuffers(1, &_shadowVolumeVertexBuffer);
 	glGenBuffers(1, &_shadowVolumeVertexBuffer);
 	glBindBuffer(GL_ARRAY_BUFFER, _shadowVolumeVertexBuffer);
-	glBufferData(GL_ARRAY_BUFFER, 12 * _vertices.size(), _vertices.data(), GL_STATIC_DRAW);
+	glBufferData(GL_ARRAY_BUFFER, 12 * _vertices.getSize(), _vertices.getData(), GL_STATIC_DRAW);
 
 	_volumeShader->enableVertexAttribute("position", _shadowVolumeVertexBuffer, 3, GL_FLOAT, false, 12, 0);
 	_volumeShader->use(true);
diff --git a/engines/wintermute/base/gfx/xanimation.cpp b/engines/wintermute/base/gfx/xanimation.cpp
index 4c2408a29c0..d541ae8ff87 100644
--- a/engines/wintermute/base/gfx/xanimation.cpp
+++ b/engines/wintermute/base/gfx/xanimation.cpp
@@ -44,20 +44,20 @@ Animation::Animation(BaseGame *inGame) : BaseClass(inGame) {
 
 //////////////////////////////////////////////////////////////////////////
 Animation::~Animation() {
-	for (uint32 i = 0; i < _posKeys.size(); i++) {
+	for (uint32 i = 0; i < _posKeys.getSize(); i++) {
 		delete _posKeys[i];
 	}
-	_posKeys.clear();
+	_posKeys.removeAll();
 
-	for (uint32 i = 0; i < _rotKeys.size(); i++) {
+	for (uint32 i = 0; i < _rotKeys.getSize(); i++) {
 		delete _rotKeys[i];
 	}
-	_rotKeys.clear();
+	_rotKeys.removeAll();
 
-	for (uint32 i = 0; i < _scaleKeys.size(); i++) {
+	for (uint32 i = 0; i < _scaleKeys.getSize(); i++) {
 		delete _scaleKeys[i];
 	}
-	_scaleKeys.clear();
+	_scaleKeys.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -141,7 +141,7 @@ bool Animation::loadAnimationKeyData(XAnimationKeyObject *animationKey) {
 	uint32 numKeys = animationKey->_numKeys;
 
 	if (keyType == 0) { // rotation key
-		if (_rotKeys.size() != 0) {
+		if (_rotKeys.getSize() != 0) {
 			BaseEngine::LOG(0, "Rotation key duplicated");
 			return false;
 		}
@@ -158,10 +158,10 @@ bool Animation::loadAnimationKeyData(XAnimationKeyObject *animationKey) {
 			rotKey->_rotation._y = fileRotKey->_tfkeys[2];
 			rotKey->_rotation._z = fileRotKey->_tfkeys[3];
 
-			_rotKeys.push_back(rotKey);
+			_rotKeys.add(rotKey);
 		}
 	} else if (keyType == 1) { // scale key
-		if (_scaleKeys.size() != 0) {
+		if (_scaleKeys.getSize() != 0) {
 			BaseEngine::LOG(0, "Scale key duplicated");
 			return false;
 		}
@@ -176,10 +176,10 @@ bool Animation::loadAnimationKeyData(XAnimationKeyObject *animationKey) {
 			scaleKey->_scale._y = fileScaleKey->_tfkeys[1];
 			scaleKey->_scale._z = fileScaleKey->_tfkeys[2];
 
-			_scaleKeys.push_back(scaleKey);
+			_scaleKeys.add(scaleKey);
 		}
 	} else if (keyType == 2) { // position key
-		if (_posKeys.size() != 0) {
+		if (_posKeys.getSize() != 0) {
 			BaseEngine::LOG(0, "Position key duplicated");
 			return false;
 		}
@@ -194,10 +194,10 @@ bool Animation::loadAnimationKeyData(XAnimationKeyObject *animationKey) {
 			posKey->_pos._y = filePosKey->_tfkeys[1];
 			posKey->_pos._z = filePosKey->_tfkeys[2];
 
-			_posKeys.push_back(posKey);
+			_posKeys.add(posKey);
 		}
 	} else if (keyType == 4) { // matrix key
-		if (_rotKeys.size() != 0 || _scaleKeys.size() != 0 || _posKeys.size() != 0) {
+		if (_rotKeys.getSize() != 0 || _scaleKeys.getSize() != 0 || _posKeys.getSize() != 0) {
 			BaseEngine::LOG(0, "Matrix key duplicated");
 			return false;
 		}
@@ -235,9 +235,9 @@ bool Animation::loadAnimationKeyData(XAnimationKeyObject *animationKey) {
 			rotationKey->_rotation._y = -rotationKey->_rotation._y;
 			rotationKey->_rotation._z = -rotationKey->_rotation._z;
 
-			_posKeys.push_back(positionKey);
-			_scaleKeys.push_back(scaleKey);
-			_rotKeys.push_back(rotationKey);
+			_posKeys.add(positionKey);
+			_scaleKeys.add(scaleKey);
+			_rotKeys.add(rotationKey);
 		}
 	} else {
 		// the type is unknown, report the error
@@ -264,11 +264,11 @@ bool Animation::update(int slot, uint32 localTime, float animLerpValue) {
 	bool animate = false;
 
 	// scale keys
-	if (_scaleKeys.size() > 0) {
+	if (_scaleKeys.getSize() > 0) {
 		keyIndex1 = keyIndex2 = 0;
 
 		// get the two keys between which the time is currently in
-		for (uint32 key = 0; key < _scaleKeys.size(); key++) {
+		for (uint32 key = 0; key < _scaleKeys.getSize(); key++) {
 			if (_scaleKeys[key]->_time > localTime) {
 				keyIndex2 = key;
 
@@ -299,11 +299,11 @@ bool Animation::update(int slot, uint32 localTime, float animLerpValue) {
 	}
 
 	// rotation keys
-	if (_rotKeys.size() > 0) {
+	if (_rotKeys.getSize() > 0) {
 		keyIndex1 = keyIndex2 = 0;
 
 		// get the two keys surrounding the current time value
-		for (uint32 key = 0; key < _rotKeys.size(); key++) {
+		for (uint32 key = 0; key < _rotKeys.getSize(); key++) {
 			if (_rotKeys[key]->_time > localTime) {
 				keyIndex2 = key;
 				if (key > 0) {
@@ -344,11 +344,11 @@ bool Animation::update(int slot, uint32 localTime, float animLerpValue) {
 	}
 
 	// position keys
-	if (_posKeys.size() > 0) {
+	if (_posKeys.getSize() > 0) {
 		keyIndex1 = keyIndex2 = 0;
 
 		// get the two keys surrounding the time value
-		for (uint32 key = 0; key < _posKeys.size(); key++) {
+		for (uint32 key = 0; key < _posKeys.getSize(); key++) {
 			if (_posKeys[key]->_time > localTime) {
 				keyIndex2 = key;
 				if (key > 0) {
@@ -389,7 +389,7 @@ int Animation::getFrameTime() {
 
 	// get the shortest frame time
 	prevTime = 0;
-	for (uint32 i = 0; i < _rotKeys.size(); i++) {
+	for (uint32 i = 0; i < _rotKeys.getSize(); i++) {
 		if (frameTime == 0 || _rotKeys[i]->_time - prevTime < frameTime)
 			frameTime = _rotKeys[i]->_time - prevTime;
 
@@ -397,7 +397,7 @@ int Animation::getFrameTime() {
 	}
 
 	prevTime = 0;
-	for (uint32 i = 0; i < _posKeys.size(); i++) {
+	for (uint32 i = 0; i < _posKeys.getSize(); i++) {
 		if (frameTime == 0 || _posKeys[i]->_time - prevTime < frameTime)
 			frameTime = _posKeys[i]->_time - prevTime;
 
@@ -405,7 +405,7 @@ int Animation::getFrameTime() {
 	}
 
 	prevTime = 0;
-	for (uint32 i = 0; i < _scaleKeys.size(); i++) {
+	for (uint32 i = 0; i < _scaleKeys.getSize(); i++) {
 		if (frameTime == 0 || _scaleKeys[i]->_time - prevTime < frameTime)
 			frameTime = _scaleKeys[i]->_time - prevTime;
 
@@ -418,16 +418,16 @@ int Animation::getFrameTime() {
 //////////////////////////////////////////////////////////////////////////
 uint32 Animation::getTotalTime() {
 	uint32 totalTime = 0;
-	if (_rotKeys.size() > 0) {
-		totalTime = MAX(totalTime, _rotKeys[_rotKeys.size() - 1]->_time);
+	if (_rotKeys.getSize() > 0) {
+		totalTime = MAX(totalTime, _rotKeys[_rotKeys.getSize() - 1]->_time);
 	}
 
-	if (_posKeys.size() > 0) {
-		totalTime = MAX(totalTime, _posKeys[_posKeys.size() - 1]->_time);
+	if (_posKeys.getSize() > 0) {
+		totalTime = MAX(totalTime, _posKeys[_posKeys.getSize() - 1]->_time);
 	}
 
-	if (_scaleKeys.size() > 0) {
-		totalTime = MAX(totalTime, _scaleKeys[_scaleKeys.size() - 1]->_time);
+	if (_scaleKeys.getSize() > 0) {
+		totalTime = MAX(totalTime, _scaleKeys[_scaleKeys.getSize() - 1]->_time);
 	}
 
 	return totalTime;
diff --git a/engines/wintermute/base/gfx/xanimation_set.cpp b/engines/wintermute/base/gfx/xanimation_set.cpp
index 7565e398693..286384e4304 100644
--- a/engines/wintermute/base/gfx/xanimation_set.cpp
+++ b/engines/wintermute/base/gfx/xanimation_set.cpp
@@ -43,21 +43,21 @@ AnimationSet::AnimationSet(BaseGame *inGame, XModel *model) : BaseNamedObject(in
 //////////////////////////////////////////////////////////////////////////
 AnimationSet::~AnimationSet() {
 	// remove child animations
-	for (uint32 i = 0; i < _animations.size(); i++) {
+	for (uint32 i = 0; i < _animations.getSize(); i++) {
 		delete _animations[i];
 	}
-	_animations.clear();
+	_animations.removeAll();
 
 	// remove events
-	for (uint32 i = 0; i < _events.size(); i++) {
+	for (uint32 i = 0; i < _events.getSize(); i++) {
 		delete _events[i];
 	}
-	_events.clear();
+	_events.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////////
 bool AnimationSet::findBones(FrameNode *rootFrame) {
-	for (uint32 i = 0; i < _animations.size(); i++) {
+	for (uint32 i = 0; i < _animations.getSize(); i++) {
 		_animations[i]->findBone(rootFrame);
 	}
 	return true;
@@ -102,7 +102,7 @@ bool AnimationSet::addEvent(AnimationEvent *event) {
 //////////////////////////////////////////////////////////////////////////
 bool AnimationSet::update(int slot, uint32 localTime, float lerpValue) {
 	bool res;
-	for (uint32 i = 0; i < _animations.size(); i++) {
+	for (uint32 i = 0; i < _animations.getSize(); i++) {
 		res = _animations[i]->update(slot, localTime * ((float)_model->_ticksPerSecond / 1000.0f), lerpValue);
 		if (!res) {
 			return res;
@@ -118,7 +118,7 @@ int AnimationSet::getFrameTime() {
 	}
 
 	_frameTime = 0;
-	for (uint32 i = 0; i < _animations.size(); i++) {
+	for (uint32 i = 0; i < _animations.getSize(); i++) {
 		int frameTime = _animations[i]->getFrameTime();
 		if (_frameTime == 0) {
 			_frameTime = frameTime / ((float)_model->_ticksPerSecond / 1000.0f);
@@ -136,7 +136,7 @@ uint32 AnimationSet::getTotalTime() {
 	}
 
 	_totalTime = 0;
-	for (uint32 i = 0; i < _animations.size(); i++) {
+	for (uint32 i = 0; i < _animations.getSize(); i++) {
 		_totalTime = MAX((float)_totalTime, _animations[i]->getTotalTime() / ((float)_model->_ticksPerSecond / 1000.0f));
 	}
 	return _totalTime;
@@ -149,7 +149,7 @@ bool AnimationSet::onFrameChanged(int currentFrame, int prevFrame) {
 	}
 
 	if (prevFrame > currentFrame) {
-		for (uint32 i = 0; i < _events.size(); i++) {
+		for (uint32 i = 0; i < _events.getSize(); i++) {
 			if (_events[i]->_frame > prevFrame) {
 				_model->_owner->applyEvent(_events[i]->_eventName);
 			}
@@ -157,7 +157,7 @@ bool AnimationSet::onFrameChanged(int currentFrame, int prevFrame) {
 		prevFrame = -1;
 	}
 
-	for (uint32 i = 0; i < _events.size(); i++) {
+	for (uint32 i = 0; i < _events.getSize(); i++) {
 		if (_events[i]->_frame > prevFrame && _events[i]->_frame <= currentFrame) {
 			_model->_owner->applyEvent(_events[i]->_eventName);
 		}
@@ -172,7 +172,7 @@ bool AnimationSet::persist(BasePersistenceManager *persistMgr) {
 	// persist events
 	int32 numEvents;
 	if (persistMgr->getIsSaving()) {
-		numEvents = _events.size();
+		numEvents = _events.getSize();
 	}
 
 	persistMgr->transferSint32(TMEMBER(numEvents));
diff --git a/engines/wintermute/base/gfx/xframe_node.cpp b/engines/wintermute/base/gfx/xframe_node.cpp
index 9fb3fa626b9..ff334799f16 100644
--- a/engines/wintermute/base/gfx/xframe_node.cpp
+++ b/engines/wintermute/base/gfx/xframe_node.cpp
@@ -56,16 +56,16 @@ FrameNode::FrameNode(BaseGame *inGame) : BaseNamedObject(inGame) {
 //////////////////////////////////////////////////////////////////////////
 FrameNode::~FrameNode() {
 	// remove child frames
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		delete _frames[i];
 	}
-	_frames.clear();
+	_frames.removeAll();
 
 	// remove meshes
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		delete _meshes[i];
 	}
-	_meshes.clear();
+	_meshes.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -208,12 +208,12 @@ bool FrameNode::mergeFromXData(const Common::String &filename, XModel *model, XF
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::findBones(FrameNode *rootFrame) {
 	// find the bones of the meshes
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		_meshes[i]->findBones(rootFrame);
 	}
 
 	// find the bones for the child frames
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->findBones(rootFrame);
 	}
 
@@ -225,7 +225,7 @@ FrameNode *FrameNode::findFrame(const char *frameName) {
 	if (getName() && strcmp(getName(), frameName) == 0) {
 		return this;
 	} else {
-		for (uint32 i = 0; i < _frames.size(); i++) {
+		for (uint32 i = 0; i < _frames.getSize(); i++) {
 			FrameNode *foundFrame = _frames[i]->findFrame(frameName);
 			if (foundFrame) {
 				return foundFrame;
@@ -271,7 +271,7 @@ bool FrameNode::updateMatrices(DXMatrix *parentMat) {
 	DXMatrixMultiply(&_combinedMatrix, &_transformationMatrix, parentMat);
 
 	// update child frames
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->updateMatrices(&_combinedMatrix);
 	}
 
@@ -283,7 +283,7 @@ bool FrameNode::updateMeshes() {
 	bool res = true;
 
 	// update meshes
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		res = _meshes[i]->update(this);
 		if (!res) {
 			return res;
@@ -291,7 +291,7 @@ bool FrameNode::updateMeshes() {
 	}
 
 	// render child frames
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		res = _frames[i]->updateMeshes();
 		if (!res) {
 			return res;
@@ -305,7 +305,7 @@ bool FrameNode::resetMatrices() {
 	_transformationMatrix = _originalMatrix;
 
 	// update child frames
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->resetMatrices();
 	}
 
@@ -317,7 +317,7 @@ bool FrameNode::updateShadowVol(ShadowVolume *shadow, DXMatrix *modelMat, DXVect
 	bool res = true;
 
 	// meshes
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		res = _meshes[i]->updateShadowVol(shadow, modelMat, light, extrusionDepth);
 		if (!res) {
 			return res;
@@ -325,7 +325,7 @@ bool FrameNode::updateShadowVol(ShadowVolume *shadow, DXMatrix *modelMat, DXVect
 	}
 
 	// child frames
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		res = _frames[i]->updateShadowVol(shadow, modelMat, light, extrusionDepth);
 		if (!res) {
 			return res;
@@ -339,7 +339,7 @@ bool FrameNode::render(XModel *model) {
 	bool res = true;
 
 	// render meshes
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		res = _meshes[i]->render(model);
 		if (!res) {
 			return res;
@@ -347,7 +347,7 @@ bool FrameNode::render(XModel *model) {
 	}
 
 	// render child frames
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		res = _frames[i]->render(model);
 		if (!res) {
 			return res;
@@ -359,14 +359,14 @@ bool FrameNode::render(XModel *model) {
 bool FrameNode::renderFlatShadowModel(uint32 shadowColor) {
 	bool res = true;
 
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		res = _meshes[i]->renderFlatShadowModel(shadowColor);
 		if (!res) {
 			return res;
 		}
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		res = _frames[i]->renderFlatShadowModel(shadowColor);
 		if (!res) {
 			return res;
@@ -379,14 +379,14 @@ bool FrameNode::renderFlatShadowModel(uint32 shadowColor) {
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::pickPoly(DXVector3 *pickRayOrig, DXVector3 *pickRayDir) {
 	bool found = false;
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		found = _meshes[i]->pickPoly(pickRayOrig, pickRayDir);
 		if (found) {
 			return true;
 		}
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		found = _frames[i]->pickPoly(pickRayOrig, pickRayDir);
 		if (found) {
 			return true;
@@ -397,7 +397,7 @@ bool FrameNode::pickPoly(DXVector3 *pickRayOrig, DXVector3 *pickRayDir) {
 
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::getBoundingBox(DXVector3 *boxStart, DXVector3 *boxEnd) {
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		boxStart->_x = MIN(boxStart->_x, _meshes[i]->_BBoxStart._x);
 		boxStart->_y = MIN(boxStart->_y, _meshes[i]->_BBoxStart._y);
 		boxStart->_z = MIN(boxStart->_z, _meshes[i]->_BBoxStart._z);
@@ -407,7 +407,7 @@ bool FrameNode::getBoundingBox(DXVector3 *boxStart, DXVector3 *boxEnd) {
 		boxEnd->_z = MAX(boxEnd->_z, _meshes[i]->_BBoxEnd._z);
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->getBoundingBox(boxStart, boxEnd);
 	}
 	return true;
@@ -415,16 +415,16 @@ bool FrameNode::getBoundingBox(DXVector3 *boxStart, DXVector3 *boxEnd) {
 
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::hasChildren() {
-	return _frames.size() > 0;
+	return _frames.getSize() > 0;
 }
 
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::setMaterialSprite(char *matName, BaseSprite *sprite) {
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		_meshes[i]->setMaterialSprite(matName, sprite);
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->setMaterialSprite(matName, sprite);
 	}
 
@@ -433,11 +433,11 @@ bool FrameNode::setMaterialSprite(char *matName, BaseSprite *sprite) {
 
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::setMaterialTheora(char *matName, VideoTheoraPlayer *theora) {
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		_meshes[i]->setMaterialTheora(matName, theora);
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->setMaterialTheora(matName, theora);
 	}
 
@@ -446,11 +446,11 @@ bool FrameNode::setMaterialTheora(char *matName, VideoTheoraPlayer *theora) {
 
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::setMaterialEffect(char *matName, Effect3D *effect, Effect3DParams *params) {
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		_meshes[i]->setMaterialEffect(matName, effect, params);
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->setMaterialEffect(matName, effect, params);
 	}
 
@@ -459,11 +459,11 @@ bool FrameNode::setMaterialEffect(char *matName, Effect3D *effect, Effect3DParam
 
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::removeMaterialEffect(const char *matName) {
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		_meshes[i]->removeMaterialEffect(matName);
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->removeMaterialEffect(matName);
 	}
 
@@ -472,11 +472,11 @@ bool FrameNode::removeMaterialEffect(const char *matName) {
 
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::invalidateDeviceObjects() {
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		_meshes[i]->invalidateDeviceObjects();
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->invalidateDeviceObjects();
 	}
 
@@ -485,11 +485,11 @@ bool FrameNode::invalidateDeviceObjects() {
 
 //////////////////////////////////////////////////////////////////////////
 bool FrameNode::restoreDeviceObjects() {
-	for (uint32 i = 0; i < _meshes.size(); i++) {
+	for (uint32 i = 0; i < _meshes.getSize(); i++) {
 		_meshes[i]->restoreDeviceObjects();
 	}
 
-	for (uint32 i = 0; i < _frames.size(); i++) {
+	for (uint32 i = 0; i < _frames.getSize(); i++) {
 		_frames[i]->restoreDeviceObjects();
 	}
 
diff --git a/engines/wintermute/base/gfx/xmesh.cpp b/engines/wintermute/base/gfx/xmesh.cpp
index 747b1ad8fed..52c9bef9e8c 100644
--- a/engines/wintermute/base/gfx/xmesh.cpp
+++ b/engines/wintermute/base/gfx/xmesh.cpp
@@ -67,7 +67,7 @@ XMesh::~XMesh() {
 	delete[] _adjacency;
 	_adjacency = nullptr;
 
-	_materials.clear();
+	_materials.removeAll();
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -309,7 +309,7 @@ bool XMesh::pickPoly(DXVector3 *pickRayOrig, DXVector3 *pickRayDir) {
 
 ////////////////////////////////////////////////////////////////////////////
 bool XMesh::setMaterialSprite(const Common::String &matName, BaseSprite *sprite) {
-	for (uint32 i = 0; i < _materials.size(); i++) {
+	for (uint32 i = 0; i < _materials.getSize(); i++) {
 		if (_materials[i]->getName() && scumm_stricmp(_materials[i]->getName(),  matName.c_str()) == 0) {
 			_materials[i]->setSprite(sprite);
 		}
@@ -319,7 +319,7 @@ bool XMesh::setMaterialSprite(const Common::String &matName, BaseSprite *sprite)
 
 //////////////////////////////////////////////////////////////////////////
 bool XMesh::setMaterialTheora(const Common::String &matName, VideoTheoraPlayer *theora) {
-	for (uint32 i = 0; i < _materials.size(); i++) {
+	for (uint32 i = 0; i < _materials.getSize(); i++) {
 		if (_materials[i]->getName() && scumm_stricmp(_materials[i]->getName(), matName.c_str()) == 0) {
 			_materials[i]->setTheora(theora);
 		}
@@ -329,7 +329,7 @@ bool XMesh::setMaterialTheora(const Common::String &matName, VideoTheoraPlayer *
 
 //////////////////////////////////////////////////////////////////////////
 bool XMesh::setMaterialEffect(const Common::String &matName, Effect3D *effect, Effect3DParams *params) {
-	for (uint32 i = 0; i < _materials.size(); i++) {
+	for (uint32 i = 0; i < _materials.getSize(); i++) {
 		if (_materials[i]->getName() && scumm_stricmp(_materials[i]->getName(), matName.c_str()) == 0) {
 			_materials[i]->setEffect(effect, params);
 		}
@@ -339,7 +339,7 @@ bool XMesh::setMaterialEffect(const Common::String &matName, Effect3D *effect, E
 
 //////////////////////////////////////////////////////////////////////////
 bool XMesh::removeMaterialEffect(const Common::String &matName) {
-	for (uint32 i = 0; i < _materials.size(); i++) {
+	for (uint32 i = 0; i < _materials.getSize(); i++) {
 		if (_materials[i]->getName() && scumm_stricmp(_materials[i]->getName(), matName.c_str()) == 0) {
 			_materials[i]->setEffect(nullptr, nullptr);
 		}
@@ -354,7 +354,7 @@ bool XMesh::invalidateDeviceObjects() {
 		_blendedMesh = nullptr;
 	}
 
-	for (uint32 i = 0; i < _materials.size(); i++) {
+	for (uint32 i = 0; i < _materials.getSize(); i++) {
 		_materials[i]->invalidateDeviceObjects();
 	}
 
@@ -363,7 +363,7 @@ bool XMesh::invalidateDeviceObjects() {
 
 //////////////////////////////////////////////////////////////////////////
 bool XMesh::restoreDeviceObjects() {
-	for (uint32 i = 0; i < _materials.size(); i++) {
+	for (uint32 i = 0; i < _materials.getSize(); i++) {
 		_materials[i]->restoreDeviceObjects();
 	}
 
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index aebff7f3a18..f6c0c30c3fd 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -87,23 +87,23 @@ void XModel::cleanup(bool complete) {
 	}
 
 	// remove animation sets
-	for (uint32 i = 0; i < _animationSets.size(); i++) {
+	for (uint32 i = 0; i < _animationSets.getSize(); i++) {
 		delete _animationSets[i];
 	}
-	_animationSets.clear();
+	_animationSets.removeAll();
 
 	if (complete) {
-		for (uint i = 0; i < _mergedModels.size(); ++i) {
+		for (uint i = 0; i < _mergedModels.getSize(); ++i) {
 			delete[] _mergedModels[i];
 		}
-		_mergedModels.clear();
+		_mergedModels.removeAll();
 	}
 
-	for (uint32 i = 0; i < _matSprites.size(); i++) {
+	for (uint32 i = 0; i < _matSprites.getSize(); i++) {
 		delete _matSprites[i];
 		_matSprites[i] = nullptr;
 	}
-	_matSprites.clear();
+	_matSprites.removeAll();
 
 	// remove root frame
 	delete _rootFrame;
@@ -212,7 +212,7 @@ bool XModel::mergeFromFile(const Common::String &filename) {
 
 	// remember path for save/load purposes
 	bool found = false;
-	for (uint i = 0; i < _mergedModels.size(); ++i) {
+	for (uint i = 0; i < _mergedModels.getSize(); ++i) {
 		if (scumm_stricmp(_mergedModels[i], filename.c_str()) == 0) {
 			found = true;
 			break;
@@ -334,7 +334,7 @@ bool XModel::findBones(bool animOnly, XModel *parentModel) {
 		_rootFrame->findBones(rootFrame);
 	}
 
-	for (uint32 i = 0; i < _animationSets.size(); i++) {
+	for (uint32 i = 0; i < _animationSets.getSize(); i++) {
 		_animationSets[i]->findBones(rootFrame);
 	}
 
@@ -666,7 +666,7 @@ void XModel::updateRect(Rect32 *rc, DXVector3 *vec) {
 
 //////////////////////////////////////////////////////////////////////////
 AnimationSet *XModel::getAnimationSetByName(const Common::String &name) {
-	for (uint32 i = 0; i < _animationSets.size(); i++) {
+	for (uint32 i = 0; i < _animationSets.getSize(); i++) {
 		if (name.equalsIgnoreCase(_animationSets[i]->_name)) {
 			return _animationSets[i];
 		}
@@ -804,7 +804,7 @@ bool XModel::setMaterialSprite(const char *materialName, const char *spriteFilen
 	}
 
 	XModelMatSprite *matSprite = nullptr;
-	for (uint32 i = 0; i < _matSprites.size(); i++) {
+	for (uint32 i = 0; i < _matSprites.getSize(); i++) {
 		if (scumm_stricmp(_matSprites[i]->_matName, materialName) == 0) {
 			matSprite = _matSprites[i];
 			break;
@@ -841,7 +841,7 @@ bool XModel::setMaterialTheora(const char *materialName, const char *theoraFilen
 	theora->play(VID_PLAY_POS, 0, 0, false, false, true);
 
 	XModelMatSprite *matSprite = nullptr;
-	for (uint32 i = 0; i < _matSprites.size(); i++) {
+	for (uint32 i = 0; i < _matSprites.getSize(); i++) {
 		if (scumm_stricmp(_matSprites[i]->_matName, materialName) == 0) {
 			matSprite = _matSprites[i];
 			break;
@@ -874,7 +874,7 @@ bool XModel::setMaterialEffect(const char *materialName, const char *effectFilen
 	}
 
 	XModelMatSprite *matSprite = nullptr;
-	for (uint32 i = 0 ; i < _matSprites.size(); i++) {
+	for (uint32 i = 0 ; i < _matSprites.getSize(); i++) {
 		if (scumm_stricmp(_matSprites[i]->_matName, materialName) == 0) {
 			matSprite = _matSprites[i];
 			break;
@@ -898,11 +898,11 @@ bool XModel::removeMaterialEffect(const char *materialName) {
 	if (!_rootFrame)
 		return false;
 
-	for (uint32 i = 0; i < _matSprites.size(); i++) {
+	for (uint32 i = 0; i < _matSprites.getSize(); i++) {
 		if (scumm_stricmp(_matSprites[i]->_matName, materialName) == 0) {
 			delete _matSprites[i];
 			_matSprites[i] = nullptr;
-			_matSprites.remove_at(i);
+			_matSprites.removeAt(i);
 			_rootFrame->removeMaterialEffect(materialName);
 			return true;
 		}
@@ -918,7 +918,7 @@ bool XModel::setMaterialEffectParam(const char *materialName, const char *paramN
 		return false;
 
 
-	for (uint32 i = 0 ; i < _matSprites.size(); i++) {
+	for (uint32 i = 0 ; i < _matSprites.getSize(); i++) {
 		if (scumm_stricmp(_matSprites[i]->_matName, materialName) == 0) {
 			if (_matSprites[i]->_effectParams) {
 				_matSprites[i]->_effectParams->setParam(paramName, val);
@@ -938,7 +938,7 @@ bool XModel::setMaterialEffectParam(const char *materialName, const char *paramN
 		return false;
 
 
-	for (uint32 i = 0; i < _matSprites.size(); i++) {
+	for (uint32 i = 0; i < _matSprites.getSize(); i++) {
 		if (scumm_stricmp(_matSprites[i]->_matName, materialName) == 0) {
 			if (_matSprites[i]->_effectParams) {
 				_matSprites[i]->_effectParams->setParam(paramName, val);
@@ -957,7 +957,7 @@ bool XModel::initializeSimple() {
 	}
 
 	// init after load
-	for (uint32 i = 0; i < _matSprites.size(); i++) {
+	for (uint32 i = 0; i < _matSprites.getSize(); i++) {
 		if (_matSprites[i]->_theora) {
 			_rootFrame->setMaterialTheora(_matSprites[i]->_matName, _matSprites[i]->_theora);
 		} else if (_matSprites[i]->_sprite) {
@@ -1016,7 +1016,7 @@ bool XModel::persist(BasePersistenceManager *persistMgr) {
 			loadFromFile(getFilename());
 		}
 
-		for (uint i = 0; i < _mergedModels.size(); ++i) {
+		for (uint i = 0; i < _mergedModels.getSize(); ++i) {
 			mergeFromFile(_mergedModels[i]);
 		}
 	}
@@ -1026,13 +1026,13 @@ bool XModel::persist(BasePersistenceManager *persistMgr) {
 	// animation properties
 	int32 numAnims;
 	if (persistMgr->getIsSaving()) {
-		numAnims = _animationSets.size();
+		numAnims = _animationSets.getSize();
 	}
 
 	persistMgr->transferSint32(TMEMBER(numAnims));
 
 	if (persistMgr->getIsSaving()) {
-		for (uint32 i = 0; i < _animationSets.size(); i++) {
+		for (uint32 i = 0; i < _animationSets.getSize(); i++) {
 			persistMgr->transferCharPtr(TMEMBER(_animationSets[i]->_name));
 			_animationSets[i]->persist(persistMgr);
 		}
@@ -1064,7 +1064,7 @@ bool XModel::persist(BasePersistenceManager *persistMgr) {
 	// persist material sprites
 	int32 numMatSprites;
 	if (persistMgr->getIsSaving()) {
-		numMatSprites = _matSprites.size();
+		numMatSprites = _matSprites.getSize();
 	}
 
 	persistMgr->transferSint32(TMEMBER(numMatSprites));
@@ -1103,7 +1103,7 @@ bool XModel::restoreDeviceObjects() {
 //////////////////////////////////////////////////////////////////////////
 bool XModel::unloadAnimation(const char *animName) {
 	bool found = false;
-	for (uint32 i = 0; i < _animationSets.size(); i++) {
+	for (uint32 i = 0; i < _animationSets.getSize(); i++) {
 		if (scumm_stricmp(animName, _animationSets[i]->_name) == 0) {
 			for (int j = 0; j < X_NUM_ANIMATION_CHANNELS; j++) {
 				if (_channels[j])
@@ -1112,7 +1112,7 @@ bool XModel::unloadAnimation(const char *animName) {
 
 			found = true;
 			delete _animationSets[i];
-			_animationSets.remove_at(i);
+			_animationSets.removeAt(i);
 			i++;
 		}
 	}
diff --git a/engines/wintermute/base/particles/part_emitter.cpp b/engines/wintermute/base/particles/part_emitter.cpp
index dbc73c3178e..9558735917a 100644
--- a/engines/wintermute/base/particles/part_emitter.cpp
+++ b/engines/wintermute/base/particles/part_emitter.cpp
@@ -94,21 +94,21 @@ PartEmitter::PartEmitter(BaseGame *inGame, BaseScriptHolder *owner) : BaseObject
 
 //////////////////////////////////////////////////////////////////////////
 PartEmitter::~PartEmitter() {
-	for (uint32 i = 0; i < _particles.size(); i++) {
+	for (uint32 i = 0; i < _particles.getSize(); i++) {
 		delete _particles[i];
 	}
-	_particles.clear();
+	_particles.removeAll();
 
-	for (uint32 i = 0; i < _forces.size(); i++) {
+	for (uint32 i = 0; i < _forces.getSize(); i++) {
 		delete _forces[i];
 	}
-	_forces.clear();
+	_forces.removeAll();
 
 
-	for (uint32 i = 0; i < _sprites.size(); i++) {
+	for (uint32 i = 0; i < _sprites.getSize(); i++) {
 		delete[] _sprites[i];
 	}
-	_sprites.clear();
+	_sprites.removeAll();
 
 	delete[] _emitEvent;
 	_emitEvent = nullptr;
@@ -121,7 +121,7 @@ bool PartEmitter::addSprite(const char *filename) {
 	}
 
 	// do we already have the file?
-	for (uint32 i = 0; i < _sprites.size(); i++) {
+	for (uint32 i = 0; i < _sprites.getSize(); i++) {
 		if (scumm_stricmp(filename, _sprites[i]) == 0) {
 			return STATUS_OK;
 		}
@@ -143,10 +143,10 @@ bool PartEmitter::addSprite(const char *filename) {
 
 //////////////////////////////////////////////////////////////////////////
 bool PartEmitter::removeSprite(const char *filename) {
-	for (uint32 i = 0; i < _sprites.size(); i++) {
+	for (uint32 i = 0; i < _sprites.getSize(); i++) {
 		if (scumm_stricmp(filename, _sprites[i]) == 0) {
 			delete[] _sprites[i];
-			_sprites.remove_at(i);
+			_sprites.removeAt(i);
 			return STATUS_OK;
 		}
 	}
@@ -158,7 +158,7 @@ bool PartEmitter::initParticle(PartParticle *particle, uint32 currentTime, uint3
 	if (!particle) {
 		return STATUS_FAILED;
 	}
-	if (_sprites.size() == 0) {
+	if (_sprites.getSize() == 0) {
 		return STATUS_FAILED;
 	}
 
@@ -188,7 +188,7 @@ bool PartEmitter::initParticle(PartParticle *particle, uint32 currentTime, uint3
 	}
 
 	float angle = BaseUtils::randomAngle(_angle1, _angle2);
-	int spriteIndex = BaseUtils::randomInt(0, _sprites.size() - 1);
+	int spriteIndex = BaseUtils::randomInt(0, _sprites.getSize() - 1);
 
 	float rotation = BaseUtils::randomAngle(_rotation1, _rotation2);
 	float angVelocity = BaseUtils::randomFloat(_angVelocity1, _angVelocity2);
@@ -258,7 +258,7 @@ bool PartEmitter::update() {
 bool PartEmitter::updateInternal(uint32 currentTime, uint32 timerDelta) {
 	int numLive = 0;
 
-	for (uint32 i = 0; i < _particles.size(); i++) {
+	for (uint32 i = 0; i < _particles.getSize(); i++) {
 		_particles[i]->update(this, currentTime, timerDelta);
 
 		if (!_particles[i]->_isDead) {
@@ -281,7 +281,7 @@ bool PartEmitter::updateInternal(uint32 currentTime, uint32 timerDelta) {
 			int toGen = MIN(_genAmount, _maxParticles - numLive);
 			while (toGen > 0) {
 				int firstDeadIndex = -1;
-				for (uint32 i = 0; i < _particles.size(); i++) {
+				for (uint32 i = 0; i < _particles.getSize(); i++) {
 					if (_particles[i]->_isDead) {
 						firstDeadIndex = i;
 						break;
@@ -318,11 +318,11 @@ bool PartEmitter::updateInternal(uint32 currentTime, uint32 timerDelta) {
 
 //////////////////////////////////////////////////////////////////////////
 bool PartEmitter::display(BaseRegion *region) {
-	if (_sprites.size() <= 1) {
+	if (_sprites.getSize() <= 1) {
 		BaseEngine::getRenderer()->startSpriteBatch();
 	}
 
-	for (uint32 i = 0; i < _particles.size(); i++) {
+	for (uint32 i = 0; i < _particles.getSize(); i++) {
 		if (region != nullptr && _useRegion) {
 			if (!region->pointInRegion((int)_particles[i]->_pos.x, (int)_particles[i]->_pos.y)) {
 				continue;
@@ -332,7 +332,7 @@ bool PartEmitter::display(BaseRegion *region) {
 		_particles[i]->display(this);
 	}
 
-	if (_sprites.size() <= 1) {
+	if (_sprites.getSize() <= 1) {
 		BaseEngine::getRenderer()->endSpriteBatch();
 	}
 
@@ -341,7 +341,7 @@ bool PartEmitter::display(BaseRegion *region) {
 
 //////////////////////////////////////////////////////////////////////////
 bool PartEmitter::start() {
-	for (uint32 i = 0; i < _particles.size(); i++) {
+	for (uint32 i = 0; i < _particles.getSize(); i++) {
 		_particles[i]->_isDead = true;
 	}
 	_running = true;
@@ -366,7 +366,7 @@ bool PartEmitter::start() {
 //////////////////////////////////////////////////////////////////////////
 bool PartEmitter::sortParticlesByZ() {
 	// sort particles by _posY
-	qsort(_particles.data(), _particles.size(), sizeof(PartParticle *), PartEmitter::compareZ);
+	qsort(_particles.getData(), _particles.getSize(), sizeof(PartParticle *), PartEmitter::compareZ);
 	return STATUS_OK;
 }
 
@@ -406,7 +406,7 @@ bool PartEmitter::setBorderThickness(int thicknessLeft, int thicknessRight, int
 PartForce *PartEmitter::addForceByName(const Common::String &name) {
 	PartForce *force = nullptr;
 
-	for (uint32 i = 0; i < _forces.size(); i++) {
+	for (uint32 i = 0; i < _forces.getSize(); i++) {
 		if (scumm_stricmp(name.c_str(), _forces[i]->getName()) == 0) {
 			force = _forces[i];
 			break;
@@ -444,10 +444,10 @@ bool PartEmitter::addForce(const Common::String &name, PartForce::TForceType typ
 
 //////////////////////////////////////////////////////////////////////////
 bool PartEmitter::removeForce(const Common::String &name) {
-	for (uint32 i = 0; i < _forces.size(); i++) {
+	for (uint32 i = 0; i < _forces.getSize(); i++) {
 		if (scumm_stricmp(name.c_str(), _forces[i]->getName()) == 0) {
 			delete _forces[i];
-			_forces.remove_at(i);
+			_forces.removeAt(i);
 			return STATUS_OK;
 		}
 	}
@@ -525,10 +525,10 @@ bool PartEmitter::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSt
 	else if (strcmp(name, "Stop") == 0) {
 		stack->correctParams(0);
 
-		for (uint32 i = 0; i < _particles.size(); i++) {
+		for (uint32 i = 0; i < _particles.getSize(); i++) {
 			delete _particles[i];
 		}
-		_particles.clear();
+		_particles.removeAll();
 
 		_running = false;
 		stack->pushBool(true);
@@ -788,7 +788,7 @@ ScValue *PartEmitter::scGetProperty(const Common::String &name) {
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumLiveParticles") {
 		int numAlive = 0;
-		for (uint32 i = 0; i < _particles.size(); i++) {
+		for (uint32 i = 0; i < _particles.getSize(); i++) {
 			if (_particles[i] && !_particles[i]->_isDead) {
 				numAlive++;
 			}
@@ -1221,9 +1221,9 @@ bool PartEmitter::persist(BasePersistenceManager *persistMgr) {
 
 	uint32 numForces;
 	if (persistMgr->getIsSaving()) {
-		numForces = _forces.size();
+		numForces = _forces.getSize();
 		persistMgr->transferUint32(TMEMBER(numForces));
-		for (uint32 i = 0; i < _forces.size(); i++) {
+		for (uint32 i = 0; i < _forces.getSize(); i++) {
 			_forces[i]->persist(persistMgr);
 		}
 	} else {
@@ -1237,9 +1237,9 @@ bool PartEmitter::persist(BasePersistenceManager *persistMgr) {
 
 	uint32 numParticles;
 	if (persistMgr->getIsSaving()) {
-		numParticles = _particles.size();
+		numParticles = _particles.getSize();
 		persistMgr->transferUint32(TMEMBER(numParticles));
-		for (uint32 i = 0; i < _particles.size(); i++) {
+		for (uint32 i = 0; i < _particles.getSize(); i++) {
 			_particles[i]->persist(persistMgr);
 		}
 	} else {
diff --git a/engines/wintermute/base/particles/part_particle.cpp b/engines/wintermute/base/particles/part_particle.cpp
index 4cb3f997265..57b31ed8f0e 100644
--- a/engines/wintermute/base/particles/part_particle.cpp
+++ b/engines/wintermute/base/particles/part_particle.cpp
@@ -147,7 +147,7 @@ bool PartParticle::update(PartEmitter *emitter, uint32 currentTime, uint32 timer
 		// update position
 		float elapsedTime = (float)timerDelta / 1000.f;
 
-		for (uint32 i = 0; i < emitter->_forces.size(); i++) {
+		for (uint32 i = 0; i < emitter->_forces.getSize(); i++) {
 			PartForce *force = emitter->_forces[i];
 			switch (force->_type) {
 			case PartForce::FORCE_GLOBAL:
diff --git a/engines/wintermute/base/scriptables/debuggable/debuggable_script.cpp b/engines/wintermute/base/scriptables/debuggable/debuggable_script.cpp
index 7e6749e6c9f..8d32b45e880 100644
--- a/engines/wintermute/base/scriptables/debuggable/debuggable_script.cpp
+++ b/engines/wintermute/base/scriptables/debuggable/debuggable_script.cpp
@@ -33,12 +33,12 @@ namespace Wintermute {
 DebuggableScript::DebuggableScript(BaseGame *inGame, DebuggableScEngine *engine) : ScScript(inGame, engine), _engine(engine), _stepDepth(kDefaultStepDepth) {
 	_engine->_watches.subscribe(this);
 	for (uint i = 0; i < _engine->_watches.size(); i++) {
-		_watchInstances.push_back(new WatchInstance(_engine->_watches[i], this));
+		_watchInstances.add(new WatchInstance(_engine->_watches[i], this));
 	}
 }
 
 DebuggableScript::~DebuggableScript() {
-	for (uint i = 0; i < _watchInstances.size(); i++) {
+	for (uint i = 0; i < _watchInstances.getSize(); i++) {
 		delete _watchInstances[i];
 	}
 	_engine->_watches.unsubscribe(this);
@@ -56,7 +56,7 @@ void DebuggableScript::postInstHook(uint32 inst) {
 		}
 	}
 
-	for (uint i = 0; i < _watchInstances.size(); i++) {
+	for (uint i = 0; i < _watchInstances.getSize(); i++) {
 		this->_watchInstances[i]->evaluate();
 	}
 
@@ -125,12 +125,12 @@ Common::String DebuggableScript::dbgGetFilename() const {
 
 void DebuggableScript::updateWatches() {
 	// We drop obsolete watches
-	for (uint i = 0; i < _watchInstances.size(); i++) {
+	for (uint i = 0; i < _watchInstances.getSize(); i++) {
 		Watch *findMe = _watchInstances[i]->_watch;
 		if (Common::find(_engine->_watches.begin(), _engine->_watches.end(), findMe) == _engine->_watches.end()) {
 			// Not found on engine-wide list, must have been removed from watches. Must remove it from local list.
 			delete _watchInstances[i];
-			_watchInstances.remove_at(i);
+			_watchInstances.removeAt(i);
 		}
 	}
 
@@ -139,7 +139,7 @@ void DebuggableScript::updateWatches() {
 		Watch *findMe = _engine->_watches[i];
 		if (Common::find(_engine->_watches.begin(), _engine->_watches.end(), findMe) == _engine->_watches.end()) {
 			// Not found on local list, must be a new one.
-			_watchInstances.push_back(new WatchInstance(_engine->_watches[i], this));
+			_watchInstances.add(new WatchInstance(_engine->_watches[i], this));
 		}
 	}
 }
diff --git a/engines/wintermute/base/scriptables/script.cpp b/engines/wintermute/base/scriptables/script.cpp
index 6da211149c0..2882ec9c28f 100644
--- a/engines/wintermute/base/scriptables/script.cpp
+++ b/engines/wintermute/base/scriptables/script.cpp
@@ -1510,7 +1510,7 @@ bool ScScript::copyParameters(ScStack *stack) {
 
 //////////////////////////////////////////////////////////////////////////
 bool ScScript::finishThreads() {
-	for (uint32 i = 0; i < _engine->_scripts.size(); i++) {
+	for (uint32 i = 0; i < _engine->_scripts.getSize(); i++) {
 		ScScript *scr = _engine->_scripts[i];
 		if (scr->_thread && scr->_state != SCRIPT_FINISHED && scr->_owner == _owner && scumm_stricmp(scr->_filename, _filename) == 0) {
 			scr->finish(true);
diff --git a/engines/wintermute/base/scriptables/script_engine.cpp b/engines/wintermute/base/scriptables/script_engine.cpp
index b4463b1c814..a84f04dc5c4 100644
--- a/engines/wintermute/base/scriptables/script_engine.cpp
+++ b/engines/wintermute/base/scriptables/script_engine.cpp
@@ -99,16 +99,16 @@ ScEngine::~ScEngine() {
 
 //////////////////////////////////////////////////////////////////////////
 bool ScEngine::cleanup() {
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (!_scripts[i]->_thread && _scripts[i]->_owner) {
 			_scripts[i]->_owner->removeScript(_scripts[i]);
 		}
 		delete _scripts[i];
-		_scripts.remove_at(i);
+		_scripts.removeAt(i);
 		i--;
 	}
 
-	_scripts.clear();
+	_scripts.removeAll();
 
 	delete _globals;
 	_globals = nullptr;
@@ -185,7 +185,7 @@ ScScript *ScEngine::runScript(const char *filename, BaseScriptHolder *owner) {
 
 //////////////////////////////////////////////////////////////////////////
 bool ScEngine::isRunningScript(const char *filename) {
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (strcmp(_scripts[i]->_filename, filename) == 0) {
 			return true;
 		}
@@ -271,13 +271,13 @@ byte *ScEngine::getCompiledScript(const char *filename, uint32 *outSize, bool ig
 
 //////////////////////////////////////////////////////////////////////////
 bool ScEngine::tick() {
-	if (_scripts.size() == 0) {
+	if (_scripts.getSize() == 0) {
 		return STATUS_OK;
 	}
 
 
 	// resolve waiting scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 
 		switch (_scripts[i]->_state) {
 		case SCRIPT_WAITING: {
@@ -341,7 +341,7 @@ bool ScEngine::tick() {
 
 
 	// execute scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 
 		// skip paused scripts
 		if (_scripts[i]->_state == SCRIPT_PAUSED) {
@@ -390,7 +390,7 @@ bool ScEngine::tickUnbreakable() {
 	ScScript *oldScript = _currentScript;
 
 	// execute unbreakable scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (!_scripts[i]->_unbreakable) {
 			continue;
 		}
@@ -414,14 +414,14 @@ bool ScEngine::tickUnbreakable() {
 //////////////////////////////////////////////////////////////////////////
 bool ScEngine::removeFinishedScripts() {
 	// remove finished scripts
-	for (int32 i = 0; i < (int32)_scripts.size(); i++) {
+	for (int32 i = 0; i < (int32)_scripts.getSize(); i++) {
 		if (_scripts[i]->_state == SCRIPT_FINISHED || _scripts[i]->_state == SCRIPT_ERROR) {
 			if (!_scripts[i]->_thread && _scripts[i]->_owner) {
 				_scripts[i]->_owner->removeScript(_scripts[i]);
 			}
 
 			delete _scripts[i];
-			_scripts.remove_at(i);
+			_scripts.removeAt(i);
 			i--;
 		}
 	}
@@ -433,7 +433,7 @@ bool ScEngine::removeFinishedScripts() {
 int ScEngine::getNumScripts(int *running, int *waiting, int *persistent) {
 	int numRunning = 0, numWaiting = 0, numPersistent = 0, numTotal = 0;
 
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (_scripts[i]->_state == SCRIPT_FINISHED) {
 			continue;
 		}
@@ -492,7 +492,7 @@ bool ScEngine::emptyScriptCache() {
 //////////////////////////////////////////////////////////////////////////
 bool ScEngine::resetObject(BaseObject *Object) {
 	// terminate all scripts waiting for this object
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (_scripts[i]->_state == SCRIPT_WAITING && _scripts[i]->_waitObject == Object) {
 			if (!_gameRef->_compatKillMethodThreads) {
 				resetScript(_scripts[i]);
@@ -508,7 +508,7 @@ bool ScEngine::resetObject(BaseObject *Object) {
 //////////////////////////////////////////////////////////////////////////
 bool ScEngine::resetScript(ScScript *script) {
 	// terminate all scripts waiting for this script
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (_scripts[i]->_state == SCRIPT_WAITING_SCRIPT && _scripts[i]->_waitScript == script) {
 			_scripts[i]->finish();
 		}
@@ -533,10 +533,10 @@ bool ScEngine::persist(BasePersistenceManager *persistMgr) {
 
 //////////////////////////////////////////////////////////////////////////
 void ScEngine::editorCleanup() {
-	for (int32 i = 0; i < (int32)_scripts.size(); i++) {
+	for (int32 i = 0; i < (int32)_scripts.getSize(); i++) {
 		if (_scripts[i]->_owner == nullptr && (_scripts[i]->_state == SCRIPT_FINISHED || _scripts[i]->_state == SCRIPT_ERROR)) {
 			delete _scripts[i];
-			_scripts.remove_at(i);
+			_scripts.removeAt(i);
 			i--;
 		}
 	}
@@ -545,7 +545,7 @@ void ScEngine::editorCleanup() {
 
 //////////////////////////////////////////////////////////////////////////
 bool ScEngine::pauseAll() {
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (_scripts[i] != _currentScript) {
 			_scripts[i]->pause();
 		}
@@ -557,7 +557,7 @@ bool ScEngine::pauseAll() {
 
 //////////////////////////////////////////////////////////////////////////
 bool ScEngine::resumeAll() {
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		_scripts[i]->resume();
 	}
 
@@ -567,7 +567,7 @@ bool ScEngine::resumeAll() {
 
 //////////////////////////////////////////////////////////////////////////
 bool ScEngine::isValidScript(ScScript *script) {
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		if (_scripts[i] == script) {
 			return true;
 		}
diff --git a/engines/wintermute/base/scriptables/script_stack.cpp b/engines/wintermute/base/scriptables/script_stack.cpp
index 3ec8e2d65c4..42ed986c913 100644
--- a/engines/wintermute/base/scriptables/script_stack.cpp
+++ b/engines/wintermute/base/scriptables/script_stack.cpp
@@ -43,10 +43,10 @@ ScStack::ScStack(BaseGame *inGame) : BaseClass(inGame) {
 ScStack::~ScStack() {
 	//_gameRef->LOG(0, "STAT: Stack size: %d, SP=%d", _values.size(), _sP);
 
-	for (uint32 i = 0; i < _values.size(); i++) {
+	for (uint32 i = 0; i < _values.getSize(); i++) {
 		delete _values[i];
 	}
-	_values.clear();
+	_values.removeAll();
 }
 
 
@@ -65,7 +65,7 @@ ScValue *ScStack::pop() {
 void ScStack::push(ScValue *val) {
 	_sP++;
 
-	if (_sP < (int32)_values.size()) {
+	if (_sP < (int32)_values.getSize()) {
 		_values[_sP]->cleanup();
 		_values[_sP]->copy(val);
 	} else {
@@ -80,7 +80,7 @@ void ScStack::push(ScValue *val) {
 ScValue *ScStack::getPushValue() {
 	_sP++;
 
-	if (_sP >= (int32)_values.size()) {
+	if (_sP >= (int32)_values.getSize()) {
 		ScValue *val = new ScValue(_gameRef);
 		_values.add(val);
 	}
@@ -92,7 +92,7 @@ ScValue *ScStack::getPushValue() {
 
 //////////////////////////////////////////////////////////////////////////
 ScValue *ScStack::getTop() {
-	if (_sP < 0 || _sP >= (int32)_values.size()) {
+	if (_sP < 0 || _sP >= (int32)_values.getSize()) {
 		return nullptr;
 	} else {
 		return _values[_sP];
@@ -103,7 +103,7 @@ ScValue *ScStack::getTop() {
 //////////////////////////////////////////////////////////////////////////
 ScValue *ScStack::getAt(int index) {
 	index = _sP - index;
-	if (index < 0 || index >= (int32)_values.size()) {
+	if (index < 0 || index >= (int32)_values.getSize()) {
 		return nullptr;
 	} else {
 		return _values[index];
@@ -119,7 +119,7 @@ void ScStack::correctParams(uint32 expectedParams) {
 		while (expectedParams < nuParams) {
 			//Pop();
 			delete _values[_sP - expectedParams];
-			_values.remove_at(_sP - expectedParams);
+			_values.removeAt(_sP - expectedParams);
 			nuParams--;
 			_sP--;
 		}
@@ -128,13 +128,13 @@ void ScStack::correctParams(uint32 expectedParams) {
 			//Push(null_val);
 			ScValue *nullVal = new ScValue(_gameRef);
 			nullVal->setNULL();
-			_values.insert_at(_sP - nuParams + 1, nullVal);
+			_values.insertAt(_sP - nuParams + 1, nullVal);
 			nuParams++;
 			_sP++;
 
-			if ((int32)_values.size() > _sP + 1) {
-				delete _values[_values.size() - 1];
-				_values.remove_at(_values.size() - 1);
+			if ((int32)_values.getSize() > _sP + 1) {
+				delete _values[_values.getSize() - 1];
+				_values.removeAt(_values.getSize() - 1);
 			}
 		}
 	}
diff --git a/engines/wintermute/base/sound/base_sound_manager.cpp b/engines/wintermute/base/sound/base_sound_manager.cpp
index 41f3b4052b3..36a7e874cdf 100644
--- a/engines/wintermute/base/sound/base_sound_manager.cpp
+++ b/engines/wintermute/base/sound/base_sound_manager.cpp
@@ -61,10 +61,10 @@ BaseSoundMgr::~BaseSoundMgr() {
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseSoundMgr::cleanup() {
-	for (uint32 i = 0; i < _sounds.size(); i++) {
+	for (uint32 i = 0; i < _sounds.getSize(); i++) {
 		delete _sounds[i];
 	}
-	_sounds.clear();
+	_sounds.removeAll();
 	return STATUS_OK;
 }
 
@@ -135,7 +135,7 @@ BaseSoundBuffer *BaseSoundMgr::addSound(const Common::String &filename, Audio::M
 	sound->updateVolume();
 
 	// register sound
-	_sounds.push_back(sound);
+	_sounds.add(sound);
 
 	return sound;
 
@@ -152,17 +152,17 @@ bool BaseSoundMgr::addSound(BaseSoundBuffer *sound, Audio::Mixer::SoundType type
 	sound->updateVolume();
 
 	// register sound
-	_sounds.push_back(sound);
+	_sounds.add(sound);
 
 	return STATUS_OK;
 }
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseSoundMgr::removeSound(BaseSoundBuffer *sound) {
-	for (uint32 i = 0; i < _sounds.size(); i++) {
+	for (uint32 i = 0; i < _sounds.getSize(); i++) {
 		if (_sounds[i] == sound) {
 			delete _sounds[i];
-			_sounds.remove_at(i);
+			_sounds.removeAt(i);
 			return STATUS_OK;
 		}
 	}
@@ -231,7 +231,7 @@ bool BaseSoundMgr::setMasterVolume(byte value) {
 	// be none the wiser about round-off-errors. This function should thus
 	// ONLY be called by setMasterVolumePercent.
 	_volumeMaster = value;
-	for (uint32 i = 0; i < _sounds.size(); i++) {
+	for (uint32 i = 0; i < _sounds.getSize(); i++) {
 		_sounds[i]->updateVolume();
 	}
 	return STATUS_OK;
@@ -259,7 +259,7 @@ byte BaseSoundMgr::getMasterVolume() {
 //////////////////////////////////////////////////////////////////////////
 bool BaseSoundMgr::pauseAll(bool includingMusic) {
 
-	for (uint32 i = 0; i < _sounds.size(); i++) {
+	for (uint32 i = 0; i < _sounds.getSize(); i++) {
 		if (_sounds[i]->isPlaying() && (_sounds[i]->getType() != Audio::Mixer::kMusicSoundType || includingMusic)) {
 			_sounds[i]->pause();
 			_sounds[i]->setFreezePaused(true);
@@ -273,7 +273,7 @@ bool BaseSoundMgr::pauseAll(bool includingMusic) {
 //////////////////////////////////////////////////////////////////////////
 bool BaseSoundMgr::resumeAll() {
 
-	for (uint32 i = 0; i < _sounds.size(); i++) {
+	for (uint32 i = 0; i < _sounds.getSize(); i++) {
 		if (_sounds[i]->isFreezePaused()) {
 			_sounds[i]->resume();
 			_sounds[i]->setFreezePaused(false);
diff --git a/engines/wintermute/base/sound/base_sound_manager.h b/engines/wintermute/base/sound/base_sound_manager.h
index 48043e46edd..9b1180f95ad 100644
--- a/engines/wintermute/base/sound/base_sound_manager.h
+++ b/engines/wintermute/base/sound/base_sound_manager.h
@@ -56,7 +56,7 @@ public:
 	bool _soundAvailable;
 	BaseSoundMgr(BaseGame *inGame);
 	~BaseSoundMgr() override;
-	Common::Array<BaseSoundBuffer *> _sounds;
+	BaseArray<BaseSoundBuffer *> _sounds;
 	void saveSettings();
 private:
 	int32 _volumeMasterPercent; // Necessary to avoid round-offs.
diff --git a/engines/wintermute/coll_templ.h b/engines/wintermute/coll_templ.h
index 56efb7cfe8f..e3349e3ceaf 100644
--- a/engines/wintermute/coll_templ.h
+++ b/engines/wintermute/coll_templ.h
@@ -28,81 +28,364 @@
 #ifndef WINTERMUTE_COLL_TEMPL_H
 #define WINTERMUTE_COLL_TEMPL_H
 
-#include "common/array.h"
 #include "engines/wintermute/base/base_persistence_manager.h"
 
 namespace Wintermute {
 
-// Basically Common::Array with peristence-support.
-template<typename TYPE>
-class BaseArrayBase : public Common::Array<TYPE> {
+#include <new>
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+inline void dcConstructElements(TYPE *pElements, int32 nCount) {
+	// first do bit-wise zero initialization
+	memset((void *)pElements, 0, nCount * sizeof(TYPE));
+	
+	// then call the constructor(s)
+	for (; nCount--; pElements++)
+		::new((void *)pElements) TYPE;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+inline void dcDestructElements(TYPE *pElements, uint32 nCount) {
+	// call the destructor(s)
+	for (; nCount--; pElements++)
+		pElements->~TYPE();
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+inline void dcCopyElements(TYPE *pDest, const TYPE *pSrc, uint32 nCount) {
+	// default is element-copy using assignment
+	while (nCount--)
+		*pDest++ = *pSrc++;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// BaseArray<TYPE>
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+class BaseArrayBase {
+public:
+	// Construction
+	BaseArrayBase();
+	
+	// Attributes
+	uint32 getSize() const;
+	uint32 getUpperBound() const;
+	void setSize(uint32 nNewSize, uint32 nGrowBy = (uint32)-1);
+	
+	// Operations
+	// Clean up
+	void freeExtra();
+	void removeAll();
+	
+	// Accessing elements
+	TYPE getAt(uint32 nIndex) const;
+	void setAt(uint32 nIndex, TYPE newElement);
+	TYPE& elementAt(uint32 nIndex);
+	
+	// Direct Access to the element data (may return NULL)
+	const TYPE *getData() const;
+	TYPE *getData();
+	
+	// Potentially growing the array
+	void setAtGrow(uint32 nIndex, TYPE newElement);
+	uint32 add(TYPE newElement);
+	uint32 append(const BaseArrayBase &src);
+	void copy(const BaseArrayBase &src);
+	
+	// overloaded operator helpers
+	TYPE operator[](uint32 nIndex) const;
+	TYPE &operator[](uint32 nIndex);
+	
+	// Operations that move elements around
+	void insertAt(uint32 nIndex, TYPE newElement, uint32 nCount = 1);
+	void removeAt(uint32 nIndex, uint32 nCount = 1);
+	void insertAt(uint32 nStartIndex, BaseArrayBase *pNewArray);
+	
+	// Implementation
+protected:
+	TYPE *_pData;   // the actual array of data
+	uint32 _nSize;     // # of elements (upperBound - 1)
+	uint32 _nMaxSize;  // max allocated
+	uint32 _nGrowBy;   // grow amount
+	
 public:
-// TODO: Might want to make sure that destructors are called when replacing/deleting/getting destructed
-	int add(TYPE newElement) {
-		Common::Array<TYPE>::push_back(newElement);
-		return Common::Array<TYPE>::size() - 1;
+	~BaseArrayBase();
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// CBArray<TYPE> inline functions
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+inline uint32 BaseArrayBase<TYPE>::getSize() const {
+	return _nSize;
+}
+
+template<class TYPE>
+inline uint32 BaseArrayBase<TYPE>::getUpperBound() const {
+	return _nSize - 1;
+}
+
+template<class TYPE>
+inline void BaseArrayBase<TYPE>::removeAll() {
+	setSize(0, (uint32)-1);
+}
+
+template<class TYPE>
+inline TYPE BaseArrayBase<TYPE>::getAt(uint32 nIndex) const {
+	return _pData[nIndex];
+}
+
+template<class TYPE>
+inline void BaseArrayBase<TYPE>::setAt(uint32 nIndex, TYPE newElement) {
+	_pData[nIndex] = newElement;
+}
+
+template<class TYPE>
+inline TYPE &BaseArrayBase<TYPE>::elementAt(uint32 nIndex) {
+	return _pData[nIndex];
+}
+
+template<class TYPE>
+inline const TYPE *BaseArrayBase<TYPE>::getData() const {
+	return (const TYPE *)_pData;
+}
+
+template<class TYPE>
+inline TYPE *BaseArrayBase<TYPE>::getData() {
+	return (TYPE *)_pData;
+}
+
+template<class TYPE>
+inline uint32 BaseArrayBase<TYPE>::add(TYPE newElement) {
+	uint32 nIndex = _nSize;
+	setAtGrow(nIndex, newElement);
+	return nIndex;
+}
+
+template<class TYPE>
+inline TYPE BaseArrayBase<TYPE>::operator[](uint32 nIndex) const {
+	return getAt(nIndex);
+}
+
+template<class TYPE>
+inline TYPE &BaseArrayBase<TYPE>::operator[](uint32 nIndex) {
+	return elementAt(nIndex);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// BaseArray<TYPE, ARG_TYPE> out-of-line functions
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+BaseArrayBase<TYPE>::BaseArrayBase() {
+	_pData = nullptr;
+	_nSize = _nMaxSize = _nGrowBy = 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+BaseArrayBase<TYPE>::~BaseArrayBase() {
+	if (_pData != nullptr) {
+		dcDestructElements<TYPE>(_pData, _nSize);
+		delete[] (byte *)_pData;
 	}
-	void remove_at(uint32 idx) {
-		Common::Array<TYPE>::remove_at(idx);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+void BaseArrayBase<TYPE>::setSize(uint32 nNewSize, uint32 nGrowBy) {
+	if (nGrowBy != (uint32)-1)
+		_nGrowBy = nGrowBy;  // set new size
+	
+	if (nNewSize == 0) {
+		// shrink to nothing
+		if (_pData != nullptr) {
+			dcDestructElements<TYPE>(_pData, _nSize);
+			delete[] (byte *)_pData;
+			_pData = nullptr;
+		}
+		_nSize = _nMaxSize = 0;
+	} else if (_pData == nullptr) {
+		// create one with exact size
+		_pData = (TYPE *) new byte[nNewSize * sizeof(TYPE)];
+		dcConstructElements<TYPE>(_pData, nNewSize);
+		_nSize = _nMaxSize = nNewSize;
+	} else if (nNewSize <= _nMaxSize) {
+		// it fits
+		if (nNewSize > _nSize) {
+			// initialize the new elements
+			dcConstructElements<TYPE>(&_pData[_nSize], nNewSize - _nSize);
+		} else if (_nSize > nNewSize) {
+			// destroy the old elements
+			dcDestructElements<TYPE>(&_pData[nNewSize], _nSize - nNewSize);
+		}
+		_nSize = nNewSize;
+	} else {
+		// otherwise, grow array
+		uint32 numGrowBy = _nGrowBy;
+		if (numGrowBy == 0) {
+			// heuristically determine growth when nGrowBy == 0
+			//  (this avoids heap fragmentation in many situations)
+			numGrowBy = _nSize / 8;
+			numGrowBy = (numGrowBy < 4) ? 4 : ((numGrowBy > 1024) ? 1024 : numGrowBy);
+		}
+		int nNewMax;
+		if (nNewSize < _nMaxSize + numGrowBy)
+			nNewMax = _nMaxSize + numGrowBy;  // granularity
+		else
+			nNewMax = nNewSize;  // no slush
+		
+		TYPE *pNewData = (TYPE *) new byte[nNewMax * sizeof(TYPE)];
+		
+		// copy new data from old
+		memcpy(pNewData, _pData, _nSize * sizeof(TYPE));
+		
+		// construct remaining elements
+		dcConstructElements<TYPE>(&pNewData[_nSize], nNewSize - _nSize);
+		
+		// get rid of old stuff (note: no destructors called)
+		delete[] (byte *)_pData;
+		_pData = pNewData;
+		_nSize = nNewSize;
+		_nMaxSize = nNewMax;
 	}
-	void remove_at(uint32 idx, uint32 num) {
-		while (num) {
-			if (idx >= Common::Array<TYPE>::size()) {
-				break;
-			}
-			Common::Array<TYPE>::remove_at(idx);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+uint32 BaseArrayBase<TYPE>::append(const BaseArrayBase &src) {
+	uint32 nOldSize = _nSize;
+	setSize(_nSize + src._nSize);
+	dcCopyElements<TYPE>(_pData + nOldSize, src._pData, src._nSize);
+	return nOldSize;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+void BaseArrayBase<TYPE>::copy(const BaseArrayBase &src) {
+	setSize(src._nSize);
+	dcCopyElements<TYPE>(_pData, src._pData, src._nSize);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+void BaseArrayBase<TYPE>::freeExtra() {
+	if (_nSize != _nMaxSize) {
+		// shrink to desired size
+		TYPE *pNewData = nullptr;
+		if (_nSize != 0) {
+			pNewData = (TYPE *) new byte[_nSize * sizeof(TYPE)];
+			// copy new data from old
+			memcpy(pNewData, _pData, _nSize * sizeof(TYPE));
 		}
+		
+		// get rid of old stuff (note: no destructors called)
+		delete[] (byte *)_pData;
+		_pData = pNewData;
+		_nMaxSize = _nSize;
 	}
-	template<typename T2>
-	void copy(const BaseArrayBase<T2> &src) {
-		Common::Array<TYPE>::insert_at(0, src);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+void BaseArrayBase<TYPE>::setAtGrow(uint32 nIndex, TYPE newElement) {
+	if (nIndex >= _nSize)
+		setSize(nIndex + 1, -1);
+	_pData[nIndex] = newElement;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+void BaseArrayBase<TYPE>::insertAt(uint32 nIndex, TYPE newElement, uint32 nCount /*=1*/) {
+	if (nIndex >= _nSize) {
+		// adding after the end of the array
+		setSize(nIndex + nCount, -1);   // grow so nIndex is valid
+	} else {
+		// inserting in the middle of the array
+		uint32 nOldSize = _nSize;
+		setSize(_nSize + nCount, -1);  // grow it to new size
+		// destroy intial data before copying over it
+		dcDestructElements<TYPE>(&_pData[nOldSize], nCount);
+		// shift old data up to fill gap
+		memmove(&_pData[nIndex + nCount], &_pData[nIndex],
+				(nOldSize - nIndex) * sizeof(TYPE));
+		
+		// re-init slots we copied from
+		dcConstructElements<TYPE>(&_pData[nIndex], nCount);
 	}
-};
+	
+	// insert new value in the gap
+	while (nCount--)
+		_pData[nIndex++] = newElement;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+void BaseArrayBase<TYPE>::removeAt(uint32 nIndex, uint32 nCount) {
+	// just remove a range
+	uint32 nMoveCount = _nSize - (nIndex + nCount);
+	dcDestructElements<TYPE>(&_pData[nIndex], nCount);
+	if (nMoveCount)
+		memmove(&_pData[nIndex], &_pData[nIndex + nCount], nMoveCount * sizeof(TYPE));
+	_nSize -= nCount;
+}
 
-template <typename TYPE>
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
+void BaseArrayBase<TYPE>::insertAt(uint32 nStartIndex, BaseArrayBase *pNewArray) {
+	if (pNewArray->getSize() > 0) {
+		InsertAt(nStartIndex, pNewArray->getAt(0), pNewArray->getSize());
+		for (uint32 i = 0; i < pNewArray->getSize(); i++)
+			setAt(nStartIndex + i, pNewArray->getAt(i));
+	}
+}
+
+/////////////////////////////////////////////////////////////////////////////
+template<class TYPE>
 class BaseArray : public BaseArrayBase<TYPE> {
-	public:
+public:
 	bool persist(BasePersistenceManager *persistMgr) {
-		int32 j;
+		uint32 i, j;
 		if (persistMgr->getIsSaving()) {
-			j = Common::Array<TYPE>::size();
-			persistMgr->transferSint32("ArraySize", &j);
-			typename Common::Array<TYPE>::const_iterator it = Common::Array<TYPE>::begin();
-			for (; it != Common::Array<TYPE>::end(); ++it) {
-				TYPE obj = *it;
+			j = BaseArray::getSize();
+			persistMgr->transferUint32("ArraySize", &j);
+			for (i = 0; i < j; i++) {
+				TYPE obj = BaseArray::getAt(i);
 				persistMgr->transferPtr("", &obj);
 			}
 		} else {
-			Common::Array<TYPE>::clear();
-			persistMgr->transferSint32("ArraySize", &j);
-			for (int i = 0; i < j; i++) {
+			BaseArray::setSize(0, -1);
+			persistMgr->transferUint32("ArraySize", &j);
+			for (i = 0; i < j; i++) {
 				TYPE obj = nullptr;
 				persistMgr->transferPtr("", &obj);
-				this->add(obj);
+				BaseArray::add(obj);
 			}
 		}
 		return true;
 	}
 };
 
+/////////////////////////////////////////////////////////////////////////////
 template <>
 class BaseArray<char *> : public BaseArrayBase<char *> {
-	public:
+public:
 	bool persist(BasePersistenceManager *persistMgr) {
-		int32 j;
+		uint32 i, j;
 		if (persistMgr->getIsSaving()) {
-			j = Common::Array<char *>::size();
-			persistMgr->transferSint32("ArraySize", &j);
-			Common::Array<char *>::const_iterator it = Common::Array<char *>::begin();
-			for (; it != Common::Array<char *>::end(); ++it) {
-				char * obj = *it;
+			j = getSize();
+			persistMgr->transferUint32("ArraySize", &j);
+			for (i = 0; i < j; i++) {
+				char *obj = getAt(i);
 				persistMgr->transferCharPtr("", &obj);
 			}
 		} else {
-			Common::Array<char *>::clear();
-			persistMgr->transferSint32("ArraySize", &j);
-			for (int i = 0; i < j; i++) {
-				char * obj = nullptr;
+			setSize(0, -1);
+			persistMgr->transferUint32("ArraySize", &j);
+			for (i = 0; i < j; i++) {
+				char *obj = nullptr;
 				persistMgr->transferCharPtr("", &obj);
 				add(obj);
 			}
@@ -111,24 +394,24 @@ class BaseArray<char *> : public BaseArrayBase<char *> {
 	}
 };
 
+/////////////////////////////////////////////////////////////////////////////
 template <>
 class BaseArray<const char *> : public BaseArrayBase<const char *> {
 public:
 	bool persist(BasePersistenceManager *persistMgr) {
-		int32 j;
+		uint32 i, j;
 		if (persistMgr->getIsSaving()) {
-			j = Common::Array<const char *>::size();
-			persistMgr->transferSint32("ArraySize", &j);
-			Common::Array<const char *>::const_iterator it = Common::Array<const char *>::begin();
-			for (; it != Common::Array<const char *>::end(); ++it) {
-				const char * obj = *it;
+			j = getSize();
+			persistMgr->transferUint32("ArraySize", &j);
+			for (i = 0; i < j; i++) {
+				const char * obj = getAt(i);
 				persistMgr->transferConstChar("", &obj);
 			}
 		} else {
-			Common::Array<const char *>::clear();
-			persistMgr->transferSint32("ArraySize", &j);
-			for (int i = 0; i < j; i++) {
-				const char * obj = nullptr;
+			setSize(0, -1);
+			persistMgr->transferUint32("ArraySize", &j);
+			for (i = 0; i < j; i++) {
+				const char * obj;
 				persistMgr->transferConstChar("", &obj);
 				add(obj);
 			}
diff --git a/engines/wintermute/debugger/debugger_controller.cpp b/engines/wintermute/debugger/debugger_controller.cpp
index c24da14a14e..bdc9730f634 100644
--- a/engines/wintermute/debugger/debugger_controller.cpp
+++ b/engines/wintermute/debugger/debugger_controller.cpp
@@ -311,7 +311,7 @@ Listing* DebuggerController::getListing(Error* &error) {
 Common::Array<TopEntry> DebuggerController::getTop() const {
 	Common::Array<TopEntry> res;
 	assert(SCENGINE);
-	for (uint i = 0; i < SCENGINE->_scripts.size(); i++) {
+	for (uint i = 0; i < SCENGINE->_scripts.getSize(); i++) {
 		TopEntry entry;
 		entry.filename = SCENGINE->_scripts[i]->_filename;
 		entry.current = (SCENGINE->_scripts[i] == SCENGINE->_currentScript);
diff --git a/engines/wintermute/ext/wme_shadowmanager.cpp b/engines/wintermute/ext/wme_shadowmanager.cpp
index 56bc67d0b2a..72bec833617 100644
--- a/engines/wintermute/ext/wme_shadowmanager.cpp
+++ b/engines/wintermute/ext/wme_shadowmanager.cpp
@@ -419,7 +419,7 @@ void SXShadowManager::run() {
 	AdGame *adGame = (AdGame *)_gameRef;
 	if (!adGame->_scene || !adGame->_scene->_geom)
 		return;
-	for (uint32 l = 0; l < adGame->_scene->_geom->_lights.size(); l++) {
+	for (uint32 l = 0; l < adGame->_scene->_geom->_lights.getSize(); l++) {
 		auto light = adGame->_scene->_geom->_lights[l];
 		_lights.push_back(Common::Pair<Light3D *, bool>(light, true));
 	}
diff --git a/engines/wintermute/ui/ui_button.cpp b/engines/wintermute/ui/ui_button.cpp
index bbd6052e36c..b76da114d4f 100644
--- a/engines/wintermute/ui/ui_button.cpp
+++ b/engines/wintermute/ui/ui_button.cpp
@@ -577,7 +577,7 @@ bool UIButton::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	buffer->putTextIndent(indent + 2, "\n");
 
 	// scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
diff --git a/engines/wintermute/ui/ui_edit.cpp b/engines/wintermute/ui/ui_edit.cpp
index a3a142293fb..76f27bd7c2b 100644
--- a/engines/wintermute/ui/ui_edit.cpp
+++ b/engines/wintermute/ui/ui_edit.cpp
@@ -363,7 +363,7 @@ bool UIEdit::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	buffer->putTextIndent(indent + 2, "PARENT_NOTIFY=%s\n", _parentNotify ? "TRUE" : "FALSE");
 
 	// scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
diff --git a/engines/wintermute/ui/ui_entity.cpp b/engines/wintermute/ui/ui_entity.cpp
index 6b8063a2696..5a8767ae2e8 100644
--- a/engines/wintermute/ui/ui_entity.cpp
+++ b/engines/wintermute/ui/ui_entity.cpp
@@ -204,7 +204,7 @@ bool UIEntity::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	buffer->putTextIndent(indent + 2, "\n");
 
 	// scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
diff --git a/engines/wintermute/ui/ui_object.cpp b/engines/wintermute/ui/ui_object.cpp
index 6a6defdbf39..d288fa30afd 100644
--- a/engines/wintermute/ui/ui_object.cpp
+++ b/engines/wintermute/ui/ui_object.cpp
@@ -256,7 +256,7 @@ bool UIObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 			// find directly
 			if (val->isNative()) {
 				UIObject *widget = (UIObject *)val->getNative();
-				for (i = 0; i < win->_widgets.size(); i++) {
+				for (i = 0; i < win->_widgets.getSize(); i++) {
 					if (win->_widgets[i] == widget) {
 						found = true;
 						break;
@@ -266,7 +266,7 @@ bool UIObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 			// find by name
 			else {
 				const char *findName = val->getString();
-				for (i = 0; i < win->_widgets.size(); i++) {
+				for (i = 0; i < win->_widgets.getSize(); i++) {
 					if (scumm_stricmp(win->_widgets[i]->getName(), findName) == 0) {
 						found = true;
 						break;
@@ -276,7 +276,7 @@ bool UIObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 
 			if (found) {
 				bool done = false;
-				for (uint32 j = 0; j < win->_widgets.size(); j++) {
+				for (uint32 j = 0; j < win->_widgets.getSize(); j++) {
 					if (win->_widgets[j] == this) {
 						if (strcmp(name, "MoveAfter") == 0) {
 							i++;
@@ -285,8 +285,8 @@ bool UIObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 							j++;
 						}
 
-						win->_widgets.insert_at(i, this);
-						win->_widgets.remove_at(j);
+						win->_widgets.insertAt(i, this);
+						win->_widgets.removeAt(j);
 
 						done = true;
 						stack->pushBool(true);
@@ -315,10 +315,10 @@ bool UIObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 
 		if (_parent && _parent->_type == UI_WINDOW) {
 			UIWindow *win = (UIWindow *)_parent;
-			for (uint32 i = 0; i < win->_widgets.size(); i++) {
+			for (uint32 i = 0; i < win->_widgets.getSize(); i++) {
 				if (win->_widgets[i] == this) {
-					win->_widgets.remove_at(i);
-					win->_widgets.insert_at(0, this);
+					win->_widgets.removeAt(i);
+					win->_widgets.insertAt(0, this);
 					break;
 				}
 			}
@@ -338,9 +338,9 @@ bool UIObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 
 		if (_parent && _parent->_type == UI_WINDOW) {
 			UIWindow *win = (UIWindow *)_parent;
-			for (uint32 i = 0; i < win->_widgets.size(); i++) {
+			for (uint32 i = 0; i < win->_widgets.getSize(); i++) {
 				if (win->_widgets[i] == this) {
-					win->_widgets.remove_at(i);
+					win->_widgets.removeAt(i);
 					win->_widgets.add(this);
 					break;
 				}
@@ -440,10 +440,10 @@ ScValue *UIObject::scGetProperty(const Common::String &name) {
 		_scValue->setNULL();
 		if (_parent && _parent->_type == UI_WINDOW) {
 			UIWindow *win = (UIWindow *)_parent;
-			for (uint32 i = 0; i < win->_widgets.size(); i++) {
+			for (uint32 i = 0; i < win->_widgets.getSize(); i++) {
 				if (win->_widgets[i] == this) {
 					if (name == "NextSibling") {
-						if (i < win->_widgets.size() - 1) {
+						if (i < win->_widgets.getSize() - 1) {
 							_scValue->setNative(win->_widgets[i + 1], true);
 						}
 					} else {
diff --git a/engines/wintermute/ui/ui_text.cpp b/engines/wintermute/ui/ui_text.cpp
index ee9be63f01e..581b84cb074 100644
--- a/engines/wintermute/ui/ui_text.cpp
+++ b/engines/wintermute/ui/ui_text.cpp
@@ -389,7 +389,7 @@ bool UIText::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	buffer->putTextIndent(indent + 2, "\n");
 
 	// scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
diff --git a/engines/wintermute/ui/ui_window.cpp b/engines/wintermute/ui/ui_window.cpp
index 7b5b8360f3f..4097c97b051 100644
--- a/engines/wintermute/ui/ui_window.cpp
+++ b/engines/wintermute/ui/ui_window.cpp
@@ -111,10 +111,10 @@ void UIWindow::cleanup() {
 		delete _imageInactive;
 	}
 
-	for (uint32 i = 0; i < _widgets.size(); i++) {
+	for (uint32 i = 0; i < _widgets.getSize(); i++) {
 		delete _widgets[i];
 	}
-	_widgets.clear();
+	_widgets.removeAll();
 }
 
 
@@ -218,7 +218,7 @@ bool UIWindow::display(int offsetX, int offsetY) {
 		_gameRef->_renderer->addRectToList(new BaseActiveRect(_gameRef,  this, nullptr, _posX + offsetX, _posY + offsetY, _width, _height, 100, 100, false));
 	}
 
-	for (uint32 i = 0; i < _widgets.size(); i++) {
+	for (uint32 i = 0; i < _widgets.getSize(); i++) {
 		_widgets[i]->display(_posX + offsetX, _posY + offsetY);
 	}
 
@@ -718,7 +718,7 @@ bool UIWindow::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	buffer->putTextIndent(indent + 2, "\n");
 
 	// scripts
-	for (uint32 i = 0; i < _scripts.size(); i++) {
+	for (uint32 i = 0; i < _scripts.getSize(); i++) {
 		buffer->putTextIndent(indent + 2, "SCRIPT=\"%s\"\n", _scripts[i]->_filename);
 	}
 
@@ -728,7 +728,7 @@ bool UIWindow::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 	BaseClass::saveAsText(buffer, indent + 2);
 
 	// controls
-	for (uint32 i = 0; i < _widgets.size(); i++) {
+	for (uint32 i = 0; i < _widgets.getSize(); i++) {
 		_widgets[i]->saveAsText(buffer, indent + 2);
 	}
 
@@ -739,7 +739,7 @@ bool UIWindow::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 
 //////////////////////////////////////////////////////////////////////////
 bool UIWindow::enableWidget(const char *name, bool enable) {
-	for (uint32 i = 0; i < _widgets.size(); i++) {
+	for (uint32 i = 0; i < _widgets.getSize(); i++) {
 		if (scumm_stricmp(_widgets[i]->getName(), name) == 0) {
 			_widgets[i]->setDisabled(!enable);
 		}
@@ -750,7 +750,7 @@ bool UIWindow::enableWidget(const char *name, bool enable) {
 
 //////////////////////////////////////////////////////////////////////////
 bool UIWindow::showWidget(const char *name, bool visible) {
-	for (uint32 i = 0; i < _widgets.size(); i++) {
+	for (uint32 i = 0; i < _widgets.getSize(); i++) {
 		if (scumm_stricmp(_widgets[i]->getName(), name) == 0) {
 			_widgets[i]->setVisible(visible);
 		}
@@ -771,13 +771,13 @@ bool UIWindow::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		ScValue *val = stack->pop();
 		if (val->getType() == VAL_INT) {
 			int widget = val->getInt();
-			if (widget < 0 || widget >= (int32)_widgets.size()) {
+			if (widget < 0 || widget >= (int32)_widgets.getSize()) {
 				stack->pushNULL();
 			} else {
 				stack->pushNative(_widgets[widget], true);
 			}
 		} else {
-			for (uint32 i = 0; i < _widgets.size(); i++) {
+			for (uint32 i = 0; i < _widgets.getSize(); i++) {
 				if (scumm_stricmp(_widgets[i]->getName(), val->getString()) == 0) {
 					stack->pushNative(_widgets[i], true);
 					return STATUS_OK;
@@ -996,10 +996,10 @@ bool UIWindow::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		ScValue *val = stack->pop();
 		UIObject *obj = (UIObject *)val->getNative();
 
-		for (uint32 i = 0; i < _widgets.size(); i++) {
+		for (uint32 i = 0; i < _widgets.getSize(); i++) {
 			if (_widgets[i] == obj) {
 				delete _widgets[i];
-				_widgets.remove_at(i);
+				_widgets.removeAt(i);
 				if (val->getType() == VAL_VARIABLE_REF) {
 					val->setNULL();
 				}
@@ -1033,7 +1033,7 @@ ScValue *UIWindow::scGetProperty(const Common::String &name) {
 	// NumWidgets / NumControls (RO)
 	//////////////////////////////////////////////////////////////////////////
 	else if (name == "NumWidgets" || name == "NumControls") {
-		_scValue->setInt(_widgets.size());
+		_scValue->setInt(_widgets.getSize());
 		return _scValue;
 	}
 
@@ -1291,7 +1291,7 @@ bool UIWindow::persist(BasePersistenceManager *persistMgr) {
 bool UIWindow::moveFocus(bool forward) {
 	int i;
 	bool found = false;
-	for (i = 0; i < (int32)_widgets.size(); i++) {
+	for (i = 0; i < (int32)_widgets.getSize(); i++) {
 		if (_widgets[i] == _focusedWidget) {
 			found = true;
 			break;
@@ -1302,7 +1302,7 @@ bool UIWindow::moveFocus(bool forward) {
 	}
 
 	if (!_focusedWidget) {
-		if (_widgets.size() > 0) {
+		if (_widgets.getSize() > 0) {
 			i = 0;
 		} else {
 			return STATUS_OK;
@@ -1312,7 +1312,7 @@ bool UIWindow::moveFocus(bool forward) {
 	int numTries = 0;
 	bool done = false;
 
-	while (numTries <= (int32)_widgets.size()) {
+	while (numTries <= (int32)_widgets.getSize()) {
 		if (_widgets[i] != _focusedWidget && _widgets[i]->canFocus() && _widgets[i]->isVisible() && !_widgets[i]->isDisabled()) {
 			_focusedWidget = _widgets[i];
 			done = true;
@@ -1321,13 +1321,13 @@ bool UIWindow::moveFocus(bool forward) {
 
 		if (forward) {
 			i++;
-			if (i >= (int32)_widgets.size()) {
+			if (i >= (int32)_widgets.getSize()) {
 				i = 0;
 			}
 		} else {
 			i--;
 			if (i < 0) {
-				i = _widgets.size() - 1;
+				i = _widgets.getSize() - 1;
 			}
 		}
 		numTries++;
@@ -1411,7 +1411,7 @@ bool UIWindow::listen(BaseScriptHolder *param1, uint32 param2) {
 
 //////////////////////////////////////////////////////////////////////////
 void UIWindow::makeFreezable(bool freezable) {
-	for (uint32 i = 0; i < _widgets.size(); i++) {
+	for (uint32 i = 0; i < _widgets.getSize(); i++) {
 		_widgets[i]->makeFreezable(freezable);
 	}
 
@@ -1421,7 +1421,7 @@ void UIWindow::makeFreezable(bool freezable) {
 
 //////////////////////////////////////////////////////////////////////////
 bool UIWindow::getWindowObjects(BaseArray<UIObject *> &objects, bool interactiveOnly) {
-	for (uint32 i = 0; i < _widgets.size(); i++) {
+	for (uint32 i = 0; i < _widgets.getSize(); i++) {
 		UIObject *control = _widgets[i];
 		if (control->isDisabled() && interactiveOnly) {
 			continue;




More information about the Scummvm-git-logs mailing list