[Scummvm-git-logs] scummvm master -> f8c82f636852e44b8d837fc583d9318a447fc587

mduggan mgithub at guarana.org
Tue Apr 14 13:20:13 UTC 2020


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

Summary:
dc17a994b1 ULTIMA8: Replace usage of ODataSource with Common::WriteStream
143b593ac8 ULTIMA8: Replace usage of IDataSource with Common::ReadStream
f8c82f6368 ULTIMA8: Remove unused data source includes


Commit: dc17a994b1be0f442c50ffae1188d29882b77320
    https://github.com/scummvm/scummvm/commit/dc17a994b1be0f442c50ffae1188d29882b77320
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2020-04-14T14:14:34+09:00

Commit Message:
ULTIMA8: Replace usage of ODataSource with Common::WriteStream

Changed paths:
    engines/ultima/ultima8/audio/audio_process.cpp
    engines/ultima/ultima8/audio/audio_process.h
    engines/ultima/ultima8/audio/music_process.cpp
    engines/ultima/ultima8/audio/music_process.h
    engines/ultima/ultima8/games/game.h
    engines/ultima/ultima8/games/game_info.cpp
    engines/ultima/ultima8/games/game_info.h
    engines/ultima/ultima8/games/remorse_game.cpp
    engines/ultima/ultima8/games/remorse_game.h
    engines/ultima/ultima8/games/start_u8_process.cpp
    engines/ultima/ultima8/games/start_u8_process.h
    engines/ultima/ultima8/games/u8_game.cpp
    engines/ultima/ultima8/games/u8_game.h
    engines/ultima/ultima8/graphics/frame_id.cpp
    engines/ultima/ultima8/graphics/frame_id.h
    engines/ultima/ultima8/graphics/inverter_process.cpp
    engines/ultima/ultima8/graphics/inverter_process.h
    engines/ultima/ultima8/graphics/palette_fader_process.cpp
    engines/ultima/ultima8/graphics/palette_fader_process.h
    engines/ultima/ultima8/gumps/ask_gump.cpp
    engines/ultima/ultima8/gumps/ask_gump.h
    engines/ultima/ultima8/gumps/bark_gump.cpp
    engines/ultima/ultima8/gumps/bark_gump.h
    engines/ultima/ultima8/gumps/book_gump.cpp
    engines/ultima/ultima8/gumps/book_gump.h
    engines/ultima/ultima8/gumps/container_gump.cpp
    engines/ultima/ultima8/gumps/container_gump.h
    engines/ultima/ultima8/gumps/desktop_gump.cpp
    engines/ultima/ultima8/gumps/desktop_gump.h
    engines/ultima/ultima8/gumps/game_map_gump.cpp
    engines/ultima/ultima8/gumps/game_map_gump.h
    engines/ultima/ultima8/gumps/gump.cpp
    engines/ultima/ultima8/gumps/gump.h
    engines/ultima/ultima8/gumps/gump_notify_process.cpp
    engines/ultima/ultima8/gumps/gump_notify_process.h
    engines/ultima/ultima8/gumps/item_relative_gump.cpp
    engines/ultima/ultima8/gumps/item_relative_gump.h
    engines/ultima/ultima8/gumps/main_menu_process.cpp
    engines/ultima/ultima8/gumps/main_menu_process.h
    engines/ultima/ultima8/gumps/message_box_gump.cpp
    engines/ultima/ultima8/gumps/message_box_gump.h
    engines/ultima/ultima8/gumps/mini_stats_gump.cpp
    engines/ultima/ultima8/gumps/mini_stats_gump.h
    engines/ultima/ultima8/gumps/minimap_gump.cpp
    engines/ultima/ultima8/gumps/minimap_gump.h
    engines/ultima/ultima8/gumps/modal_gump.cpp
    engines/ultima/ultima8/gumps/modal_gump.h
    engines/ultima/ultima8/gumps/movie_gump.cpp
    engines/ultima/ultima8/gumps/movie_gump.h
    engines/ultima/ultima8/gumps/paged_gump.cpp
    engines/ultima/ultima8/gumps/paged_gump.h
    engines/ultima/ultima8/gumps/paperdoll_gump.cpp
    engines/ultima/ultima8/gumps/paperdoll_gump.h
    engines/ultima/ultima8/gumps/quit_gump.cpp
    engines/ultima/ultima8/gumps/quit_gump.h
    engines/ultima/ultima8/gumps/readable_gump.cpp
    engines/ultima/ultima8/gumps/readable_gump.h
    engines/ultima/ultima8/gumps/scroll_gump.cpp
    engines/ultima/ultima8/gumps/scroll_gump.h
    engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
    engines/ultima/ultima8/gumps/shape_viewer_gump.h
    engines/ultima/ultima8/gumps/slider_gump.cpp
    engines/ultima/ultima8/gumps/slider_gump.h
    engines/ultima/ultima8/gumps/target_gump.cpp
    engines/ultima/ultima8/gumps/target_gump.h
    engines/ultima/ultima8/gumps/widgets/button_widget.cpp
    engines/ultima/ultima8/gumps/widgets/button_widget.h
    engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
    engines/ultima/ultima8/gumps/widgets/sliding_widget.h
    engines/ultima/ultima8/gumps/widgets/text_widget.cpp
    engines/ultima/ultima8/gumps/widgets/text_widget.h
    engines/ultima/ultima8/kernel/delay_process.cpp
    engines/ultima/ultima8/kernel/delay_process.h
    engines/ultima/ultima8/kernel/kernel.cpp
    engines/ultima/ultima8/kernel/kernel.h
    engines/ultima/ultima8/kernel/object.cpp
    engines/ultima/ultima8/kernel/object.h
    engines/ultima/ultima8/kernel/object_manager.cpp
    engines/ultima/ultima8/kernel/object_manager.h
    engines/ultima/ultima8/kernel/process.cpp
    engines/ultima/ultima8/kernel/process.h
    engines/ultima/ultima8/misc/id_man.cpp
    engines/ultima/ultima8/misc/id_man.h
    engines/ultima/ultima8/ultima8.cpp
    engines/ultima/ultima8/ultima8.h
    engines/ultima/ultima8/usecode/bit_set.cpp
    engines/ultima/ultima8/usecode/bit_set.h
    engines/ultima/ultima8/usecode/uc_list.cpp
    engines/ultima/ultima8/usecode/uc_list.h
    engines/ultima/ultima8/usecode/uc_machine.cpp
    engines/ultima/ultima8/usecode/uc_machine.h
    engines/ultima/ultima8/usecode/uc_process.cpp
    engines/ultima/ultima8/usecode/uc_process.h
    engines/ultima/ultima8/usecode/uc_stack.cpp
    engines/ultima/ultima8/usecode/uc_stack.h
    engines/ultima/ultima8/world/actors/actor.cpp
    engines/ultima/ultima8/world/actors/actor.h
    engines/ultima/ultima8/world/actors/actor_anim_process.cpp
    engines/ultima/ultima8/world/actors/actor_anim_process.h
    engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
    engines/ultima/ultima8/world/actors/actor_bark_notify_process.h
    engines/ultima/ultima8/world/actors/ambush_process.cpp
    engines/ultima/ultima8/world/actors/ambush_process.h
    engines/ultima/ultima8/world/actors/animation_tracker.cpp
    engines/ultima/ultima8/world/actors/animation_tracker.h
    engines/ultima/ultima8/world/actors/avatar_death_process.cpp
    engines/ultima/ultima8/world/actors/avatar_death_process.h
    engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
    engines/ultima/ultima8/world/actors/avatar_gravity_process.h
    engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/avatar_mover_process.h
    engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
    engines/ultima/ultima8/world/actors/clear_feign_death_process.h
    engines/ultima/ultima8/world/actors/combat_process.cpp
    engines/ultima/ultima8/world/actors/combat_process.h
    engines/ultima/ultima8/world/actors/grant_peace_process.cpp
    engines/ultima/ultima8/world/actors/grant_peace_process.h
    engines/ultima/ultima8/world/actors/heal_process.cpp
    engines/ultima/ultima8/world/actors/heal_process.h
    engines/ultima/ultima8/world/actors/loiter_process.cpp
    engines/ultima/ultima8/world/actors/loiter_process.h
    engines/ultima/ultima8/world/actors/main_actor.cpp
    engines/ultima/ultima8/world/actors/main_actor.h
    engines/ultima/ultima8/world/actors/pathfinder_process.cpp
    engines/ultima/ultima8/world/actors/pathfinder_process.h
    engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h
    engines/ultima/ultima8/world/actors/resurrection_process.cpp
    engines/ultima/ultima8/world/actors/resurrection_process.h
    engines/ultima/ultima8/world/actors/scheduler_process.cpp
    engines/ultima/ultima8/world/actors/scheduler_process.h
    engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
    engines/ultima/ultima8/world/actors/targeted_anim_process.h
    engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
    engines/ultima/ultima8/world/actors/teleport_to_egg_process.h
    engines/ultima/ultima8/world/camera_process.cpp
    engines/ultima/ultima8/world/camera_process.h
    engines/ultima/ultima8/world/container.cpp
    engines/ultima/ultima8/world/container.h
    engines/ultima/ultima8/world/create_item_process.cpp
    engines/ultima/ultima8/world/create_item_process.h
    engines/ultima/ultima8/world/current_map.cpp
    engines/ultima/ultima8/world/current_map.h
    engines/ultima/ultima8/world/destroy_item_process.cpp
    engines/ultima/ultima8/world/destroy_item_process.h
    engines/ultima/ultima8/world/egg.cpp
    engines/ultima/ultima8/world/egg.h
    engines/ultima/ultima8/world/egg_hatcher_process.cpp
    engines/ultima/ultima8/world/egg_hatcher_process.h
    engines/ultima/ultima8/world/fireball_process.cpp
    engines/ultima/ultima8/world/fireball_process.h
    engines/ultima/ultima8/world/glob_egg.cpp
    engines/ultima/ultima8/world/glob_egg.h
    engines/ultima/ultima8/world/gravity_process.cpp
    engines/ultima/ultima8/world/gravity_process.h
    engines/ultima/ultima8/world/item.cpp
    engines/ultima/ultima8/world/item.h
    engines/ultima/ultima8/world/map.cpp
    engines/ultima/ultima8/world/map.h
    engines/ultima/ultima8/world/monster_egg.cpp
    engines/ultima/ultima8/world/monster_egg.h
    engines/ultima/ultima8/world/split_item_process.cpp
    engines/ultima/ultima8/world/split_item_process.h
    engines/ultima/ultima8/world/sprite_process.cpp
    engines/ultima/ultima8/world/sprite_process.h
    engines/ultima/ultima8/world/teleport_egg.cpp
    engines/ultima/ultima8/world/teleport_egg.h
    engines/ultima/ultima8/world/world.cpp
    engines/ultima/ultima8/world/world.h


diff --git a/engines/ultima/ultima8/audio/audio_process.cpp b/engines/ultima/ultima8/audio/audio_process.cpp
index d76c59dbc4..cf18f030d9 100644
--- a/engines/ultima/ultima8/audio/audio_process.cpp
+++ b/engines/ultima/ultima8/audio/audio_process.cpp
@@ -157,23 +157,23 @@ bool AudioProcess::continueSpeech(SampleInfo &si) {
 }
 
 
-void AudioProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void AudioProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeByte(static_cast<uint8>(_sampleInfo.size()));
+	ws->writeByte(static_cast<uint8>(_sampleInfo.size()));
 
 	Std::list<SampleInfo>::iterator it;
 	for (it = _sampleInfo.begin(); it != _sampleInfo.end(); ++it) {
-		ods->writeUint16LE(it->_sfxNum);
-		ods->writeUint16LE(it->_priority);
-		ods->writeUint16LE(it->_objId);
-		ods->writeUint16LE(it->_loops);
-		ods->writeUint32LE(it->_pitchShift);
-		ods->writeUint16LE(it->_volume);
+		ws->writeUint16LE(it->_sfxNum);
+		ws->writeUint16LE(it->_priority);
+		ws->writeUint16LE(it->_objId);
+		ws->writeUint16LE(it->_loops);
+		ws->writeUint32LE(it->_pitchShift);
+		ws->writeUint16LE(it->_volume);
 
 		if (it->_sfxNum == -1) { // Speech
-			ods->writeUint32LE(static_cast<uint32>(it->_barked.size()));
-			ods->write(it->_barked.c_str(), static_cast<uint32>(it->_barked.size()));
+			ws->writeUint32LE(static_cast<uint32>(it->_barked.size()));
+			ws->write(it->_barked.c_str(), static_cast<uint32>(it->_barked.size()));
 		}
 	}
 }
diff --git a/engines/ultima/ultima8/audio/audio_process.h b/engines/ultima/ultima8/audio/audio_process.h
index a8d13b9b87..1a0da7aacd 100644
--- a/engines/ultima/ultima8/audio/audio_process.h
+++ b/engines/ultima/ultima8/audio/audio_process.h
@@ -119,7 +119,7 @@ public:
 	bool loadData(IDataSource *ids, uint32 version);
 
 private:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 	uint32 _paused;
 
 	//! play the next speech sample for the text in this SampleInfo
diff --git a/engines/ultima/ultima8/audio/music_process.cpp b/engines/ultima/ultima8/audio/music_process.cpp
index 772be6a526..8b2497b233 100644
--- a/engines/ultima/ultima8/audio/music_process.cpp
+++ b/engines/ultima/ultima8/audio/music_process.cpp
@@ -227,12 +227,12 @@ void MusicProcess::run() {
 	}
 }
 
-void MusicProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void MusicProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint32LE(static_cast<uint32>(_trackState._wanted));
-	ods->writeUint32LE(static_cast<uint32>(_trackState._lastRequest));
-	ods->writeUint32LE(static_cast<uint32>(_trackState._queued));
+	ws->writeUint32LE(static_cast<uint32>(_trackState._wanted));
+	ws->writeUint32LE(static_cast<uint32>(_trackState._lastRequest));
+	ws->writeUint32LE(static_cast<uint32>(_trackState._queued));
 }
 
 bool MusicProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/audio/music_process.h b/engines/ultima/ultima8/audio/music_process.h
index e86c9ec948..bd6fbd01d3 100644
--- a/engines/ultima/ultima8/audio/music_process.h
+++ b/engines/ultima/ultima8/audio/music_process.h
@@ -59,7 +59,7 @@ public:
 	};
 
 private:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	//! Play a music track
 	//! \param track The track number to play. Pass 0 to stop music
diff --git a/engines/ultima/ultima8/games/game.h b/engines/ultima/ultima8/games/game.h
index b8c619c8eb..074eff7aa5 100644
--- a/engines/ultima/ultima8/games/game.h
+++ b/engines/ultima/ultima8/games/game.h
@@ -50,7 +50,7 @@ public:
 	virtual bool startInitialUsecode(int saveSlot = -1) = 0;
 
 	//! write game-specific savegame info (avatar stats, equipment, ...)
-	virtual void writeSaveInfo(ODataSource *ods) = 0;
+	virtual void writeSaveInfo(Common::WriteStream *ws) = 0;
 
 	virtual ProcId playIntroMovie(bool fade) = 0;
 	virtual ProcId playEndgameMovie(bool fade) = 0;
diff --git a/engines/ultima/ultima8/games/game_info.cpp b/engines/ultima/ultima8/games/game_info.cpp
index 1ce102ccf1..6631d333cf 100644
--- a/engines/ultima/ultima8/games/game_info.cpp
+++ b/engines/ultima/ultima8/games/game_info.cpp
@@ -169,7 +169,7 @@ bool GameInfo::match(GameInfo &other, bool ignoreMD5) const {
 	return (Std::memcmp(_md5, other._md5, 16) == 0);
 }
 
-void GameInfo::save(ODataSource *ods) {
+void GameInfo::save(Common::WriteStream *ws) {
 	unsigned int l = static_cast<unsigned int>(_language);
 	assert(l < (sizeof(gamelangs) / sizeof(gamelangs[0])) - 1);
 	unsigned int t = static_cast<unsigned int>(_type);
@@ -184,7 +184,7 @@ void GameInfo::save(ODataSource *ods) {
 	Std::string md5Str = getPrintableMD5();
 
 	Std::string d = game + "," + lang + "," + ver + "," + md5Str + "\n";
-	ods->write(d.c_str(), d.size());
+	ws->write(d.c_str(), d.size());
 }
 
 bool GameInfo::load(IDataSource *ids, uint32 version_) {
diff --git a/engines/ultima/ultima8/games/game_info.h b/engines/ultima/ultima8/games/game_info.h
index afb8f70e64..97497d4285 100644
--- a/engines/ultima/ultima8/games/game_info.h
+++ b/engines/ultima/ultima8/games/game_info.h
@@ -72,7 +72,7 @@ struct GameInfo {
 
 	bool match(GameInfo &other, bool ignoreMD5 = false) const;
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 	bool load(IDataSource *ids, uint32 /* version */);
 };
 
diff --git a/engines/ultima/ultima8/games/remorse_game.cpp b/engines/ultima/ultima8/games/remorse_game.cpp
index e3add69c06..24ece1acce 100644
--- a/engines/ultima/ultima8/games/remorse_game.cpp
+++ b/engines/ultima/ultima8/games/remorse_game.cpp
@@ -119,42 +119,42 @@ void RemorseGame::playCredits() {
 
 }
 
-void RemorseGame::writeSaveInfo(ODataSource *ods) {
+void RemorseGame::writeSaveInfo(Common::WriteStream *ws) {
 #if 0
 	MainActor *av = getMainActor();
 	int32 x, y, z;
 
 	const Std::string &avname = av->getName();
 	uint8 namelength = static_cast<uint8>(avname.size());
-	ods->writeByte(namelength);
+	ws->writeByte(namelength);
 	for (unsigned int i = 0; i < namelength; ++i)
-		ods->writeByte(static_cast<uint8>(avname[i]));
+		ws->writeByte(static_cast<uint8>(avname[i]));
 
 	av->getLocation(x, y, z);
-	ods->writeUint16LE(av->getMapNum());
-	ods->writeUint32LE(static_cast<uint32>(x));
-	ods->writeUint32LE(static_cast<uint32>(y));
-	ods->writeUint32LE(static_cast<uint32>(z));
-
-	ods->writeUint16LE(av->getStr());
-	ods->writeUint16LE(av->getInt());
-	ods->writeUint16LE(av->getDex());
-	ods->writeUint16LE(av->getHP());
-	ods->writeUint16LE(av->getMaxHP());
-	ods->writeUint16LE(av->getMana());
-	ods->writeUint16LE(av->getMaxMana());
-	ods->writeUint16LE(av->getArmourClass());
-	ods->writeUint16LE(av->getTotalWeight());
+	ws->writeUint16LE(av->getMapNum());
+	ws->writeUint32LE(static_cast<uint32>(x));
+	ws->writeUint32LE(static_cast<uint32>(y));
+	ws->writeUint32LE(static_cast<uint32>(z));
+
+	ws->writeUint16LE(av->getStr());
+	ws->writeUint16LE(av->getInt());
+	ws->writeUint16LE(av->getDex());
+	ws->writeUint16LE(av->getHP());
+	ws->writeUint16LE(av->getMaxHP());
+	ws->writeUint16LE(av->getMana());
+	ws->writeUint16LE(av->getMaxMana());
+	ws->writeUint16LE(av->getArmourClass());
+	ws->writeUint16LE(av->getTotalWeight());
 
 	for (unsigned int i = 1; i <= 6; i++) {
 		const uint16 objid = av->getEquip(i);
 		const Item *item = getItem(objid);
 		if (item) {
-			ods->writeUint32LE(item->getShape());
-			ods->writeUint32LE(item->getFrame());
+			ws->writeUint32LE(item->getShape());
+			ws->writeUint32LE(item->getFrame());
 		} else {
-			ods->writeUint32LE(0);
-			ods->writeUint32LE(0);
+			ws->writeUint32LE(0);
+			ws->writeUint32LE(0);
 		}
 	}
 #endif
diff --git a/engines/ultima/ultima8/games/remorse_game.h b/engines/ultima/ultima8/games/remorse_game.h
index 5dd054ab17..b4816b367f 100644
--- a/engines/ultima/ultima8/games/remorse_game.h
+++ b/engines/ultima/ultima8/games/remorse_game.h
@@ -43,7 +43,7 @@ public:
 	bool startInitialUsecode(int saveSlot = -1) override;
 
 	//! write game-specific savegame info (avatar stats, equipment, ...)
-	void writeSaveInfo(ODataSource *ods) override;
+	void writeSaveInfo(Common::WriteStream *ws) override;
 
 	ProcId playIntroMovie(bool fade) override;
 	ProcId playEndgameMovie(bool fade) override;
diff --git a/engines/ultima/ultima8/games/start_u8_process.cpp b/engines/ultima/ultima8/games/start_u8_process.cpp
index 57311fff74..11313f473e 100644
--- a/engines/ultima/ultima8/games/start_u8_process.cpp
+++ b/engines/ultima/ultima8/games/start_u8_process.cpp
@@ -111,10 +111,10 @@ void StartU8Process::run() {
 	terminate();
 }
 
-void StartU8Process::saveData(ODataSource *ods) {
+void StartU8Process::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN();
 
-	Process::saveData(ods);
+	Process::saveData(ws);
 }
 
 bool StartU8Process::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/games/start_u8_process.h b/engines/ultima/ultima8/games/start_u8_process.h
index bd36954573..1d56c42c8a 100644
--- a/engines/ultima/ultima8/games/start_u8_process.h
+++ b/engines/ultima/ultima8/games/start_u8_process.h
@@ -37,7 +37,7 @@ protected:
 	bool _skipStart;
 	int _saveSlot;
 
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 public:
 	StartU8Process(int saveSlot = -1);
 
diff --git a/engines/ultima/ultima8/games/u8_game.cpp b/engines/ultima/ultima8/games/u8_game.cpp
index b74e54dd6d..d0b2e55e31 100644
--- a/engines/ultima/ultima8/games/u8_game.cpp
+++ b/engines/ultima/ultima8/games/u8_game.cpp
@@ -240,41 +240,41 @@ void U8Game::playQuotes() {
 }
 
 
-void U8Game::writeSaveInfo(ODataSource *ods) {
+void U8Game::writeSaveInfo(Common::WriteStream *ws) {
 	MainActor *av = getMainActor();
 	int32 x, y, z;
 
 	const Std::string &avname = av->getName();
 	const uint8 namelength = static_cast<uint8>(avname.size());
-	ods->writeByte(namelength);
+	ws->writeByte(namelength);
 	for (unsigned int i = 0; i < namelength; ++i)
-		ods->writeByte(static_cast<uint8>(avname[i]));
+		ws->writeByte(static_cast<uint8>(avname[i]));
 
 	av->getLocation(x, y, z);
-	ods->writeUint16LE(av->getMapNum());
-	ods->writeUint32LE(static_cast<uint32>(x));
-	ods->writeUint32LE(static_cast<uint32>(y));
-	ods->writeUint32LE(static_cast<uint32>(z));
-
-	ods->writeUint16LE(av->getStr());
-	ods->writeUint16LE(av->getInt());
-	ods->writeUint16LE(av->getDex());
-	ods->writeUint16LE(av->getHP());
-	ods->writeUint16LE(av->getMaxHP());
-	ods->writeUint16LE(av->getMana());
-	ods->writeUint16LE(av->getMaxMana());
-	ods->writeUint16LE(av->getArmourClass());
-	ods->writeUint16LE(av->getTotalWeight());
+	ws->writeUint16LE(av->getMapNum());
+	ws->writeUint32LE(static_cast<uint32>(x));
+	ws->writeUint32LE(static_cast<uint32>(y));
+	ws->writeUint32LE(static_cast<uint32>(z));
+
+	ws->writeUint16LE(av->getStr());
+	ws->writeUint16LE(av->getInt());
+	ws->writeUint16LE(av->getDex());
+	ws->writeUint16LE(av->getHP());
+	ws->writeUint16LE(av->getMaxHP());
+	ws->writeUint16LE(av->getMana());
+	ws->writeUint16LE(av->getMaxMana());
+	ws->writeUint16LE(av->getArmourClass());
+	ws->writeUint16LE(av->getTotalWeight());
 
 	for (unsigned int i = 1; i <= 6; i++) {
 		uint16 objid = av->getEquip(i);
 		Item *item = getItem(objid);
 		if (item) {
-			ods->writeUint32LE(item->getShape());
-			ods->writeUint32LE(item->getFrame());
+			ws->writeUint32LE(item->getShape());
+			ws->writeUint32LE(item->getFrame());
 		} else {
-			ods->writeUint32LE(0);
-			ods->writeUint32LE(0);
+			ws->writeUint32LE(0);
+			ws->writeUint32LE(0);
 		}
 	}
 }
diff --git a/engines/ultima/ultima8/games/u8_game.h b/engines/ultima/ultima8/games/u8_game.h
index 594f7c802f..c1d4517b4e 100644
--- a/engines/ultima/ultima8/games/u8_game.h
+++ b/engines/ultima/ultima8/games/u8_game.h
@@ -45,7 +45,7 @@ public:
 	bool startInitialUsecode(int saveSlot) override;
 
 	//! write game-specific savegame info (avatar stats, equipment, ...)
-	void writeSaveInfo(ODataSource *ods) override;
+	void writeSaveInfo(Common::WriteStream *ws) override;
 
 	ProcId playIntroMovie(bool fade) override;
 	ProcId playEndgameMovie(bool fade) override;
diff --git a/engines/ultima/ultima8/graphics/frame_id.cpp b/engines/ultima/ultima8/graphics/frame_id.cpp
index 22be5d4cf4..b6504663a6 100644
--- a/engines/ultima/ultima8/graphics/frame_id.cpp
+++ b/engines/ultima/ultima8/graphics/frame_id.cpp
@@ -29,10 +29,10 @@
 namespace Ultima {
 namespace Ultima8 {
 
-void FrameID::save(ODataSource *ods) {
-	ods->writeUint16LE(_flexId);
-	ods->writeUint32LE(_shapeNum);
-	ods->writeUint32LE(_frameNum);
+void FrameID::save(Common::WriteStream *ws) {
+	ws->writeUint16LE(_flexId);
+	ws->writeUint32LE(_shapeNum);
+	ws->writeUint32LE(_frameNum);
 }
 
 bool FrameID::load(IDataSource *ids) {
diff --git a/engines/ultima/ultima8/graphics/frame_id.h b/engines/ultima/ultima8/graphics/frame_id.h
index 1e6098d6c7..ed8232f22c 100644
--- a/engines/ultima/ultima8/graphics/frame_id.h
+++ b/engines/ultima/ultima8/graphics/frame_id.h
@@ -41,7 +41,7 @@ struct FrameID {
 		: _flexId(flex), _shapeNum(shape), _frameNum(frame) {
 	}
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 	bool load(IDataSource *ids);
 };
 
diff --git a/engines/ultima/ultima8/graphics/inverter_process.cpp b/engines/ultima/ultima8/graphics/inverter_process.cpp
index 59b96f64b6..dc0d272ccb 100644
--- a/engines/ultima/ultima8/graphics/inverter_process.cpp
+++ b/engines/ultima/ultima8/graphics/inverter_process.cpp
@@ -76,10 +76,10 @@ void InverterProcess::run() {
 	}
 }
 
-void InverterProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void InverterProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint16LE(static_cast<uint16>(_targetState));
+	ws->writeUint16LE(static_cast<uint16>(_targetState));
 }
 
 bool InverterProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/graphics/inverter_process.h b/engines/ultima/ultima8/graphics/inverter_process.h
index 497d971082..412ae025ff 100644
--- a/engines/ultima/ultima8/graphics/inverter_process.h
+++ b/engines/ultima/ultima8/graphics/inverter_process.h
@@ -51,7 +51,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	static InverterProcess *_inverter;
 	unsigned int _targetState;
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.cpp b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
index 2775c3a4d3..52ade45055 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.cpp
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
@@ -98,17 +98,17 @@ void PaletteFaderProcess::run() {
 	if (!_counter--) terminate();
 }
 
-void PaletteFaderProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void PaletteFaderProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint32LE(static_cast<uint32>(_priority));
-	ods->writeUint32LE(static_cast<uint32>(_counter));
-	ods->writeUint32LE(static_cast<uint32>(_maxCounter));
+	ws->writeUint32LE(static_cast<uint32>(_priority));
+	ws->writeUint32LE(static_cast<uint32>(_counter));
+	ws->writeUint32LE(static_cast<uint32>(_maxCounter));
 	unsigned int i;
 	for (i = 0; i < 12; ++i)
-		ods->writeUint16LE(_oldMatrix[i]);
+		ws->writeUint16LE(_oldMatrix[i]);
 	for (i = 0; i < 12; ++i)
-		ods->writeUint16LE(_newMatrix[i]);
+		ws->writeUint16LE(_newMatrix[i]);
 }
 
 bool PaletteFaderProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.h b/engines/ultima/ultima8/graphics/palette_fader_process.h
index 9e6c9aa0e5..4ade1c711d 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.h
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.h
@@ -59,7 +59,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/ask_gump.cpp b/engines/ultima/ultima8/gumps/ask_gump.cpp
index 0679337795..9ff2410be2 100644
--- a/engines/ultima/ultima8/gumps/ask_gump.cpp
+++ b/engines/ultima/ultima8/gumps/ask_gump.cpp
@@ -117,10 +117,10 @@ void AskGump::ChildNotify(Gump *child, uint32 message) {
 	}
 }
 
-void AskGump::saveData(ODataSource *ods) {
-	ItemRelativeGump::saveData(ods);
+void AskGump::saveData(Common::WriteStream *ws) {
+	ItemRelativeGump::saveData(ws);
 
-	_answers->save(ods);
+	_answers->save(ws);
 }
 
 bool AskGump::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/ask_gump.h b/engines/ultima/ultima8/gumps/ask_gump.h
index 03984447b2..dcf8c77c30 100644
--- a/engines/ultima/ultima8/gumps/ask_gump.h
+++ b/engines/ultima/ultima8/gumps/ask_gump.h
@@ -48,7 +48,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/bark_gump.cpp b/engines/ultima/ultima8/gumps/bark_gump.cpp
index be348fe3ff..94cecb0bd2 100644
--- a/engines/ultima/ultima8/gumps/bark_gump.cpp
+++ b/engines/ultima/ultima8/gumps/bark_gump.cpp
@@ -178,16 +178,16 @@ Gump *BarkGump::OnMouseDown(int button, int32 mx, int32 my) {
 	return this;
 }
 
-void BarkGump::saveData(ODataSource *ods) {
-	ItemRelativeGump::saveData(ods);
-
-	ods->writeUint32LE(static_cast<uint32>(_counter));
-	ods->writeUint16LE(_textWidget);
-	ods->writeUint32LE(_speechShapeNum);
-	ods->writeUint32LE(_speechLength);
-	ods->writeUint32LE(_totalTextHeight);
-	ods->writeUint32LE(static_cast<uint32>(_barked.size()));
-	ods->write(_barked.c_str(), _barked.size());
+void BarkGump::saveData(Common::WriteStream *ws) {
+	ItemRelativeGump::saveData(ws);
+
+	ws->writeUint32LE(static_cast<uint32>(_counter));
+	ws->writeUint16LE(_textWidget);
+	ws->writeUint32LE(_speechShapeNum);
+	ws->writeUint32LE(_speechLength);
+	ws->writeUint32LE(_totalTextHeight);
+	ws->writeUint32LE(static_cast<uint32>(_barked.size()));
+	ws->write(_barked.c_str(), _barked.size());
 }
 
 bool BarkGump::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/bark_gump.h b/engines/ultima/ultima8/gumps/bark_gump.h
index 630fc291f4..63833436d4 100644
--- a/engines/ultima/ultima8/gumps/bark_gump.h
+++ b/engines/ultima/ultima8/gumps/bark_gump.h
@@ -64,7 +64,7 @@ protected:
 public:
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/book_gump.cpp b/engines/ultima/ultima8/gumps/book_gump.cpp
index 6e6fc5e266..833003bfe5 100644
--- a/engines/ultima/ultima8/gumps/book_gump.cpp
+++ b/engines/ultima/ultima8/gumps/book_gump.cpp
@@ -110,7 +110,7 @@ uint32 BookGump::I_readBook(const uint8 *args, unsigned int /*argsize*/) {
 	return gump->GetNotifyProcess()->getPid();
 }
 
-void BookGump::saveData(ODataSource *ods) {
+void BookGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/book_gump.h b/engines/ultima/ultima8/gumps/book_gump.h
index b625a6093b..e1b1e3edfb 100644
--- a/engines/ultima/ultima8/gumps/book_gump.h
+++ b/engines/ultima/ultima8/gumps/book_gump.h
@@ -58,7 +58,7 @@ protected:
 public:
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/container_gump.cpp b/engines/ultima/ultima8/gumps/container_gump.cpp
index 25a3292686..93b48287d7 100644
--- a/engines/ultima/ultima8/gumps/container_gump.cpp
+++ b/engines/ultima/ultima8/gumps/container_gump.cpp
@@ -534,13 +534,13 @@ void ContainerGump::DropItem(Item *item, int mx, int my) {
 	}
 }
 
-void ContainerGump::saveData(ODataSource *ods) {
-	ItemRelativeGump::saveData(ods);
+void ContainerGump::saveData(Common::WriteStream *ws) {
+	ItemRelativeGump::saveData(ws);
 
-	ods->writeUint32LE(static_cast<uint32>(_itemArea.x));
-	ods->writeUint32LE(static_cast<uint32>(_itemArea.y));
-	ods->writeUint32LE(static_cast<uint32>(_itemArea.w));
-	ods->writeUint32LE(static_cast<uint32>(_itemArea.h));
+	ws->writeUint32LE(static_cast<uint32>(_itemArea.x));
+	ws->writeUint32LE(static_cast<uint32>(_itemArea.y));
+	ws->writeUint32LE(static_cast<uint32>(_itemArea.w));
+	ws->writeUint32LE(static_cast<uint32>(_itemArea.h));
 }
 
 bool ContainerGump::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/container_gump.h b/engines/ultima/ultima8/gumps/container_gump.h
index 79aedabe13..0bcddf0af8 100644
--- a/engines/ultima/ultima8/gumps/container_gump.h
+++ b/engines/ultima/ultima8/gumps/container_gump.h
@@ -75,7 +75,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	void GetItemLocation(int32 lerp_factor) override;
 
diff --git a/engines/ultima/ultima8/gumps/desktop_gump.cpp b/engines/ultima/ultima8/gumps/desktop_gump.cpp
index 4cc5c498d9..f96a102308 100644
--- a/engines/ultima/ultima8/gumps/desktop_gump.cpp
+++ b/engines/ultima/ultima8/gumps/desktop_gump.cpp
@@ -111,7 +111,7 @@ void DesktopGump::RenderSurfaceChanged() {
 	Gump::RenderSurfaceChanged();
 }
 
-void DesktopGump::saveData(ODataSource *ods) {
+void DesktopGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save DesktopGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/desktop_gump.h b/engines/ultima/ultima8/gumps/desktop_gump.h
index 40a58d5539..e15b41fcff 100644
--- a/engines/ultima/ultima8/gumps/desktop_gump.h
+++ b/engines/ultima/ultima8/gumps/desktop_gump.h
@@ -54,7 +54,7 @@ public:
 	}
 
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 	void RenderSurfaceChanged() override;
 };
 
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index 92ddecd221..809fd934c2 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -577,7 +577,7 @@ void GameMapGump::RenderSurfaceChanged() {
 	Gump::RenderSurfaceChanged();
 }
 
-void GameMapGump::saveData(ODataSource *ods) {
+void GameMapGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save GameMapGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.h b/engines/ultima/ultima8/gumps/game_map_gump.h
index a0176d2f61..54592f9a7e 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.h
+++ b/engines/ultima/ultima8/gumps/game_map_gump.h
@@ -87,7 +87,7 @@ public:
 	void        RenderSurfaceChanged() override;
 
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	bool _displayDragging;
 	uint32 _draggingShape;
diff --git a/engines/ultima/ultima8/gumps/gump.cpp b/engines/ultima/ultima8/gumps/gump.cpp
index fe47eb1ba1..37ec3dba33 100644
--- a/engines/ultima/ultima8/gumps/gump.cpp
+++ b/engines/ultima/ultima8/gumps/gump.cpp
@@ -781,35 +781,35 @@ bool Gump::mustSave(bool toplevel) const {
 	return true;
 }
 
-void Gump::saveData(ODataSource *ods) {
-	Object::saveData(ods);
-
-	ods->writeUint16LE(_owner);
-	ods->writeUint32LE(static_cast<uint32>(_x));
-	ods->writeUint32LE(static_cast<uint32>(_y));
-	ods->writeUint32LE(static_cast<uint32>(_dims.x));
-	ods->writeUint32LE(static_cast<uint32>(_dims.y));
-	ods->writeUint32LE(static_cast<uint32>(_dims.w));
-	ods->writeUint32LE(static_cast<uint32>(_dims.h));
-	ods->writeUint32LE(_flags);
-	ods->writeUint32LE(static_cast<uint32>(_layer));
-	ods->writeUint32LE(static_cast<uint32>(_index));
+void Gump::saveData(Common::WriteStream *ws) {
+	Object::saveData(ws);
+
+	ws->writeUint16LE(_owner);
+	ws->writeUint32LE(static_cast<uint32>(_x));
+	ws->writeUint32LE(static_cast<uint32>(_y));
+	ws->writeUint32LE(static_cast<uint32>(_dims.x));
+	ws->writeUint32LE(static_cast<uint32>(_dims.y));
+	ws->writeUint32LE(static_cast<uint32>(_dims.w));
+	ws->writeUint32LE(static_cast<uint32>(_dims.h));
+	ws->writeUint32LE(_flags);
+	ws->writeUint32LE(static_cast<uint32>(_layer));
+	ws->writeUint32LE(static_cast<uint32>(_index));
 
 	uint16 flex = 0;
 	uint32 shapenum = 0;
 	if (_shape) {
 		_shape->getShapeId(flex, shapenum);
 	}
-	ods->writeUint16LE(flex);
-	ods->writeUint32LE(shapenum);
+	ws->writeUint16LE(flex);
+	ws->writeUint32LE(shapenum);
 
-	ods->writeUint32LE(_frameNum);
+	ws->writeUint32LE(_frameNum);
 	if (_focusChild)
-		ods->writeUint16LE(_focusChild->getObjId());
+		ws->writeUint16LE(_focusChild->getObjId());
 	else
-		ods->writeUint16LE(0);
-	ods->writeUint16LE(_notifier);
-	ods->writeUint32LE(_processResult);
+		ws->writeUint16LE(0);
+	ws->writeUint16LE(_notifier);
+	ws->writeUint32LE(_processResult);
 
 	unsigned int childcount = 0;
 	Std::list<Gump *>::iterator it;
@@ -819,11 +819,11 @@ void Gump::saveData(ODataSource *ods) {
 	}
 
 	// write children:
-	ods->writeUint32LE(childcount);
+	ws->writeUint32LE(childcount);
 	for (it = _children.begin(); it != _children.end(); ++it) {
 		if (!(*it)->mustSave(false)) continue;
 
-		(*it)->save(ods);
+		(*it)->save(ws);
 	}
 }
 
diff --git a/engines/ultima/ultima8/gumps/gump.h b/engines/ultima/ultima8/gumps/gump.h
index 59fd92ba0a..25e4637e93 100644
--- a/engines/ultima/ultima8/gumps/gump.h
+++ b/engines/ultima/ultima8/gumps/gump.h
@@ -462,7 +462,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/gump_notify_process.cpp b/engines/ultima/ultima8/gumps/gump_notify_process.cpp
index 8956f8e121..2681aed87c 100644
--- a/engines/ultima/ultima8/gumps/gump_notify_process.cpp
+++ b/engines/ultima/ultima8/gumps/gump_notify_process.cpp
@@ -74,10 +74,10 @@ void GumpNotifyProcess::dumpInfo() const {
 	pout << " gump: " << _gump << Std::endl;
 }
 
-void GumpNotifyProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void GumpNotifyProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint16LE(_gump);
+	ws->writeUint16LE(_gump);
 }
 
 bool GumpNotifyProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/gump_notify_process.h b/engines/ultima/ultima8/gumps/gump_notify_process.h
index fa66e04b74..56183d3b00 100644
--- a/engines/ultima/ultima8/gumps/gump_notify_process.h
+++ b/engines/ultima/ultima8/gumps/gump_notify_process.h
@@ -56,7 +56,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/item_relative_gump.cpp b/engines/ultima/ultima8/gumps/item_relative_gump.cpp
index 54465a0156..1d729a9a4e 100644
--- a/engines/ultima/ultima8/gumps/item_relative_gump.cpp
+++ b/engines/ultima/ultima8/gumps/item_relative_gump.cpp
@@ -171,8 +171,8 @@ void ItemRelativeGump::Move(int32 x, int32 y) {
 	_y += y;
 }
 
-void ItemRelativeGump::saveData(ODataSource *ods) {
-	Gump::saveData(ods);
+void ItemRelativeGump::saveData(Common::WriteStream *ws) {
+	Gump::saveData(ws);
 }
 
 bool ItemRelativeGump::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/item_relative_gump.h b/engines/ultima/ultima8/gumps/item_relative_gump.h
index 3a7b5f24f8..9e9ab6ace0 100644
--- a/engines/ultima/ultima8/gumps/item_relative_gump.h
+++ b/engines/ultima/ultima8/gumps/item_relative_gump.h
@@ -55,7 +55,7 @@ public:
 
 	bool                loadData(IDataSource *ids, uint32 version);
 protected:
-	void        saveData(ODataSource *ods) override;
+	void        saveData(Common::WriteStream *ws) override;
 
 	virtual void        GetItemLocation(int32 lerp_factor);
 
diff --git a/engines/ultima/ultima8/gumps/main_menu_process.cpp b/engines/ultima/ultima8/gumps/main_menu_process.cpp
index 5553b5abeb..fc21acac3e 100644
--- a/engines/ultima/ultima8/gumps/main_menu_process.cpp
+++ b/engines/ultima/ultima8/gumps/main_menu_process.cpp
@@ -54,10 +54,10 @@ void MainMenuProcess::run() {
 	terminate();
 }
 
-void MainMenuProcess::saveData(ODataSource *ods) {
+void MainMenuProcess::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN();
 
-	Process::saveData(ods);
+	Process::saveData(ws);
 }
 
 bool MainMenuProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/main_menu_process.h b/engines/ultima/ultima8/gumps/main_menu_process.h
index ac1922a39d..3dc76c79ba 100644
--- a/engines/ultima/ultima8/gumps/main_menu_process.h
+++ b/engines/ultima/ultima8/gumps/main_menu_process.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	bool _init;
 };
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.cpp b/engines/ultima/ultima8/gumps/message_box_gump.cpp
index 166f5201d8..0e6d058763 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.cpp
+++ b/engines/ultima/ultima8/gumps/message_box_gump.cpp
@@ -167,7 +167,7 @@ ProcId MessageBoxGump::Show(Std::string _title, Std::string _message, uint32 tit
 	return gump->GetNotifyProcess()->getPid();
 }
 
-void MessageBoxGump::saveData(ODataSource *ods) {
+void MessageBoxGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.h b/engines/ultima/ultima8/gumps/message_box_gump.h
index 09a176bb5c..a96f82dbdf 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.h
+++ b/engines/ultima/ultima8/gumps/message_box_gump.h
@@ -66,7 +66,7 @@ public:
 	void ChildNotify(Gump *child, uint32 msg) override;
 
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/mini_stats_gump.cpp b/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
index 52893a1d80..be2f2fdce1 100644
--- a/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
+++ b/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
@@ -126,8 +126,8 @@ void MiniStatsGump::OnMouseDouble(int button, int32 mx, int32 my) {
 	Close();
 }
 
-void MiniStatsGump::saveData(ODataSource *ods) {
-	Gump::saveData(ods);
+void MiniStatsGump::saveData(Common::WriteStream *ws) {
+	Gump::saveData(ws);
 }
 
 bool MiniStatsGump::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/mini_stats_gump.h b/engines/ultima/ultima8/gumps/mini_stats_gump.h
index be9151c9ca..6feb8c9643 100644
--- a/engines/ultima/ultima8/gumps/mini_stats_gump.h
+++ b/engines/ultima/ultima8/gumps/mini_stats_gump.h
@@ -52,7 +52,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.cpp b/engines/ultima/ultima8/gumps/minimap_gump.cpp
index 71ed552846..70a089e62b 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.cpp
+++ b/engines/ultima/ultima8/gumps/minimap_gump.cpp
@@ -195,8 +195,8 @@ uint32 MiniMapGump::sampleAtPoint(int x, int y, CurrentMap *currentmap) {
 	}
 }
 
-void MiniMapGump::saveData(ODataSource *ods) {
-	Gump::saveData(ods);
+void MiniMapGump::saveData(Common::WriteStream *ws) {
+	Gump::saveData(ws);
 }
 
 bool MiniMapGump::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.h b/engines/ultima/ultima8/gumps/minimap_gump.h
index 713a4044d7..9d31a2186c 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.h
+++ b/engines/ultima/ultima8/gumps/minimap_gump.h
@@ -53,7 +53,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/modal_gump.cpp b/engines/ultima/ultima8/gumps/modal_gump.cpp
index 917082ee95..3419a5eee6 100644
--- a/engines/ultima/ultima8/gumps/modal_gump.cpp
+++ b/engines/ultima/ultima8/gumps/modal_gump.cpp
@@ -98,7 +98,7 @@ Gump *ModalGump::OnMouseDown(int button, int32 mx, int32 my) {
 }
 
 
-void ModalGump::saveData(ODataSource *ods) {
+void ModalGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/modal_gump.h b/engines/ultima/ultima8/gumps/modal_gump.h
index 329ba70718..27b8c72c38 100644
--- a/engines/ultima/ultima8/gumps/modal_gump.h
+++ b/engines/ultima/ultima8/gumps/modal_gump.h
@@ -51,7 +51,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/movie_gump.cpp b/engines/ultima/ultima8/gumps/movie_gump.cpp
index 9989ebea15..f0cd018d17 100644
--- a/engines/ultima/ultima8/gumps/movie_gump.cpp
+++ b/engines/ultima/ultima8/gumps/movie_gump.cpp
@@ -116,7 +116,7 @@ bool MovieGump::loadData(IDataSource *ids) {
 	return false;
 }
 
-void MovieGump::saveData(ODataSource *ods) {
+void MovieGump::saveData(Common::WriteStream *ws) {
 
 }
 
diff --git a/engines/ultima/ultima8/gumps/movie_gump.h b/engines/ultima/ultima8/gumps/movie_gump.h
index 7674780da1..76ec7c0f90 100644
--- a/engines/ultima/ultima8/gumps/movie_gump.h
+++ b/engines/ultima/ultima8/gumps/movie_gump.h
@@ -56,7 +56,7 @@ public:
 
 	bool loadData(IDataSource *ids);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	SKFPlayer *_player;
 };
diff --git a/engines/ultima/ultima8/gumps/paged_gump.cpp b/engines/ultima/ultima8/gumps/paged_gump.cpp
index 70bf894d8d..f549027956 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paged_gump.cpp
@@ -160,7 +160,7 @@ bool PagedGump::loadData(IDataSource *ids) {
 	return false;
 }
 
-void PagedGump::saveData(ODataSource *ods) {
+void PagedGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/paged_gump.h b/engines/ultima/ultima8/gumps/paged_gump.h
index ffb374ab65..081058562b 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.h
+++ b/engines/ultima/ultima8/gumps/paged_gump.h
@@ -55,7 +55,7 @@ public:
 
 	bool loadData(IDataSource *ids);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 	int _leftOff, _rightOff, _topOff, _gumpShape;
 	Std::vector<Gump *> _gumps;
 	Gump *_nextButton;
diff --git a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
index e09d80ec5b..86e8a43004 100644
--- a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
@@ -409,10 +409,10 @@ void PaperdollGump::ChildNotify(Gump *child, uint32 message) {
 }
 
 
-void PaperdollGump::saveData(ODataSource *ods) {
-	ContainerGump::saveData(ods);
+void PaperdollGump::saveData(Common::WriteStream *ws) {
+	ContainerGump::saveData(ws);
 
-	ods->writeUint16LE(_statButtonId);
+	ws->writeUint16LE(_statButtonId);
 }
 
 bool PaperdollGump::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/paperdoll_gump.h b/engines/ultima/ultima8/gumps/paperdoll_gump.h
index 4a9cb52a13..5172985ac9 100644
--- a/engines/ultima/ultima8/gumps/paperdoll_gump.h
+++ b/engines/ultima/ultima8/gumps/paperdoll_gump.h
@@ -65,7 +65,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	//! Paint the stats
 	void PaintStats(RenderSurface *, int32 lerp_factor);
diff --git a/engines/ultima/ultima8/gumps/quit_gump.cpp b/engines/ultima/ultima8/gumps/quit_gump.cpp
index c518c7cb5c..549720714f 100644
--- a/engines/ultima/ultima8/gumps/quit_gump.cpp
+++ b/engines/ultima/ultima8/gumps/quit_gump.cpp
@@ -146,7 +146,7 @@ bool QuitGump::loadData(IDataSource *ids) {
 	return true;
 }
 
-void QuitGump::saveData(ODataSource *ods) {
+void QuitGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/quit_gump.h b/engines/ultima/ultima8/gumps/quit_gump.h
index 3dafdcd96a..afe5c80330 100644
--- a/engines/ultima/ultima8/gumps/quit_gump.h
+++ b/engines/ultima/ultima8/gumps/quit_gump.h
@@ -48,7 +48,7 @@ public:
 
 	bool loadData(IDataSource *ids);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 	ObjId _yesWidget, _noWidget;
 };
 
diff --git a/engines/ultima/ultima8/gumps/readable_gump.cpp b/engines/ultima/ultima8/gumps/readable_gump.cpp
index ba11a79c36..0ed190bc11 100644
--- a/engines/ultima/ultima8/gumps/readable_gump.cpp
+++ b/engines/ultima/ultima8/gumps/readable_gump.cpp
@@ -122,7 +122,7 @@ uint32 ReadableGump::I_readPlaque(const uint8 *args, unsigned int /*argsize*/) {
 	return gump->GetNotifyProcess()->getPid();
 }
 
-void ReadableGump::saveData(ODataSource *ods) {
+void ReadableGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/readable_gump.h b/engines/ultima/ultima8/gumps/readable_gump.h
index 22aed6926f..04b1406944 100644
--- a/engines/ultima/ultima8/gumps/readable_gump.h
+++ b/engines/ultima/ultima8/gumps/readable_gump.h
@@ -53,7 +53,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/scroll_gump.cpp b/engines/ultima/ultima8/gumps/scroll_gump.cpp
index 151cbae502..117294af04 100644
--- a/engines/ultima/ultima8/gumps/scroll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/scroll_gump.cpp
@@ -98,7 +98,7 @@ uint32 ScrollGump::I_readScroll(const uint8 *args, unsigned int /*argsize*/) {
 	return gump->GetNotifyProcess()->getPid();
 }
 
-void ScrollGump::saveData(ODataSource *ods) {
+void ScrollGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/scroll_gump.h b/engines/ultima/ultima8/gumps/scroll_gump.h
index 20f11be434..0f0d422ea7 100644
--- a/engines/ultima/ultima8/gumps/scroll_gump.h
+++ b/engines/ultima/ultima8/gumps/scroll_gump.h
@@ -57,7 +57,7 @@ protected:
 public:
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
index 459a641448..7b7bf07b65 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
@@ -279,7 +279,7 @@ bool ShapeViewerGump::loadData(IDataSource *ids) {
 	return false;
 }
 
-void ShapeViewerGump::saveData(ODataSource *ods) {
+void ShapeViewerGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.h b/engines/ultima/ultima8/gumps/shape_viewer_gump.h
index fdfbc0e9c0..bb53a19ce6 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.h
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.h
@@ -53,7 +53,7 @@ public:
 
 	bool loadData(IDataSource *ids);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	Std::vector<Std::pair<Std::string, ShapeArchive *> > _flexes;
 	unsigned int _curFlex;
diff --git a/engines/ultima/ultima8/gumps/slider_gump.cpp b/engines/ultima/ultima8/gumps/slider_gump.cpp
index 16b7c6504b..61c879296f 100644
--- a/engines/ultima/ultima8/gumps/slider_gump.cpp
+++ b/engines/ultima/ultima8/gumps/slider_gump.cpp
@@ -242,7 +242,7 @@ void SliderGump::setUsecodeNotify(UCProcess *ucp) {
 	_usecodeNotifyPID = ucp->getPid();
 }
 
-void SliderGump::saveData(ODataSource *ods) {
+void SliderGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/slider_gump.h b/engines/ultima/ultima8/gumps/slider_gump.h
index 2c15a6b6d6..34171ba92a 100644
--- a/engines/ultima/ultima8/gumps/slider_gump.h
+++ b/engines/ultima/ultima8/gumps/slider_gump.h
@@ -57,7 +57,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	int16 _min;
 	int16 _max;
diff --git a/engines/ultima/ultima8/gumps/target_gump.cpp b/engines/ultima/ultima8/gumps/target_gump.cpp
index 2523a1c49a..757c1725f3 100644
--- a/engines/ultima/ultima8/gumps/target_gump.cpp
+++ b/engines/ultima/ultima8/gumps/target_gump.cpp
@@ -109,7 +109,7 @@ uint32 TargetGump::I_target(const uint8 * /*args*/, unsigned int /*argsize*/) {
 
 
 
-void TargetGump::saveData(ODataSource *ods) {
+void TargetGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
diff --git a/engines/ultima/ultima8/gumps/target_gump.h b/engines/ultima/ultima8/gumps/target_gump.h
index 865ab9108a..157eddf0c5 100644
--- a/engines/ultima/ultima8/gumps/target_gump.h
+++ b/engines/ultima/ultima8/gumps/target_gump.h
@@ -51,7 +51,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 private:
 	bool _targetTracing;
diff --git a/engines/ultima/ultima8/gumps/widgets/button_widget.cpp b/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
index fabe8b8e69..88a3b460b0 100644
--- a/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
@@ -179,7 +179,7 @@ void ButtonWidget::OnMouseLeft() {
 	}
 }
 
-void ButtonWidget::saveData(ODataSource *ods) {
+void ButtonWidget::saveData(Common::WriteStream *ws) {
 	// HACK ALERT
 	int w = 0, h = 0;
 	if (_textWidget != 0) {
@@ -189,7 +189,7 @@ void ButtonWidget::saveData(ODataSource *ods) {
 		_dims.h = _origH;
 	}
 
-	Gump::saveData(ods);
+	Gump::saveData(ws);
 
 	// HACK ALERT
 	if (_textWidget != 0) {
@@ -202,23 +202,23 @@ void ButtonWidget::saveData(ODataSource *ods) {
 	if (_shapeUp) {
 		_shapeUp->getShapeId(flex, shapenum);
 	}
-	ods->writeUint16LE(flex);
-	ods->writeUint32LE(shapenum);
-	ods->writeUint32LE(_frameNumUp);
+	ws->writeUint16LE(flex);
+	ws->writeUint32LE(shapenum);
+	ws->writeUint32LE(_frameNumUp);
 
 	flex = 0;
 	shapenum = 0;
 	if (_shapeDown) {
 		_shapeDown->getShapeId(flex, shapenum);
 	}
-	ods->writeUint16LE(flex);
-	ods->writeUint32LE(shapenum);
-	ods->writeUint32LE(_frameNumDown);
-	ods->writeUint16LE(_textWidget);
-	ods->writeUint32LE(_mouseOverBlendCol);
+	ws->writeUint16LE(flex);
+	ws->writeUint32LE(shapenum);
+	ws->writeUint32LE(_frameNumDown);
+	ws->writeUint16LE(_textWidget);
+	ws->writeUint32LE(_mouseOverBlendCol);
 
 	uint8 m = (_mouseOver ? 1 : 0);
-	ods->writeByte(m);
+	ws->writeByte(m);
 }
 
 bool ButtonWidget::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/widgets/button_widget.h b/engines/ultima/ultima8/gumps/widgets/button_widget.h
index 8b916654e4..26d1da838e 100644
--- a/engines/ultima/ultima8/gumps/widgets/button_widget.h
+++ b/engines/ultima/ultima8/gumps/widgets/button_widget.h
@@ -80,7 +80,7 @@ protected:
 public:
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp b/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
index 686688b005..489feadd93 100644
--- a/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
@@ -59,8 +59,8 @@ uint16 SlidingWidget::TraceObjId(int32 mx, int32 my) {
 		return 0;
 }
 
-void SlidingWidget::saveData(ODataSource *ods) {
-	Gump::saveData(ods);
+void SlidingWidget::saveData(Common::WriteStream *ws) {
+	Gump::saveData(ws);
 }
 
 bool SlidingWidget::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/widgets/sliding_widget.h b/engines/ultima/ultima8/gumps/widgets/sliding_widget.h
index 0e9ea2e14f..5a8b653601 100644
--- a/engines/ultima/ultima8/gumps/widgets/sliding_widget.h
+++ b/engines/ultima/ultima8/gumps/widgets/sliding_widget.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
index 28380f3e97..2257b0e812 100644
--- a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
@@ -214,19 +214,19 @@ Gump *TextWidget::OnMouseMotion(int32 mx, int32 my) {
 }
 
 
-void TextWidget::saveData(ODataSource *ods) {
-	Gump::saveData(ods);
-
-	ods->writeByte(_gameFont ? 1 : 0);
-	ods->writeUint32LE(static_cast<uint32>(_fontNum));
-	ods->writeUint32LE(_blendColour);
-	ods->writeUint32LE(static_cast<uint32>(_currentStart));
-	ods->writeUint32LE(static_cast<uint32>(_currentEnd));
-	ods->writeUint32LE(static_cast<uint32>(_targetWidth));
-	ods->writeUint32LE(static_cast<uint32>(_targetHeight));
-	ods->writeUint16LE(static_cast<uint16>(_textAlign));
-	ods->writeUint32LE(_text.size());
-	ods->write(_text.c_str(), _text.size());
+void TextWidget::saveData(Common::WriteStream *ws) {
+	Gump::saveData(ws);
+
+	ws->writeByte(_gameFont ? 1 : 0);
+	ws->writeUint32LE(static_cast<uint32>(_fontNum));
+	ws->writeUint32LE(_blendColour);
+	ws->writeUint32LE(static_cast<uint32>(_currentStart));
+	ws->writeUint32LE(static_cast<uint32>(_currentEnd));
+	ws->writeUint32LE(static_cast<uint32>(_targetWidth));
+	ws->writeUint32LE(static_cast<uint32>(_targetHeight));
+	ws->writeUint16LE(static_cast<uint16>(_textAlign));
+	ws->writeUint32LE(_text.size());
+	ws->write(_text.c_str(), _text.size());
 }
 
 bool TextWidget::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/gumps/widgets/text_widget.h b/engines/ultima/ultima8/gumps/widgets/text_widget.h
index 6e598cef04..892d491ae4 100644
--- a/engines/ultima/ultima8/gumps/widgets/text_widget.h
+++ b/engines/ultima/ultima8/gumps/widgets/text_widget.h
@@ -102,7 +102,7 @@ public:
 	bool loadData(IDataSource *ids, uint32 version);
 
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/kernel/delay_process.cpp b/engines/ultima/ultima8/kernel/delay_process.cpp
index ac3f209296..ff250dcf4e 100644
--- a/engines/ultima/ultima8/kernel/delay_process.cpp
+++ b/engines/ultima/ultima8/kernel/delay_process.cpp
@@ -59,9 +59,9 @@ bool DelayProcess::loadData(IDataSource *ids, uint32 version) {
 	return true;
 }
 
-void DelayProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
-	ods->writeUint32LE(static_cast<uint32>(_count));
+void DelayProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
+	ws->writeUint32LE(static_cast<uint32>(_count));
 }
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/kernel/delay_process.h b/engines/ultima/ultima8/kernel/delay_process.h
index 0dba472b1b..ea08d7b006 100644
--- a/engines/ultima/ultima8/kernel/delay_process.h
+++ b/engines/ultima/ultima8/kernel/delay_process.h
@@ -46,7 +46,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	int _count;
 };
diff --git a/engines/ultima/ultima8/kernel/kernel.cpp b/engines/ultima/ultima8/kernel/kernel.cpp
index 5f6ca93aac..5a6d06e8e8 100644
--- a/engines/ultima/ultima8/kernel/kernel.cpp
+++ b/engines/ultima/ultima8/kernel/kernel.cpp
@@ -321,12 +321,12 @@ void Kernel::killProcessesNotOfType(ObjId objid, uint16 processtype, bool fail)
 	}
 }
 
-void Kernel::save(ODataSource *ods) {
-	ods->writeUint32LE(_frameNum);
-	_pIDs->save(ods);
-	ods->writeUint32LE(_processes.size());
+void Kernel::save(Common::WriteStream *ws) {
+	ws->writeUint32LE(_frameNum);
+	_pIDs->save(ws);
+	ws->writeUint32LE(_processes.size());
 	for (ProcessIterator it = _processes.begin(); it != _processes.end(); ++it) {
-		(*it)->save(ods);
+		(*it)->save(ws);
 	}
 }
 
diff --git a/engines/ultima/ultima8/kernel/kernel.h b/engines/ultima/ultima8/kernel/kernel.h
index 75da62deb0..c99e09f54c 100644
--- a/engines/ultima/ultima8/kernel/kernel.h
+++ b/engines/ultima/ultima8/kernel/kernel.h
@@ -98,7 +98,7 @@ public:
 	void kernelStats();
 	void processTypes();
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 	bool load(IDataSource *ids, uint32 version);
 
 	void pause() {
diff --git a/engines/ultima/ultima8/kernel/object.cpp b/engines/ultima/ultima8/kernel/object.cpp
index 7975ad611a..42e87eacb5 100644
--- a/engines/ultima/ultima8/kernel/object.cpp
+++ b/engines/ultima/ultima8/kernel/object.cpp
@@ -71,24 +71,24 @@ ProcId Object::callUsecode(uint16 classid, uint16 offset,
 }
 
 
-void Object::save(ODataSource *ods) {
-	writeObjectHeader(ods);
-	saveData(ods); // virtual
+void Object::save(Common::WriteStream *ws) {
+	writeObjectHeader(ws);
+	saveData(ws); // virtual
 }
 
-void Object::writeObjectHeader(ODataSource *ods) const {
+void Object::writeObjectHeader(Common::WriteStream *ws) const {
 	const char *cname = GetClassType()._className; // note: virtual
 	uint16 clen = strlen(cname);
 
-	ods->writeUint16LE(clen);
-	ods->write(cname, clen);
+	ws->writeUint16LE(clen);
+	ws->write(cname, clen);
 }
 
-void Object::saveData(ODataSource *ods) {
+void Object::saveData(Common::WriteStream *ws) {
 	// note: Object is unversioned. If we ever want to version it,
 	// increase the global savegame version
 
-	ods->writeUint16LE(_objId);
+	ws->writeUint16LE(_objId);
 }
 
 bool Object::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/kernel/object.h b/engines/ultima/ultima8/kernel/object.h
index dfc631f013..61f0d29e7b 100644
--- a/engines/ultima/ultima8/kernel/object.h
+++ b/engines/ultima/ultima8/kernel/object.h
@@ -60,7 +60,7 @@ public:
 	virtual void dumpInfo() const;
 
 	//! save this object
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 
 	//! Spawn a usecode function on this object
 	//! \param classid The usecode class to run
@@ -76,10 +76,10 @@ public:
 
 protected:
 	//! write the Object savegame header (mainly consisting of the classname)
-	void writeObjectHeader(ODataSource *ods) const;
+	void writeObjectHeader(Common::WriteStream *ws) const;
 
 	//! save the actual Object data
-	virtual void saveData(ODataSource *ods);
+	virtual void saveData(Common::WriteStream *ws);
 
 	ObjId _objId;
 };
diff --git a/engines/ultima/ultima8/kernel/object_manager.cpp b/engines/ultima/ultima8/kernel/object_manager.cpp
index 2dce59685f..fdb7b6b767 100644
--- a/engines/ultima/ultima8/kernel/object_manager.cpp
+++ b/engines/ultima/ultima8/kernel/object_manager.cpp
@@ -211,9 +211,9 @@ void ObjectManager::allow64kObjects() {
 }
 
 
-void ObjectManager::save(ODataSource *ods) {
-	_objIDs->save(ods);
-	_actorIDs->save(ods);
+void ObjectManager::save(Common::WriteStream *ws) {
+	_objIDs->save(ws);
+	_actorIDs->save(ws);
 
 	for (unsigned int i = 0; i < _objects.size(); ++i) {
 		Object *object = _objects[i];
@@ -229,10 +229,10 @@ void ObjectManager::save(ODataSource *ods) {
 		// FIXME: This leaks _objIDs. See comment in ObjectManager::load().
 		if (gump && !gump->mustSave(true)) continue;
 
-		object->save(ods);
+		object->save(ws);
 	}
 
-	ods->writeUint16LE(0);
+	ws->writeUint16LE(0);
 }
 
 
diff --git a/engines/ultima/ultima8/kernel/object_manager.h b/engines/ultima/ultima8/kernel/object_manager.h
index 68d171ed00..aae02a3dbe 100644
--- a/engines/ultima/ultima8/kernel/object_manager.h
+++ b/engines/ultima/ultima8/kernel/object_manager.h
@@ -64,7 +64,7 @@ public:
 	void objectStats();
 	void objectTypes();
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 	bool load(IDataSource *ids, uint32 version);
 
 	Object *loadObject(IDataSource *ids, uint32 version);
diff --git a/engines/ultima/ultima8/kernel/process.cpp b/engines/ultima/ultima8/kernel/process.cpp
index 03ebe33890..6221ba7806 100644
--- a/engines/ultima/ultima8/kernel/process.cpp
+++ b/engines/ultima/ultima8/kernel/process.cpp
@@ -121,28 +121,28 @@ void Process::dumpInfo() const {
 	g_debugger->debugPrintf("%s\n", info.c_str());
 }
 
-void Process::save(ODataSource *ods) {
-	writeProcessHeader(ods);
-	saveData(ods); // virtual
+void Process::save(Common::WriteStream *ws) {
+	writeProcessHeader(ws);
+	saveData(ws); // virtual
 }
 
-void Process::writeProcessHeader(ODataSource *ods) {
+void Process::writeProcessHeader(Common::WriteStream *ws) {
 	const char *cname = GetClassType()._className; // virtual
 	uint16 clen = strlen(cname);
 
-	ods->writeUint16LE(clen);
-	ods->write(cname, clen);
+	ws->writeUint16LE(clen);
+	ws->write(cname, clen);
 }
 
-void Process::saveData(ODataSource *ods) {
-	ods->writeUint16LE(_pid);
-	ods->writeUint32LE(_flags);
-	ods->writeUint16LE(_itemNum);
-	ods->writeUint16LE(_type);
-	ods->writeUint32LE(_result);
-	ods->writeUint32LE(static_cast<uint32>(_waiting.size()));
+void Process::saveData(Common::WriteStream *ws) {
+	ws->writeUint16LE(_pid);
+	ws->writeUint32LE(_flags);
+	ws->writeUint16LE(_itemNum);
+	ws->writeUint16LE(_type);
+	ws->writeUint32LE(_result);
+	ws->writeUint32LE(static_cast<uint32>(_waiting.size()));
 	for (unsigned int i = 0; i < _waiting.size(); ++i)
-		ods->writeUint16LE(_waiting[i]);
+		ws->writeUint16LE(_waiting[i]);
 }
 
 bool Process::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/kernel/process.h b/engines/ultima/ultima8/kernel/process.h
index d3cdadd8f6..81bab455b0 100644
--- a/engines/ultima/ultima8/kernel/process.h
+++ b/engines/ultima/ultima8/kernel/process.h
@@ -115,16 +115,16 @@ public:
 	virtual void dumpInfo() const;
 
 	//! save this process
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ods);
 
 	//! load Process data
 	bool loadData(IDataSource *ids, uint32 version);
 
 protected:
 	//! save the Process data
-	virtual void saveData(ODataSource *ods);
+	virtual void saveData(Common::WriteStream *ws);
 
-	void writeProcessHeader(ODataSource *ods);
+	void writeProcessHeader(Common::WriteStream *ods);
 
 	//! process id
 	ProcId _pid;
diff --git a/engines/ultima/ultima8/misc/id_man.cpp b/engines/ultima/ultima8/misc/id_man.cpp
index da9ee898b6..39a03d9dd8 100644
--- a/engines/ultima/ultima8/misc/id_man.cpp
+++ b/engines/ultima/ultima8/misc/id_man.cpp
@@ -183,18 +183,18 @@ void idMan::clearID(uint16 id) {
 	assert(!_first || _last);
 }
 
-void idMan::save(ODataSource *ods) {
-	ods->writeUint16LE(_begin);
-	ods->writeUint16LE(_end);
-	ods->writeUint16LE(_maxEnd);
-	ods->writeUint16LE(_startCount);
-	ods->writeUint16LE(_usedCount);
+void idMan::save(Common::WriteStream *ws) {
+	ws->writeUint16LE(_begin);
+	ws->writeUint16LE(_end);
+	ws->writeUint16LE(_maxEnd);
+	ws->writeUint16LE(_startCount);
+	ws->writeUint16LE(_usedCount);
 	uint16 cur = _first;
 	while (cur) {
-		ods->writeUint16LE(cur);
+		ws->writeUint16LE(cur);
 		cur = _ids[cur];
 	}
-	ods->writeUint16LE(0); // terminator
+	ws->writeUint16LE(0); // terminator
 }
 
 bool idMan::load(IDataSource *ds, uint32 version) {
diff --git a/engines/ultima/ultima8/misc/id_man.h b/engines/ultima/ultima8/misc/id_man.h
index 80778d0772..5da79164be 100644
--- a/engines/ultima/ultima8/misc/id_man.h
+++ b/engines/ultima/ultima8/misc/id_man.h
@@ -96,7 +96,7 @@ public:
 		_maxEnd = maxEnd;
 	}
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 	bool load(IDataSource *ids, uint32 version);
 
 private:
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index d099bf4d08..0a06ddcaca 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -910,24 +910,24 @@ void Ultima8Engine::handleDelayedEvents() {
 
 }
 
-void Ultima8Engine::writeSaveInfo(ODataSource *ods) {
+void Ultima8Engine::writeSaveInfo(Common::WriteStream *ws) {
 	TimeDate timeInfo;
 	g_system->getTimeAndDate(timeInfo);
 
-	ods->writeUint16LE(static_cast<uint16>(timeInfo.tm_year + 1900));
-	ods->writeByte(static_cast<uint8>(timeInfo.tm_mon + 1));
-	ods->writeByte(static_cast<uint8>(timeInfo.tm_mday));
-	ods->writeByte(static_cast<uint8>(timeInfo.tm_hour));
-	ods->writeByte(static_cast<uint8>(timeInfo.tm_min));
-	ods->writeByte(static_cast<uint8>(timeInfo.tm_sec));
-	ods->writeUint32LE(_saveCount);
-	ods->writeUint32LE(getGameTimeInSeconds());
+	ws->writeUint16LE(static_cast<uint16>(timeInfo.tm_year + 1900));
+	ws->writeByte(static_cast<uint8>(timeInfo.tm_mon + 1));
+	ws->writeByte(static_cast<uint8>(timeInfo.tm_mday));
+	ws->writeByte(static_cast<uint8>(timeInfo.tm_hour));
+	ws->writeByte(static_cast<uint8>(timeInfo.tm_min));
+	ws->writeByte(static_cast<uint8>(timeInfo.tm_sec));
+	ws->writeUint32LE(_saveCount);
+	ws->writeUint32LE(getGameTimeInSeconds());
 
 	uint8 c = (_hasCheated ? 1 : 0);
-	ods->writeByte(c);
+	ws->writeByte(c);
 
 	// write _game-specific info
-	_game->writeSaveInfo(ods);
+	_game->writeSaveInfo(ws);
 }
 
 bool Ultima8Engine::canSaveGameStateCurrently(bool isAutosave) {
@@ -1377,24 +1377,24 @@ uint32 Ultima8Engine::getGameTimeInSeconds() {
 }
 
 
-void Ultima8Engine::save(ODataSource *ods) {
+void Ultima8Engine::save(Common::WriteStream *ws) {
 	uint8 s = (_avatarInStasis ? 1 : 0);
-	ods->writeByte(s);
+	ws->writeByte(s);
 
 	int32 absoluteTime = Kernel::get_instance()->getFrameNum() + _timeOffset;
-	ods->writeUint32LE(static_cast<uint32>(absoluteTime));
-	ods->writeUint16LE(_avatarMoverProcess->getPid());
+	ws->writeUint32LE(static_cast<uint32>(absoluteTime));
+	ws->writeUint16LE(_avatarMoverProcess->getPid());
 
 	Palette *pal = PaletteManager::get_instance()->getPalette(PaletteManager::Pal_Game);
-	for (int i = 0; i < 12; i++) ods->writeUint16LE(pal->_matrix[i]);
-	ods->writeUint16LE(pal->_transform);
+	for (int i = 0; i < 12; i++) ws->writeUint16LE(pal->_matrix[i]);
+	ws->writeUint16LE(pal->_transform);
 
-	ods->writeUint16LE(static_cast<uint16>(_inversion));
+	ws->writeUint16LE(static_cast<uint16>(_inversion));
 
-	ods->writeUint32LE(_saveCount);
+	ws->writeUint32LE(_saveCount);
 
 	uint8 c = (_hasCheated ? 1 : 0);
-	ods->writeByte(c);
+	ws->writeByte(c);
 }
 
 bool Ultima8Engine::load(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h
index 7ecca762f4..c8c3327d12 100644
--- a/engines/ultima/ultima8/ultima8.h
+++ b/engines/ultima/ultima8/ultima8.h
@@ -143,10 +143,10 @@ private:
 
 private:
 	//! write savegame info (time, ..., game-specifics)
-	void writeSaveInfo(ODataSource *ods);
+	void writeSaveInfo(Common::WriteStream *ws);
 
 	//! save CoreApp/Ultima8Engine data
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 
 	//! load CoreApp/Ultima8Engine data
 	bool load(IDataSource *ids, uint32 version);
diff --git a/engines/ultima/ultima8/usecode/bit_set.cpp b/engines/ultima/ultima8/usecode/bit_set.cpp
index 6dcf0cdb3b..070ce47b3a 100644
--- a/engines/ultima/ultima8/usecode/bit_set.cpp
+++ b/engines/ultima/ultima8/usecode/bit_set.cpp
@@ -115,9 +115,9 @@ void BitSet::setBits(unsigned int pos, unsigned int n, uint32 bits) {
 	_data[lastbyte] |= (bits >> shift) & lastmask;
 }
 
-void BitSet::save(ODataSource *ods) {
-	ods->writeUint32LE(_size);
-	ods->write(_data, _bytes);
+void BitSet::save(Common::WriteStream *ws) {
+	ws->writeUint32LE(_size);
+	ws->write(_data, _bytes);
 }
 
 bool BitSet::load(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/usecode/bit_set.h b/engines/ultima/ultima8/usecode/bit_set.h
index ecda097085..b2e642338e 100644
--- a/engines/ultima/ultima8/usecode/bit_set.h
+++ b/engines/ultima/ultima8/usecode/bit_set.h
@@ -51,7 +51,7 @@ public:
 	//! \param bits the value to set
 	void setBits(unsigned int pos, unsigned int n, uint32 bits);
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 	bool load(IDataSource *ids, uint32 version);
 
 private:
diff --git a/engines/ultima/ultima8/usecode/uc_list.cpp b/engines/ultima/ultima8/usecode/uc_list.cpp
index ce0d4344d2..70ac554aa5 100644
--- a/engines/ultima/ultima8/usecode/uc_list.cpp
+++ b/engines/ultima/ultima8/usecode/uc_list.cpp
@@ -116,10 +116,10 @@ void UCList::removeString(uint16 s, bool nodel) {
 	}
 }
 
-void UCList::save(ODataSource *ods) {
-	ods->writeUint32LE(_elementSize);
-	ods->writeUint32LE(_size);
-	ods->write(&(_elements[0]), _size * _elementSize);
+void UCList::save(Common::WriteStream *ws) {
+	ws->writeUint32LE(_elementSize);
+	ws->writeUint32LE(_size);
+	ws->write(&(_elements[0]), _size * _elementSize);
 }
 
 
diff --git a/engines/ultima/ultima8/usecode/uc_list.h b/engines/ultima/ultima8/usecode/uc_list.h
index 3ed5763fdb..99d00d55cc 100644
--- a/engines/ultima/ultima8/usecode/uc_list.h
+++ b/engines/ultima/ultima8/usecode/uc_list.h
@@ -158,7 +158,7 @@ public:
 
 	uint16 getStringIndex(uint32 index) const;
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 	bool load(IDataSource *ids, uint32 version);
 
 private:
diff --git a/engines/ultima/ultima8/usecode/uc_machine.cpp b/engines/ultima/ultima8/usecode/uc_machine.cpp
index 0abe2a67ea..d58f319b16 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.cpp
+++ b/engines/ultima/ultima8/usecode/uc_machine.cpp
@@ -2231,30 +2231,30 @@ void UCMachine::usecodeStats() const {
 #endif
 }
 
-void UCMachine::saveGlobals(ODataSource *ods) {
-	_globals->save(ods);
+void UCMachine::saveGlobals(Common::WriteStream *ws) {
+	_globals->save(ws);
 }
 
-void UCMachine::saveStrings(ODataSource *ods) {
-	_stringIDs->save(ods);
-	ods->writeUint32LE(static_cast<uint32>(_stringHeap.size()));
+void UCMachine::saveStrings(Common::WriteStream *ws) {
+	_stringIDs->save(ws);
+	ws->writeUint32LE(static_cast<uint32>(_stringHeap.size()));
 
 	Std::map<uint16, Std::string>::iterator iter;
 	for (iter = _stringHeap.begin(); iter != _stringHeap.end(); ++iter) {
-		ods->writeUint16LE((*iter)._key);
-		ods->writeUint32LE((*iter)._value.size());
-		ods->write((*iter)._value.c_str(), (*iter)._value.size());
+		ws->writeUint16LE((*iter)._key);
+		ws->writeUint32LE((*iter)._value.size());
+		ws->write((*iter)._value.c_str(), (*iter)._value.size());
 	}
 }
 
-void UCMachine::saveLists(ODataSource *ods) {
-	_listIDs->save(ods);
-	ods->writeUint32LE(_listHeap.size());
+void UCMachine::saveLists(Common::WriteStream *ws) {
+	_listIDs->save(ws);
+	ws->writeUint32LE(_listHeap.size());
 
 	Std::map<uint16, UCList *>::iterator iter;
 	for (iter = _listHeap.begin(); iter != _listHeap.end(); ++iter) {
-		ods->writeUint16LE((*iter)._key);
-		(*iter)._value->save(ods);
+		ws->writeUint16LE((*iter)._key);
+		(*iter)._value->save(ws);
 	}
 }
 
diff --git a/engines/ultima/ultima8/usecode/uc_machine.h b/engines/ultima/ultima8/usecode/uc_machine.h
index 6370540962..80a19dbf5a 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.h
+++ b/engines/ultima/ultima8/usecode/uc_machine.h
@@ -76,9 +76,9 @@ public:
 	bool assignPointer(uint32 ptr, const uint8 *data, uint32 size);
 	bool dereferencePointer(uint32 ptr, uint8 *data, uint32 size);
 
-	void saveGlobals(ODataSource *ods);
-	void saveStrings(ODataSource *ods);
-	void saveLists(ODataSource *ods);
+	void saveGlobals(Common::WriteStream *ws);
+	void saveStrings(Common::WriteStream *ws);
+	void saveLists(Common::WriteStream *ws);
 
 	bool loadGlobals(IDataSource *ids, uint32 version);
 	bool loadStrings(IDataSource *ids, uint32 version);
diff --git a/engines/ultima/ultima8/usecode/uc_process.cpp b/engines/ultima/ultima8/usecode/uc_process.cpp
index bdfe83906e..ac5fefbf1f 100644
--- a/engines/ultima/ultima8/usecode/uc_process.cpp
+++ b/engines/ultima/ultima8/usecode/uc_process.cpp
@@ -160,20 +160,20 @@ void UCProcess::dumpInfo() const {
 	}
 }
 
-void UCProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
-
-	ods->writeUint16LE(_bp);
-	ods->writeUint16LE(_classId);
-	ods->writeUint16LE(_ip);
-	ods->writeUint32LE(_temp32);
-	ods->writeUint32LE(static_cast<uint32>(_freeOnTerminate.size()));
+void UCProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
+
+	ws->writeUint16LE(_bp);
+	ws->writeUint16LE(_classId);
+	ws->writeUint16LE(_ip);
+	ws->writeUint32LE(_temp32);
+	ws->writeUint32LE(static_cast<uint32>(_freeOnTerminate.size()));
 	Std::list<Std::pair<uint16, int> >::iterator iter;
 	for (iter = _freeOnTerminate.begin(); iter != _freeOnTerminate.end(); ++iter) {
-		ods->writeUint16LE(iter->first);
-		ods->writeUint32LE(static_cast<uint32>(iter->second));
+		ws->writeUint16LE(iter->first);
+		ws->writeUint32LE(static_cast<uint32>(iter->second));
 	}
-	_stack.save(ods);
+	_stack.save(ws);
 }
 
 bool UCProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/usecode/uc_process.h b/engines/ultima/ultima8/usecode/uc_process.h
index bf472d10d9..d2331b3947 100644
--- a/engines/ultima/ultima8/usecode/uc_process.h
+++ b/engines/ultima/ultima8/usecode/uc_process.h
@@ -62,7 +62,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	void load(uint16 classid_, uint16 offset_, uint32 this_ptr = 0,
 	          int thissize = 0, const uint8 *args = 0, int argsize = 0);
diff --git a/engines/ultima/ultima8/usecode/uc_stack.cpp b/engines/ultima/ultima8/usecode/uc_stack.cpp
index 3506e61f9e..2de9795e57 100644
--- a/engines/ultima/ultima8/usecode/uc_stack.cpp
+++ b/engines/ultima/ultima8/usecode/uc_stack.cpp
@@ -28,11 +28,11 @@
 namespace Ultima {
 namespace Ultima8 {
 
-void UCStack::save(ODataSource *ods) {
-	ods->writeUint32LE(_size);
-	ods->writeUint32LE(getSP());
+void UCStack::save(Common::WriteStream *ws) {
+	ws->writeUint32LE(_size);
+	ws->writeUint32LE(getSP());
 
-	ods->write(_bufPtr, stacksize());
+	ws->write(_bufPtr, stacksize());
 }
 
 bool UCStack::load(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/usecode/uc_stack.h b/engines/ultima/ultima8/usecode/uc_stack.h
index 56236b3426..fdb8cb6935 100644
--- a/engines/ultima/ultima8/usecode/uc_stack.h
+++ b/engines/ultima/ultima8/usecode/uc_stack.h
@@ -173,7 +173,7 @@ public:
 
 #ifdef USE_DYNAMIC_UCSTACK
 #define UCStack DynamicUCStack
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ods);
 	bool load(IDataSource *ids, uint32 version);
 #endif
 };
@@ -185,7 +185,7 @@ public:
 	UCStack() : BaseUCStack(0x1000, _bufArray) { }
 	~UCStack() override { }
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ods);
 	bool load(IDataSource *ids, uint32 version);
 };
 #endif
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index ab0ab880cb..07d9b2a055 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -1073,21 +1073,21 @@ void Actor::dumpInfo() const {
 	     << Std::dec << Std::endl;
 }
 
-void Actor::saveData(ODataSource *ods) {
-	Container::saveData(ods);
-	ods->writeUint16LE(_strength);
-	ods->writeUint16LE(_dexterity);
-	ods->writeUint16LE(_intelligence);
-	ods->writeUint16LE(_hitPoints);
-	ods->writeUint16LE(_mana);
-	ods->writeUint16LE(_alignment);
-	ods->writeUint16LE(_enemyAlignment);
-	ods->writeUint16LE(_lastAnim);
-	ods->writeUint16LE(_animFrame);
-	ods->writeUint16LE(_direction);
-	ods->writeUint32LE(_fallStart);
-	ods->writeUint32LE(_actorFlags);
-	ods->writeByte(_unk0C);
+void Actor::saveData(Common::WriteStream *ws) {
+	Container::saveData(ws);
+	ws->writeUint16LE(_strength);
+	ws->writeUint16LE(_dexterity);
+	ws->writeUint16LE(_intelligence);
+	ws->writeUint16LE(_hitPoints);
+	ws->writeUint16LE(_mana);
+	ws->writeUint16LE(_alignment);
+	ws->writeUint16LE(_enemyAlignment);
+	ws->writeUint16LE(_lastAnim);
+	ws->writeUint16LE(_animFrame);
+	ws->writeUint16LE(_direction);
+	ws->writeUint32LE(_fallStart);
+	ws->writeUint32LE(_actorFlags);
+	ws->writeByte(_unk0C);
 }
 
 bool Actor::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/actor.h b/engines/ultima/ultima8/world/actors/actor.h
index bcb057ebd9..13326dffac 100644
--- a/engines/ultima/ultima8/world/actors/actor.h
+++ b/engines/ultima/ultima8/world/actors/actor.h
@@ -292,7 +292,7 @@ public:
 	};
 
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	int16 _strength;
 	int16 _dexterity;
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
index d60561da3c..dcdc29aefc 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
@@ -631,26 +631,26 @@ void ActorAnimProcess::dumpInfo() const {
 	pout << "_action: " << _action << ", _dir: " << _dir << Std::endl;
 }
 
-void ActorAnimProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void ActorAnimProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
 	uint8 ff = _firstFrame ? 1 : 0;
-	ods->writeByte(ff);
+	ws->writeByte(ff);
 	uint8 ab = _animAborted ? 1 : 0;
-	ods->writeByte(ab);
+	ws->writeByte(ab);
 	uint8 attacked = _attackedSomething ? 1 : 0;
-	ods->writeByte(attacked);
-	ods->writeByte(static_cast<uint8>(_dir));
-	ods->writeUint16LE(static_cast<uint16>(_action));
-	ods->writeUint16LE(static_cast<uint16>(_steps));
-	ods->writeUint16LE(static_cast<uint16>(_repeatCounter));
-	ods->writeUint16LE(static_cast<uint16>(_currentStep));
+	ws->writeByte(attacked);
+	ws->writeByte(static_cast<uint8>(_dir));
+	ws->writeUint16LE(static_cast<uint16>(_action));
+	ws->writeUint16LE(static_cast<uint16>(_steps));
+	ws->writeUint16LE(static_cast<uint16>(_repeatCounter));
+	ws->writeUint16LE(static_cast<uint16>(_currentStep));
 
 	if (_tracker) {
-		ods->writeByte(1);
-		_tracker->save(ods);
+		ws->writeByte(1);
+		_tracker->save(ws);
 	} else
-		ods->writeByte(0);
+		ws->writeByte(0);
 }
 
 bool ActorAnimProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.h b/engines/ultima/ultima8/world/actors/actor_anim_process.h
index 1f136c755b..66e9d3fa54 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.h
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.h
@@ -56,7 +56,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	virtual bool init();
 
diff --git a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
index 50d36d4287..ceb6fc66a0 100644
--- a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
@@ -76,8 +76,8 @@ void ActorBarkNotifyProcess::run() {
 	waitFor(delaypid);
 }
 
-void ActorBarkNotifyProcess::saveData(ODataSource *ods) {
-	GumpNotifyProcess::saveData(ods);
+void ActorBarkNotifyProcess::saveData(Common::WriteStream *ws) {
+	GumpNotifyProcess::saveData(ws);
 }
 
 bool ActorBarkNotifyProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.h b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.h
index 673406bfb7..2a6c4a8b52 100644
--- a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.h
+++ b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.h
@@ -40,7 +40,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/world/actors/ambush_process.cpp b/engines/ultima/ultima8/world/actors/ambush_process.cpp
index a2f2418fb2..e8918fdfff 100644
--- a/engines/ultima/ultima8/world/actors/ambush_process.cpp
+++ b/engines/ultima/ultima8/world/actors/ambush_process.cpp
@@ -74,10 +74,10 @@ void AmbushProcess::run() {
 	terminate();
 }
 
-void AmbushProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void AmbushProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint32LE(_delayCount);
+	ws->writeUint32LE(_delayCount);
 }
 
 bool AmbushProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/ambush_process.h b/engines/ultima/ultima8/world/actors/ambush_process.h
index 24eb571ed2..3f6001f7f8 100644
--- a/engines/ultima/ultima8/world/actors/ambush_process.h
+++ b/engines/ultima/ultima8/world/actors/ambush_process.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	uint32 _delayCount;
 };
diff --git a/engines/ultima/ultima8/world/actors/animation_tracker.cpp b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
index 08d7a1bc5f..855d86fa3e 100644
--- a/engines/ultima/ultima8/world/actors/animation_tracker.cpp
+++ b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
@@ -559,51 +559,51 @@ void AnimationTracker::getSpeed(int32 &dx, int32 &dy, int32 &dz) const {
 }
 
 
-void AnimationTracker::save(ODataSource *ods) {
-	ods->writeUint32LE(_startFrame);
-	ods->writeUint32LE(_endFrame);
+void AnimationTracker::save(Common::WriteStream *ws) {
+	ws->writeUint32LE(_startFrame);
+	ws->writeUint32LE(_endFrame);
 	uint8 ff = _firstFrame ? 1 : 0;
-	ods->writeByte(ff);
-	ods->writeUint32LE(_currentFrame);
+	ws->writeByte(ff);
+	ws->writeUint32LE(_currentFrame);
 
-	ods->writeUint16LE(_actor);
-	ods->writeByte(static_cast<uint8>(_dir));
+	ws->writeUint16LE(_actor);
+	ws->writeByte(static_cast<uint8>(_dir));
 
 	if (_animAction) {
-		ods->writeUint32LE(_animAction->_shapeNum);
-		ods->writeUint32LE(_animAction->_action);
+		ws->writeUint32LE(_animAction->_shapeNum);
+		ws->writeUint32LE(_animAction->_action);
 	} else {
-		ods->writeUint32LE(0);
-		ods->writeUint32LE(0);
+		ws->writeUint32LE(0);
+		ws->writeUint32LE(0);
 	}
 
-	ods->writeUint32LE(static_cast<uint32>(_prevX));
-	ods->writeUint32LE(static_cast<uint32>(_prevY));
-	ods->writeUint32LE(static_cast<uint32>(_prevZ));
-	ods->writeUint32LE(static_cast<uint32>(_x));
-	ods->writeUint32LE(static_cast<uint32>(_y));
-	ods->writeUint32LE(static_cast<uint32>(_z));
+	ws->writeUint32LE(static_cast<uint32>(_prevX));
+	ws->writeUint32LE(static_cast<uint32>(_prevY));
+	ws->writeUint32LE(static_cast<uint32>(_prevZ));
+	ws->writeUint32LE(static_cast<uint32>(_x));
+	ws->writeUint32LE(static_cast<uint32>(_y));
+	ws->writeUint32LE(static_cast<uint32>(_z));
 
-	ods->writeUint16LE(static_cast<uint16>(_mode));
+	ws->writeUint16LE(static_cast<uint16>(_mode));
 	if (_mode == TargetMode) {
-		ods->writeUint32LE(static_cast<uint32>(_targetDx));
-		ods->writeUint32LE(static_cast<uint32>(_targetDy));
-		ods->writeUint32LE(static_cast<uint32>(_targetDz));
-		ods->writeUint32LE(static_cast<uint32>(_targetOffGroundLeft));
+		ws->writeUint32LE(static_cast<uint32>(_targetDx));
+		ws->writeUint32LE(static_cast<uint32>(_targetDy));
+		ws->writeUint32LE(static_cast<uint32>(_targetDz));
+		ws->writeUint32LE(static_cast<uint32>(_targetOffGroundLeft));
 	}
 	uint8 fs = _firstStep ? 1 : 0;
-	ods->writeByte(fs);
+	ws->writeByte(fs);
 	uint8 fl = _flipped ? 1 : 0;
-	ods->writeByte(fl);
-	ods->writeUint32LE(_shapeFrame);
+	ws->writeByte(fl);
+	ws->writeUint32LE(_shapeFrame);
 
 	uint8 flag = _done ? 1 : 0;
-	ods->writeByte(flag);
+	ws->writeByte(flag);
 	flag = _blocked ? 1 : 0;
-	ods->writeByte(flag);
+	ws->writeByte(flag);
 	flag = _unsupported ? 1 : 0;
-	ods->writeByte(flag);
-	ods->writeUint16LE(_hitObject);
+	ws->writeByte(flag);
+	ws->writeUint16LE(_hitObject);
 }
 
 bool AnimationTracker::load(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/animation_tracker.h b/engines/ultima/ultima8/world/actors/animation_tracker.h
index 1a2ad07841..60a652ae55 100644
--- a/engines/ultima/ultima8/world/actors/animation_tracker.h
+++ b/engines/ultima/ultima8/world/actors/animation_tracker.h
@@ -108,7 +108,7 @@ public:
 	}
 
 	bool load(IDataSource *ids, uint32 version);
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ods);
 
 private:
 	enum Mode {
diff --git a/engines/ultima/ultima8/world/actors/avatar_death_process.cpp b/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
index 908318e0d2..cfc48e6b80 100644
--- a/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
@@ -81,8 +81,8 @@ void AvatarDeathProcess::run() {
 	terminate();
 }
 
-void AvatarDeathProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void AvatarDeathProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 }
 
 bool AvatarDeathProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/avatar_death_process.h b/engines/ultima/ultima8/world/actors/avatar_death_process.h
index 8a297565f2..3aadbe535e 100644
--- a/engines/ultima/ultima8/world/actors/avatar_death_process.h
+++ b/engines/ultima/ultima8/world/actors/avatar_death_process.h
@@ -41,7 +41,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp b/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
index 7b4123dc5b..0a7d70f868 100644
--- a/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
@@ -77,8 +77,8 @@ void AvatarGravityProcess::run() {
 }
 
 
-void AvatarGravityProcess::saveData(ODataSource *ods) {
-	GravityProcess::saveData(ods);
+void AvatarGravityProcess::saveData(Common::WriteStream *ws) {
+	GravityProcess::saveData(ws);
 }
 
 bool AvatarGravityProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/avatar_gravity_process.h b/engines/ultima/ultima8/world/actors/avatar_gravity_process.h
index 322cb1fa9d..1694028233 100644
--- a/engines/ultima/ultima8/world/actors/avatar_gravity_process.h
+++ b/engines/ultima/ultima8/world/actors/avatar_gravity_process.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
index 2e7e461c53..c36ff1da0c 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
@@ -818,12 +818,12 @@ void AvatarMoverProcess::OnMouseUp(int button) {
 }
 
 
-void AvatarMoverProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void AvatarMoverProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint32LE(_lastAttack);
-	ods->writeUint32LE(_idleTime);
-	ods->writeUint16LE(static_cast<uint8>(_lastHeadShakeAnim));
+	ws->writeUint32LE(_lastAttack);
+	ws->writeUint32LE(_idleTime);
+	ws->writeUint16LE(static_cast<uint8>(_lastHeadShakeAnim));
 }
 
 bool AvatarMoverProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.h b/engines/ultima/ultima8/world/actors/avatar_mover_process.h
index 5292e74059..5443ec0315 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.h
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.h
@@ -49,7 +49,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	void handleHangingMode();
 	void handleCombatMode();
diff --git a/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp b/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
index 0dbebeee2c..ed2fbb5a9b 100644
--- a/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
+++ b/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
@@ -65,8 +65,8 @@ void ClearFeignDeathProcess::run() {
 	terminate();
 }
 
-void ClearFeignDeathProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void ClearFeignDeathProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 }
 
 bool ClearFeignDeathProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/clear_feign_death_process.h b/engines/ultima/ultima8/world/actors/clear_feign_death_process.h
index be3b62badd..3de9ea438f 100644
--- a/engines/ultima/ultima8/world/actors/clear_feign_death_process.h
+++ b/engines/ultima/ultima8/world/actors/clear_feign_death_process.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/world/actors/combat_process.cpp b/engines/ultima/ultima8/world/actors/combat_process.cpp
index 1ff86ccddb..f63886f0c9 100644
--- a/engines/ultima/ultima8/world/actors/combat_process.cpp
+++ b/engines/ultima/ultima8/world/actors/combat_process.cpp
@@ -329,12 +329,12 @@ void CombatProcess::dumpInfo() const {
 	pout << "Target: " << _target << Std::endl;
 }
 
-void CombatProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void CombatProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint16LE(_target);
-	ods->writeUint16LE(_fixedTarget);
-	ods->writeByte(static_cast<uint8>(_combatMode));
+	ws->writeUint16LE(_target);
+	ws->writeUint16LE(_fixedTarget);
+	ws->writeByte(static_cast<uint8>(_combatMode));
 }
 
 bool CombatProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/combat_process.h b/engines/ultima/ultima8/world/actors/combat_process.h
index 965f12913b..80beec9b59 100644
--- a/engines/ultima/ultima8/world/actors/combat_process.h
+++ b/engines/ultima/ultima8/world/actors/combat_process.h
@@ -50,7 +50,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	bool isValidTarget(Actor *target_);
 	bool isEnemy(Actor *target_);
diff --git a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
index 467d7bf5b1..f7a6f33ebd 100644
--- a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
+++ b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
@@ -218,11 +218,11 @@ uint32 GrantPeaceProcess::I_castGrantPeace(const uint8 *args,
 	return 0;
 }
 
-void GrantPeaceProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void GrantPeaceProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
 	uint8 ht = _haveTarget ? 1 : 0;
-	ods->writeByte(ht);
+	ws->writeByte(ht);
 }
 
 bool GrantPeaceProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/grant_peace_process.h b/engines/ultima/ultima8/world/actors/grant_peace_process.h
index 5a1fdab84e..3192dc15f6 100644
--- a/engines/ultima/ultima8/world/actors/grant_peace_process.h
+++ b/engines/ultima/ultima8/world/actors/grant_peace_process.h
@@ -45,7 +45,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	bool _haveTarget;
 };
diff --git a/engines/ultima/ultima8/world/actors/heal_process.cpp b/engines/ultima/ultima8/world/actors/heal_process.cpp
index 1cc5a4b6cf..854d46211f 100644
--- a/engines/ultima/ultima8/world/actors/heal_process.cpp
+++ b/engines/ultima/ultima8/world/actors/heal_process.cpp
@@ -114,11 +114,11 @@ uint32 HealProcess::I_feedAvatar(const uint8 *args, unsigned int /*argsize*/) {
 }
 
 
-void HealProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void HealProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint16LE(_healCounter);
-	ods->writeUint16LE(_hungerCounter);
+	ws->writeUint16LE(_healCounter);
+	ws->writeUint16LE(_hungerCounter);
 }
 
 bool HealProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/heal_process.h b/engines/ultima/ultima8/world/actors/heal_process.h
index dbc7612102..6d47446910 100644
--- a/engines/ultima/ultima8/world/actors/heal_process.h
+++ b/engines/ultima/ultima8/world/actors/heal_process.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	void feedAvatar(uint16 food);
 
diff --git a/engines/ultima/ultima8/world/actors/loiter_process.cpp b/engines/ultima/ultima8/world/actors/loiter_process.cpp
index 052b1c1108..d47aced53b 100644
--- a/engines/ultima/ultima8/world/actors/loiter_process.cpp
+++ b/engines/ultima/ultima8/world/actors/loiter_process.cpp
@@ -104,10 +104,10 @@ void LoiterProcess::run() {
 	}
 }
 
-void LoiterProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void LoiterProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint32LE(_count);
+	ws->writeUint32LE(_count);
 }
 
 bool LoiterProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/loiter_process.h b/engines/ultima/ultima8/world/actors/loiter_process.h
index caef240e6b..43e4955fdc 100644
--- a/engines/ultima/ultima8/world/actors/loiter_process.h
+++ b/engines/ultima/ultima8/world/actors/loiter_process.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	int32 _count;
 };
diff --git a/engines/ultima/ultima8/world/actors/main_actor.cpp b/engines/ultima/ultima8/world/actors/main_actor.cpp
index 3b20017141..47429c406b 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.cpp
+++ b/engines/ultima/ultima8/world/actors/main_actor.cpp
@@ -393,17 +393,17 @@ void MainActor::getWeaponOverlay(const WeaponOverlayFrame *&frame_, uint32 &shap
 	if (frame_ == 0) shape_ = 0;
 }
 
-void MainActor::saveData(ODataSource *ods) {
-	Actor::saveData(ods);
+void MainActor::saveData(Common::WriteStream *ws) {
+	Actor::saveData(ws);
 	uint8 jt = _justTeleported ? 1 : 0;
-	ods->writeByte(jt);
-	ods->writeUint32LE(_accumStr);
-	ods->writeUint32LE(_accumDex);
-	ods->writeUint32LE(_accumInt);
+	ws->writeByte(jt);
+	ws->writeUint32LE(_accumStr);
+	ws->writeUint32LE(_accumDex);
+	ws->writeUint32LE(_accumInt);
 	uint8 namelength = static_cast<uint8>(_name.size());
-	ods->writeByte(namelength);
+	ws->writeByte(namelength);
 	for (unsigned int i = 0; i < namelength; ++i)
-		ods->writeByte(static_cast<uint8>(_name[i]));
+		ws->writeByte(static_cast<uint8>(_name[i]));
 
 }
 
diff --git a/engines/ultima/ultima8/world/actors/main_actor.h b/engines/ultima/ultima8/world/actors/main_actor.h
index afadb9872a..2746dd7d9a 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.h
+++ b/engines/ultima/ultima8/world/actors/main_actor.h
@@ -107,7 +107,7 @@ public:
 
 
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	void useInventoryItem(uint32 shapenum);
 
diff --git a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
index 0e3c0224f3..75ce66a2e6 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
+++ b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
@@ -245,20 +245,20 @@ void PathfinderProcess::run() {
 	waitFor(animpid);
 }
 
-void PathfinderProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void PathfinderProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint16LE(_targetItem);
-	ods->writeUint16LE(static_cast<uint16>(_targetX));
-	ods->writeUint16LE(static_cast<uint16>(_targetY));
-	ods->writeUint16LE(static_cast<uint16>(_targetZ));
-	ods->writeByte(_hitMode ? 1 : 0);
-	ods->writeUint16LE(static_cast<uint16>(_currentStep));
+	ws->writeUint16LE(_targetItem);
+	ws->writeUint16LE(static_cast<uint16>(_targetX));
+	ws->writeUint16LE(static_cast<uint16>(_targetY));
+	ws->writeUint16LE(static_cast<uint16>(_targetZ));
+	ws->writeByte(_hitMode ? 1 : 0);
+	ws->writeUint16LE(static_cast<uint16>(_currentStep));
 
-	ods->writeUint16LE(static_cast<uint16>(_path.size()));
+	ws->writeUint16LE(static_cast<uint16>(_path.size()));
 	for (unsigned int i = 0; i < _path.size(); ++i) {
-		ods->writeUint16LE(static_cast<uint16>(_path[i]._action));
-		ods->writeUint16LE(static_cast<uint16>(_path[i]._direction));
+		ws->writeUint16LE(static_cast<uint16>(_path[i]._action));
+		ws->writeUint16LE(static_cast<uint16>(_path[i]._direction));
 	}
 }
 
diff --git a/engines/ultima/ultima8/world/actors/pathfinder_process.h b/engines/ultima/ultima8/world/actors/pathfinder_process.h
index a26f5efb75..9f2fb25941 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder_process.h
+++ b/engines/ultima/ultima8/world/actors/pathfinder_process.h
@@ -49,7 +49,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	int32 _targetX, _targetY, _targetZ;
 	ObjId _targetItem;
diff --git a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
index a89c232bbf..1f1917bbe4 100644
--- a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
@@ -158,10 +158,10 @@ void QuickAvatarMoverProcess::startMover(int x, int y, int z, int dir) {
 	}
 }
 
-void QuickAvatarMoverProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void QuickAvatarMoverProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint32LE(_dir);
+	ws->writeUint32LE(_dir);
 	// don't save more information. We plan to terminate upon load
 }
 
diff --git a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h
index 89fb9acfbd..b9b3bab22f 100644
--- a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h
+++ b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h
@@ -59,7 +59,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	int _dx, _dy, _dz, _dir;
 	static ProcId _amp[6];
diff --git a/engines/ultima/ultima8/world/actors/resurrection_process.cpp b/engines/ultima/ultima8/world/actors/resurrection_process.cpp
index 27b46f0f9c..622f497698 100644
--- a/engines/ultima/ultima8/world/actors/resurrection_process.cpp
+++ b/engines/ultima/ultima8/world/actors/resurrection_process.cpp
@@ -81,8 +81,8 @@ void ResurrectionProcess::run() {
 		terminate();
 }
 
-void ResurrectionProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void ResurrectionProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 }
 
 bool ResurrectionProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/resurrection_process.h b/engines/ultima/ultima8/world/actors/resurrection_process.h
index c62c2cef5a..75ee853541 100644
--- a/engines/ultima/ultima8/world/actors/resurrection_process.h
+++ b/engines/ultima/ultima8/world/actors/resurrection_process.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/world/actors/scheduler_process.cpp b/engines/ultima/ultima8/world/actors/scheduler_process.cpp
index ae26b0a8d2..d1d5c32cf4 100644
--- a/engines/ultima/ultima8/world/actors/scheduler_process.cpp
+++ b/engines/ultima/ultima8/world/actors/scheduler_process.cpp
@@ -80,11 +80,11 @@ void SchedulerProcess::run() {
 	}
 }
 
-void SchedulerProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void SchedulerProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint32LE(_lastRun);
-	ods->writeUint16LE(_nextActor);
+	ws->writeUint32LE(_lastRun);
+	ws->writeUint16LE(_nextActor);
 }
 
 bool SchedulerProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/scheduler_process.h b/engines/ultima/ultima8/world/actors/scheduler_process.h
index fb4ff84abe..d56199907d 100644
--- a/engines/ultima/ultima8/world/actors/scheduler_process.h
+++ b/engines/ultima/ultima8/world/actors/scheduler_process.h
@@ -40,7 +40,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	uint32 _lastRun;
 	uint16 _nextActor;
diff --git a/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp b/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
index 00830c25a8..905693b3d5 100644
--- a/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
@@ -53,12 +53,12 @@ bool TargetedAnimProcess::init() {
 }
 
 
-void TargetedAnimProcess::saveData(ODataSource *ods) {
-	ActorAnimProcess::saveData(ods);
+void TargetedAnimProcess::saveData(Common::WriteStream *ws) {
+	ActorAnimProcess::saveData(ws);
 
-	ods->writeUint32LE(static_cast<uint32>(_x));
-	ods->writeUint32LE(static_cast<uint32>(_y));
-	ods->writeUint32LE(static_cast<uint32>(_z));
+	ws->writeUint32LE(static_cast<uint32>(_x));
+	ws->writeUint32LE(static_cast<uint32>(_y));
+	ws->writeUint32LE(static_cast<uint32>(_z));
 
 }
 
diff --git a/engines/ultima/ultima8/world/actors/targeted_anim_process.h b/engines/ultima/ultima8/world/actors/targeted_anim_process.h
index bfc28f77d7..0dd8e9f39b 100644
--- a/engines/ultima/ultima8/world/actors/targeted_anim_process.h
+++ b/engines/ultima/ultima8/world/actors/targeted_anim_process.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	bool init() override;
 
diff --git a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
index 39b0d90461..3aa74ad208 100644
--- a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
+++ b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
@@ -53,11 +53,11 @@ void TeleportToEggProcess::run() {
 	terminate();
 }
 
-void TeleportToEggProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void TeleportToEggProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint32LE(static_cast<uint32>(_mapNum));
-	ods->writeUint32LE(static_cast<uint32>(_teleportId));
+	ws->writeUint32LE(static_cast<uint32>(_mapNum));
+	ws->writeUint32LE(static_cast<uint32>(_teleportId));
 }
 
 bool TeleportToEggProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.h b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.h
index f3c712ad2f..debe38d9ff 100644
--- a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.h
+++ b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.h
@@ -42,7 +42,7 @@ public:
 	bool loadData(IDataSource *ids, uint32 version);
 
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	int _mapNum;
 	int _teleportId;
diff --git a/engines/ultima/ultima8/world/camera_process.cpp b/engines/ultima/ultima8/world/camera_process.cpp
index 69d6ebd9cb..b0f681126a 100644
--- a/engines/ultima/ultima8/world/camera_process.cpp
+++ b/engines/ultima/ultima8/world/camera_process.cpp
@@ -269,22 +269,22 @@ uint16 CameraProcess::FindRoof(int32 factor) {
 	return roofid;
 }
 
-void CameraProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
-
-	ods->writeUint32LE(static_cast<uint32>(_sx));
-	ods->writeUint32LE(static_cast<uint32>(_sy));
-	ods->writeUint32LE(static_cast<uint32>(_sz));
-	ods->writeUint32LE(static_cast<uint32>(_ex));
-	ods->writeUint32LE(static_cast<uint32>(_ey));
-	ods->writeUint32LE(static_cast<uint32>(_ez));
-	ods->writeUint32LE(static_cast<uint32>(_time));
-	ods->writeUint32LE(static_cast<uint32>(_elapsed));
-	ods->writeUint16LE(_itemNum);
-	ods->writeUint32LE(_lastFrameNum);
-	ods->writeUint32LE(static_cast<uint32>(_earthquake));
-	ods->writeUint32LE(static_cast<uint32>(_eqX));
-	ods->writeUint32LE(static_cast<uint32>(_eqY));
+void CameraProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
+
+	ws->writeUint32LE(static_cast<uint32>(_sx));
+	ws->writeUint32LE(static_cast<uint32>(_sy));
+	ws->writeUint32LE(static_cast<uint32>(_sz));
+	ws->writeUint32LE(static_cast<uint32>(_ex));
+	ws->writeUint32LE(static_cast<uint32>(_ey));
+	ws->writeUint32LE(static_cast<uint32>(_ez));
+	ws->writeUint32LE(static_cast<uint32>(_time));
+	ws->writeUint32LE(static_cast<uint32>(_elapsed));
+	ws->writeUint16LE(_itemNum);
+	ws->writeUint32LE(_lastFrameNum);
+	ws->writeUint32LE(static_cast<uint32>(_earthquake));
+	ws->writeUint32LE(static_cast<uint32>(_eqX));
+	ws->writeUint32LE(static_cast<uint32>(_eqY));
 }
 
 bool CameraProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/camera_process.h b/engines/ultima/ultima8/world/camera_process.h
index 505585b814..51a0891791 100644
--- a/engines/ultima/ultima8/world/camera_process.h
+++ b/engines/ultima/ultima8/world/camera_process.h
@@ -85,7 +85,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 private:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	int32 _sx, _sy, _sz;
 	int32 _ex, _ey, _ez;
diff --git a/engines/ultima/ultima8/world/container.cpp b/engines/ultima/ultima8/world/container.cpp
index 59531c6e57..85b7be4fea 100644
--- a/engines/ultima/ultima8/world/container.cpp
+++ b/engines/ultima/ultima8/world/container.cpp
@@ -305,12 +305,12 @@ void Container::dumpInfo() const {
 	     << ", total weight: " << getTotalWeight() << Std::endl;
 }
 
-void Container::saveData(ODataSource *ods) {
-	Item::saveData(ods);
-	ods->writeUint32LE(static_cast<uint32>(_contents.size()));
+void Container::saveData(Common::WriteStream *ws) {
+	Item::saveData(ws);
+	ws->writeUint32LE(static_cast<uint32>(_contents.size()));
 	Std::list<Item *>::iterator iter;
 	for (iter = _contents.begin(); iter != _contents.end(); ++iter) {
-		(*iter)->save(ods);
+		(*iter)->save(ws);
 	}
 }
 
diff --git a/engines/ultima/ultima8/world/container.h b/engines/ultima/ultima8/world/container.h
index 570c69c128..e8b9f8c036 100644
--- a/engines/ultima/ultima8/world/container.h
+++ b/engines/ultima/ultima8/world/container.h
@@ -115,7 +115,7 @@ public:
 
 protected:
 	//! save Container data
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	Std::list<Item *> _contents;
 };
diff --git a/engines/ultima/ultima8/world/create_item_process.cpp b/engines/ultima/ultima8/world/create_item_process.cpp
index 82bfde12de..a296675a09 100644
--- a/engines/ultima/ultima8/world/create_item_process.cpp
+++ b/engines/ultima/ultima8/world/create_item_process.cpp
@@ -63,19 +63,19 @@ void CreateItemProcess::run() {
 	terminate();
 }
 
-void CreateItemProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
-
-	ods->writeUint32LE(_shape);
-	ods->writeUint32LE(_frame);
-	ods->writeUint16LE(_quality);
-	ods->writeUint16LE(_flags);
-	ods->writeUint16LE(_npcNum);
-	ods->writeUint16LE(_mapNum);
-	ods->writeUint32LE(_extendedFlags);
-	ods->writeUint32LE(static_cast<uint32>(_x));
-	ods->writeUint32LE(static_cast<uint32>(_y));
-	ods->writeUint32LE(static_cast<uint32>(_z));
+void CreateItemProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
+
+	ws->writeUint32LE(_shape);
+	ws->writeUint32LE(_frame);
+	ws->writeUint16LE(_quality);
+	ws->writeUint16LE(_flags);
+	ws->writeUint16LE(_npcNum);
+	ws->writeUint16LE(_mapNum);
+	ws->writeUint32LE(_extendedFlags);
+	ws->writeUint32LE(static_cast<uint32>(_x));
+	ws->writeUint32LE(static_cast<uint32>(_y));
+	ws->writeUint32LE(static_cast<uint32>(_z));
 }
 
 bool CreateItemProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/create_item_process.h b/engines/ultima/ultima8/world/create_item_process.h
index 4b3471b33f..6bfffb5ddb 100644
--- a/engines/ultima/ultima8/world/create_item_process.h
+++ b/engines/ultima/ultima8/world/create_item_process.h
@@ -44,7 +44,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	uint32 _shape;
 	uint32 _frame;
diff --git a/engines/ultima/ultima8/world/current_map.cpp b/engines/ultima/ultima8/world/current_map.cpp
index 041f5605fc..6684cafdd7 100644
--- a/engines/ultima/ultima8/world/current_map.cpp
+++ b/engines/ultima/ultima8/world/current_map.cpp
@@ -1268,10 +1268,10 @@ void CurrentMap::setWholeMapFast() {
 	}
 }
 
-void CurrentMap::save(ODataSource *ods) {
+void CurrentMap::save(Common::WriteStream *ws) {
 	for (unsigned int i = 0; i < MAP_NUM_CHUNKS; ++i) {
 		for (unsigned int j = 0; j < MAP_NUM_CHUNKS / 32; ++j) {
-			ods->writeUint32LE(_fast[i][j]);
+			ws->writeUint32LE(_fast[i][j]);
 		}
 	}
 }
diff --git a/engines/ultima/ultima8/world/current_map.h b/engines/ultima/ultima8/world/current_map.h
index d4ee592459..a1aff90087 100644
--- a/engines/ultima/ultima8/world/current_map.h
+++ b/engines/ultima/ultima8/world/current_map.h
@@ -200,7 +200,7 @@ public:
 	// Set the entire map as being 'fast'
 	void setWholeMapFast();
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 	bool load(IDataSource *ids, uint32 version);
 
 	INTRINSIC(I_canExistAt);
diff --git a/engines/ultima/ultima8/world/destroy_item_process.cpp b/engines/ultima/ultima8/world/destroy_item_process.cpp
index 5946508e6e..ea315a13f5 100644
--- a/engines/ultima/ultima8/world/destroy_item_process.cpp
+++ b/engines/ultima/ultima8/world/destroy_item_process.cpp
@@ -77,8 +77,8 @@ void DestroyItemProcess::run() {
 	// NOTE: we're terminated here because this process belongs to the item
 }
 
-void DestroyItemProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void DestroyItemProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 }
 
 bool DestroyItemProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/destroy_item_process.h b/engines/ultima/ultima8/world/destroy_item_process.h
index 22c5992ce6..c44890faf8 100644
--- a/engines/ultima/ultima8/world/destroy_item_process.h
+++ b/engines/ultima/ultima8/world/destroy_item_process.h
@@ -46,7 +46,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/world/egg.cpp b/engines/ultima/ultima8/world/egg.cpp
index f42adb10c2..2c9a33ed3f 100644
--- a/engines/ultima/ultima8/world/egg.cpp
+++ b/engines/ultima/ultima8/world/egg.cpp
@@ -59,11 +59,11 @@ void Egg::leaveFastArea() {
 	Item::leaveFastArea();
 }
 
-void Egg::saveData(ODataSource *ods) {
-	Item::saveData(ods);
+void Egg::saveData(Common::WriteStream *ws) {
+	Item::saveData(ws);
 
 	uint8 h = _hatched ? 1 :  0;
-	ods->writeByte(h);
+	ws->writeByte(h);
 }
 
 bool Egg::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/egg.h b/engines/ultima/ultima8/world/egg.h
index d85a430e88..37face7187 100644
--- a/engines/ultima/ultima8/world/egg.h
+++ b/engines/ultima/ultima8/world/egg.h
@@ -75,7 +75,7 @@ public:
 	INTRINSIC(I_setEggId);
 
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	bool _hatched;
 };
diff --git a/engines/ultima/ultima8/world/egg_hatcher_process.cpp b/engines/ultima/ultima8/world/egg_hatcher_process.cpp
index 6da2e96ad2..7f81d7f1f4 100644
--- a/engines/ultima/ultima8/world/egg_hatcher_process.cpp
+++ b/engines/ultima/ultima8/world/egg_hatcher_process.cpp
@@ -96,8 +96,8 @@ void EggHatcherProcess::run() {
 	if (!nearteleporter) av->setJustTeleported(false); // clear flag
 }
 
-void EggHatcherProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void EggHatcherProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 }
 
 
diff --git a/engines/ultima/ultima8/world/egg_hatcher_process.h b/engines/ultima/ultima8/world/egg_hatcher_process.h
index 002b57cd70..cf40ad1f03 100644
--- a/engines/ultima/ultima8/world/egg_hatcher_process.h
+++ b/engines/ultima/ultima8/world/egg_hatcher_process.h
@@ -46,7 +46,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 private:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	Std::vector<uint16> _eggs;
 };
diff --git a/engines/ultima/ultima8/world/fireball_process.cpp b/engines/ultima/ultima8/world/fireball_process.cpp
index 97bea0e8b6..f75f3f80a8 100644
--- a/engines/ultima/ultima8/world/fireball_process.cpp
+++ b/engines/ultima/ultima8/world/fireball_process.cpp
@@ -203,16 +203,16 @@ uint32 FireballProcess::I_TonysBalls(const uint8 *args,
 	return 0;
 }
 
-void FireballProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
-
-	ods->writeUint32LE(static_cast<uint32>(_xSpeed));
-	ods->writeUint32LE(static_cast<uint32>(_ySpeed));
-	ods->writeUint16LE(_target);
-	ods->writeUint16LE(_tail[0]);
-	ods->writeUint16LE(_tail[1]);
-	ods->writeUint16LE(_tail[2]);
-	ods->writeUint16LE(_age);
+void FireballProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
+
+	ws->writeUint32LE(static_cast<uint32>(_xSpeed));
+	ws->writeUint32LE(static_cast<uint32>(_ySpeed));
+	ws->writeUint16LE(_target);
+	ws->writeUint16LE(_tail[0]);
+	ws->writeUint16LE(_tail[1]);
+	ws->writeUint16LE(_tail[2]);
+	ws->writeUint16LE(_age);
 }
 
 bool FireballProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/fireball_process.h b/engines/ultima/ultima8/world/fireball_process.h
index 942cca3ff4..ec331f9d27 100644
--- a/engines/ultima/ultima8/world/fireball_process.h
+++ b/engines/ultima/ultima8/world/fireball_process.h
@@ -47,7 +47,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	void explode();
 
diff --git a/engines/ultima/ultima8/world/glob_egg.cpp b/engines/ultima/ultima8/world/glob_egg.cpp
index e3d8c6554c..0b12aa663b 100644
--- a/engines/ultima/ultima8/world/glob_egg.cpp
+++ b/engines/ultima/ultima8/world/glob_egg.cpp
@@ -79,8 +79,8 @@ void GlobEgg::enterFastArea() {
 	Item::enterFastArea();
 }
 
-void GlobEgg::saveData(ODataSource *ods) {
-	Item::saveData(ods);
+void GlobEgg::saveData(Common::WriteStream *ws) {
+	Item::saveData(ws);
 }
 
 bool GlobEgg::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/glob_egg.h b/engines/ultima/ultima8/world/glob_egg.h
index fdb33f4259..aab2d1f418 100644
--- a/engines/ultima/ultima8/world/glob_egg.h
+++ b/engines/ultima/ultima8/world/glob_egg.h
@@ -44,7 +44,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/world/gravity_process.cpp b/engines/ultima/ultima8/world/gravity_process.cpp
index 4e620041f9..0c2938e6eb 100644
--- a/engines/ultima/ultima8/world/gravity_process.cpp
+++ b/engines/ultima/ultima8/world/gravity_process.cpp
@@ -346,13 +346,13 @@ void GravityProcess::dumpInfo() const {
 }
 
 
-void GravityProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void GravityProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint32LE(static_cast<uint32>(_gravity));
-	ods->writeUint32LE(static_cast<uint32>(_xSpeed));
-	ods->writeUint32LE(static_cast<uint32>(_ySpeed));
-	ods->writeUint32LE(static_cast<uint32>(_zSpeed));
+	ws->writeUint32LE(static_cast<uint32>(_gravity));
+	ws->writeUint32LE(static_cast<uint32>(_xSpeed));
+	ws->writeUint32LE(static_cast<uint32>(_ySpeed));
+	ws->writeUint32LE(static_cast<uint32>(_zSpeed));
 }
 
 bool GravityProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/gravity_process.h b/engines/ultima/ultima8/world/gravity_process.h
index 34d2a5a180..717e9202c1 100644
--- a/engines/ultima/ultima8/world/gravity_process.h
+++ b/engines/ultima/ultima8/world/gravity_process.h
@@ -51,7 +51,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	void fallStopped();
 
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index a96afc2cc5..6c008916d8 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -1758,25 +1758,25 @@ bool Item::canMergeWith(Item *other) {
 }
 
 
-void Item::saveData(ODataSource *ods) {
-	Object::saveData(ods);
-	ods->writeUint16LE(static_cast<uint16>(_extendedFlags));
-	ods->writeUint16LE(_flags);
-	ods->writeUint16LE(static_cast<uint16>(_shape));
-	ods->writeUint16LE(static_cast<uint16>(_frame));
-	ods->writeUint16LE(static_cast<uint16>(_x));
-	ods->writeUint16LE(static_cast<uint16>(_y));
-	ods->writeUint16LE(static_cast<uint16>(_z));
-	ods->writeUint16LE(_quality);
-	ods->writeUint16LE(_npcNum);
-	ods->writeUint16LE(_mapNum);
+void Item::saveData(Common::WriteStream *ws) {
+	Object::saveData(ws);
+	ws->writeUint16LE(static_cast<uint16>(_extendedFlags));
+	ws->writeUint16LE(_flags);
+	ws->writeUint16LE(static_cast<uint16>(_shape));
+	ws->writeUint16LE(static_cast<uint16>(_frame));
+	ws->writeUint16LE(static_cast<uint16>(_x));
+	ws->writeUint16LE(static_cast<uint16>(_y));
+	ws->writeUint16LE(static_cast<uint16>(_z));
+	ws->writeUint16LE(_quality);
+	ws->writeUint16LE(_npcNum);
+	ws->writeUint16LE(_mapNum);
 	if (getObjId() != 0xFFFF) {
 		// these only make sense in currently loaded items
-		ods->writeUint16LE(_gump);
-		ods->writeUint16LE(_gravityPid);
+		ws->writeUint16LE(_gump);
+		ws->writeUint16LE(_gravityPid);
 	}
 	if ((_flags & FLG_ETHEREAL) && (_flags & (FLG_CONTAINED | FLG_EQUIPPED)))
-		ods->writeUint16LE(_parent);
+		ws->writeUint16LE(_parent);
 }
 
 bool Item::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/item.h b/engines/ultima/ultima8/world/item.h
index 856f4f4df8..e30bcfd167 100644
--- a/engines/ultima/ultima8/world/item.h
+++ b/engines/ultima/ultima8/world/item.h
@@ -557,7 +557,7 @@ protected:
 	ProcId _gravityPid;      // Item's GravityTracker (or 0)
 
 	//! save the actual Item data
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 private:
 
diff --git a/engines/ultima/ultima8/world/map.cpp b/engines/ultima/ultima8/world/map.cpp
index 1f907ecd5e..5f6f9d0d2d 100644
--- a/engines/ultima/ultima8/world/map.cpp
+++ b/engines/ultima/ultima8/world/map.cpp
@@ -278,12 +278,12 @@ void Map::loadFixedFormatObjects(Std::list<Item *> &itemlist, IDataSource *ds,
 }
 
 
-void Map::save(ODataSource *ods) {
-	ods->writeUint32LE(static_cast<uint32>(_dynamicItems.size()));
+void Map::save(Common::WriteStream *ws) {
+	ws->writeUint32LE(static_cast<uint32>(_dynamicItems.size()));
 
 	Std::list<Item *>::iterator iter;
 	for (iter = _dynamicItems.begin(); iter != _dynamicItems.end(); ++iter) {
-		(*iter)->save(ods);
+		(*iter)->save(ws);
 	}
 }
 
diff --git a/engines/ultima/ultima8/world/map.h b/engines/ultima/ultima8/world/map.h
index 3df7f68c60..f6661133b8 100644
--- a/engines/ultima/ultima8/world/map.h
+++ b/engines/ultima/ultima8/world/map.h
@@ -48,7 +48,7 @@ public:
 		return _fixedItems.size() == 0 && _dynamicItems.size() == 0;
 	}
 
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ods);
 	bool load(IDataSource *ids, uint32 version);
 
 private:
diff --git a/engines/ultima/ultima8/world/monster_egg.cpp b/engines/ultima/ultima8/world/monster_egg.cpp
index d4dc83a6f0..08a93b052d 100644
--- a/engines/ultima/ultima8/world/monster_egg.cpp
+++ b/engines/ultima/ultima8/world/monster_egg.cpp
@@ -90,8 +90,8 @@ uint16 MonsterEgg::hatch() {
 	return objID;
 }
 
-void MonsterEgg::saveData(ODataSource *ods) {
-	Item::saveData(ods);
+void MonsterEgg::saveData(Common::WriteStream *ws) {
+	Item::saveData(ws);
 }
 
 bool MonsterEgg::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/monster_egg.h b/engines/ultima/ultima8/world/monster_egg.h
index c294aae92d..8c2cc0b406 100644
--- a/engines/ultima/ultima8/world/monster_egg.h
+++ b/engines/ultima/ultima8/world/monster_egg.h
@@ -55,7 +55,7 @@ public:
 	INTRINSIC(I_getMonId);
 
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/world/split_item_process.cpp b/engines/ultima/ultima8/world/split_item_process.cpp
index 392996d7ac..80bcb6ccb7 100644
--- a/engines/ultima/ultima8/world/split_item_process.cpp
+++ b/engines/ultima/ultima8/world/split_item_process.cpp
@@ -90,10 +90,10 @@ void SplitItemProcess::run() {
 		terminate();
 }
 
-void SplitItemProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
+void SplitItemProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
 
-	ods->writeUint16LE(_target);
+	ws->writeUint16LE(_target);
 }
 
 bool SplitItemProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/split_item_process.h b/engines/ultima/ultima8/world/split_item_process.h
index e9a5a4d1ff..30ab796b22 100644
--- a/engines/ultima/ultima8/world/split_item_process.h
+++ b/engines/ultima/ultima8/world/split_item_process.h
@@ -42,7 +42,7 @@ public:
 
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 	ObjId _target;
 };
diff --git a/engines/ultima/ultima8/world/sprite_process.cpp b/engines/ultima/ultima8/world/sprite_process.cpp
index 42b5032ae0..fb6412b672 100644
--- a/engines/ultima/ultima8/world/sprite_process.cpp
+++ b/engines/ultima/ultima8/world/sprite_process.cpp
@@ -111,20 +111,20 @@ uint32 SpriteProcess::I_createSprite(const uint8 *args, unsigned int argsize) {
 	return Kernel::get_instance()->addProcess(p);
 }
 
-void SpriteProcess::saveData(ODataSource *ods) {
-	Process::saveData(ods);
-
-	ods->writeUint32LE(static_cast<uint32>(_shape));
-	ods->writeUint32LE(static_cast<uint32>(_frame));
-	ods->writeUint32LE(static_cast<uint32>(_firstFrame));
-	ods->writeUint32LE(static_cast<uint32>(_lastFrame));
-	ods->writeUint32LE(static_cast<uint32>(_repeats));
-	ods->writeUint32LE(static_cast<uint32>(_delay));
-	ods->writeUint32LE(static_cast<uint32>(_x));
-	ods->writeUint32LE(static_cast<uint32>(_y));
-	ods->writeUint32LE(static_cast<uint32>(_z));
-	ods->writeUint32LE(static_cast<uint32>(_delayCounter));
-	ods->writeByte(_initialized ? 1 : 0);
+void SpriteProcess::saveData(Common::WriteStream *ws) {
+	Process::saveData(ws);
+
+	ws->writeUint32LE(static_cast<uint32>(_shape));
+	ws->writeUint32LE(static_cast<uint32>(_frame));
+	ws->writeUint32LE(static_cast<uint32>(_firstFrame));
+	ws->writeUint32LE(static_cast<uint32>(_lastFrame));
+	ws->writeUint32LE(static_cast<uint32>(_repeats));
+	ws->writeUint32LE(static_cast<uint32>(_delay));
+	ws->writeUint32LE(static_cast<uint32>(_x));
+	ws->writeUint32LE(static_cast<uint32>(_y));
+	ws->writeUint32LE(static_cast<uint32>(_z));
+	ws->writeUint32LE(static_cast<uint32>(_delayCounter));
+	ws->writeByte(_initialized ? 1 : 0);
 }
 
 bool SpriteProcess::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/sprite_process.h b/engines/ultima/ultima8/world/sprite_process.h
index 1d01950ca0..d17670bd69 100644
--- a/engines/ultima/ultima8/world/sprite_process.h
+++ b/engines/ultima/ultima8/world/sprite_process.h
@@ -75,7 +75,7 @@ protected:
 public:
 	bool loadData(IDataSource *ids, uint32 version);
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/world/teleport_egg.cpp b/engines/ultima/ultima8/world/teleport_egg.cpp
index f3ebbcf52f..e71783b343 100644
--- a/engines/ultima/ultima8/world/teleport_egg.cpp
+++ b/engines/ultima/ultima8/world/teleport_egg.cpp
@@ -53,8 +53,8 @@ uint16 TeleportEgg::hatch() {
 	return 0;
 }
 
-void TeleportEgg::saveData(ODataSource *ods) {
-	Egg::saveData(ods);
+void TeleportEgg::saveData(Common::WriteStream *ws) {
+	Egg::saveData(ws);
 }
 
 bool TeleportEgg::loadData(IDataSource *ids, uint32 version) {
diff --git a/engines/ultima/ultima8/world/teleport_egg.h b/engines/ultima/ultima8/world/teleport_egg.h
index b62f1e4b67..82fa24fa9a 100644
--- a/engines/ultima/ultima8/world/teleport_egg.h
+++ b/engines/ultima/ultima8/world/teleport_egg.h
@@ -47,7 +47,7 @@ public:
 
 	uint16 hatch() override;
 protected:
-	void saveData(ODataSource *ods) override;
+	void saveData(Common::WriteStream *ws) override;
 
 };
 
diff --git a/engines/ultima/ultima8/world/world.cpp b/engines/ultima/ultima8/world/world.cpp
index 12486504bd..9a6974f607 100644
--- a/engines/ultima/ultima8/world/world.cpp
+++ b/engines/ultima/ultima8/world/world.cpp
@@ -336,13 +336,13 @@ void World::worldStats() const {
 	}
 }
 
-void World::save(ODataSource *ods) {
-	ods->writeUint32LE(_currentMap->getNum());
+void World::save(Common::WriteStream *ws) {
+	ws->writeUint32LE(_currentMap->getNum());
 
-	ods->writeUint16LE(_currentMap->_eggHatcher);
+	ws->writeUint16LE(_currentMap->_eggHatcher);
 
 	uint16 es = static_cast<uint16>(_ethereal.size());
-	ods->writeUint32LE(es);
+	ws->writeUint32LE(es);
 
 	// empty stack and refill it again
 	uint16 *e = new uint16[es];
@@ -354,7 +354,7 @@ void World::save(ODataSource *ods) {
 	}
 
 	for (i = 0; i < es; ++i) {
-		ods->writeUint16LE(e[i]);
+		ws->writeUint16LE(e[i]);
 	}
 	delete[] e;
 }
@@ -374,10 +374,10 @@ bool World::load(IDataSource *ids, uint32 version) {
 	return true;
 }
 
-void World::saveMaps(ODataSource *ods) {
-	ods->writeUint32LE(static_cast<uint32>(_maps.size()));
+void World::saveMaps(Common::WriteStream *ws) {
+	ws->writeUint32LE(static_cast<uint32>(_maps.size()));
 	for (unsigned int i = 0; i < _maps.size(); ++i) {
-		_maps[i]->save(ods);
+		_maps[i]->save(ws);
 	}
 }
 
diff --git a/engines/ultima/ultima8/world/world.h b/engines/ultima/ultima8/world/world.h
index dccf397e56..5ca0be483d 100644
--- a/engines/ultima/ultima8/world/world.h
+++ b/engines/ultima/ultima8/world/world.h
@@ -129,13 +129,13 @@ public:
 	void worldStats() const;
 
 	//! save the Maps in World.
-	void saveMaps(ODataSource *ods);
+	void saveMaps(Common::WriteStream *ws);
 
 	//! load Maps
 	bool loadMaps(IDataSource *ids, uint32 version);
 
 	//! save the rest of the World data (ethereal items, current map number).
-	void save(ODataSource *ods);
+	void save(Common::WriteStream *ws);
 
 	//! load World data
 	bool load(IDataSource *ids, uint32 version);


Commit: 143b593ac8c3ad848976c9450a928145edf2c1df
    https://github.com/scummvm/scummvm/commit/143b593ac8c3ad848976c9450a928145edf2c1df
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2020-04-14T18:21:43+09:00

Commit Message:
ULTIMA8: Replace usage of IDataSource with Common::ReadStream

Changed paths:
    engines/ultima/ultima8/audio/audio_process.cpp
    engines/ultima/ultima8/audio/audio_process.h
    engines/ultima/ultima8/audio/audio_sample.h
    engines/ultima/ultima8/audio/music_flex.cpp
    engines/ultima/ultima8/audio/music_flex.h
    engines/ultima/ultima8/audio/music_process.cpp
    engines/ultima/ultima8/audio/music_process.h
    engines/ultima/ultima8/audio/sound_flex.cpp
    engines/ultima/ultima8/audio/sound_flex.h
    engines/ultima/ultima8/audio/speech_flex.cpp
    engines/ultima/ultima8/audio/speech_flex.h
    engines/ultima/ultima8/conf/ini_file.cpp
    engines/ultima/ultima8/convert/u8/convert_usecode_u8.h
    engines/ultima/ultima8/filesys/archive.cpp
    engines/ultima/ultima8/filesys/archive.h
    engines/ultima/ultima8/filesys/archive_file.cpp
    engines/ultima/ultima8/filesys/archive_file.h
    engines/ultima/ultima8/filesys/file_system.cpp
    engines/ultima/ultima8/filesys/file_system.h
    engines/ultima/ultima8/filesys/flex_file.cpp
    engines/ultima/ultima8/filesys/flex_file.h
    engines/ultima/ultima8/filesys/odata_source.h
    engines/ultima/ultima8/filesys/raw_archive.h
    engines/ultima/ultima8/filesys/savegame.h
    engines/ultima/ultima8/filesys/u8_save_file.cpp
    engines/ultima/ultima8/filesys/u8_save_file.h
    engines/ultima/ultima8/games/game.h
    engines/ultima/ultima8/games/game_data.cpp
    engines/ultima/ultima8/games/game_info.h
    engines/ultima/ultima8/games/remorse_game.cpp
    engines/ultima/ultima8/games/start_u8_process.cpp
    engines/ultima/ultima8/games/start_u8_process.h
    engines/ultima/ultima8/games/u8_game.cpp
    engines/ultima/ultima8/games/u8_game.h
    engines/ultima/ultima8/graphics/anim_dat.cpp
    engines/ultima/ultima8/graphics/anim_dat.h
    engines/ultima/ultima8/graphics/fonts/fixed_width_font.cpp
    engines/ultima/ultima8/graphics/fonts/fixed_width_font.h
    engines/ultima/ultima8/graphics/fonts/font_manager.cpp
    engines/ultima/ultima8/graphics/fonts/font_manager.h
    engines/ultima/ultima8/graphics/fonts/font_shape_archive.h
    engines/ultima/ultima8/graphics/frame_id.cpp
    engines/ultima/ultima8/graphics/frame_id.h
    engines/ultima/ultima8/graphics/gump_shape_archive.cpp
    engines/ultima/ultima8/graphics/gump_shape_archive.h
    engines/ultima/ultima8/graphics/inverter_process.cpp
    engines/ultima/ultima8/graphics/inverter_process.h
    engines/ultima/ultima8/graphics/main_shape_archive.cpp
    engines/ultima/ultima8/graphics/main_shape_archive.h
    engines/ultima/ultima8/graphics/palette.cpp
    engines/ultima/ultima8/graphics/palette.h
    engines/ultima/ultima8/graphics/palette_fader_process.cpp
    engines/ultima/ultima8/graphics/palette_fader_process.h
    engines/ultima/ultima8/graphics/palette_manager.cpp
    engines/ultima/ultima8/graphics/palette_manager.h
    engines/ultima/ultima8/graphics/shape_archive.h
    engines/ultima/ultima8/graphics/skf_player.cpp
    engines/ultima/ultima8/graphics/skf_player.h
    engines/ultima/ultima8/graphics/texture.cpp
    engines/ultima/ultima8/graphics/texture.h
    engines/ultima/ultima8/graphics/texture_bitmap.cpp
    engines/ultima/ultima8/graphics/texture_bitmap.h
    engines/ultima/ultima8/graphics/texture_png.cpp
    engines/ultima/ultima8/graphics/texture_png.h
    engines/ultima/ultima8/graphics/texture_targa.cpp
    engines/ultima/ultima8/graphics/texture_targa.h
    engines/ultima/ultima8/graphics/type_flags.cpp
    engines/ultima/ultima8/graphics/type_flags.h
    engines/ultima/ultima8/graphics/wpn_ovlay_dat.cpp
    engines/ultima/ultima8/gumps/ask_gump.cpp
    engines/ultima/ultima8/gumps/ask_gump.h
    engines/ultima/ultima8/gumps/bark_gump.cpp
    engines/ultima/ultima8/gumps/bark_gump.h
    engines/ultima/ultima8/gumps/book_gump.cpp
    engines/ultima/ultima8/gumps/book_gump.h
    engines/ultima/ultima8/gumps/container_gump.cpp
    engines/ultima/ultima8/gumps/container_gump.h
    engines/ultima/ultima8/gumps/desktop_gump.cpp
    engines/ultima/ultima8/gumps/desktop_gump.h
    engines/ultima/ultima8/gumps/game_map_gump.cpp
    engines/ultima/ultima8/gumps/game_map_gump.h
    engines/ultima/ultima8/gumps/gump.cpp
    engines/ultima/ultima8/gumps/gump.h
    engines/ultima/ultima8/gumps/gump_notify_process.cpp
    engines/ultima/ultima8/gumps/gump_notify_process.h
    engines/ultima/ultima8/gumps/item_relative_gump.cpp
    engines/ultima/ultima8/gumps/item_relative_gump.h
    engines/ultima/ultima8/gumps/main_menu_process.cpp
    engines/ultima/ultima8/gumps/main_menu_process.h
    engines/ultima/ultima8/gumps/message_box_gump.cpp
    engines/ultima/ultima8/gumps/message_box_gump.h
    engines/ultima/ultima8/gumps/mini_stats_gump.cpp
    engines/ultima/ultima8/gumps/mini_stats_gump.h
    engines/ultima/ultima8/gumps/minimap_gump.cpp
    engines/ultima/ultima8/gumps/minimap_gump.h
    engines/ultima/ultima8/gumps/modal_gump.cpp
    engines/ultima/ultima8/gumps/modal_gump.h
    engines/ultima/ultima8/gumps/movie_gump.cpp
    engines/ultima/ultima8/gumps/movie_gump.h
    engines/ultima/ultima8/gumps/paged_gump.cpp
    engines/ultima/ultima8/gumps/paged_gump.h
    engines/ultima/ultima8/gumps/paperdoll_gump.cpp
    engines/ultima/ultima8/gumps/paperdoll_gump.h
    engines/ultima/ultima8/gumps/quit_gump.cpp
    engines/ultima/ultima8/gumps/quit_gump.h
    engines/ultima/ultima8/gumps/readable_gump.cpp
    engines/ultima/ultima8/gumps/readable_gump.h
    engines/ultima/ultima8/gumps/scroll_gump.cpp
    engines/ultima/ultima8/gumps/scroll_gump.h
    engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
    engines/ultima/ultima8/gumps/shape_viewer_gump.h
    engines/ultima/ultima8/gumps/slider_gump.cpp
    engines/ultima/ultima8/gumps/slider_gump.h
    engines/ultima/ultima8/gumps/target_gump.cpp
    engines/ultima/ultima8/gumps/target_gump.h
    engines/ultima/ultima8/gumps/widgets/button_widget.cpp
    engines/ultima/ultima8/gumps/widgets/button_widget.h
    engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
    engines/ultima/ultima8/gumps/widgets/sliding_widget.h
    engines/ultima/ultima8/gumps/widgets/text_widget.cpp
    engines/ultima/ultima8/gumps/widgets/text_widget.h
    engines/ultima/ultima8/kernel/delay_process.cpp
    engines/ultima/ultima8/kernel/delay_process.h
    engines/ultima/ultima8/kernel/kernel.cpp
    engines/ultima/ultima8/kernel/kernel.h
    engines/ultima/ultima8/kernel/mouse.cpp
    engines/ultima/ultima8/kernel/object.cpp
    engines/ultima/ultima8/kernel/object.h
    engines/ultima/ultima8/kernel/object_manager.cpp
    engines/ultima/ultima8/kernel/object_manager.h
    engines/ultima/ultima8/kernel/process.cpp
    engines/ultima/ultima8/kernel/process.h
    engines/ultima/ultima8/misc/debugger.cpp
    engines/ultima/ultima8/misc/id_man.cpp
    engines/ultima/ultima8/misc/id_man.h
    engines/ultima/ultima8/ultima8.cpp
    engines/ultima/ultima8/ultima8.h
    engines/ultima/ultima8/usecode/bit_set.cpp
    engines/ultima/ultima8/usecode/bit_set.h
    engines/ultima/ultima8/usecode/uc_list.cpp
    engines/ultima/ultima8/usecode/uc_list.h
    engines/ultima/ultima8/usecode/uc_machine.cpp
    engines/ultima/ultima8/usecode/uc_machine.h
    engines/ultima/ultima8/usecode/uc_process.cpp
    engines/ultima/ultima8/usecode/uc_process.h
    engines/ultima/ultima8/usecode/uc_stack.cpp
    engines/ultima/ultima8/usecode/uc_stack.h
    engines/ultima/ultima8/usecode/usecode_flex.h
    engines/ultima/ultima8/world/actors/actor.cpp
    engines/ultima/ultima8/world/actors/actor.h
    engines/ultima/ultima8/world/actors/actor_anim_process.cpp
    engines/ultima/ultima8/world/actors/actor_anim_process.h
    engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
    engines/ultima/ultima8/world/actors/actor_bark_notify_process.h
    engines/ultima/ultima8/world/actors/ambush_process.cpp
    engines/ultima/ultima8/world/actors/ambush_process.h
    engines/ultima/ultima8/world/actors/animation_tracker.cpp
    engines/ultima/ultima8/world/actors/animation_tracker.h
    engines/ultima/ultima8/world/actors/avatar_death_process.cpp
    engines/ultima/ultima8/world/actors/avatar_death_process.h
    engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
    engines/ultima/ultima8/world/actors/avatar_gravity_process.h
    engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/avatar_mover_process.h
    engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
    engines/ultima/ultima8/world/actors/clear_feign_death_process.h
    engines/ultima/ultima8/world/actors/combat_process.cpp
    engines/ultima/ultima8/world/actors/combat_process.h
    engines/ultima/ultima8/world/actors/grant_peace_process.cpp
    engines/ultima/ultima8/world/actors/grant_peace_process.h
    engines/ultima/ultima8/world/actors/heal_process.cpp
    engines/ultima/ultima8/world/actors/heal_process.h
    engines/ultima/ultima8/world/actors/loiter_process.cpp
    engines/ultima/ultima8/world/actors/loiter_process.h
    engines/ultima/ultima8/world/actors/main_actor.cpp
    engines/ultima/ultima8/world/actors/main_actor.h
    engines/ultima/ultima8/world/actors/pathfinder_process.cpp
    engines/ultima/ultima8/world/actors/pathfinder_process.h
    engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h
    engines/ultima/ultima8/world/actors/resurrection_process.cpp
    engines/ultima/ultima8/world/actors/resurrection_process.h
    engines/ultima/ultima8/world/actors/scheduler_process.cpp
    engines/ultima/ultima8/world/actors/scheduler_process.h
    engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
    engines/ultima/ultima8/world/actors/targeted_anim_process.h
    engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
    engines/ultima/ultima8/world/actors/teleport_to_egg_process.h
    engines/ultima/ultima8/world/camera_process.cpp
    engines/ultima/ultima8/world/camera_process.h
    engines/ultima/ultima8/world/container.cpp
    engines/ultima/ultima8/world/container.h
    engines/ultima/ultima8/world/create_item_process.cpp
    engines/ultima/ultima8/world/create_item_process.h
    engines/ultima/ultima8/world/current_map.cpp
    engines/ultima/ultima8/world/current_map.h
    engines/ultima/ultima8/world/destroy_item_process.cpp
    engines/ultima/ultima8/world/destroy_item_process.h
    engines/ultima/ultima8/world/egg.cpp
    engines/ultima/ultima8/world/egg.h
    engines/ultima/ultima8/world/egg_hatcher_process.cpp
    engines/ultima/ultima8/world/egg_hatcher_process.h
    engines/ultima/ultima8/world/fireball_process.cpp
    engines/ultima/ultima8/world/fireball_process.h
    engines/ultima/ultima8/world/glob_egg.cpp
    engines/ultima/ultima8/world/glob_egg.h
    engines/ultima/ultima8/world/gravity_process.cpp
    engines/ultima/ultima8/world/gravity_process.h
    engines/ultima/ultima8/world/item.cpp
    engines/ultima/ultima8/world/item.h
    engines/ultima/ultima8/world/item_factory.h
    engines/ultima/ultima8/world/map.cpp
    engines/ultima/ultima8/world/map.h
    engines/ultima/ultima8/world/map_glob.cpp
    engines/ultima/ultima8/world/map_glob.h
    engines/ultima/ultima8/world/monster_egg.cpp
    engines/ultima/ultima8/world/monster_egg.h
    engines/ultima/ultima8/world/split_item_process.cpp
    engines/ultima/ultima8/world/split_item_process.h
    engines/ultima/ultima8/world/sprite_process.cpp
    engines/ultima/ultima8/world/sprite_process.h
    engines/ultima/ultima8/world/teleport_egg.cpp
    engines/ultima/ultima8/world/teleport_egg.h
    engines/ultima/ultima8/world/world.cpp
    engines/ultima/ultima8/world/world.h


diff --git a/engines/ultima/ultima8/audio/audio_process.cpp b/engines/ultima/ultima8/audio/audio_process.cpp
index cf18f030d9..f56b288693 100644
--- a/engines/ultima/ultima8/audio/audio_process.cpp
+++ b/engines/ultima/ultima8/audio/audio_process.cpp
@@ -178,18 +178,18 @@ void AudioProcess::saveData(Common::WriteStream *ws) {
 	}
 }
 
-bool AudioProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool AudioProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	uint32 count = ids->readByte();
+	uint32 count = rs->readByte();
 
 	while (count--) {
-		int16 sfxNum = ids->readUint16LE();
-		int16 priority = ids->readUint16LE();
-		int16 objId = ids->readUint16LE();
-		int16 loops = ids->readUint16LE();
-		uint32 pitchShift = ids->readUint32LE();
-		uint16 volume = ids->readUint16LE();
+		int16 sfxNum = rs->readUint16LE();
+		int16 priority = rs->readUint16LE();
+		int16 objId = rs->readUint16LE();
+		int16 loops = rs->readUint16LE();
+		uint32 pitchShift = rs->readUint32LE();
+		uint16 volume = rs->readUint16LE();
 
 		if (sfxNum != -1) { // SFX
 			int16 lVol = 0;
@@ -200,10 +200,10 @@ bool AudioProcess::loadData(IDataSource *ids, uint32 version) {
 			}
 			playSFX(sfxNum, priority, objId, loops, false, pitchShift, volume, lVol, rVol);
 		} else {                // Speech
-			uint32 slen = ids->readUint32LE();
+			uint32 slen = rs->readUint32LE();
 
 			char *buf = new char[slen + 1];
-			ids->read(buf, slen);
+			rs->read(buf, slen);
 			buf[slen] = 0;
 			Std::string text = buf;
 			delete[] buf;
diff --git a/engines/ultima/ultima8/audio/audio_process.h b/engines/ultima/ultima8/audio/audio_process.h
index 1a0da7aacd..8e0cb87905 100644
--- a/engines/ultima/ultima8/audio/audio_process.h
+++ b/engines/ultima/ultima8/audio/audio_process.h
@@ -116,7 +116,7 @@ public:
 	//! stop all samples except speech
 	void stopAllExceptSpeech();
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 private:
 	void saveData(Common::WriteStream *ws) override;
diff --git a/engines/ultima/ultima8/audio/audio_sample.h b/engines/ultima/ultima8/audio/audio_sample.h
index 63574955ab..38bd4bfed0 100644
--- a/engines/ultima/ultima8/audio/audio_sample.h
+++ b/engines/ultima/ultima8/audio/audio_sample.h
@@ -26,8 +26,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-
 class AudioSample {
 protected:
 	uint32  _sampleRate;
diff --git a/engines/ultima/ultima8/audio/music_flex.cpp b/engines/ultima/ultima8/audio/music_flex.cpp
index 25d3d96b56..09db8ac7a2 100644
--- a/engines/ultima/ultima8/audio/music_flex.cpp
+++ b/engines/ultima/ultima8/audio/music_flex.cpp
@@ -24,6 +24,7 @@
 
 #include "ultima/ultima8/audio/music_flex.h"
 #include "ultima/ultima8/filesys/idata_source.h"
+#include "common/memstream.h"
 
 namespace Ultima {
 namespace Ultima8 {
@@ -31,7 +32,7 @@ namespace Ultima8 {
 DEFINE_RUNTIME_CLASSTYPE_CODE(MusicFlex, Archive)
 
 
-MusicFlex::MusicFlex(IDataSource *ds) : Archive(ds), _songs(nullptr) {
+MusicFlex::MusicFlex(Common::SeekableReadStream *rs) : Archive(rs), _songs(nullptr) {
 	Std::memset(_info, 0, sizeof(SongInfo *) * 128);
 	loadSongInfo();
 }
@@ -85,10 +86,10 @@ bool MusicFlex::isCached(uint32 index) const {
 	return (_songs[index] != nullptr);
 }
 
-IDataSource *MusicFlex::getAdlibTimbres() {
+Common::SeekableReadStream *MusicFlex::getAdlibTimbres() {
 	uint32 size;
 	const uint8 *data = getRawObject(259, &size);
-	return new IBufferDataSource(data, size, false, true);
+	return new Common::MemoryReadStream(data, size, DisposeAfterUse::YES);
 }
 
 void MusicFlex::loadSongInfo() {
diff --git a/engines/ultima/ultima8/audio/music_flex.h b/engines/ultima/ultima8/audio/music_flex.h
index 1d883f0ca8..490566d6bd 100644
--- a/engines/ultima/ultima8/audio/music_flex.h
+++ b/engines/ultima/ultima8/audio/music_flex.h
@@ -45,7 +45,7 @@ public:
 		int         *_transitions[128];
 	};
 
-	MusicFlex(IDataSource *ds);
+	MusicFlex(Common::SeekableReadStream *rs);
 	~MusicFlex() override;
 
 	//! Get an xmidi
@@ -55,7 +55,7 @@ public:
 	const SongInfo *getSongInfo(uint32 index) const;
 
 	//! Get the Adlib Timbres (index 259)
-	IDataSource *getAdlibTimbres();
+	Common::SeekableReadStream *getAdlibTimbres();
 
 	void cache(uint32 index) override;
 	void uncache(uint32 index) override;
diff --git a/engines/ultima/ultima8/audio/music_process.cpp b/engines/ultima/ultima8/audio/music_process.cpp
index 8b2497b233..45b0645e9b 100644
--- a/engines/ultima/ultima8/audio/music_process.cpp
+++ b/engines/ultima/ultima8/audio/music_process.cpp
@@ -235,14 +235,14 @@ void MusicProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint32LE(static_cast<uint32>(_trackState._queued));
 }
 
-bool MusicProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool MusicProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_trackState._wanted = static_cast<int32>(ids->readUint32LE());
+	_trackState._wanted = static_cast<int32>(rs->readUint32LE());
 
 	if (version >= 4) {
-		_trackState._lastRequest = static_cast<int32>(ids->readUint32LE());
-		_trackState._queued = static_cast<int32>(ids->readUint32LE());
+		_trackState._lastRequest = static_cast<int32>(rs->readUint32LE());
+		_trackState._queued = static_cast<int32>(rs->readUint32LE());
 	} else {
 		_trackState._lastRequest = _trackState._wanted;
 		_trackState._queued = 0;
diff --git a/engines/ultima/ultima8/audio/music_process.h b/engines/ultima/ultima8/audio/music_process.h
index bd6fbd01d3..50bb41e043 100644
--- a/engines/ultima/ultima8/audio/music_process.h
+++ b/engines/ultima/ultima8/audio/music_process.h
@@ -113,7 +113,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/audio/sound_flex.cpp b/engines/ultima/ultima8/audio/sound_flex.cpp
index 6e6e65ddb6..5b35b6e76f 100644
--- a/engines/ultima/ultima8/audio/sound_flex.cpp
+++ b/engines/ultima/ultima8/audio/sound_flex.cpp
@@ -32,7 +32,7 @@ namespace Ultima8 {
 DEFINE_RUNTIME_CLASSTYPE_CODE(SoundFlex, Archive)
 
 
-SoundFlex::SoundFlex(IDataSource *ds) : Archive(ds), _samples(nullptr) {
+SoundFlex::SoundFlex(Common::SeekableReadStream *rs) : Archive(rs), _samples(nullptr) {
 }
 
 SoundFlex::~SoundFlex() {
diff --git a/engines/ultima/ultima8/audio/sound_flex.h b/engines/ultima/ultima8/audio/sound_flex.h
index 127434e201..1bf002b447 100644
--- a/engines/ultima/ultima8/audio/sound_flex.h
+++ b/engines/ultima/ultima8/audio/sound_flex.h
@@ -35,7 +35,7 @@ class SoundFlex : protected Archive {
 public:
 	ENABLE_RUNTIME_CLASSTYPE()
 
-	SoundFlex(IDataSource *ds);
+	SoundFlex(Common::SeekableReadStream *rs);
 	~SoundFlex() override;
 
 	//! Get an audiosample
diff --git a/engines/ultima/ultima8/audio/speech_flex.cpp b/engines/ultima/ultima8/audio/speech_flex.cpp
index f01c0ff3fd..6370c789ef 100644
--- a/engines/ultima/ultima8/audio/speech_flex.cpp
+++ b/engines/ultima/ultima8/audio/speech_flex.cpp
@@ -31,7 +31,7 @@ namespace Ultima8 {
 // p_dynamic_class stuff
 DEFINE_RUNTIME_CLASSTYPE_CODE(SpeechFlex, SoundFlex)
 
-SpeechFlex::SpeechFlex(IDataSource *ds) : SoundFlex(ds) {
+SpeechFlex::SpeechFlex(Common::SeekableReadStream *rs) : SoundFlex(rs) {
 	uint32 size = getRawSize(0);
 	const uint8 *buf = getRawObject(0);
 
diff --git a/engines/ultima/ultima8/audio/speech_flex.h b/engines/ultima/ultima8/audio/speech_flex.h
index c9ae9c9cf3..95cb2f03e3 100644
--- a/engines/ultima/ultima8/audio/speech_flex.h
+++ b/engines/ultima/ultima8/audio/speech_flex.h
@@ -37,7 +37,7 @@ public:
 	// p_dynamic_class stuff
 	ENABLE_RUNTIME_CLASSTYPE()
 
-	SpeechFlex(IDataSource *ds);
+	SpeechFlex(Common::SeekableReadStream *rs);
 	~SpeechFlex(void) override;
 
 	int getIndexForPhrase(const Std::string &phrase,
diff --git a/engines/ultima/ultima8/conf/ini_file.cpp b/engines/ultima/ultima8/conf/ini_file.cpp
index c740252267..68387f5d50 100644
--- a/engines/ultima/ultima8/conf/ini_file.cpp
+++ b/engines/ultima/ultima8/conf/ini_file.cpp
@@ -293,7 +293,7 @@ void INIFile::write() {
 	if (!_isFile || _readOnly)
 		return;
 
-	ODataSource *f = FileSystem::get_instance()->WriteFile(_filename, true);
+	Common::WriteStream *f = FileSystem::get_instance()->WriteFile(_filename, true);
 	if (!f) return;
 
 	Std::string s = dump();
diff --git a/engines/ultima/ultima8/convert/u8/convert_usecode_u8.h b/engines/ultima/ultima8/convert/u8/convert_usecode_u8.h
index dd242f6df1..d73478a982 100644
--- a/engines/ultima/ultima8/convert/u8/convert_usecode_u8.h
+++ b/engines/ultima/ultima8/convert/u8/convert_usecode_u8.h
@@ -40,18 +40,18 @@ public:
 	{
 		uint32 _maxOffset;
 	};
-	uint32 readUint32LE(IDataSource *) { return 0; }
+	uint32 readUint32LE(Common::SeekableReadStream *) { return 0; }
 	uint32 _curOffset;
 
 	virtual const char* const *intrinsics()=0;
 	virtual const char* const *event_names()=0;
-	virtual void readheader(IDataSource *ucfile, UsecodeHeader &uch, uint32 &curOffset)=0;
-	virtual void readevents(IDataSource *ucfile, const UsecodeHeader &uch)=0;
-	virtual void readOp(TempOp &op, IDataSource *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done)=0;
-	virtual Node *readOp(IDataSource *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done)=0;
-	void readOpGeneric(TempOp &, IDataSource *, uint32 &, Std::vector<DebugSymbol> &,
+	virtual void readheader(Common::SeekableReadStream *ucfile, UsecodeHeader &uch, uint32 &curOffset)=0;
+	virtual void readevents(Common::SeekableReadStream *ucfile, const UsecodeHeader &uch)=0;
+	virtual void readOp(TempOp &op, Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done)=0;
+	virtual Node *readOp(Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done)=0;
+	void readOpGeneric(TempOp &, Common::SeekableReadStream *, uint32 &, Std::vector<DebugSymbol> &,
 		bool &, const bool ) { }
-	Node *readOpGeneric(IDataSource *, uint32 &, Std::vector<DebugSymbol> &,
+	Node *readOpGeneric(Common::SeekableReadStream *, uint32 &, Std::vector<DebugSymbol> &,
 		bool &, const bool ) { return nullptr; }
 };
 
@@ -67,8 +67,8 @@ class ConvertUsecodeU8 : public ConvertUsecode {
 public:
 	const char* const *intrinsics() override  { return _intrinsics;  };
 	const char* const *event_names() override { return _event_names; };
-	void readheader(IDataSource *ucfile, UsecodeHeader &uch, uint32 &curOffset_) override;
-	void readevents(IDataSource *ucfile, const UsecodeHeader &/*uch*/) override
+	void readheader(Common::SeekableReadStream *ucfile, UsecodeHeader &uch, uint32 &curOffset_) override;
+	void readevents(Common::SeekableReadStream *ucfile, const UsecodeHeader &/*uch*/) override
 	{
 #ifndef INCLUDE_CONVERTUSECODEU8_WITHOUT_BRINGING_IN_FOLD
 		EventMap.clear();
@@ -83,9 +83,9 @@ public:
 #endif
 	}
 
-	void readOp(TempOp &op, IDataSource *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done) override
+	void readOp(TempOp &op, Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done) override
 	{ readOpGeneric(op, ucfile, dbg_symbol_offset, debugSymbols, done, false); };
-	Node *readOp(IDataSource *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done) override
+	Node *readOp(Common::SeekableReadStream *ucfile, uint32 &dbg_symbol_offset, Std::vector<DebugSymbol> &debugSymbols, bool &done) override
 	{ return readOpGeneric(ucfile, dbg_symbol_offset, debugSymbols, done, false); };
 
 	
@@ -409,7 +409,7 @@ const char * const ConvertUsecodeU8::_event_names[] = {
 	0
 };
 
-void ConvertUsecodeU8::readheader(IDataSource *ucfile, UsecodeHeader &uch, uint32 &curOffset_) {
+void ConvertUsecodeU8::readheader(Common::SeekableReadStream *ucfile, UsecodeHeader &uch, uint32 &curOffset_) {
 	#ifdef DISASM_DEBUG
 	perr << Std::setfill('0') << Std::hex;
 	perr << "unknown1: " << Std::setw(4) << readUint32LE(ucfile) << endl; // unknown
diff --git a/engines/ultima/ultima8/filesys/archive.cpp b/engines/ultima/ultima8/filesys/archive.cpp
index 360e1cbef8..82a51af926 100644
--- a/engines/ultima/ultima8/filesys/archive.cpp
+++ b/engines/ultima/ultima8/filesys/archive.cpp
@@ -49,8 +49,8 @@ Archive::Archive(ArchiveFile *af) : _count(0) {
 	addSource(af);
 }
 
-Archive::Archive(IDataSource *ids) : _count(0) {
-	addSource(ids);
+Archive::Archive(Common::SeekableReadStream *rs) : _count(0) {
+	addSource(rs);
 }
 
 bool Archive::addSource(ArchiveFile *af) {
@@ -62,15 +62,15 @@ bool Archive::addSource(ArchiveFile *af) {
 	return true;
 }
 
-bool Archive::addSource(IDataSource *ids) {
+bool Archive::addSource(Common::SeekableReadStream *rs) {
 	ArchiveFile *s = nullptr;
 
-	if (!ids) return false;
+	if (!rs) return false;
 
-	if (FlexFile::isFlexFile(ids)) {
-		s = new FlexFile(ids);
-	} else if (U8SaveFile::isU8SaveFile(ids)) {
-		s = new U8SaveFile(ids);
+	if (FlexFile::isFlexFile(rs)) {
+		s = new FlexFile(rs);
+	} else if (U8SaveFile::isU8SaveFile(rs)) {
+		s = new U8SaveFile(rs);
 	}
 
 	if (!s) return false;
diff --git a/engines/ultima/ultima8/filesys/archive.h b/engines/ultima/ultima8/filesys/archive.h
index 3b384a59ec..b8ba8d4880 100644
--- a/engines/ultima/ultima8/filesys/archive.h
+++ b/engines/ultima/ultima8/filesys/archive.h
@@ -31,7 +31,6 @@ namespace Ultima {
 namespace Ultima8 {
 
 class ArchiveFile;
-class IDataSource;
 
 class Archive {
 public:
@@ -45,7 +44,7 @@ public:
 
 	//! create Archive with a single input source, autodetecting the type
 	//! Will create FlexFile, U8SaveFile or ZipFile; ids will be deleted.
-	explicit Archive(IDataSource *ids);
+	explicit Archive(Common::SeekableReadStream *rs);
 
 	virtual ~Archive();
 
@@ -56,7 +55,7 @@ public:
 	bool addSource(ArchiveFile *af);
 
 	//! add input source, autodetecting the type (as the constructor)
-	bool addSource(IDataSource *ids);
+	bool addSource(Common::SeekableReadStream *rs);
 
 	//! Cache all objects
 	void cache();
diff --git a/engines/ultima/ultima8/filesys/archive_file.cpp b/engines/ultima/ultima8/filesys/archive_file.cpp
index 54bbd75819..bcf52a14f1 100644
--- a/engines/ultima/ultima8/filesys/archive_file.cpp
+++ b/engines/ultima/ultima8/filesys/archive_file.cpp
@@ -24,6 +24,7 @@
 
 #include "ultima/ultima8/filesys/archive_file.h"
 #include "ultima/ultima8/filesys/idata_source.h"
+#include "common/memstream.h"
 
 namespace Ultima {
 namespace Ultima8 {
@@ -49,24 +50,24 @@ bool ArchiveFile::extractIndexFromName(const Std::string &name, uint32 &index) {
 	return true;
 }
 
-IDataSource *ArchiveFile::getDataSource(uint32 index, bool is_text) {
+Common::SeekableReadStream *ArchiveFile::getDataSource(uint32 index, bool is_text) {
 	uint32 size;
 	uint8 *buf = getObject(index, &size);
 
 	if (!buf)
 		return nullptr;
 
-	return new IBufferDataSource(buf, size, is_text, true);
+	return new Common::MemoryReadStream(buf, size, DisposeAfterUse::YES);
 }
 
-IDataSource *ArchiveFile::getDataSource(const Std::string &name, bool is_text) {
+Common::SeekableReadStream *ArchiveFile::getDataSource(const Std::string &name, bool is_text) {
 	uint32 size;
 	uint8 *buf = getObject(name, &size);
 
 	if (!buf)
 		return nullptr;
 
-	return new IBufferDataSource(buf, size, is_text, true);
+	return new Common::MemoryReadStream(buf, size, DisposeAfterUse::YES);
 }
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/filesys/archive_file.h b/engines/ultima/ultima8/filesys/archive_file.h
index be56461bed..54db7dfde6 100644
--- a/engines/ultima/ultima8/filesys/archive_file.h
+++ b/engines/ultima/ultima8/filesys/archive_file.h
@@ -29,8 +29,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-
 class ArchiveFile {
 public:
 	ENABLE_RUNTIME_CLASSTYPE_BASE()
@@ -80,13 +78,13 @@ public:
 	//! \param index index of object to get size of
 	virtual uint32 getSize(const Std::string &name) const = 0;
 
-	//! Get object as an IDataSource
-	//! Delete the IDataSource afterwards; that will delete the data as well
-	IDataSource *getDataSource(uint32 index, bool is_text = false);
+	//! Get object as a Common::SeekableReadStream
+	//! Delete the SeekableReadStream afterwards; that will delete the data as well
+	Common::SeekableReadStream *getDataSource(uint32 index, bool is_text = false);
 
-	//! Get named object as an IDataSource
-	//! Delete the IDataSource afterwards; that will delete the data as well
-	IDataSource *getDataSource(const Std::string &name, bool is_text = false);
+	//! Get named as a Common::SeekableReadStream
+	//! Delete the SeekableReadStream afterwards; that will delete the data as well
+	Common::SeekableReadStream *getDataSource(const Std::string &name, bool is_text = false);
 
 	//! Get upper bound for number of objects.
 	//! In an indexed file this is (probably) the highest index plus one,
diff --git a/engines/ultima/ultima8/filesys/file_system.cpp b/engines/ultima/ultima8/filesys/file_system.cpp
index 54881028fc..dc17daa848 100644
--- a/engines/ultima/ultima8/filesys/file_system.cpp
+++ b/engines/ultima/ultima8/filesys/file_system.cpp
@@ -66,14 +66,14 @@ IDataSource *FileSystem::ReadFile(const string &vfn, bool is_text) {
 }
 
 // Open a streaming file as writeable. Streamed (0 on failure)
-ODataSource *FileSystem::WriteFile(const string &vfn, bool is_text) {
+Common::WriteStream *FileSystem::WriteFile(const string &vfn, bool is_text) {
 	string filename = vfn;
 	Common::WriteStream *writeStream;
 
 	if (!rawOpen(writeStream, filename))
 		return nullptr;
 
-	return new OFileDataSource(writeStream);
+	return writeStream;
 }
 
 bool FileSystem::rawOpen(Common::SeekableReadStream *&in, const string &fname) {
diff --git a/engines/ultima/ultima8/filesys/file_system.h b/engines/ultima/ultima8/filesys/file_system.h
index fe8a7e05d2..b534310652 100644
--- a/engines/ultima/ultima8/filesys/file_system.h
+++ b/engines/ultima/ultima8/filesys/file_system.h
@@ -53,8 +53,8 @@ public:
 	//! Open a file as writable. Streamed.
 	//! \param vfn the (virtual) filename
 	//! \param is_text open in text mode?
-	//! \return nullptr on failure
-	ODataSource *WriteFile(const Std::string &vfn, bool is_text = false);
+	//! \return a new writestream, or nullptr on failure
+	Common::WriteStream *WriteFile(const Std::string &vfn, bool is_text = false);
 
 	//! Mount a virtual path
 	//! \param vpath the name of the vpath (should start with '@')
diff --git a/engines/ultima/ultima8/filesys/flex_file.cpp b/engines/ultima/ultima8/filesys/flex_file.cpp
index d912a65bfe..2b2e3f8a6f 100644
--- a/engines/ultima/ultima8/filesys/flex_file.cpp
+++ b/engines/ultima/ultima8/filesys/flex_file.cpp
@@ -31,25 +31,25 @@ DEFINE_RUNTIME_CLASSTYPE_CODE(FlexFile, ArchiveFile)
 
 
 
-FlexFile::FlexFile(IDataSource *ds_) : _ds(ds_), _count(0) {
-	_valid = isFlexFile(_ds);
+FlexFile::FlexFile(Common::SeekableReadStream *rs_) : _rs(rs_), _count(0) {
+	_valid = isFlexFile(_rs);
 
 	if (_valid) {
-		_ds->seek(0x54);
-		_count = _ds->readUint32LE();
+		_rs->seek(0x54);
+		_count = _rs->readUint32LE();
 	}
 }
 
 FlexFile::~FlexFile() {
-	delete _ds;
+	delete _rs;
 }
 
 //static
-bool FlexFile::isFlexFile(IDataSource *_ds) {
-	_ds->seek(0);
+bool FlexFile::isFlexFile(Common::SeekableReadStream *_rs) {
+	_rs->seek(0);
 	int i;
 	char buf[0x52];
-	_ds->read(buf, 0x52);
+	_rs->read(buf, 0x52);
 
 	for (i = 0; i < 0x52; ++i) {
 		if (buf[i] == 0x1A) break;
@@ -65,8 +65,8 @@ bool FlexFile::isFlexFile(IDataSource *_ds) {
 }
 
 uint32 FlexFile::getOffset(uint32 index) {
-	_ds->seek(0x80 + 8 * index);
-	return _ds->readUint32LE();
+	_rs->seek(0x80 + 8 * index);
+	return _rs->readUint32LE();
 }
 
 uint8 *FlexFile::getObject(uint32 index, uint32 *sizep) {
@@ -80,8 +80,8 @@ uint8 *FlexFile::getObject(uint32 index, uint32 *sizep) {
 	uint8 *object = new uint8[size];
 	uint32 offset = getOffset(index);
 
-	_ds->seek(offset);
-	_ds->read(object, size);
+	_rs->seek(offset);
+	_rs->read(object, size);
 
 	if (sizep) *sizep = size;
 
@@ -91,8 +91,8 @@ uint8 *FlexFile::getObject(uint32 index, uint32 *sizep) {
 uint32 FlexFile::getSize(uint32 index) const {
 	if (index >= _count) return 0;
 
-	_ds->seek(0x84 + 8 * index);
-	uint32 length = _ds->readUint32LE();
+	_rs->seek(0x84 + 8 * index);
+	uint32 length = _rs->readUint32LE();
 
 	return length;
 }
diff --git a/engines/ultima/ultima8/filesys/flex_file.h b/engines/ultima/ultima8/filesys/flex_file.h
index e0b6cf9a4d..819b04b5cf 100644
--- a/engines/ultima/ultima8/filesys/flex_file.h
+++ b/engines/ultima/ultima8/filesys/flex_file.h
@@ -29,15 +29,13 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-
 class FlexFile : public ArchiveFile {
 public:
 	ENABLE_RUNTIME_CLASSTYPE()
 
 	//! create FlexFile from datasource; FlexFile takes ownership of ds
 	//! and deletes it when destructed
-	explicit FlexFile(IDataSource *ds);
+	explicit FlexFile(Common::SeekableReadStream *rs);
 	~FlexFile() override;
 
 	bool exists(uint32 index) override {
@@ -85,12 +83,12 @@ public:
 		return false;
 	}
 
-	static bool isFlexFile(IDataSource *ds);
+	static bool isFlexFile(Common::SeekableReadStream *rs);
 
 protected:
 	bool nameToIndex(const Std::string &name, uint32 &index) const;
 
-	IDataSource *_ds;
+	Common::SeekableReadStream *_rs;
 	uint32 _count;
 
 private:
diff --git a/engines/ultima/ultima8/filesys/odata_source.h b/engines/ultima/ultima8/filesys/odata_source.h
index c4a2f1bc46..a616d9a53c 100644
--- a/engines/ultima/ultima8/filesys/odata_source.h
+++ b/engines/ultima/ultima8/filesys/odata_source.h
@@ -61,44 +61,6 @@ public:
 };
 
 
-class OFileDataSource : public ODataSource {
-private:
-	Common::WriteStream *_out;
-
-public:
-	OFileDataSource(Common::WriteStream *data_stream) : _out(data_stream) {
-	}
-
-	~OFileDataSource() override {
-		FORGET_OBJECT(_out);
-	}
-
-	uint32 write(const void *b, uint32 len) override {
-		return _out->write(b, len);
-	}
-
-	bool seek(int32 pos, int whence = SEEK_SET) override {
-		Common::SeekableWriteStream *ws = dynamic_cast<Common::SeekableWriteStream *>(_out);
-		assert(ws);
-		return ws->seek(pos, whence);
-	}
-
-	int32 size() const override {
-		Common::SeekableWriteStream *ws = dynamic_cast<Common::SeekableWriteStream *>(_out);
-		assert(ws);
-		return ws->size();
-	}
-
-	int32 pos() const override {
-		return _out->pos();
-	}
-
-	Common::WriteStream *GetRawStream() override {
-		return _out;
-	}
-};
-
-
 class OAutoBufferDataSource: public ODataSource {
 protected:
 	uint8 *_buf;
diff --git a/engines/ultima/ultima8/filesys/raw_archive.h b/engines/ultima/ultima8/filesys/raw_archive.h
index 7f3385b72a..f2c180bc4c 100644
--- a/engines/ultima/ultima8/filesys/raw_archive.h
+++ b/engines/ultima/ultima8/filesys/raw_archive.h
@@ -38,7 +38,7 @@ public:
 
 	RawArchive() : Archive() { }
 	explicit RawArchive(ArchiveFile *af) : Archive(af) { }
-	explicit RawArchive(IDataSource *ids) : Archive(ids) { }
+	explicit RawArchive(Common::SeekableReadStream *rs) : Archive(rs) { }
 
 	~RawArchive() override;
 
diff --git a/engines/ultima/ultima8/filesys/savegame.h b/engines/ultima/ultima8/filesys/savegame.h
index 4fd09a318c..ad505eb11f 100644
--- a/engines/ultima/ultima8/filesys/savegame.h
+++ b/engines/ultima/ultima8/filesys/savegame.h
@@ -34,7 +34,6 @@ namespace Ultima8 {
 
 class ZipFile;
 class IDataSource;
-class ODataSource;
 class OAutoBufferDataSource;
 
 class SavegameReader {
diff --git a/engines/ultima/ultima8/filesys/u8_save_file.cpp b/engines/ultima/ultima8/filesys/u8_save_file.cpp
index 48a28f24c2..ad3d101e7c 100644
--- a/engines/ultima/ultima8/filesys/u8_save_file.cpp
+++ b/engines/ultima/ultima8/filesys/u8_save_file.cpp
@@ -31,45 +31,45 @@ namespace Ultima8 {
 DEFINE_RUNTIME_CLASSTYPE_CODE(U8SaveFile, NamedArchiveFile)
 
 
-U8SaveFile::U8SaveFile(IDataSource *ds_) : _ds(ds_), _count(0) {
-	_valid = isU8SaveFile(_ds);
+U8SaveFile::U8SaveFile(Common::SeekableReadStream *rs_) : _rs(rs_), _count(0) {
+	_valid = isU8SaveFile(_rs);
 
 	if (_valid)
 		_valid = readMetadata();
 }
 
 U8SaveFile::~U8SaveFile() {
-	delete _ds;
+	delete _rs;
 }
 
 //static
-bool U8SaveFile::isU8SaveFile(IDataSource *_ds) {
-	_ds->seek(0);
+bool U8SaveFile::isU8SaveFile(Common::SeekableReadStream *_rs) {
+	_rs->seek(0);
 	char buf[24];
-	_ds->read(buf, 23);
+	_rs->read(buf, 23);
 	buf[23] = '\0';
 
 	return (Std::strncmp(buf, "Ultima 8 SaveGame File.", 23) == 0);
 }
 
 bool U8SaveFile::readMetadata() {
-	_ds->seek(0x18);
-	_count = _ds->readUint16LE();
+	_rs->seek(0x18);
+	_count = _rs->readUint16LE();
 
 	_offsets.resize(_count);
 	_sizes.resize(_count);
 
 	for (unsigned int i = 0; i < _count; ++i) {
-		uint32 namelen = _ds->readUint32LE();
+		uint32 namelen = _rs->readUint32LE();
 		char *buf = new char[namelen];
-		_ds->read(buf, static_cast<int32>(namelen));
+		_rs->read(buf, static_cast<int32>(namelen));
 		Std::string filename = buf;
 		_indices[filename] = i;
 		storeIndexedName(filename);
 		delete[] buf;
-		_sizes[i] = _ds->readUint32LE();
-		_offsets[i] = _ds->pos();
-		_ds->skip(_sizes[i]); // skip data
+		_sizes[i] = _rs->readUint32LE();
+		_offsets[i] = _rs->pos();
+		_rs->skip(_sizes[i]); // skip data
 	}
 
 	return true;
@@ -100,8 +100,8 @@ uint8 *U8SaveFile::getObject(const Std::string &name, uint32 *sizep) {
 	uint8 *object = new uint8[size];
 	uint32 offset = _offsets[index];
 
-	_ds->seek(offset);
-	_ds->read(object, size);
+	_rs->seek(offset);
+	_rs->read(object, size);
 
 	if (sizep) *sizep = size;
 
diff --git a/engines/ultima/ultima8/filesys/u8_save_file.h b/engines/ultima/ultima8/filesys/u8_save_file.h
index d644130706..de081cf655 100644
--- a/engines/ultima/ultima8/filesys/u8_save_file.h
+++ b/engines/ultima/ultima8/filesys/u8_save_file.h
@@ -30,15 +30,13 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-
 class U8SaveFile : public NamedArchiveFile {
 public:
 	ENABLE_RUNTIME_CLASSTYPE()
 
 	//! create U8SaveFile from datasource; U8SaveFile takes ownership of ds
 	//! and deletes it when destructed
-	explicit U8SaveFile(IDataSource *ds);
+	explicit U8SaveFile(Common::SeekableReadStream *rs);
 	~U8SaveFile() override;
 
 	bool exists(const Std::string &name) override;
@@ -51,10 +49,10 @@ public:
 		return _count;
 	}
 
-	static bool isU8SaveFile(IDataSource *ds);
+	static bool isU8SaveFile(Common::SeekableReadStream *rs);
 
 protected:
-	IDataSource *_ds;
+	Common::SeekableReadStream *_rs;
 	uint32 _count;
 
 	Std::map<Common::String, uint32> _indices;
diff --git a/engines/ultima/ultima8/games/game.h b/engines/ultima/ultima8/games/game.h
index 074eff7aa5..7e1e49cee2 100644
--- a/engines/ultima/ultima8/games/game.h
+++ b/engines/ultima/ultima8/games/game.h
@@ -29,8 +29,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class ODataSource;
-
 class Game {
 public:
 	Game();
diff --git a/engines/ultima/ultima8/games/game_data.cpp b/engines/ultima/ultima8/games/game_data.cpp
index 9178acdcac..dd44fb478c 100644
--- a/engines/ultima/ultima8/games/game_data.cpp
+++ b/engines/ultima/ultima8/games/game_data.cpp
@@ -226,7 +226,7 @@ FrameID GameData::translate(FrameID f) {
 void GameData::loadU8Data() {
 	FileSystem *filesystem = FileSystem::get_instance();
 
-	IDataSource *fd = filesystem->ReadFile("@game/static/fixed.dat");
+	Common::SeekableReadStream *fd = filesystem->ReadFile("@game/static/fixed.dat");
 	if (!fd)
 		error("Unable to load static/fixed.dat");;
 
@@ -241,7 +241,7 @@ void GameData::loadU8Data() {
 	filename += "usecode.flx";
 
 
-	IDataSource *uds = filesystem->ReadFile(filename);
+	Common::SeekableReadStream *uds = filesystem->ReadFile(filename);
 	if (!uds)
 		error("Unable to load %s", filename.c_str());
 
@@ -249,7 +249,7 @@ void GameData::loadU8Data() {
 
 	// Load main shapes
 	pout << "Load Shapes" << Std::endl;
-	IDataSource *sf = filesystem->ReadFile("@game/static/u8shapes.flx");
+	Common::SeekableReadStream *sf = filesystem->ReadFile("@game/static/u8shapes.flx");
 	if (!sf) sf = filesystem->ReadFile("@game/static/u8shapes.cmp");
 
 	if (!sf)
@@ -266,7 +266,7 @@ void GameData::loadU8Data() {
 	config->readConfigFile("@data/u8.ini", "game", true);
 
 	// Load typeflags
-	IDataSource *tfs = filesystem->ReadFile("@game/static/typeflag.dat");
+	Common::SeekableReadStream *tfs = filesystem->ReadFile("@game/static/typeflag.dat");
 	if (!tfs)
 		error("Unable to load static/typeflag.dat");
 
@@ -274,7 +274,7 @@ void GameData::loadU8Data() {
 	delete tfs;
 
 	// Load animdat
-	IDataSource *af = filesystem->ReadFile("@game/static/anim.dat");
+	Common::SeekableReadStream *af = filesystem->ReadFile("@game/static/anim.dat");
 	if (!af)
 		error("Unable to load static/anim.dat");
 
@@ -282,7 +282,7 @@ void GameData::loadU8Data() {
 	delete af;
 
 	// Load weapon overlay data
-	IDataSource *wod = filesystem->ReadFile("@game/static/wpnovlay.dat");
+	Common::SeekableReadStream *wod = filesystem->ReadFile("@game/static/wpnovlay.dat");
 	if (!wod)
 		error("Unable to load static/wpnovlay.dat");
 
@@ -292,7 +292,7 @@ void GameData::loadU8Data() {
 	delete overlayflex;
 
 	// Load _globs
-	IDataSource *gds = filesystem->ReadFile("@game/static/glob.flx");
+	Common::SeekableReadStream *gds = filesystem->ReadFile("@game/static/glob.flx");
 	if (!gds)
 		error("Unable to load static/glob.flx");
 
@@ -301,20 +301,20 @@ void GameData::loadU8Data() {
 	_globs.resize(globflex->getCount());
 	for (unsigned int i = 0; i < globflex->getCount(); ++i) {
 		MapGlob *glob = 0;
-		IDataSource *globds = globflex->get_datasource(i);
+		Common::SeekableReadStream *globrs = globflex->get_datasource(i);
 
-		if (globds && globds->size()) {
+		if (globrs && globrs->size()) {
 			glob = new MapGlob();
-			glob->read(globds);
+			glob->read(globrs);
 		}
-		delete globds;
+		delete globrs;
 
 		_globs[i] = glob;
 	}
 	delete globflex;
 
 	// Load fonts
-	IDataSource *fds = filesystem->ReadFile("@game/static/u8fonts.flx");
+	Common::SeekableReadStream *fds = filesystem->ReadFile("@game/static/u8fonts.flx");
 	if (!fds)
 		error("Unable to load static/u8fonts.flx");
 
@@ -331,14 +331,14 @@ void GameData::loadU8Data() {
 	_mouse->setPalette(PaletteManager::get_instance()->getPalette(PaletteManager::Pal_Game));
 	delete msds;
 
-	IDataSource *gumpds = filesystem->ReadFile("@game/static/u8gumps.flx");
+	Common::SeekableReadStream *gumpds = filesystem->ReadFile("@game/static/u8gumps.flx");
 	if (!gumpds)
 		error("Unable to load static/u8gumps.flx");
 
 	_gumps = new GumpShapeArchive(gumpds, GUMPS,
 	                             PaletteManager::get_instance()->getPalette(PaletteManager::Pal_Game));
 
-	IDataSource *gumpageds = filesystem->ReadFile("@game/static/gumpage.dat");
+	Common::SeekableReadStream *gumpageds = filesystem->ReadFile("@game/static/gumpage.dat");
 	if (!gumpageds)
 		error("Unable to load static/gumpage.dat");
 
@@ -346,13 +346,13 @@ void GameData::loadU8Data() {
 	delete gumpageds;
 
 
-	IDataSource *mf = filesystem->ReadFile("@game/sound/music.flx");
+	Common::SeekableReadStream *mf = filesystem->ReadFile("@game/sound/music.flx");
 	if (!mf)
 		error("Unable to load sound/music.flx");
 
 	_music = new MusicFlex(mf);
 
-	IDataSource *sndflx = filesystem->ReadFile("@game/sound/sound.flx");
+	Common::SeekableReadStream *sndflx = filesystem->ReadFile("@game/sound/sound.flx");
 	if (!sndflx)
 		error("Unable to load sound/sound.flx");
 
@@ -461,7 +461,7 @@ SpeechFlex *GameData::getSpeechFlex(uint32 shapeNum) {
 		return nullptr;
 	}
 
-	IDataSource *sflx = filesystem->ReadFile(u8_sound_ + langletter + num_flx);
+	Common::SeekableReadStream *sflx = filesystem->ReadFile(u8_sound_ + langletter + num_flx);
 	if (sflx) {
 		*s = new SpeechFlex(sflx);
 	}
@@ -475,7 +475,7 @@ SpeechFlex *GameData::getSpeechFlex(uint32 shapeNum) {
 void GameData::loadRemorseData() {
 	FileSystem *filesystem = FileSystem::get_instance();
 
-	IDataSource *fd = filesystem->ReadFile("@game/static/_fixed.dat");
+	Common::SeekableReadStream *fd = filesystem->ReadFile("@game/static/_fixed.dat");
 	if (!fd)
 		error("Unable to load static/_fixed.dat");
 
@@ -490,7 +490,7 @@ void GameData::loadRemorseData() {
 	filename += "usecode.flx";
 
 
-	IDataSource *uds = filesystem->ReadFile(filename);
+	Common::SeekableReadStream *uds = filesystem->ReadFile(filename);
 	if (!uds)
 		error("Unable to load %s", filename.c_str());
 
@@ -498,7 +498,7 @@ void GameData::loadRemorseData() {
 
 	// Load main shapes
 	pout << "Load Shapes" << Std::endl;
-	IDataSource *sf = filesystem->ReadFile("@game/static/shapes.flx");
+	Common::SeekableReadStream *sf = filesystem->ReadFile("@game/static/shapes.flx");
 
 	if (!sf)
 		error("Unable to load static/shapes.flx");
@@ -517,7 +517,7 @@ void GameData::loadRemorseData() {
 	config->readConfigFile("@data/remorse.ini", "game", true);
 
 	// Load typeflags
-	IDataSource *tfs = filesystem->ReadFile("@game/static/typeflag.dat");
+	Common::SeekableReadStream *tfs = filesystem->ReadFile("@game/static/typeflag.dat");
 	if (!tfs)
 		error("Unable to load static/typeflag.dat");
 
@@ -525,7 +525,7 @@ void GameData::loadRemorseData() {
 	delete tfs;
 
 	// Load animdat
-	IDataSource *af = filesystem->ReadFile("@game/static/anim.dat");
+	Common::SeekableReadStream *af = filesystem->ReadFile("@game/static/anim.dat");
 	if (!af)
 		error("Unable to load static/anim.dat");
 
@@ -533,7 +533,7 @@ void GameData::loadRemorseData() {
 	delete af;
 
 	// Load weapon overlay data
-	IDataSource *wod = filesystem->ReadFile("@game/static/wpnovlay.dat");
+	Common::SeekableReadStream *wod = filesystem->ReadFile("@game/static/wpnovlay.dat");
 	if (!wod)
 		error("Unable to load static/wpnovlay.dat");
 
@@ -543,7 +543,7 @@ void GameData::loadRemorseData() {
 	delete overlayflex;
 
 	// Load globs
-	IDataSource *gds = filesystem->ReadFile("@game/static/glob.flx");
+	Common::SeekableReadStream *gds = filesystem->ReadFile("@game/static/glob.flx");
 	if (!gds)
 		error("Unable to load static/glob.flx");
 
@@ -552,20 +552,20 @@ void GameData::loadRemorseData() {
 	_globs.resize(globflex->getCount());
 	for (unsigned int i = 0; i < globflex->getCount(); ++i) {
 		MapGlob *glob = 0;
-		IDataSource *globds = globflex->get_datasource(i);
+		Common::SeekableReadStream *globrs = globflex->get_datasource(i);
 
-		if (globds && globds->size()) {
+		if (globrs && globrs->size()) {
 			glob = new MapGlob();
-			glob->read(globds);
+			glob->read(globrs);
 		}
-		delete globds;
+		delete globrs;
 
 		_globs[i] = glob;
 	}
 	delete globflex;
 
 	// Load fonts
-	IDataSource *fds = filesystem->ReadFile("@game/static/_fonts.flx");
+	Common::SeekableReadStream *fds = filesystem->ReadFile("@game/static/_fonts.flx");
 	if (!fds)
 		error("Unable to load static/_fonts.flx");
 
@@ -582,7 +582,7 @@ void GameData::loadRemorseData() {
 	_mouse->setPalette(PaletteManager::get_instance()->getPalette(PaletteManager::Pal_Game));
 	delete msds;
 
-	IDataSource *gumpds = filesystem->ReadFile("@game/static/_gumps.flx");
+	Common::SeekableReadStream *gumpds = filesystem->ReadFile("@game/static/_gumps.flx");
 	if (!gumpds)
 		error("Unable to load static/_gumps.flx");
 
@@ -590,7 +590,7 @@ void GameData::loadRemorseData() {
 		PaletteManager::get_instance()->getPalette(PaletteManager::Pal_Game));
 
 #if 0
-	IDataSource *gumpageds = filesystem->ReadFile("@game/static/gumpage.dat");
+	Common::SeekableReadStream *gumpageds = filesystem->ReadFile("@game/static/gumpage.dat");
 	if (!gumpageds)
 		error("Unable to load static/gumpage.dat");
 
@@ -598,22 +598,22 @@ void GameData::loadRemorseData() {
 	delete gumpageds;
 #endif
 
-	IDataSource *dummyds = filesystem->ReadFile("@data/empty.flx");
+	Common::SeekableReadStream *dummyrs = filesystem->ReadFile("@data/empty.flx");
 	_music = nullptr; //new MusicFlex(dummyds);
-	delete dummyds;
+	delete dummyrs;
 #if 0
-	IDataSource *mf = filesystem->ReadFile("@game/sound/_music.flx");
+	Common::SeekableReadStream *mf = filesystem->ReadFile("@game/sound/_music.flx");
 	if (!mf)
 		error("Unable to load sound/_music.flx");
 
 	_music = new MusicFlex(mf);
 #endif
 
-	dummyds = filesystem->ReadFile("@data/empty.flx");
-	_soundFlex = new SoundFlex(dummyds);
-	delete dummyds;
+	dummyrs = filesystem->ReadFile("@data/empty.flx");
+	_soundFlex = new SoundFlex(dummyrs);
+	delete dummyrs;
 #if 0
-	IDataSource *sndflx = filesystem->ReadFile("@game/sound/sound.flx");
+	Common::SeekableReadStream *sndflx = filesystem->ReadFile("@game/sound/sound.flx");
 	if (!sndflx)
 		error("Unable to load sound/sound.flx");
 
diff --git a/engines/ultima/ultima8/games/game_info.h b/engines/ultima/ultima8/games/game_info.h
index 97497d4285..7fa02bb1c7 100644
--- a/engines/ultima/ultima8/games/game_info.h
+++ b/engines/ultima/ultima8/games/game_info.h
@@ -29,7 +29,6 @@ namespace Ultima {
 namespace Ultima8 {
 
 class IDataSource;
-class ODataSource;
 
 //! GameInfo contains detailed information about the game
 struct GameInfo {
diff --git a/engines/ultima/ultima8/games/remorse_game.cpp b/engines/ultima/ultima8/games/remorse_game.cpp
index 24ece1acce..a692d96570 100644
--- a/engines/ultima/ultima8/games/remorse_game.cpp
+++ b/engines/ultima/ultima8/games/remorse_game.cpp
@@ -34,6 +34,7 @@
 #include "ultima/ultima8/filesys/raw_archive.h"
 #include "ultima/ultima8/world/item_factory.h"
 #include "ultima/ultima8/world/actors/main_actor.h"
+#include "common/memstream.h"
 
 namespace Ultima {
 namespace Ultima8 {
@@ -54,13 +55,13 @@ RemorseGame::~RemorseGame() {
 bool RemorseGame::loadFiles() {
 	// Load palette
 	pout << "Load Palette" << Std::endl;
-	IDataSource *pf = FileSystem::get_instance()->ReadFile("@game/static/gamepal.pal");
+	Common::SeekableReadStream *pf = FileSystem::get_instance()->ReadFile("@game/static/gamepal.pal");
 	if (!pf) {
 		perr << "Unable to load static/gamepal.pal." << Std::endl;
 		return false;
 	}
 
-	IBufferDataSource xfds(U8XFormPal, 1024);
+	Common::MemoryReadStream xfds(U8XFormPal, 1024);
 	PaletteManager::get_instance()->load(PaletteManager::Pal_Game, *pf, xfds);
 	delete pf;
 
diff --git a/engines/ultima/ultima8/games/start_u8_process.cpp b/engines/ultima/ultima8/games/start_u8_process.cpp
index 11313f473e..9a68ec8ebc 100644
--- a/engines/ultima/ultima8/games/start_u8_process.cpp
+++ b/engines/ultima/ultima8/games/start_u8_process.cpp
@@ -117,8 +117,8 @@ void StartU8Process::saveData(Common::WriteStream *ws) {
 	Process::saveData(ws);
 }
 
-bool StartU8Process::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool StartU8Process::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/games/start_u8_process.h b/engines/ultima/ultima8/games/start_u8_process.h
index 1d56c42c8a..8a863f329a 100644
--- a/engines/ultima/ultima8/games/start_u8_process.h
+++ b/engines/ultima/ultima8/games/start_u8_process.h
@@ -46,7 +46,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/games/u8_game.cpp b/engines/ultima/ultima8/games/u8_game.cpp
index d0b2e55e31..f88ab21228 100644
--- a/engines/ultima/ultima8/games/u8_game.cpp
+++ b/engines/ultima/ultima8/games/u8_game.cpp
@@ -44,6 +44,7 @@
 #include "ultima/ultima8/audio/music_process.h"
 #include "ultima/ultima8/games/start_u8_process.h"
 #include "ultima/ultima8/world/get_object.h"
+#include "common/memstream.h"
 
 namespace Ultima {
 namespace Ultima8 {
@@ -71,14 +72,14 @@ U8Game::~U8Game() {
 bool U8Game::loadFiles() {
 	// Load palette
 	pout << "Load Palette" << Std::endl;
-	IDataSource *pf = FileSystem::get_instance()->ReadFile("@game/static/u8pal.pal");
+	Common::SeekableReadStream *pf = FileSystem::get_instance()->ReadFile("@game/static/u8pal.pal");
 	if (!pf) {
 		perr << "Unabl-e to load static/u8pal.pal." << Std::endl;
 		return false;
 	}
 	pf->seek(4); // seek past header
 
-	IBufferDataSource xfds(U8XFormPal, 1024);
+	Common::MemoryReadStream xfds(U8XFormPal, 1024);
 	PaletteManager::get_instance()->load(PaletteManager::Pal_Game, *pf, xfds);
 	delete pf;
 
@@ -102,26 +103,26 @@ bool U8Game::startGame() {
 	// reserve ObjId 666 for the Guardian Bark hack
 	objman->reserveObjId(666);
 
-	IDataSource *saveds = FileSystem::get_instance()->ReadFile("@game/savegame/u8save.000");
-	if (!saveds) {
+	Common::SeekableReadStream *savers = FileSystem::get_instance()->ReadFile("@game/savegame/u8save.000");
+	if (!savers) {
 		perr << "Unable to load savegame/u8save.000." << Std::endl;
 		return false;
 	}
-	U8SaveFile *u8save = new U8SaveFile(saveds);
+	U8SaveFile *u8save = new U8SaveFile(savers);
 
-	IDataSource *nfd = u8save->getDataSource("NONFIXED.DAT");
+	Common::SeekableReadStream *nfd = u8save->getDataSource("NONFIXED.DAT");
 	if (!nfd) {
 		perr << "Unable to load savegame/u8save.000/NONFIXED.DAT." << Std::endl;
 		return false;
 	}
 	World::get_instance()->loadNonFixed(nfd); // deletes nfd
 
-	IDataSource *icd = u8save->getDataSource("ITEMCACH.DAT");
+	Common::SeekableReadStream *icd = u8save->getDataSource("ITEMCACH.DAT");
 	if (!icd) {
 		perr << "Unable to load savegame/u8save.000/ITEMCACH.DAT." << Std::endl;
 		return false;
 	}
-	IDataSource *npcd = u8save->getDataSource("NPCDATA.DAT");
+	Common::SeekableReadStream *npcd = u8save->getDataSource("NPCDATA.DAT");
 	if (!npcd) {
 		perr << "Unable to load savegame/u8save.000/NPCDATA.DAT." << Std::endl;
 		return false;
@@ -167,7 +168,7 @@ ProcId U8Game::playIntroMovie(bool fade) {
 	filename += "intro.skf";
 
 	FileSystem *filesys = FileSystem::get_instance();
-	IDataSource *skf = filesys->ReadFile(filename);
+	Common::SeekableReadStream *skf = filesys->ReadFile(filename);
 	if (!skf) {
 		pout << "U8Game::playIntro: movie not found." << Std::endl;
 		return 0;
@@ -180,7 +181,7 @@ ProcId U8Game::playIntroMovie(bool fade) {
 ProcId U8Game::playEndgameMovie(bool fade) {
 	Std::string filename = "@game/static/endgame.skf";
 	FileSystem *filesys = FileSystem::get_instance();
-	IDataSource *skf = filesys->ReadFile(filename);
+	Common::SeekableReadStream *skf = filesys->ReadFile(filename);
 	if (!skf) {
 		pout << "U8Game::playEndgame: movie not found." << Std::endl;
 		return 0;
@@ -201,14 +202,14 @@ void U8Game::playCredits() {
 	filename += langletter;
 	filename += "credits.dat";
 
-	IDataSource *ids = FileSystem::get_instance()->ReadFile(filename);
-	if (!ids) {
+	Common::SeekableReadStream *rs = FileSystem::get_instance()->ReadFile(filename);
+	if (!rs) {
 		perr << "U8Game::playCredits: error opening credits file: "
 		     << filename << Std::endl;
 		return;
 	}
-	Std::string text = getCreditText(ids);
-	delete ids;
+	Std::string text = getCreditText(rs);
+	delete rs;
 
 	MusicProcess *musicproc = MusicProcess::get_instance();
 	if (musicproc) musicproc->playMusic(51); // CONSTANT!
@@ -222,14 +223,14 @@ void U8Game::playCredits() {
 void U8Game::playQuotes() {
 	Std::string filename = "@game/static/quotes.dat";
 
-	IDataSource *ids = FileSystem::get_instance()->ReadFile(filename);
-	if (!ids) {
+	Common::SeekableReadStream *rs = FileSystem::get_instance()->ReadFile(filename);
+	if (!rs) {
 		perr << "U8Game::playCredits: error opening credits file: "
 		     << filename << Std::endl;
 		return;
 	}
-	Std::string text = getCreditText(ids);
-	delete ids;
+	Std::string text = getCreditText(rs);
+	delete rs;
 
 	MusicProcess *musicproc = MusicProcess::get_instance();
 	if (musicproc) musicproc->playMusic(113); // CONSTANT!
@@ -279,12 +280,12 @@ void U8Game::writeSaveInfo(Common::WriteStream *ws) {
 	}
 }
 
-Std::string U8Game::getCreditText(IDataSource *ids) {
+Std::string U8Game::getCreditText(Common::SeekableReadStream *rs) {
 	Std::string text;
-	unsigned int size = ids->size();
+	unsigned int size = rs->size();
 	text.resize(size);
 	for (unsigned int i = 0; i < size; ++i) {
-		uint8 c = ids->readByte();
+		uint8 c = rs->readByte();
 		int x;
 		switch (i) {
 		case 0:
diff --git a/engines/ultima/ultima8/games/u8_game.h b/engines/ultima/ultima8/games/u8_game.h
index c1d4517b4e..677ef9d7dc 100644
--- a/engines/ultima/ultima8/games/u8_game.h
+++ b/engines/ultima/ultima8/games/u8_game.h
@@ -28,8 +28,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-
 class U8Game: public Game {
 public:
 	U8Game();
@@ -53,7 +51,7 @@ public:
 	void playQuotes() override;
 
 protected:
-	Std::string getCreditText(IDataSource *ids);
+	Std::string getCreditText(Common::SeekableReadStream *rs);
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/graphics/anim_dat.cpp b/engines/ultima/ultima8/graphics/anim_dat.cpp
index 545368eaae..7f5d541de2 100644
--- a/engines/ultima/ultima8/graphics/anim_dat.cpp
+++ b/engines/ultima/ultima8/graphics/anim_dat.cpp
@@ -58,7 +58,7 @@ AnimAction *AnimDat::getAnim(uint32 shape, uint32 action) const {
 }
 
 
-void AnimDat::load(IDataSource *ds) {
+void AnimDat::load(Common::SeekableReadStream *rs) {
 	AnimFrame f;
 
 	// CONSTANT !
@@ -69,8 +69,8 @@ void AnimDat::load(IDataSource *ds) {
 		actioncount = 256;
 
 	for (unsigned int shape = 0; shape < _anims.size(); shape++) {
-		ds->seek(4 * shape);
-		uint32 offset = ds->readUint32LE();
+		rs->seek(4 * shape);
+		uint32 offset = rs->readUint32LE();
 
 		if (offset == 0) {
 			_anims[shape] = nullptr;
@@ -83,8 +83,8 @@ void AnimDat::load(IDataSource *ds) {
 		a->_actions.resize(actioncount);
 
 		for (unsigned int action = 0; action < actioncount; action++) {
-			ds->seek(offset + action * 4);
-			uint32 actionoffset = ds->readUint32LE();
+			rs->seek(offset + action * 4);
+			uint32 actionoffset = rs->readUint32LE();
 
 			if (actionoffset == 0) {
 				a->_actions[action] = 0;
@@ -96,12 +96,12 @@ void AnimDat::load(IDataSource *ds) {
 			a->_actions[action]->_shapeNum = shape;
 			a->_actions[action]->_action = action;
 
-			ds->seek(actionoffset);
-			uint32 actionsize = ds->readByte();
+			rs->seek(actionoffset);
+			uint32 actionsize = rs->readByte();
 			a->_actions[action]->_size = actionsize;
-			a->_actions[action]->_flags = ds->readByte();
-			a->_actions[action]->_frameRepeat = ds->readByte();
-			a->_actions[action]->_flags |= ds->readByte() << 8;
+			a->_actions[action]->_flags = rs->readByte();
+			a->_actions[action]->_frameRepeat = rs->readByte();
+			a->_actions[action]->_flags |= rs->readByte() << 8;
 
 			unsigned int dirCount = 8;
 			if (GAME_IS_CRUSADER &&
@@ -115,28 +115,28 @@ void AnimDat::load(IDataSource *ds) {
 
 				for (unsigned int j = 0; j < actionsize; j++) {
 					if (GAME_IS_U8) {
-						f._frame = ds->readByte(); // & 0x7FF;
-						uint8 x = ds->readByte();
+						f._frame = rs->readByte(); // & 0x7FF;
+						uint8 x = rs->readByte();
 						f._frame += (x & 0x7) << 8;
-						f._deltaZ = ds->readSByte();
-						f._sfx = ds->readByte();
-						f._deltaDir = ds->readSByte();
-						f._flags = ds->readByte();
+						f._deltaZ = rs->readSByte();
+						f._sfx = rs->readByte();
+						f._deltaDir = rs->readSByte();
+						f._flags = rs->readByte();
 						f._flags += (x & 0xF8) << 8;
 					} else if (GAME_IS_CRUSADER) {
 						// byte 0: low byte of frame
-						f._frame = ds->readByte();
+						f._frame = rs->readByte();
 						// byte 1: low nibble part of frame
-						uint8 x = ds->readByte();
+						uint8 x = rs->readByte();
 						f._frame += (x & 0xF) << 8;
 						// byte 2, 3: unknown; byte 3 might contain flags
-						ds->skip(2);
+						rs->skip(2);
 						// byte 4: deltadir (signed)
-						f._deltaDir = ds->readSByte();
+						f._deltaDir = rs->readSByte();
 						// byte 5: flags?
-						f._flags = ds->readByte();
+						f._flags = rs->readByte();
 						// byte 6, 7: unknown
-						ds->skip(2);
+						rs->skip(2);
 
 						f._deltaZ = 0;
 						f._sfx = 0;
diff --git a/engines/ultima/ultima8/graphics/anim_dat.h b/engines/ultima/ultima8/graphics/anim_dat.h
index 451c59733c..7c196832e2 100644
--- a/engines/ultima/ultima8/graphics/anim_dat.h
+++ b/engines/ultima/ultima8/graphics/anim_dat.h
@@ -28,7 +28,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
 struct AnimAction;
 class ActorAnim;
 
@@ -37,7 +36,7 @@ public:
 	AnimDat();
 	~AnimDat();
 
-	void load(IDataSource *ds);
+	void load(Common::SeekableReadStream *rs);
 
 	ActorAnim *getAnim(uint32 shape) const;
 	AnimAction *getAnim(uint32 shape, uint32 action) const;
diff --git a/engines/ultima/ultima8/graphics/fonts/fixed_width_font.cpp b/engines/ultima/ultima8/graphics/fonts/fixed_width_font.cpp
index 504054425f..45aa48f9de 100644
--- a/engines/ultima/ultima8/graphics/fonts/fixed_width_font.cpp
+++ b/engines/ultima/ultima8/graphics/fonts/fixed_width_font.cpp
@@ -40,22 +40,22 @@ FixedWidthFont *FixedWidthFont::Create(const Std::string &iniroot) {
 		return nullptr;
 	}
 
-	IDataSource *ds = filesys->ReadFile(filename);
+	Common::SeekableReadStream *rs = filesys->ReadFile(filename);
 
-	if (!ds) {
+	if (!rs) {
 		perr << "Error: Unable to open file " << filename << Std::endl;
 		return nullptr;
 	}
 
-	Texture *fonttex = Texture::Create(ds, filename.c_str());
+	Texture *fonttex = Texture::Create(rs, filename.c_str());
 
 	if (!fonttex) {
 		perr << "Error: Unable to read texture " << filename << Std::endl;
-		// FIXME: This leaks ds
+		// FIXME: This leaks rs
 		return nullptr;
 	}
 
-	delete ds;
+	delete rs;
 
 	FixedWidthFont *fwf = new FixedWidthFont;
 
diff --git a/engines/ultima/ultima8/graphics/fonts/fixed_width_font.h b/engines/ultima/ultima8/graphics/fonts/fixed_width_font.h
index fe80e64c81..053ae9232d 100644
--- a/engines/ultima/ultima8/graphics/fonts/fixed_width_font.h
+++ b/engines/ultima/ultima8/graphics/fonts/fixed_width_font.h
@@ -29,7 +29,6 @@ namespace Ultima {
 namespace Ultima8 {
 
 class Texture;
-class IDataSource;
 
 struct FixedWidthFont {
 	int     _width;
diff --git a/engines/ultima/ultima8/graphics/fonts/font_manager.cpp b/engines/ultima/ultima8/graphics/fonts/font_manager.cpp
index 8dace64046..3d9cc578fc 100644
--- a/engines/ultima/ultima8/graphics/fonts/font_manager.cpp
+++ b/engines/ultima/ultima8/graphics/fonts/font_manager.cpp
@@ -102,7 +102,7 @@ Graphics::Font *FontManager::getTTF_Font(const Std::string &filename, int points
 	if (iter != _ttfFonts.end())
 		return iter->_value;
 
-	IDataSource *fontids;
+	Common::SeekableReadStream *fontids;
 	fontids = FileSystem::get_instance()->ReadFile("@data/" + filename);
 	if (!fontids) {
 		perr << "Failed to open TTF: @data/" << filename << Std::endl;
@@ -110,9 +110,8 @@ Graphics::Font *FontManager::getTTF_Font(const Std::string &filename, int points
 	}
 
 	// open font using ScummVM TTF API
-	// Note: The RWops and IDataSource will be deleted by the TTF_Font
-	Common::SeekableReadStream *rs = fontids->GetRawStream();
-	Graphics::Font *font = Graphics::loadTTFFont(*rs, pointsize);
+	// Note: The RWops and ReadStream will be deleted by the TTF_Font
+	Graphics::Font *font = Graphics::loadTTFFont(*fontids, pointsize);
 
 	if (!font) {
 		perr << "Failed to open TTF: @data/" << filename << Std::endl;
diff --git a/engines/ultima/ultima8/graphics/fonts/font_manager.h b/engines/ultima/ultima8/graphics/fonts/font_manager.h
index 771007d093..68319d19f6 100644
--- a/engines/ultima/ultima8/graphics/fonts/font_manager.h
+++ b/engines/ultima/ultima8/graphics/fonts/font_manager.h
@@ -33,7 +33,6 @@ class Font;
 
 // This is TTF_Font struct
 typedef struct _TTF_Font TTF_Font;
-class IDataSource;
 
 class TTFont;
 
diff --git a/engines/ultima/ultima8/graphics/fonts/font_shape_archive.h b/engines/ultima/ultima8/graphics/fonts/font_shape_archive.h
index 706bff5eaa..4a851db90d 100644
--- a/engines/ultima/ultima8/graphics/fonts/font_shape_archive.h
+++ b/engines/ultima/ultima8/graphics/fonts/font_shape_archive.h
@@ -41,9 +41,9 @@ public:
 	FontShapeArchive(ArchiveFile *af, uint16 id_, Palette *pal_ = 0,
 	                 const ConvertShapeFormat *format_ = 0)
 		: ShapeArchive(af, id_, pal_, format_) { }
-	FontShapeArchive(IDataSource *ds, uint16 id_, Palette *pal_ = 0,
+	FontShapeArchive(Common::SeekableReadStream *rs, uint16 id_, Palette *pal_ = 0,
 	                 const ConvertShapeFormat *format_ = 0)
-		: ShapeArchive(ds, id_, pal_, format_) { }
+		: ShapeArchive(rs, id_, pal_, format_) { }
  
 	~FontShapeArchive() override { }
 
diff --git a/engines/ultima/ultima8/graphics/frame_id.cpp b/engines/ultima/ultima8/graphics/frame_id.cpp
index b6504663a6..481d7c9806 100644
--- a/engines/ultima/ultima8/graphics/frame_id.cpp
+++ b/engines/ultima/ultima8/graphics/frame_id.cpp
@@ -35,10 +35,10 @@ void FrameID::save(Common::WriteStream *ws) {
 	ws->writeUint32LE(_frameNum);
 }
 
-bool FrameID::load(IDataSource *ids) {
-	_flexId = ids->readUint16LE();
-	_shapeNum = ids->readUint32LE();
-	_frameNum = ids->readUint32LE();
+bool FrameID::load(Common::ReadStream *rs) {
+	_flexId = rs->readUint16LE();
+	_shapeNum = rs->readUint32LE();
+	_frameNum = rs->readUint32LE();
 	return true;
 }
 
diff --git a/engines/ultima/ultima8/graphics/frame_id.h b/engines/ultima/ultima8/graphics/frame_id.h
index ed8232f22c..7f83737c0e 100644
--- a/engines/ultima/ultima8/graphics/frame_id.h
+++ b/engines/ultima/ultima8/graphics/frame_id.h
@@ -28,9 +28,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-class ODataSource;
-
 struct FrameID {
 	uint16 _flexId;
 	uint32 _shapeNum;
@@ -42,7 +39,7 @@ struct FrameID {
 	}
 
 	void save(Common::WriteStream *ws);
-	bool load(IDataSource *ids);
+	bool load(Common::ReadStream *rs);
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/graphics/gump_shape_archive.cpp b/engines/ultima/ultima8/graphics/gump_shape_archive.cpp
index 664042f247..a157489b42 100644
--- a/engines/ultima/ultima8/graphics/gump_shape_archive.cpp
+++ b/engines/ultima/ultima8/graphics/gump_shape_archive.cpp
@@ -36,15 +36,15 @@ GumpShapeArchive::~GumpShapeArchive() {
 		delete _gumpItemArea[i];
 }
 
-void GumpShapeArchive::loadGumpage(IDataSource *ds) {
-	unsigned int total = ds->size() / 8;
+void GumpShapeArchive::loadGumpage(Common::SeekableReadStream *rs) {
+	unsigned int total = rs->size() / 8;
 	_gumpItemArea.resize(total + 1);
 	for (unsigned int i = 1; i <= total; ++i) {
 		int x, y, w, h;
-		x = static_cast<int16>(ds->readUint16LE());
-		y = static_cast<int16>(ds->readUint16LE());
-		w = static_cast<int16>(ds->readUint16LE()) - x;
-		h = static_cast<int16>(ds->readUint16LE()) - y;
+		x = static_cast<int16>(rs->readUint16LE());
+		y = static_cast<int16>(rs->readUint16LE());
+		w = static_cast<int16>(rs->readUint16LE()) - x;
+		h = static_cast<int16>(rs->readUint16LE()) - y;
 		_gumpItemArea[i] = new Rect(x, y, w, h);
 	}
 }
diff --git a/engines/ultima/ultima8/graphics/gump_shape_archive.h b/engines/ultima/ultima8/graphics/gump_shape_archive.h
index c79cd323ce..300bb4e4e2 100644
--- a/engines/ultima/ultima8/graphics/gump_shape_archive.h
+++ b/engines/ultima/ultima8/graphics/gump_shape_archive.h
@@ -41,13 +41,13 @@ public:
 	GumpShapeArchive(ArchiveFile *af, uint16 id_, Palette *pal_ = 0,
 	                 const ConvertShapeFormat *format_ = 0)
 		: ShapeArchive(af, id_, pal_, format_) { }
-	GumpShapeArchive(IDataSource *ds, uint16 id_, Palette *pal_ = 0,
+	GumpShapeArchive(Common::SeekableReadStream *rs, uint16 id_, Palette *pal_ = 0,
 	                 const ConvertShapeFormat *format_ = 0)
-		: ShapeArchive(ds, id_, pal_, format_) { }
+		: ShapeArchive(rs, id_, pal_, format_) { }
 
 	~GumpShapeArchive() override;
 
-	void loadGumpage(IDataSource *ds);
+	void loadGumpage(Common::SeekableReadStream *rs);
 	Rect *getGumpItemArea(uint32 shapenum);
 
 protected:
diff --git a/engines/ultima/ultima8/graphics/inverter_process.cpp b/engines/ultima/ultima8/graphics/inverter_process.cpp
index dc0d272ccb..6d9b3d21dc 100644
--- a/engines/ultima/ultima8/graphics/inverter_process.cpp
+++ b/engines/ultima/ultima8/graphics/inverter_process.cpp
@@ -82,10 +82,10 @@ void InverterProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint16LE(static_cast<uint16>(_targetState));
 }
 
-bool InverterProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool InverterProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_targetState = ids->readUint16LE();
+	_targetState = rs->readUint16LE();
 
 	_inverter = this; //static
 	return true;
diff --git a/engines/ultima/ultima8/graphics/inverter_process.h b/engines/ultima/ultima8/graphics/inverter_process.h
index 412ae025ff..43ff4772fb 100644
--- a/engines/ultima/ultima8/graphics/inverter_process.h
+++ b/engines/ultima/ultima8/graphics/inverter_process.h
@@ -49,7 +49,7 @@ public:
 
 	INTRINSIC(I_invertScreen);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/graphics/main_shape_archive.cpp b/engines/ultima/ultima8/graphics/main_shape_archive.cpp
index 4a821f5a5c..5915511d3a 100644
--- a/engines/ultima/ultima8/graphics/main_shape_archive.cpp
+++ b/engines/ultima/ultima8/graphics/main_shape_archive.cpp
@@ -42,14 +42,14 @@ MainShapeArchive::~MainShapeArchive() {
 	}
 }
 
-void MainShapeArchive::loadTypeFlags(IDataSource *ds) {
+void MainShapeArchive::loadTypeFlags(Common::SeekableReadStream *rs) {
 	if (_typeFlags) {
 		delete _typeFlags;
 		_typeFlags = nullptr;
 	}
 
 	_typeFlags = new TypeFlags;
-	_typeFlags->load(ds);
+	_typeFlags->load(rs);
 }
 
 ShapeInfo *MainShapeArchive::getShapeInfo(uint32 shapenum) {
@@ -58,14 +58,14 @@ ShapeInfo *MainShapeArchive::getShapeInfo(uint32 shapenum) {
 	return _typeFlags->getShapeInfo(shapenum);
 }
 
-void MainShapeArchive::loadAnimDat(IDataSource *ds) {
+void MainShapeArchive::loadAnimDat(Common::SeekableReadStream *rs) {
 	if (_animDat) {
 		delete _animDat;
 		_animDat = nullptr;
 	}
 
 	_animDat = new AnimDat;
-	_animDat->load(ds);
+	_animDat->load(rs);
 }
 
 ActorAnim *MainShapeArchive::getAnim(uint32 shape) const {
diff --git a/engines/ultima/ultima8/graphics/main_shape_archive.h b/engines/ultima/ultima8/graphics/main_shape_archive.h
index 1f8171f4ca..59e8510330 100644
--- a/engines/ultima/ultima8/graphics/main_shape_archive.h
+++ b/engines/ultima/ultima8/graphics/main_shape_archive.h
@@ -45,16 +45,16 @@ public:
 	MainShapeArchive(ArchiveFile *af, uint16 id_, Palette *pal_ = 0,
 	                 const ConvertShapeFormat *format_ = 0)
 		: ShapeArchive(af, id_, pal_, format_), _typeFlags(0), _animDat(0) { }
-	MainShapeArchive(IDataSource *ds, uint16 id_, Palette *pal_ = 0,
+	MainShapeArchive(Common::SeekableReadStream *rs, uint16 id_, Palette *pal_ = 0,
 	                 const ConvertShapeFormat *format_ = 0)
-		: ShapeArchive(ds, id_, pal_, format_), _typeFlags(0), _animDat(0) { }
+		: ShapeArchive(rs, id_, pal_, format_), _typeFlags(0), _animDat(0) { }
 
 	~MainShapeArchive() override;
 
-	void loadTypeFlags(IDataSource *ds);
+	void loadTypeFlags(Common::SeekableReadStream *rs);
 	ShapeInfo *getShapeInfo(uint32 shapenum);
 
-	void loadAnimDat(IDataSource *ds);
+	void loadAnimDat(Common::SeekableReadStream *rs);
 	ActorAnim *getAnim(uint32 shape) const;
 	AnimAction *getAnim(uint32 shape, uint32 action) const;
 
diff --git a/engines/ultima/ultima8/graphics/palette.cpp b/engines/ultima/ultima8/graphics/palette.cpp
index e402abbc52..291ee6c871 100644
--- a/engines/ultima/ultima8/graphics/palette.cpp
+++ b/engines/ultima/ultima8/graphics/palette.cpp
@@ -28,15 +28,15 @@
 namespace Ultima {
 namespace Ultima8 {
 
-void Palette::load(IDataSource &ds, IDataSource &xformds) {
-	load(ds);
+void Palette::load(Common::ReadStream &rs, Common::ReadStream &xformrs) {
+	load(rs);
 	for (int i = 0; i < 256; i++)
-		_xform_untransformed[i] = xformds.readUint32LE();
+		_xform_untransformed[i] = xformrs.readUint32LE();
 }
 
-void Palette::load(IDataSource &ds) {
+void Palette::load(Common::ReadStream &rs) {
 	int i;
-	ds.read(_palette, 768);
+	rs.read(_palette, 768);
 
 	// convert from 0-63 to 0-255 _palette
 	for (i = 0; i < 256; i++) {
diff --git a/engines/ultima/ultima8/graphics/palette.h b/engines/ultima/ultima8/graphics/palette.h
index 7fd55c6909..f77a0fd3a6 100644
--- a/engines/ultima/ultima8/graphics/palette.h
+++ b/engines/ultima/ultima8/graphics/palette.h
@@ -26,8 +26,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-
 enum PalTransforms {
 	// Normal untransformed palette
 	Transform_None      = 0,
@@ -57,8 +55,8 @@ enum PalTransforms {
 };
 
 struct Palette {
-	void load(IDataSource &ds, IDataSource &xformds);
-	void load(IDataSource &ds);
+	void load(Common::ReadStream &rs, Common::ReadStream &xformrs);
+	void load(Common::ReadStream &rs);
 
 	// 256 rgb entries
 	uint8 _palette[768];
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.cpp b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
index 52ade45055..b529e92935 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.cpp
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
@@ -111,18 +111,18 @@ void PaletteFaderProcess::saveData(Common::WriteStream *ws) {
 		ws->writeUint16LE(_newMatrix[i]);
 }
 
-bool PaletteFaderProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool PaletteFaderProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_priority = static_cast<int>(ids->readUint32LE());
-	_counter = static_cast<int>(ids->readUint32LE());
-	_maxCounter = static_cast<int>(ids->readUint32LE());
+	_priority = static_cast<int>(rs->readUint32LE());
+	_counter = static_cast<int>(rs->readUint32LE());
+	_maxCounter = static_cast<int>(rs->readUint32LE());
 
 	unsigned int i;
 	for (i = 0; i < 12; ++i)
-		_oldMatrix[i] = ids->readUint16LE();
+		_oldMatrix[i] = rs->readUint16LE();
 	for (i = 0; i < 12; ++i)
-		_newMatrix[i] = ids->readUint16LE();
+		_newMatrix[i] = rs->readUint16LE();
 
 	_fader = this; //static
 	return true;
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.h b/engines/ultima/ultima8/graphics/palette_fader_process.h
index 4ade1c711d..098d3905f7 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.h
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.h
@@ -57,7 +57,7 @@ public:
 	INTRINSIC(I_fadeFromBlack);
 	INTRINSIC(I_lightningBolt);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/graphics/palette_manager.cpp b/engines/ultima/ultima8/graphics/palette_manager.cpp
index ea87e381bb..6908b68944 100644
--- a/engines/ultima/ultima8/graphics/palette_manager.cpp
+++ b/engines/ultima/ultima8/graphics/palette_manager.cpp
@@ -87,7 +87,7 @@ void PaletteManager::RenderSurfaceChanged(RenderSurface *rs) {
 			_renderSurface->CreateNativePalette(_palettes[i]);
 }
 
-void PaletteManager::load(PalIndex index, IDataSource &ds, IDataSource &xformds) {
+void PaletteManager::load(PalIndex index, Common::ReadStream &rs, Common::ReadStream &xformrs) {
 	if (_palettes.size() <= static_cast<unsigned int>(index))
 		_palettes.resize(index + 1);
 
@@ -95,13 +95,13 @@ void PaletteManager::load(PalIndex index, IDataSource &ds, IDataSource &xformds)
 		delete _palettes[index];
 
 	Palette *pal = new Palette;
-	pal->load(ds, xformds);
+	pal->load(rs, xformrs);
 	_renderSurface->CreateNativePalette(pal); // convert to native format
 
 	_palettes[index] = pal;
 }
 
-void PaletteManager::load(PalIndex index, IDataSource &ds) {
+void PaletteManager::load(PalIndex index, Common::ReadStream &rs) {
 	if (_palettes.size() <= static_cast<unsigned int>(index))
 		_palettes.resize(index + 1);
 
@@ -109,7 +109,7 @@ void PaletteManager::load(PalIndex index, IDataSource &ds) {
 		delete _palettes[index];
 
 	Palette *pal = new Palette;
-	pal->load(ds);
+	pal->load(rs);
 	_renderSurface->CreateNativePalette(pal); // convert to native format
 
 	_palettes[index] = pal;
diff --git a/engines/ultima/ultima8/graphics/palette_manager.h b/engines/ultima/ultima8/graphics/palette_manager.h
index 6be518807c..898cfadf42 100644
--- a/engines/ultima/ultima8/graphics/palette_manager.h
+++ b/engines/ultima/ultima8/graphics/palette_manager.h
@@ -29,7 +29,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
 class RenderSurface;
 
 class PaletteManager {
@@ -47,8 +46,8 @@ public:
 		Pal_JPFontStart = 16
 	};
 
-	void load(PalIndex index, IDataSource &ds, IDataSource &xformds);
-	void load(PalIndex index, IDataSource &ds);
+	void load(PalIndex index, Common::ReadStream &rs, Common::ReadStream &xformrs);
+	void load(PalIndex index, Common::ReadStream &rs);
 	Palette *getPalette(PalIndex index);
 
 	void duplicate(PalIndex src, PalIndex dest);
diff --git a/engines/ultima/ultima8/graphics/shape_archive.h b/engines/ultima/ultima8/graphics/shape_archive.h
index 24050d3c8b..02119ab200 100644
--- a/engines/ultima/ultima8/graphics/shape_archive.h
+++ b/engines/ultima/ultima8/graphics/shape_archive.h
@@ -43,9 +43,9 @@ public:
 	ShapeArchive(ArchiveFile *af, uint16 id, Palette *pal = 0,
 	             const ConvertShapeFormat *format = 0)
 		: Archive(af), _id(id), _format(format), _palette(pal) { }
-	ShapeArchive(IDataSource *ds, uint16 id, Palette *pal = 0,
+	ShapeArchive(Common::SeekableReadStream *rs, uint16 id, Palette *pal = 0,
 	             const ConvertShapeFormat *format = 0)
-		: Archive(ds), _id(id), _format(format), _palette(pal) { }
+		: Archive(rs), _id(id), _format(format), _palette(pal) { }
 
 	~ShapeArchive() override;
 
diff --git a/engines/ultima/ultima8/graphics/skf_player.cpp b/engines/ultima/ultima8/graphics/skf_player.cpp
index fd70a2308b..01ee01aa32 100644
--- a/engines/ultima/ultima8/graphics/skf_player.cpp
+++ b/engines/ultima/ultima8/graphics/skf_player.cpp
@@ -71,7 +71,7 @@ SKFPlayer::SKFPlayer(RawArchive *movie, int width, int height, bool introMusicHa
 	  _timer(0), _frameRate(15), _fadeColour(0), _fadeLevel(0), _buffer(nullptr),
 	  _subs(nullptr), _introMusicHack(introMusicHack), _lastUpdate(0),
 	  _subtitleY(0) {
-	IDataSource *eventlist = _skf->get_datasource(0);
+	Common::ReadStream *eventlist = _skf->get_datasource(0);
 	if (!eventlist) {
 		perr << "No eventlist found in SKF" << Std::endl;
 		return;
@@ -92,7 +92,7 @@ SKFPlayer::~SKFPlayer() {
 	delete _subs;
 }
 
-void SKFPlayer::parseEventList(IDataSource *eventlist) {
+void SKFPlayer::parseEventList(Common::ReadStream *eventlist) {
 	uint16 frame = eventlist->readUint16LE();
 	while (frame != 0xFFFF) {
 		SKFEvent *ev = new SKFEvent;
diff --git a/engines/ultima/ultima8/graphics/skf_player.h b/engines/ultima/ultima8/graphics/skf_player.h
index dc102fd4ee..31a4f04b18 100644
--- a/engines/ultima/ultima8/graphics/skf_player.h
+++ b/engines/ultima/ultima8/graphics/skf_player.h
@@ -32,7 +32,6 @@ struct SKFEvent;
 class RawArchive;
 class RenderSurface;
 class RenderedText;
-class IDataSource;
 struct Palette;
 
 class SKFPlayer {
@@ -51,7 +50,7 @@ public:
 
 private:
 
-	void parseEventList(IDataSource *eventlist);
+	void parseEventList(Common::ReadStream *rs);
 
 	int _width, _height;
 	RawArchive *_skf;
diff --git a/engines/ultima/ultima8/graphics/texture.cpp b/engines/ultima/ultima8/graphics/texture.cpp
index 2430d9dc1a..a0ebfff456 100644
--- a/engines/ultima/ultima8/graphics/texture.cpp
+++ b/engines/ultima/ultima8/graphics/texture.cpp
@@ -46,7 +46,7 @@ Texture::~Texture() {
 #define TRY_TYPE(TextureType)               \
 	tex = new TextureType();                    \
 	/* If read failed, delete the texture. */   \
-	if (!tex->Read(ds)) {                       \
+	if (!tex->Read(rs)) {                       \
 		delete tex;                             \
 		tex = nullptr;                          \
 	}                                           \
@@ -65,7 +65,7 @@ void Texture::create(uint16 width, uint16 height, TextureFormat textureFormat) {
 // Create a texture from a Data Source
 // (filename is used to help detection of type)
 //
-Texture *Texture::Create(IDataSource *ds, const char *filename) {
+Texture *Texture::Create(Common::SeekableReadStream *rs, const char *filename) {
 	Texture *tex;
 
 	if (filename) {
diff --git a/engines/ultima/ultima8/graphics/texture.h b/engines/ultima/ultima8/graphics/texture.h
index a50719227b..154b77d0d9 100644
--- a/engines/ultima/ultima8/graphics/texture.h
+++ b/engines/ultima/ultima8/graphics/texture.h
@@ -82,8 +82,6 @@ enum TextureFormat {
 };
 
 
-class IDataSource;
-
 //
 // Basic 32 Bit Texture
 //
@@ -132,14 +130,14 @@ public:
 	}
 
 	// Create a texture from a Data Source (filename is use to help detection of type)
-	static Texture *Create(IDataSource *ds, const char *filename = NULL);
+	static Texture *Create(Common::SeekableReadStream *rs, const char *filename = NULL);
 
 	// Loads the data from the passed surfcae
 	void loadSurface(const Graphics::Surface *surf);
 protected:
 
 	// Read from a File. No filetype supported by this class
-	virtual bool Read(IDataSource * /*ds*/) {
+	virtual bool Read(Common::SeekableReadStream *rs) {
 		return false;
 	}
 };
diff --git a/engines/ultima/ultima8/graphics/texture_bitmap.cpp b/engines/ultima/ultima8/graphics/texture_bitmap.cpp
index f6ed20646e..f93455ab6e 100644
--- a/engines/ultima/ultima8/graphics/texture_bitmap.cpp
+++ b/engines/ultima/ultima8/graphics/texture_bitmap.cpp
@@ -31,8 +31,7 @@ namespace Ultima8 {
 //
 // Read from a Data Source
 //
-bool TextureBitmap::Read(IDataSource *ds) {
-	Common::SeekableReadStream *rs = ds->GetRawStream();
+bool TextureBitmap::Read(Common::SeekableReadStream *rs) {
 	Image::BitmapDecoder decoder;
 
 	if (!decoder.loadStream(*rs))
diff --git a/engines/ultima/ultima8/graphics/texture_bitmap.h b/engines/ultima/ultima8/graphics/texture_bitmap.h
index 522b147f15..d26393c28c 100644
--- a/engines/ultima/ultima8/graphics/texture_bitmap.h
+++ b/engines/ultima/ultima8/graphics/texture_bitmap.h
@@ -33,7 +33,7 @@ struct TextureBitmap : public Texture {
 	TextureBitmap() : Texture() {}
 
 	// False on Error
-	bool Read(IDataSource *ds) override;
+	bool Read(Common::SeekableReadStream *rs) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/graphics/texture_png.cpp b/engines/ultima/ultima8/graphics/texture_png.cpp
index 6be2a75227..a17145ee64 100644
--- a/engines/ultima/ultima8/graphics/texture_png.cpp
+++ b/engines/ultima/ultima8/graphics/texture_png.cpp
@@ -29,8 +29,7 @@
 namespace Ultima {
 namespace Ultima8 {
 
-bool TexturePNG::Read(IDataSource *ds) {
-	Common::SeekableReadStream *rs = ds->GetRawStream();
+bool TexturePNG::Read(Common::SeekableReadStream *rs) {
 	Image::PNGDecoder decoder;
 
 	if (!decoder.loadStream(*rs))
diff --git a/engines/ultima/ultima8/graphics/texture_png.h b/engines/ultima/ultima8/graphics/texture_png.h
index 354abbb9e8..cd9df3fdf4 100644
--- a/engines/ultima/ultima8/graphics/texture_png.h
+++ b/engines/ultima/ultima8/graphics/texture_png.h
@@ -32,7 +32,7 @@ struct TexturePNG : public Texture {
 	TexturePNG() : Texture() {}
 
 	// False on Error
-	bool Read(IDataSource *ds) override;
+	bool Read(Common::SeekableReadStream *rs) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/graphics/texture_targa.cpp b/engines/ultima/ultima8/graphics/texture_targa.cpp
index 59cf3b2100..d549d419ee 100644
--- a/engines/ultima/ultima8/graphics/texture_targa.cpp
+++ b/engines/ultima/ultima8/graphics/texture_targa.cpp
@@ -28,8 +28,7 @@
 namespace Ultima {
 namespace Ultima8 {
 
-bool TextureTarga::Read(IDataSource *ds) {
-	Common::SeekableReadStream *rs = ds->GetRawStream();
+bool TextureTarga::Read(Common::SeekableReadStream *rs) {
 	Image::TGADecoder decoder;
 
 	if (!decoder.loadStream(*rs))
diff --git a/engines/ultima/ultima8/graphics/texture_targa.h b/engines/ultima/ultima8/graphics/texture_targa.h
index 79f5d16e02..05f9d4ad1a 100644
--- a/engines/ultima/ultima8/graphics/texture_targa.h
+++ b/engines/ultima/ultima8/graphics/texture_targa.h
@@ -35,7 +35,7 @@ struct TextureTarga : public Texture {
 	TextureTarga() : Texture() {}
 
 	// False on Error
-	bool Read(IDataSource *ds) override;
+	bool Read(Common::SeekableReadStream *rs) override;
 };
 
 } // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/graphics/type_flags.cpp b/engines/ultima/ultima8/graphics/type_flags.cpp
index 4483e85aa2..5c7939440e 100644
--- a/engines/ultima/ultima8/graphics/type_flags.cpp
+++ b/engines/ultima/ultima8/graphics/type_flags.cpp
@@ -50,7 +50,7 @@ ShapeInfo *TypeFlags::getShapeInfo(uint32 shapenum) {
 }
 
 
-void TypeFlags::load(IDataSource *ds) {
+void TypeFlags::load(Common::SeekableReadStream *rs) {
 	// TODO: detect U8/crusader format somehow?!
 	// (Or probably pass it as parameter)
 	// The 'parsing' below is only for U8
@@ -60,7 +60,7 @@ void TypeFlags::load(IDataSource *ds) {
 		blocksize = 9;
 	}
 
-	uint32 size = ds->size();
+	uint32 size = rs->size();
 	uint32 count = size / blocksize;
 
 	_shapeInfo.clear();
@@ -68,7 +68,7 @@ void TypeFlags::load(IDataSource *ds) {
 
 	for (uint32 i = 0; i < count; ++i) {
 		uint8 data[9];
-		ds->read(data, blocksize);
+		rs->read(data, blocksize);
 
 		ShapeInfo si;
 		si._flags = 0;
diff --git a/engines/ultima/ultima8/graphics/type_flags.h b/engines/ultima/ultima8/graphics/type_flags.h
index c91c1c4c92..d5512de15f 100644
--- a/engines/ultima/ultima8/graphics/type_flags.h
+++ b/engines/ultima/ultima8/graphics/type_flags.h
@@ -29,14 +29,12 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-
 class TypeFlags {
 public:
 	TypeFlags();
 	~TypeFlags();
 
-	void load(IDataSource *ds);
+	void load(Common::SeekableReadStream *rs);
 	ShapeInfo *getShapeInfo(uint32 shape);
 
 private:
diff --git a/engines/ultima/ultima8/graphics/wpn_ovlay_dat.cpp b/engines/ultima/ultima8/graphics/wpn_ovlay_dat.cpp
index e76da5982f..b85253868c 100644
--- a/engines/ultima/ultima8/graphics/wpn_ovlay_dat.cpp
+++ b/engines/ultima/ultima8/graphics/wpn_ovlay_dat.cpp
@@ -68,10 +68,10 @@ void WpnOvlayDat::load(RawArchive *overlaydat) {
 	_overlay.resize(overlaydat->getCount());
 
 	for (unsigned int action = 0; action < _overlay.size(); action++) {
-		IDataSource *ds = overlaydat->get_datasource(action);
+		Common::SeekableReadStream *rs = overlaydat->get_datasource(action);
 		_overlay[action] = nullptr;
 
-		if (ds && ds->size()) {
+		if (rs && rs->size()) {
 			// get Avatar's animation
 			AnimAction *anim = msf->getAnim(1, action);
 			if (!anim) {
@@ -85,7 +85,7 @@ void WpnOvlayDat::load(RawArchive *overlaydat) {
 			unsigned int animlength = anim->_size;
 			unsigned int dircount = anim->_dirCount;
 
-			unsigned int typecount = ds->size() / (4 * dircount * animlength);
+			unsigned int typecount = rs->size() / (4 * dircount * animlength);
 			awo->_overlay.resize(typecount);
 
 			for (unsigned int type = 0; type < typecount; type++) {
@@ -97,10 +97,10 @@ void WpnOvlayDat::load(RawArchive *overlaydat) {
 					for (unsigned int frame = 0; frame < animlength; frame++) {
 						unsigned int offset = type * 8 * animlength
 						                      + dir * animlength + frame;
-						ds->seek(4 * offset);
-						f._xOff = ds->readSByte();
-						f._yOff = ds->readSByte();
-						f._frame = ds->readUint16LE();
+						rs->seek(4 * offset);
+						f._xOff = rs->readSByte();
+						f._yOff = rs->readSByte();
+						f._frame = rs->readUint16LE();
 
 						awo->_overlay[type]._frames[dir][frame] = f;
 					}
@@ -108,8 +108,7 @@ void WpnOvlayDat::load(RawArchive *overlaydat) {
 			}
 		}
 
-
-		delete ds;
+		delete rs;
 	}
 }
 
diff --git a/engines/ultima/ultima8/gumps/ask_gump.cpp b/engines/ultima/ultima8/gumps/ask_gump.cpp
index 9ff2410be2..e93fc7b699 100644
--- a/engines/ultima/ultima8/gumps/ask_gump.cpp
+++ b/engines/ultima/ultima8/gumps/ask_gump.cpp
@@ -123,11 +123,11 @@ void AskGump::saveData(Common::WriteStream *ws) {
 	_answers->save(ws);
 }
 
-bool AskGump::loadData(IDataSource *ids, uint32 version) {
-	if (!ItemRelativeGump::loadData(ids, version)) return false;
+bool AskGump::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!ItemRelativeGump::loadData(rs, version)) return false;
 
 	_answers = new UCList(2);
-	_answers->load(ids, version);
+	_answers->load(rs, version);
 
 	// HACK ALERT
 	int px = 0, py = 0;
diff --git a/engines/ultima/ultima8/gumps/ask_gump.h b/engines/ultima/ultima8/gumps/ask_gump.h
index dcf8c77c30..2ebc9a10c0 100644
--- a/engines/ultima/ultima8/gumps/ask_gump.h
+++ b/engines/ultima/ultima8/gumps/ask_gump.h
@@ -46,7 +46,7 @@ public:
 
 	void        ChildNotify(Gump *child, uint32 message) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/bark_gump.cpp b/engines/ultima/ultima8/gumps/bark_gump.cpp
index 94cecb0bd2..c6887ecbf2 100644
--- a/engines/ultima/ultima8/gumps/bark_gump.cpp
+++ b/engines/ultima/ultima8/gumps/bark_gump.cpp
@@ -190,19 +190,19 @@ void BarkGump::saveData(Common::WriteStream *ws) {
 	ws->write(_barked.c_str(), _barked.size());
 }
 
-bool BarkGump::loadData(IDataSource *ids, uint32 version) {
-	if (!ItemRelativeGump::loadData(ids, version)) return false;
+bool BarkGump::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!ItemRelativeGump::loadData(rs, version)) return false;
 
-	_counter = static_cast<int32>(ids->readUint32LE());
-	_textWidget = ids->readUint16LE();
-	_speechShapeNum = ids->readUint32LE();
-	_speechLength = ids->readUint32LE();
-	_totalTextHeight = ids->readUint32LE();
+	_counter = static_cast<int32>(rs->readUint32LE());
+	_textWidget = rs->readUint16LE();
+	_speechShapeNum = rs->readUint32LE();
+	_speechLength = rs->readUint32LE();
+	_totalTextHeight = rs->readUint32LE();
 
-	uint32 slen = ids->readUint32LE();
+	uint32 slen = rs->readUint32LE();
 	if (slen > 0) {
 		char *buf = new char[slen + 1];
-		ids->read(buf, slen);
+		rs->read(buf, slen);
 		buf[slen] = 0;
 		_barked = buf;
 		delete[] buf;
diff --git a/engines/ultima/ultima8/gumps/bark_gump.h b/engines/ultima/ultima8/gumps/bark_gump.h
index 63833436d4..a439eb8a81 100644
--- a/engines/ultima/ultima8/gumps/bark_gump.h
+++ b/engines/ultima/ultima8/gumps/bark_gump.h
@@ -62,7 +62,7 @@ protected:
 	int _textDelay;
 
 public:
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/book_gump.cpp b/engines/ultima/ultima8/gumps/book_gump.cpp
index 833003bfe5..838fb8ab27 100644
--- a/engines/ultima/ultima8/gumps/book_gump.cpp
+++ b/engines/ultima/ultima8/gumps/book_gump.cpp
@@ -114,7 +114,7 @@ void BookGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
-bool BookGump::loadData(IDataSource *ids, uint32 version) {
+bool BookGump::loadData(Common::ReadStream *rs, uint32 version) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 
 	return false;
diff --git a/engines/ultima/ultima8/gumps/book_gump.h b/engines/ultima/ultima8/gumps/book_gump.h
index e1b1e3edfb..be97dbb159 100644
--- a/engines/ultima/ultima8/gumps/book_gump.h
+++ b/engines/ultima/ultima8/gumps/book_gump.h
@@ -56,7 +56,7 @@ protected:
 	void NextText();
 
 public:
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/container_gump.cpp b/engines/ultima/ultima8/gumps/container_gump.cpp
index 93b48287d7..1970149158 100644
--- a/engines/ultima/ultima8/gumps/container_gump.cpp
+++ b/engines/ultima/ultima8/gumps/container_gump.cpp
@@ -543,13 +543,13 @@ void ContainerGump::saveData(Common::WriteStream *ws) {
 	ws->writeUint32LE(static_cast<uint32>(_itemArea.h));
 }
 
-bool ContainerGump::loadData(IDataSource *ids, uint32 version) {
-	if (!ItemRelativeGump::loadData(ids, version)) return false;
+bool ContainerGump::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!ItemRelativeGump::loadData(rs, version)) return false;
 
-	int32 iax = static_cast<int32>(ids->readUint32LE());
-	int32 iay = static_cast<int32>(ids->readUint32LE());
-	int32 iaw = static_cast<int32>(ids->readUint32LE());
-	int32 iah = static_cast<int32>(ids->readUint32LE());
+	int32 iax = static_cast<int32>(rs->readUint32LE());
+	int32 iay = static_cast<int32>(rs->readUint32LE());
+	int32 iaw = static_cast<int32>(rs->readUint32LE());
+	int32 iah = static_cast<int32>(rs->readUint32LE());
 	_itemArea.Set(iax, iay, iaw, iah);
 
 	return true;
diff --git a/engines/ultima/ultima8/gumps/container_gump.h b/engines/ultima/ultima8/gumps/container_gump.h
index 0bcddf0af8..7be82c4ad6 100644
--- a/engines/ultima/ultima8/gumps/container_gump.h
+++ b/engines/ultima/ultima8/gumps/container_gump.h
@@ -73,7 +73,7 @@ public:
 	void OnMouseClick(int button, int32 mx, int32 my) override;
 	void OnMouseDouble(int button, int32 mx, int32 my) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/gumps/desktop_gump.cpp b/engines/ultima/ultima8/gumps/desktop_gump.cpp
index f96a102308..de9fe1f540 100644
--- a/engines/ultima/ultima8/gumps/desktop_gump.cpp
+++ b/engines/ultima/ultima8/gumps/desktop_gump.cpp
@@ -115,7 +115,7 @@ void DesktopGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save DesktopGump");
 }
 
-bool DesktopGump::loadData(IDataSource *ids, uint32 version) {
+bool DesktopGump::loadData(Common::ReadStream *rs, uint32 version) {
 	CANT_HAPPEN_MSG("Trying to save DesktopGump");
 
 	return false;
diff --git a/engines/ultima/ultima8/gumps/desktop_gump.h b/engines/ultima/ultima8/gumps/desktop_gump.h
index e15b41fcff..0c7ec89765 100644
--- a/engines/ultima/ultima8/gumps/desktop_gump.h
+++ b/engines/ultima/ultima8/gumps/desktop_gump.h
@@ -45,7 +45,7 @@ public:
 	void DraggingChild(Gump *gump, int mx, int my) override;
 	void StopDraggingChild(Gump *gump) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	void RenderSurfaceChanged(RenderSurface *surf);
 
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index 809fd934c2..f9d88d36d7 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -581,7 +581,7 @@ void GameMapGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save GameMapGump");
 }
 
-bool GameMapGump::loadData(IDataSource *ids, uint32 version) {
+bool GameMapGump::loadData(Common::ReadStream *rs, uint32 version) {
 	CANT_HAPPEN_MSG("Trying to load GameMapGump");
 
 	return false;
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.h b/engines/ultima/ultima8/gumps/game_map_gump.h
index 54592f9a7e..23c44b4103 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.h
+++ b/engines/ultima/ultima8/gumps/game_map_gump.h
@@ -75,7 +75,7 @@ public:
 
 	void IncSortOrder(int count);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	static void Set_highlightItems(bool highlight) {
 		_highlightItems = highlight;
diff --git a/engines/ultima/ultima8/gumps/gump.cpp b/engines/ultima/ultima8/gumps/gump.cpp
index 37ec3dba33..41e3a37c25 100644
--- a/engines/ultima/ultima8/gumps/gump.cpp
+++ b/engines/ultima/ultima8/gumps/gump.cpp
@@ -827,40 +827,40 @@ void Gump::saveData(Common::WriteStream *ws) {
 	}
 }
 
-bool Gump::loadData(IDataSource *ids, uint32 version) {
-	if (!Object::loadData(ids, version)) return false;
+bool Gump::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Object::loadData(rs, version)) return false;
 
-	_owner = ids->readUint16LE();
-	_x = static_cast<int32>(ids->readUint32LE());
-	_y = static_cast<int32>(ids->readUint32LE());
+	_owner = rs->readUint16LE();
+	_x = static_cast<int32>(rs->readUint32LE());
+	_y = static_cast<int32>(rs->readUint32LE());
 
-	int dx = static_cast<int32>(ids->readUint32LE());
-	int dy = static_cast<int32>(ids->readUint32LE());
-	int dw = static_cast<int32>(ids->readUint32LE());
-	int dh = static_cast<int32>(ids->readUint32LE());
+	int dx = static_cast<int32>(rs->readUint32LE());
+	int dy = static_cast<int32>(rs->readUint32LE());
+	int dw = static_cast<int32>(rs->readUint32LE());
+	int dh = static_cast<int32>(rs->readUint32LE());
 	_dims.Set(dx, dy, dw, dh);
 
-	_flags = ids->readUint32LE();
-	_layer = static_cast<int32>(ids->readUint32LE());
-	_index = static_cast<int32>(ids->readUint32LE());
+	_flags = rs->readUint32LE();
+	_layer = static_cast<int32>(rs->readUint32LE());
+	_index = static_cast<int32>(rs->readUint32LE());
 
 	_shape = nullptr;
-	ShapeArchive *flex = GameData::get_instance()->getShapeFlex(ids->readUint16LE());
-	uint32 shapenum = ids->readUint32LE();
+	ShapeArchive *flex = GameData::get_instance()->getShapeFlex(rs->readUint16LE());
+	uint32 shapenum = rs->readUint32LE();
 	if (flex) {
 		_shape = flex->getShape(shapenum);
 	}
 
-	_frameNum = ids->readUint32LE();
-	uint16 focusid = ids->readUint16LE();
+	_frameNum = rs->readUint32LE();
+	uint16 focusid = rs->readUint16LE();
 	_focusChild = nullptr;
-	_notifier = ids->readUint16LE();
-	_processResult = ids->readUint32LE();
+	_notifier = rs->readUint16LE();
+	_processResult = rs->readUint32LE();
 
 	// read children
-	uint32 childcount = ids->readUint32LE();
+	uint32 childcount = rs->readUint32LE();
 	for (unsigned int i = 0; i < childcount; ++i) {
-		Object *obj = ObjectManager::get_instance()->loadObject(ids, version);
+		Object *obj = ObjectManager::get_instance()->loadObject(rs, version);
 		Gump *child = p_dynamic_cast<Gump *>(obj);
 		if (!child) return false;
 
diff --git a/engines/ultima/ultima8/gumps/gump.h b/engines/ultima/ultima8/gumps/gump.h
index 25e4637e93..cc29a3eb64 100644
--- a/engines/ultima/ultima8/gumps/gump.h
+++ b/engines/ultima/ultima8/gumps/gump.h
@@ -460,7 +460,7 @@ public:
 		LAYER_CONSOLE       = 16        // Layer for the console
 	};
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/gump_notify_process.cpp b/engines/ultima/ultima8/gumps/gump_notify_process.cpp
index 2681aed87c..e1c7fae3c1 100644
--- a/engines/ultima/ultima8/gumps/gump_notify_process.cpp
+++ b/engines/ultima/ultima8/gumps/gump_notify_process.cpp
@@ -80,10 +80,10 @@ void GumpNotifyProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint16LE(_gump);
 }
 
-bool GumpNotifyProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool GumpNotifyProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_gump = ids->readUint16LE();
+	_gump = rs->readUint16LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/gumps/gump_notify_process.h b/engines/ultima/ultima8/gumps/gump_notify_process.h
index 56183d3b00..9cfa703185 100644
--- a/engines/ultima/ultima8/gumps/gump_notify_process.h
+++ b/engines/ultima/ultima8/gumps/gump_notify_process.h
@@ -54,7 +54,7 @@ public:
 
 	void dumpInfo() const override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/item_relative_gump.cpp b/engines/ultima/ultima8/gumps/item_relative_gump.cpp
index 1d729a9a4e..f007873510 100644
--- a/engines/ultima/ultima8/gumps/item_relative_gump.cpp
+++ b/engines/ultima/ultima8/gumps/item_relative_gump.cpp
@@ -175,8 +175,8 @@ void ItemRelativeGump::saveData(Common::WriteStream *ws) {
 	Gump::saveData(ws);
 }
 
-bool ItemRelativeGump::loadData(IDataSource *ids, uint32 version) {
-	if (!Gump::loadData(ids, version)) return false;
+bool ItemRelativeGump::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Gump::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/gumps/item_relative_gump.h b/engines/ultima/ultima8/gumps/item_relative_gump.h
index 9e9ab6ace0..40334c60fd 100644
--- a/engines/ultima/ultima8/gumps/item_relative_gump.h
+++ b/engines/ultima/ultima8/gumps/item_relative_gump.h
@@ -53,7 +53,7 @@ public:
 
 	void        Move(int32 x, int32 y) override;
 
-	bool                loadData(IDataSource *ids, uint32 version);
+	bool                loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void        saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/gumps/main_menu_process.cpp b/engines/ultima/ultima8/gumps/main_menu_process.cpp
index fc21acac3e..c3a5edb0f9 100644
--- a/engines/ultima/ultima8/gumps/main_menu_process.cpp
+++ b/engines/ultima/ultima8/gumps/main_menu_process.cpp
@@ -60,8 +60,8 @@ void MainMenuProcess::saveData(Common::WriteStream *ws) {
 	Process::saveData(ws);
 }
 
-bool MainMenuProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool MainMenuProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/gumps/main_menu_process.h b/engines/ultima/ultima8/gumps/main_menu_process.h
index 3dc76c79ba..3add7e6cb4 100644
--- a/engines/ultima/ultima8/gumps/main_menu_process.h
+++ b/engines/ultima/ultima8/gumps/main_menu_process.h
@@ -40,7 +40,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.cpp b/engines/ultima/ultima8/gumps/message_box_gump.cpp
index 0e6d058763..ddbc58d717 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.cpp
+++ b/engines/ultima/ultima8/gumps/message_box_gump.cpp
@@ -171,7 +171,7 @@ void MessageBoxGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 }
 
-bool MessageBoxGump::loadData(IDataSource *ids, uint32 version) {
+bool MessageBoxGump::loadData(Common::ReadStream *rs, uint32 version) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 
 	return false;
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.h b/engines/ultima/ultima8/gumps/message_box_gump.h
index a96f82dbdf..f3e0a704b8 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.h
+++ b/engines/ultima/ultima8/gumps/message_box_gump.h
@@ -48,7 +48,7 @@ public:
 	void InitGump(Gump *newparent, bool take_focus = true) override;
 	void Close(bool no_del = false) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	void PaintThis(RenderSurface *, int32 lerp_factor, bool scaled) override;
 
diff --git a/engines/ultima/ultima8/gumps/mini_stats_gump.cpp b/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
index be2f2fdce1..10a3934345 100644
--- a/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
+++ b/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
@@ -130,8 +130,8 @@ void MiniStatsGump::saveData(Common::WriteStream *ws) {
 	Gump::saveData(ws);
 }
 
-bool MiniStatsGump::loadData(IDataSource *ids, uint32 version) {
-	if (!Gump::loadData(ids, version)) return false;
+bool MiniStatsGump::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Gump::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/gumps/mini_stats_gump.h b/engines/ultima/ultima8/gumps/mini_stats_gump.h
index 6feb8c9643..130ac5bfbc 100644
--- a/engines/ultima/ultima8/gumps/mini_stats_gump.h
+++ b/engines/ultima/ultima8/gumps/mini_stats_gump.h
@@ -50,7 +50,7 @@ public:
 	Gump *OnMouseDown(int button, int32 mx, int32 my) override;
 	void OnMouseDouble(int button, int32 mx, int32 my) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.cpp b/engines/ultima/ultima8/gumps/minimap_gump.cpp
index 70a089e62b..5251cba7aa 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.cpp
+++ b/engines/ultima/ultima8/gumps/minimap_gump.cpp
@@ -199,8 +199,8 @@ void MiniMapGump::saveData(Common::WriteStream *ws) {
 	Gump::saveData(ws);
 }
 
-bool MiniMapGump::loadData(IDataSource *ids, uint32 version) {
-	if (!Gump::loadData(ids, version))
+bool MiniMapGump::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Gump::loadData(rs, version))
 		return false;
 
 	_lastMapNum = 0;
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.h b/engines/ultima/ultima8/gumps/minimap_gump.h
index 9d31a2186c..7e5a08049b 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.h
+++ b/engines/ultima/ultima8/gumps/minimap_gump.h
@@ -51,7 +51,7 @@ public:
 	void        PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled) override;
 	uint16      TraceObjId(int32 mx, int32 my) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/modal_gump.cpp b/engines/ultima/ultima8/gumps/modal_gump.cpp
index 3419a5eee6..67ca3f62cd 100644
--- a/engines/ultima/ultima8/gumps/modal_gump.cpp
+++ b/engines/ultima/ultima8/gumps/modal_gump.cpp
@@ -102,7 +102,7 @@ void ModalGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
-bool ModalGump::loadData(IDataSource *ids, uint32 version) {
+bool ModalGump::loadData(Common::ReadStream *rs, uint32 version) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/modal_gump.h b/engines/ultima/ultima8/gumps/modal_gump.h
index 27b8c72c38..4abec224fa 100644
--- a/engines/ultima/ultima8/gumps/modal_gump.h
+++ b/engines/ultima/ultima8/gumps/modal_gump.h
@@ -49,7 +49,7 @@ public:
 
 	Gump *OnMouseDown(int button, int32 mx, int32 my) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/movie_gump.cpp b/engines/ultima/ultima8/gumps/movie_gump.cpp
index f0cd018d17..ccc604b3d5 100644
--- a/engines/ultima/ultima8/gumps/movie_gump.cpp
+++ b/engines/ultima/ultima8/gumps/movie_gump.cpp
@@ -112,7 +112,7 @@ ProcId MovieGump::U8MovieViewer(RawArchive *movie, bool fade, bool introMusicHac
 	}
 }
 
-bool MovieGump::loadData(IDataSource *ids) {
+bool MovieGump::loadData(Common::ReadStream *rs) {
 	return false;
 }
 
diff --git a/engines/ultima/ultima8/gumps/movie_gump.h b/engines/ultima/ultima8/gumps/movie_gump.h
index 76ec7c0f90..149f0a60d2 100644
--- a/engines/ultima/ultima8/gumps/movie_gump.h
+++ b/engines/ultima/ultima8/gumps/movie_gump.h
@@ -54,7 +54,7 @@ public:
 
 	static ProcId U8MovieViewer(RawArchive *skf, bool fade, bool introMusicHack = false);
 
-	bool loadData(IDataSource *ids);
+	bool loadData(Common::ReadStream *rs);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/gumps/paged_gump.cpp b/engines/ultima/ultima8/gumps/paged_gump.cpp
index f549027956..3547dca447 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paged_gump.cpp
@@ -155,7 +155,7 @@ void PagedGump::addPage(Gump *g) {
 		_nextButton->UnhideGump();
 }
 
-bool PagedGump::loadData(IDataSource *ids) {
+bool PagedGump::loadData(Common::ReadStream *rs) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/paged_gump.h b/engines/ultima/ultima8/gumps/paged_gump.h
index 081058562b..c43a32b4f1 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.h
+++ b/engines/ultima/ultima8/gumps/paged_gump.h
@@ -53,7 +53,7 @@ public:
 		_buttonsEnabled = enabled;
 	}
 
-	bool loadData(IDataSource *ids);
+	bool loadData(Common::ReadStream *rs);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 	int _leftOff, _rightOff, _topOff, _gumpShape;
diff --git a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
index 86e8a43004..0955f9ff48 100644
--- a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
@@ -415,10 +415,10 @@ void PaperdollGump::saveData(Common::WriteStream *ws) {
 	ws->writeUint16LE(_statButtonId);
 }
 
-bool PaperdollGump::loadData(IDataSource *ids, uint32 version) {
-	if (!ContainerGump::loadData(ids, version)) return false;
+bool PaperdollGump::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!ContainerGump::loadData(rs, version)) return false;
 
-	_statButtonId = ids->readUint16LE();
+	_statButtonId = rs->readUint16LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/gumps/paperdoll_gump.h b/engines/ultima/ultima8/gumps/paperdoll_gump.h
index 5172985ac9..f61288a9c1 100644
--- a/engines/ultima/ultima8/gumps/paperdoll_gump.h
+++ b/engines/ultima/ultima8/gumps/paperdoll_gump.h
@@ -63,7 +63,7 @@ public:
 	bool DraggingItem(Item *item, int mx, int my) override;
 	void DropItem(Item *item, int mx, int my) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/gumps/quit_gump.cpp b/engines/ultima/ultima8/gumps/quit_gump.cpp
index 549720714f..be85978360 100644
--- a/engines/ultima/ultima8/gumps/quit_gump.cpp
+++ b/engines/ultima/ultima8/gumps/quit_gump.cpp
@@ -141,7 +141,7 @@ void QuitGump::verifyQuit() {
 	gump->setRelativePosition(CENTER);
 }
 
-bool QuitGump::loadData(IDataSource *ids) {
+bool QuitGump::loadData(Common::ReadStream *rs) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 	return true;
 }
diff --git a/engines/ultima/ultima8/gumps/quit_gump.h b/engines/ultima/ultima8/gumps/quit_gump.h
index afe5c80330..3e9e136a09 100644
--- a/engines/ultima/ultima8/gumps/quit_gump.h
+++ b/engines/ultima/ultima8/gumps/quit_gump.h
@@ -46,7 +46,7 @@ public:
 
 	static void verifyQuit();
 
-	bool loadData(IDataSource *ids);
+	bool loadData(Common::ReadStream *rs);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 	ObjId _yesWidget, _noWidget;
diff --git a/engines/ultima/ultima8/gumps/readable_gump.cpp b/engines/ultima/ultima8/gumps/readable_gump.cpp
index 0ed190bc11..ff30766d3b 100644
--- a/engines/ultima/ultima8/gumps/readable_gump.cpp
+++ b/engines/ultima/ultima8/gumps/readable_gump.cpp
@@ -126,7 +126,7 @@ void ReadableGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 }
 
-bool ReadableGump::loadData(IDataSource *ids, uint32 version) {
+bool ReadableGump::loadData(Common::ReadStream *rs, uint32 version) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 
 	return false;
diff --git a/engines/ultima/ultima8/gumps/readable_gump.h b/engines/ultima/ultima8/gumps/readable_gump.h
index 04b1406944..ed3ce0ff72 100644
--- a/engines/ultima/ultima8/gumps/readable_gump.h
+++ b/engines/ultima/ultima8/gumps/readable_gump.h
@@ -51,7 +51,7 @@ public:
 	INTRINSIC(I_readGrave);
 	INTRINSIC(I_readPlaque);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/scroll_gump.cpp b/engines/ultima/ultima8/gumps/scroll_gump.cpp
index 117294af04..729689395d 100644
--- a/engines/ultima/ultima8/gumps/scroll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/scroll_gump.cpp
@@ -102,7 +102,7 @@ void ScrollGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
-bool ScrollGump::loadData(IDataSource *ids, uint32 version) {
+bool ScrollGump::loadData(Common::ReadStream *rs, uint32 version) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 
 	return false;
diff --git a/engines/ultima/ultima8/gumps/scroll_gump.h b/engines/ultima/ultima8/gumps/scroll_gump.h
index 0f0d422ea7..b50751ed1d 100644
--- a/engines/ultima/ultima8/gumps/scroll_gump.h
+++ b/engines/ultima/ultima8/gumps/scroll_gump.h
@@ -55,7 +55,7 @@ protected:
 	void NextText();
 
 public:
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
index 7b7bf07b65..d95f948f40 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
@@ -244,7 +244,7 @@ void ShapeViewerGump::U8ShapeViewer() {
 	_flex.second = gamedata->getFonts();
 	_flexes.push_back(_flex);
 	FileSystem *filesys = FileSystem::get_instance();
-	IDataSource *eintro = filesys->ReadFile("@game/static/eintro.skf");
+	Common::SeekableReadStream *eintro = filesys->ReadFile("@game/static/eintro.skf");
 	if (eintro) {
 		ShapeArchive *eintroshapes = new ShapeArchive(eintro, GameData::OTHER,
 		        PaletteManager::get_instance()->getPalette(PaletteManager::Pal_Game),
@@ -255,7 +255,7 @@ void ShapeViewerGump::U8ShapeViewer() {
 		// !! memory leak
 	}
 
-	IDataSource *endgame = filesys->ReadFile("@game/static/endgame.skf");
+	Common::SeekableReadStream *endgame = filesys->ReadFile("@game/static/endgame.skf");
 	if (endgame) {
 		ShapeArchive *endgameshapes = new ShapeArchive(endgame, GameData::OTHER,
 		        PaletteManager::get_instance()->getPalette(PaletteManager::Pal_Game),
@@ -274,7 +274,7 @@ void ShapeViewerGump::U8ShapeViewer() {
 	gump->InitGump(0);
 }
 
-bool ShapeViewerGump::loadData(IDataSource *ids) {
+bool ShapeViewerGump::loadData(Common::ReadStream *rs) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.h b/engines/ultima/ultima8/gumps/shape_viewer_gump.h
index bb53a19ce6..92183e3857 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.h
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.h
@@ -51,7 +51,7 @@ public:
 
 	static void U8ShapeViewer();
 
-	bool loadData(IDataSource *ids);
+	bool loadData(Common::ReadStream *rs);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/gumps/slider_gump.cpp b/engines/ultima/ultima8/gumps/slider_gump.cpp
index 61c879296f..95ad8e9082 100644
--- a/engines/ultima/ultima8/gumps/slider_gump.cpp
+++ b/engines/ultima/ultima8/gumps/slider_gump.cpp
@@ -246,7 +246,7 @@ void SliderGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
-bool SliderGump::loadData(IDataSource *ids, uint32 version) {
+bool SliderGump::loadData(Common::ReadStream *rs, uint32 version) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 
 	return false;
diff --git a/engines/ultima/ultima8/gumps/slider_gump.h b/engines/ultima/ultima8/gumps/slider_gump.h
index 34171ba92a..a12450b202 100644
--- a/engines/ultima/ultima8/gumps/slider_gump.h
+++ b/engines/ultima/ultima8/gumps/slider_gump.h
@@ -55,7 +55,7 @@ public:
 
 	bool OnKeyDown(int key, int mod) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/gumps/target_gump.cpp b/engines/ultima/ultima8/gumps/target_gump.cpp
index 757c1725f3..ac489743b5 100644
--- a/engines/ultima/ultima8/gumps/target_gump.cpp
+++ b/engines/ultima/ultima8/gumps/target_gump.cpp
@@ -113,7 +113,7 @@ void TargetGump::saveData(Common::WriteStream *ws) {
 	CANT_HAPPEN_MSG("Trying to save ModalGump");
 }
 
-bool TargetGump::loadData(IDataSource *ids, uint32 versin) {
+bool TargetGump::loadData(Common::ReadStream *rs, uint32 versin) {
 	CANT_HAPPEN_MSG("Trying to load ModalGump");
 	return false;
 }
diff --git a/engines/ultima/ultima8/gumps/target_gump.h b/engines/ultima/ultima8/gumps/target_gump.h
index 157eddf0c5..476d0e8c12 100644
--- a/engines/ultima/ultima8/gumps/target_gump.h
+++ b/engines/ultima/ultima8/gumps/target_gump.h
@@ -49,7 +49,7 @@ public:
 
 	INTRINSIC(I_target);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/gumps/widgets/button_widget.cpp b/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
index 88a3b460b0..8e887e7fdc 100644
--- a/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
@@ -221,27 +221,27 @@ void ButtonWidget::saveData(Common::WriteStream *ws) {
 	ws->writeByte(m);
 }
 
-bool ButtonWidget::loadData(IDataSource *ids, uint32 version) {
-	if (!Gump::loadData(ids, version)) return false;
+bool ButtonWidget::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Gump::loadData(rs, version)) return false;
 
 	_shapeUp = nullptr;
-	ShapeArchive *flex = GameData::get_instance()->getShapeFlex(ids->readUint16LE());
-	uint32 shapenum = ids->readUint32LE();
+	ShapeArchive *flex = GameData::get_instance()->getShapeFlex(rs->readUint16LE());
+	uint32 shapenum = rs->readUint32LE();
 	if (flex) {
 		_shapeUp = flex->getShape(shapenum);
 	}
-	_frameNumUp = ids->readUint32LE();
+	_frameNumUp = rs->readUint32LE();
 
 	_shapeDown = nullptr;
-	flex = GameData::get_instance()->getShapeFlex(ids->readUint16LE());
-	shapenum = ids->readUint32LE();
+	flex = GameData::get_instance()->getShapeFlex(rs->readUint16LE());
+	shapenum = rs->readUint32LE();
 	if (flex) {
 		_shapeDown = flex->getShape(shapenum);
 	}
-	_frameNumDown = ids->readUint32LE();
-	_textWidget = ids->readUint16LE();
-	_mouseOverBlendCol = ids->readUint32LE();
-	_mouseOver = (ids->readByte() != 0);
+	_frameNumDown = rs->readUint32LE();
+	_textWidget = rs->readUint16LE();
+	_mouseOverBlendCol = rs->readUint32LE();
+	_mouseOver = (rs->readByte() != 0);
 
 	// HACK ALERT
 	if (_textWidget != 0) {
diff --git a/engines/ultima/ultima8/gumps/widgets/button_widget.h b/engines/ultima/ultima8/gumps/widgets/button_widget.h
index 26d1da838e..7fd3377a7a 100644
--- a/engines/ultima/ultima8/gumps/widgets/button_widget.h
+++ b/engines/ultima/ultima8/gumps/widgets/button_widget.h
@@ -78,7 +78,7 @@ protected:
 	int _origW, _origH;
 
 public:
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp b/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
index 489feadd93..ac34e98d8f 100644
--- a/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
@@ -63,8 +63,8 @@ void SlidingWidget::saveData(Common::WriteStream *ws) {
 	Gump::saveData(ws);
 }
 
-bool SlidingWidget::loadData(IDataSource *ids, uint32 version) {
-	if (!Gump::loadData(ids, version)) return false;
+bool SlidingWidget::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Gump::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/gumps/widgets/sliding_widget.h b/engines/ultima/ultima8/gumps/widgets/sliding_widget.h
index 5a8b653601..12ac43e016 100644
--- a/engines/ultima/ultima8/gumps/widgets/sliding_widget.h
+++ b/engines/ultima/ultima8/gumps/widgets/sliding_widget.h
@@ -40,7 +40,7 @@ public:
 	void InitGump(Gump *newparent, bool take_focus = true) override;
 	uint16 TraceObjId(int32 mx, int32 my) override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
index 2257b0e812..7b00a96e26 100644
--- a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
@@ -229,22 +229,22 @@ void TextWidget::saveData(Common::WriteStream *ws) {
 	ws->write(_text.c_str(), _text.size());
 }
 
-bool TextWidget::loadData(IDataSource *ids, uint32 version) {
-	if (!Gump::loadData(ids, version)) return false;
-
-	_gameFont = (ids->readByte() != 0);
-	_fontNum = static_cast<int>(ids->readUint32LE());
-	_blendColour = ids->readUint32LE();
-	_currentStart = static_cast<int>(ids->readUint32LE());
-	_currentEnd = static_cast<int>(ids->readUint32LE());
-	_targetWidth = static_cast<int>(ids->readUint32LE());
-	_targetHeight = static_cast<int>(ids->readUint32LE());
-	_textAlign = static_cast<Font::TextAlign>(ids->readUint16LE());
-
-	uint32 slen = ids->readUint32LE();
+bool TextWidget::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Gump::loadData(rs, version)) return false;
+
+	_gameFont = (rs->readByte() != 0);
+	_fontNum = static_cast<int>(rs->readUint32LE());
+	_blendColour = rs->readUint32LE();
+	_currentStart = static_cast<int>(rs->readUint32LE());
+	_currentEnd = static_cast<int>(rs->readUint32LE());
+	_targetWidth = static_cast<int>(rs->readUint32LE());
+	_targetHeight = static_cast<int>(rs->readUint32LE());
+	_textAlign = static_cast<Font::TextAlign>(rs->readUint16LE());
+
+	uint32 slen = rs->readUint32LE();
 	if (slen > 0) {
 		char *buf = new char[slen + 1];
-		ids->read(buf, slen);
+		rs->read(buf, slen);
 		buf[slen] = 0;
 		_text = buf;
 		delete[] buf;
diff --git a/engines/ultima/ultima8/gumps/widgets/text_widget.h b/engines/ultima/ultima8/gumps/widgets/text_widget.h
index 892d491ae4..8b38199a1c 100644
--- a/engines/ultima/ultima8/gumps/widgets/text_widget.h
+++ b/engines/ultima/ultima8/gumps/widgets/text_widget.h
@@ -99,7 +99,7 @@ protected:
 	Font *getFont() const;
 
 public:
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 protected:
 	void saveData(Common::WriteStream *ws) override;
diff --git a/engines/ultima/ultima8/kernel/delay_process.cpp b/engines/ultima/ultima8/kernel/delay_process.cpp
index ff250dcf4e..f986799cea 100644
--- a/engines/ultima/ultima8/kernel/delay_process.cpp
+++ b/engines/ultima/ultima8/kernel/delay_process.cpp
@@ -51,10 +51,10 @@ void DelayProcess::dumpInfo() const {
 }
 
 
-bool DelayProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool DelayProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_count = static_cast<int>(ids->readUint32LE());
+	_count = static_cast<int>(rs->readUint32LE());
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/kernel/delay_process.h b/engines/ultima/ultima8/kernel/delay_process.h
index ea08d7b006..6a816cf8fa 100644
--- a/engines/ultima/ultima8/kernel/delay_process.h
+++ b/engines/ultima/ultima8/kernel/delay_process.h
@@ -44,7 +44,7 @@ public:
 
 	void dumpInfo() const override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/kernel/kernel.cpp b/engines/ultima/ultima8/kernel/kernel.cpp
index 5a6d06e8e8..0cc24b97cc 100644
--- a/engines/ultima/ultima8/kernel/kernel.cpp
+++ b/engines/ultima/ultima8/kernel/kernel.cpp
@@ -330,15 +330,15 @@ void Kernel::save(Common::WriteStream *ws) {
 	}
 }
 
-bool Kernel::load(IDataSource *ids, uint32 version) {
-	_frameNum = ids->readUint32LE();
+bool Kernel::load(Common::ReadStream *rs, uint32 version) {
+	_frameNum = rs->readUint32LE();
 
-	if (!_pIDs->load(ids, version)) return false;
+	if (!_pIDs->load(rs, version)) return false;
 
-	const uint32 pcount = ids->readUint32LE();
+	const uint32 pcount = rs->readUint32LE();
 
 	for (unsigned int i = 0; i < pcount; ++i) {
-		Process *p = loadProcess(ids, version);
+		Process *p = loadProcess(rs, version);
 		if (!p) return false;
 		_processes.push_back(p);
 	}
@@ -346,10 +346,10 @@ bool Kernel::load(IDataSource *ids, uint32 version) {
 	return true;
 }
 
-Process *Kernel::loadProcess(IDataSource *ids, uint32 version) {
-	const uint16 classlen = ids->readUint16LE();
+Process *Kernel::loadProcess(Common::ReadStream *rs, uint32 version) {
+	const uint16 classlen = rs->readUint16LE();
 	char *buf = new char[classlen + 1];
-	ids->read(buf, classlen);
+	rs->read(buf, classlen);
 	buf[classlen] = 0;
 
 	Std::string classname = buf;
@@ -366,7 +366,7 @@ Process *Kernel::loadProcess(IDataSource *ids, uint32 version) {
 
 	_loading = true;
 
-	Process *p = (*(iter->_value))(ids, version);
+	Process *p = (*(iter->_value))(rs, version);
 
 	_loading = false;
 
diff --git a/engines/ultima/ultima8/kernel/kernel.h b/engines/ultima/ultima8/kernel/kernel.h
index c99e09f54c..cd70851938 100644
--- a/engines/ultima/ultima8/kernel/kernel.h
+++ b/engines/ultima/ultima8/kernel/kernel.h
@@ -32,10 +32,8 @@ namespace Ultima8 {
 class Debugger;
 class Process;
 class idMan;
-class IDataSource;
-class ODataSource;
 
-typedef Process *(*ProcessLoadFunc)(IDataSource *, uint32 version);
+typedef Process *(*ProcessLoadFunc)(Common::ReadStream *rs, uint32 version);
 typedef Std::list<Process *>::const_iterator ProcessIter;
 typedef Std::list<Process *>::iterator ProcessIterator;
 
@@ -99,7 +97,7 @@ public:
 	void processTypes();
 
 	void save(Common::WriteStream *ws);
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 
 	void pause() {
 		_paused++;
@@ -130,7 +128,7 @@ public:
 	INTRINSIC(I_getNumProcesses);
 	INTRINSIC(I_resetRef);
 private:
-	Process *loadProcess(IDataSource *ids, uint32 version);
+	Process *loadProcess(Common::ReadStream *rs, uint32 version);
 
 	Std::list<Process *> _processes;
 	idMan   *_pIDs;
diff --git a/engines/ultima/ultima8/kernel/mouse.cpp b/engines/ultima/ultima8/kernel/mouse.cpp
index 6b49085856..ff87a1136b 100644
--- a/engines/ultima/ultima8/kernel/mouse.cpp
+++ b/engines/ultima/ultima8/kernel/mouse.cpp
@@ -53,7 +53,7 @@ Mouse::Mouse() : _flashingCursorTime(0), _mouseOverGump(0), _defaultMouse(nullpt
 
 void Mouse::setup() {
 	FileSystem *filesys = FileSystem::get_instance();
-	IDataSource *dm = filesys->ReadFile("@data/mouse.tga");
+	Common::SeekableReadStream *dm = filesys->ReadFile("@data/mouse.tga");
 	_defaultMouse = dm ? Texture::Create(dm, "@data/mouse.tga") : 0;
 
 	if (!_defaultMouse)
diff --git a/engines/ultima/ultima8/kernel/object.cpp b/engines/ultima/ultima8/kernel/object.cpp
index 42e87eacb5..0b9bc6189e 100644
--- a/engines/ultima/ultima8/kernel/object.cpp
+++ b/engines/ultima/ultima8/kernel/object.cpp
@@ -91,8 +91,8 @@ void Object::saveData(Common::WriteStream *ws) {
 	ws->writeUint16LE(_objId);
 }
 
-bool Object::loadData(IDataSource *ids, uint32 version) {
-	_objId = ids->readUint16LE();
+bool Object::loadData(Common::ReadStream *rs, uint32 version) {
+	_objId = rs->readUint16LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/kernel/object.h b/engines/ultima/ultima8/kernel/object.h
index 61f0d29e7b..b97208bb1e 100644
--- a/engines/ultima/ultima8/kernel/object.h
+++ b/engines/ultima/ultima8/kernel/object.h
@@ -30,8 +30,6 @@ namespace Ultima {
 namespace Ultima8 {
 
 class Usecode;
-class ODataSource;
-class IDataSource;
 
 class Object {
 public:
@@ -72,7 +70,7 @@ public:
 	ProcId callUsecode(uint16 classid, uint16 offset,
 	                   const uint8 *args = 0, int argsize = 0);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 protected:
 	//! write the Object savegame header (mainly consisting of the classname)
diff --git a/engines/ultima/ultima8/kernel/object_manager.cpp b/engines/ultima/ultima8/kernel/object_manager.cpp
index fdb7b6b767..b091f343a3 100644
--- a/engines/ultima/ultima8/kernel/object_manager.cpp
+++ b/engines/ultima/ultima8/kernel/object_manager.cpp
@@ -59,9 +59,9 @@ ObjectManager *ObjectManager::_objectManager = nullptr;
 // every object separately
 template<class T>
 struct ObjectLoader {
-	static Object *load(IDataSource *ids, uint32 version) {
+	static Object *load(Common::ReadStream *rs, uint32 version) {
 		T *p = new T();
-		bool ok = p->loadData(ids, version);
+		bool ok = p->loadData(rs, version);
 		if (!ok) {
 			delete p;
 			p = nullptr;
@@ -236,22 +236,22 @@ void ObjectManager::save(Common::WriteStream *ws) {
 }
 
 
-bool ObjectManager::load(IDataSource *ids, uint32 version) {
-	if (!_objIDs->load(ids, version)) return false;
-	if (!_actorIDs->load(ids, version)) return false;
+bool ObjectManager::load(Common::ReadStream *rs, uint32 version) {
+	if (!_objIDs->load(rs, version)) return false;
+	if (!_actorIDs->load(rs, version)) return false;
 
 	do {
 		// peek ahead for terminator
-		uint16 classlen = ids->readUint16LE();
+		uint16 classlen = rs->readUint16LE();
 		if (classlen == 0) break;
 		char *buf = new char[classlen + 1];
-		ids->read(buf, classlen);
+		rs->read(buf, classlen);
 		buf[classlen] = 0;
 
 		Std::string classname = buf;
 		delete[] buf;
 
-		Object *obj = loadObject(ids, classname, version);
+		Object *obj = loadObject(rs, classname, version);
 		if (!obj) return false;
 
 		// top level gumps have to be added to the correct core gump
@@ -290,19 +290,19 @@ bool ObjectManager::load(IDataSource *ids, uint32 version) {
 	return true;
 }
 
-Object *ObjectManager::loadObject(IDataSource *ids, uint32 version) {
-	uint16 classlen = ids->readUint16LE();
+Object *ObjectManager::loadObject(Common::ReadStream *rs, uint32 version) {
+	uint16 classlen = rs->readUint16LE();
 	char *buf = new char[classlen + 1];
-	ids->read(buf, classlen);
+	rs->read(buf, classlen);
 	buf[classlen] = 0;
 
 	Std::string classname = buf;
 	delete[] buf;
 
-	return loadObject(ids, classname, version);
+	return loadObject(rs, classname, version);
 }
 
-Object *ObjectManager::loadObject(IDataSource *ids, Std::string classname,
+Object *ObjectManager::loadObject(Common::ReadStream *rs, Std::string classname,
                                   uint32 version) {
 	Std::map<Common::String, ObjectLoadFunc>::iterator iter;
 	iter = _objectLoaders.find(classname);
@@ -312,7 +312,7 @@ Object *ObjectManager::loadObject(IDataSource *ids, Std::string classname,
 		return nullptr;
 	}
 
-	Object *obj = (*(iter->_value))(ids, version);
+	Object *obj = (*(iter->_value))(rs, version);
 
 	if (!obj) {
 		perr << "Error loading object of type " << classname << Std::endl;
diff --git a/engines/ultima/ultima8/kernel/object_manager.h b/engines/ultima/ultima8/kernel/object_manager.h
index aae02a3dbe..1b34b58165 100644
--- a/engines/ultima/ultima8/kernel/object_manager.h
+++ b/engines/ultima/ultima8/kernel/object_manager.h
@@ -31,10 +31,8 @@ namespace Ultima8 {
 class idMan;
 class Object;
 class Actor;
-class IDataSource;
-class ODataSource;
 
-typedef Object *(*ObjectLoadFunc)(IDataSource *, uint32);
+typedef Object *(*ObjectLoadFunc)(Common::ReadStream *rs, uint32);
 
 class ObjectManager {
 public:
@@ -65,10 +63,10 @@ public:
 	void objectTypes();
 
 	void save(Common::WriteStream *ws);
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 
-	Object *loadObject(IDataSource *ids, uint32 version);
-	Object *loadObject(IDataSource *ids, Std::string classname, uint32 version);
+	Object *loadObject(Common::ReadStream *rs, uint32 version);
+	Object *loadObject(Common::ReadStream *rs, Std::string classname, uint32 version);
 
 	Std::vector<Object *> _objects;
 	idMan *_objIDs;
diff --git a/engines/ultima/ultima8/kernel/process.cpp b/engines/ultima/ultima8/kernel/process.cpp
index 6221ba7806..0e5caacce0 100644
--- a/engines/ultima/ultima8/kernel/process.cpp
+++ b/engines/ultima/ultima8/kernel/process.cpp
@@ -145,16 +145,16 @@ void Process::saveData(Common::WriteStream *ws) {
 		ws->writeUint16LE(_waiting[i]);
 }
 
-bool Process::loadData(IDataSource *ids, uint32 version) {
-	_pid = ids->readUint16LE();
-	_flags = ids->readUint32LE();
-	_itemNum = ids->readUint16LE();
-	_type = ids->readUint16LE();
-	_result = ids->readUint32LE();
-	uint32 waitcount = ids->readUint32LE();
+bool Process::loadData(Common::ReadStream *rs, uint32 version) {
+	_pid = rs->readUint16LE();
+	_flags = rs->readUint32LE();
+	_itemNum = rs->readUint16LE();
+	_type = rs->readUint16LE();
+	_result = rs->readUint32LE();
+	uint32 waitcount = rs->readUint32LE();
 	_waiting.resize(waitcount);
 	for (unsigned int i = 0; i < waitcount; ++i)
-		_waiting[i] = ids->readUint16LE();
+		_waiting[i] = rs->readUint16LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/kernel/process.h b/engines/ultima/ultima8/kernel/process.h
index 81bab455b0..346fce9979 100644
--- a/engines/ultima/ultima8/kernel/process.h
+++ b/engines/ultima/ultima8/kernel/process.h
@@ -31,8 +31,6 @@ namespace Ultima {
 namespace Ultima8 {
 
 class Debugger;
-class IDataSource;
-class ODataSource;
 
 class Process {
 	friend class Kernel;
@@ -118,7 +116,7 @@ public:
 	void save(Common::WriteStream *ods);
 
 	//! load Process data
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 protected:
 	//! save the Process data
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index 1d36bb2e99..91ffdfa34a 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -796,12 +796,12 @@ bool Debugger::cmdDumpMap(int argc, const char **argv) {
 	sprintf(buf, "%02d", World::get_instance()->getCurrentMap()->getNum());
 	filename += buf;
 	filename += ".png";
-	ODataSource *ds = FileSystem::get_instance()->WriteFile(filename);
+	Common::WriteStream *ws = FileSystem::get_instance()->WriteFile(filename);
 	Std::string pngcomment = "Map ";
 	pngcomment += buf;
 	pngcomment += ", dumped by Pentagram.";
 
-	PNGWriter *pngw = new PNGWriter(ds);
+	PNGWriter *pngw = new PNGWriter(ws);
 	pngw->init(awidth, aheight, pngcomment);
 
 	// Now render the map
@@ -843,7 +843,7 @@ bool Debugger::cmdDumpMap(int argc, const char **argv) {
 	pngw->finish();
 	delete pngw;
 
-	delete ds;
+	delete ws;
 
 	delete g;
 	delete s;
@@ -1431,7 +1431,7 @@ bool Debugger::cmdPlayMovie(int argc, const char **argv) {
 
 	Std::string filename = Common::String::format("@game/static/%s.skf", argv[1]);
 	FileSystem *filesys = FileSystem::get_instance();
-	IDataSource *skf = filesys->ReadFile(filename);
+	Common::SeekableReadStream *skf = filesys->ReadFile(filename);
 	if (!skf) {
 		debugPrintf("movie not found.\n");
 		return true;
diff --git a/engines/ultima/ultima8/misc/id_man.cpp b/engines/ultima/ultima8/misc/id_man.cpp
index 39a03d9dd8..c45cfb57dd 100644
--- a/engines/ultima/ultima8/misc/id_man.cpp
+++ b/engines/ultima/ultima8/misc/id_man.cpp
@@ -197,12 +197,12 @@ void idMan::save(Common::WriteStream *ws) {
 	ws->writeUint16LE(0); // terminator
 }
 
-bool idMan::load(IDataSource *ds, uint32 version) {
-	_begin = ds->readUint16LE();
-	_end = ds->readUint16LE();
-	_maxEnd = ds->readUint16LE();
-	_startCount = ds->readUint16LE();
-	uint16 realusedcount = ds->readUint16LE();
+bool idMan::load(Common::ReadStream *rs, uint32 version) {
+	_begin = rs->readUint16LE();
+	_end = rs->readUint16LE();
+	_maxEnd = rs->readUint16LE();
+	_startCount = rs->readUint16LE();
+	uint16 realusedcount = rs->readUint16LE();
 
 	_ids.resize(_end + 1);
 
@@ -211,10 +211,10 @@ bool idMan::load(IDataSource *ds, uint32 version) {
 	}
 	_first = _last = 0;
 
-	uint16 cur = ds->readUint16LE();
+	uint16 cur = rs->readUint16LE();
 	while (cur) {
 		clearID(cur);
-		cur = ds->readUint16LE();
+		cur = rs->readUint16LE();
 	}
 
 	_usedCount = realusedcount;
diff --git a/engines/ultima/ultima8/misc/id_man.h b/engines/ultima/ultima8/misc/id_man.h
index 5da79164be..0fdbdb7f41 100644
--- a/engines/ultima/ultima8/misc/id_man.h
+++ b/engines/ultima/ultima8/misc/id_man.h
@@ -28,9 +28,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-class ODataSource;
-
 //
 // idMan. Used to allocate and keep track of unused ids.
 // Supposed to be used by Kernel and World for pID and ObjId
@@ -97,7 +94,7 @@ public:
 	}
 
 	void save(Common::WriteStream *ws);
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 
 private:
 	//! double the amount of available IDs (up to the maximum passed
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 0a06ddcaca..29c581b1c9 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -119,9 +119,9 @@ using Std::string;
 // every process
 template<class T>
 struct ProcessLoader {
-	static Process *load(IDataSource *ids, uint32 version) {
+	static Process *load(Common::ReadStream *rs, uint32 version) {
 		T *p = new T();
-		bool ok = p->loadData(ids, version);
+		bool ok = p->loadData(rs, version);
 		if (!ok) {
 			delete p;
 			p = nullptr;
@@ -1397,31 +1397,31 @@ void Ultima8Engine::save(Common::WriteStream *ws) {
 	ws->writeByte(c);
 }
 
-bool Ultima8Engine::load(IDataSource *ids, uint32 version) {
-	_avatarInStasis = (ids->readByte() != 0);
+bool Ultima8Engine::load(Common::ReadStream *rs, uint32 version) {
+	_avatarInStasis = (rs->readByte() != 0);
 
 	// no gump should be moused over after load
 	_mouse->resetMouseOverGump();
 
-	int32 absoluteTime = static_cast<int32>(ids->readUint32LE());
+	int32 absoluteTime = static_cast<int32>(rs->readUint32LE());
 	_timeOffset = absoluteTime - Kernel::get_instance()->getFrameNum();
 
-	uint16 amppid = ids->readUint16LE();
+	uint16 amppid = rs->readUint16LE();
 	_avatarMoverProcess = p_dynamic_cast<AvatarMoverProcess *>(Kernel::get_instance()->getProcess(amppid));
 
 	int16 matrix[12];
 	for (int i = 0; i < 12; i++)
-		matrix[i] = ids->readUint16LE();
+		matrix[i] = rs->readUint16LE();
 
 	PaletteManager::get_instance()->transformPalette(PaletteManager::Pal_Game, matrix);
 	Palette *pal = PaletteManager::get_instance()->getPalette(PaletteManager::Pal_Game);
-	pal->_transform = static_cast<PalTransforms>(ids->readUint16LE());
+	pal->_transform = static_cast<PalTransforms>(rs->readUint16LE());
 
-	_inversion = ids->readUint16LE();
+	_inversion = rs->readUint16LE();
 
-	_saveCount = ids->readUint32LE();
+	_saveCount = rs->readUint32LE();
 
-	_hasCheated = (ids->readByte() != 0);
+	_hasCheated = (rs->readByte() != 0);
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h
index c8c3327d12..2397a8e5dc 100644
--- a/engines/ultima/ultima8/ultima8.h
+++ b/engines/ultima/ultima8/ultima8.h
@@ -25,6 +25,7 @@
 #define ULTIMA8_ULTIMA8
 
 #include "common/scummsys.h"
+#include "common/stream.h"
 #include "common/system.h"
 #include "common/archive.h"
 #include "common/error.h"
@@ -70,8 +71,6 @@ class ObjectManager;
 class FontManager;
 class Mouse;
 class AvatarMoverProcess;
-class IDataSource;
-class ODataSource;
 class Texture;
 class AudioMixer;
 
@@ -149,7 +148,7 @@ private:
 	void save(Common::WriteStream *ws);
 
 	//! load CoreApp/Ultima8Engine data
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 
 	//! reset engine (including World, UCMachine, a.o.)
 	void resetEngine();
diff --git a/engines/ultima/ultima8/usecode/bit_set.cpp b/engines/ultima/ultima8/usecode/bit_set.cpp
index 070ce47b3a..2b5a9fddae 100644
--- a/engines/ultima/ultima8/usecode/bit_set.cpp
+++ b/engines/ultima/ultima8/usecode/bit_set.cpp
@@ -120,10 +120,10 @@ void BitSet::save(Common::WriteStream *ws) {
 	ws->write(_data, _bytes);
 }
 
-bool BitSet::load(IDataSource *ids, uint32 version) {
-	uint32 s = ids->readUint32LE();
+bool BitSet::load(Common::ReadStream *rs, uint32 version) {
+	uint32 s = rs->readUint32LE();
 	setSize(s);
-	ids->read(_data, _bytes);
+	rs->read(_data, _bytes);
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/usecode/bit_set.h b/engines/ultima/ultima8/usecode/bit_set.h
index b2e642338e..a1c21df49a 100644
--- a/engines/ultima/ultima8/usecode/bit_set.h
+++ b/engines/ultima/ultima8/usecode/bit_set.h
@@ -26,9 +26,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-class ODataSource;
-
 class BitSet {
 public:
 	BitSet();
@@ -52,7 +49,7 @@ public:
 	void setBits(unsigned int pos, unsigned int n, uint32 bits);
 
 	void save(Common::WriteStream *ws);
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 
 private:
 	unsigned int _size;
diff --git a/engines/ultima/ultima8/usecode/uc_list.cpp b/engines/ultima/ultima8/usecode/uc_list.cpp
index 70ac554aa5..c4245c9980 100644
--- a/engines/ultima/ultima8/usecode/uc_list.cpp
+++ b/engines/ultima/ultima8/usecode/uc_list.cpp
@@ -123,11 +123,11 @@ void UCList::save(Common::WriteStream *ws) {
 }
 
 
-bool UCList::load(IDataSource *ids, uint32 version) {
-	_elementSize = ids->readUint32LE();
-	_size = ids->readUint32LE();
+bool UCList::load(Common::ReadStream *rs, uint32 version) {
+	_elementSize = rs->readUint32LE();
+	_size = rs->readUint32LE();
 	_elements.resize(_size * _elementSize);
-	ids->read(&(_elements[0]), _size * _elementSize);
+	rs->read(&(_elements[0]), _size * _elementSize);
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/usecode/uc_list.h b/engines/ultima/ultima8/usecode/uc_list.h
index 99d00d55cc..f499c8d3b1 100644
--- a/engines/ultima/ultima8/usecode/uc_list.h
+++ b/engines/ultima/ultima8/usecode/uc_list.h
@@ -29,9 +29,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-class ODataSource;
-
 // stringlists: _elementSize = 2, each element is actually a stringref
 // see for example the 0x0E opcode: there is no way to see if the
 // created list is a stringlist or not
@@ -159,7 +156,7 @@ public:
 	uint16 getStringIndex(uint32 index) const;
 
 	void save(Common::WriteStream *ws);
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 
 private:
 	const Std::string &getString(uint32 index) const;
diff --git a/engines/ultima/ultima8/usecode/uc_machine.cpp b/engines/ultima/ultima8/usecode/uc_machine.cpp
index d58f319b16..63ed2802f2 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.cpp
+++ b/engines/ultima/ultima8/usecode/uc_machine.cpp
@@ -2258,20 +2258,20 @@ void UCMachine::saveLists(Common::WriteStream *ws) {
 	}
 }
 
-bool UCMachine::loadGlobals(IDataSource *ids, uint32 version) {
-	return _globals->load(ids, version);
+bool UCMachine::loadGlobals(Common::ReadStream *rs, uint32 version) {
+	return _globals->load(rs, version);
 }
 
-bool UCMachine::loadStrings(IDataSource *ids, uint32 version) {
-	if (!_stringIDs->load(ids, version)) return false;
+bool UCMachine::loadStrings(Common::ReadStream *rs, uint32 version) {
+	if (!_stringIDs->load(rs, version)) return false;
 
-	uint32 stringcount = ids->readUint32LE();
+	uint32 stringcount = rs->readUint32LE();
 	for (unsigned int i = 0; i < stringcount; ++i) {
-		uint16 sid = ids->readUint16LE();
-		uint32 len = ids->readUint32LE();
+		uint16 sid = rs->readUint16LE();
+		uint32 len = rs->readUint32LE();
 		if (len) {
 			char *buf = new char[len + 1];
-			ids->read(buf, len);
+			rs->read(buf, len);
 			buf[len] = 0;
 			_stringHeap[sid] = buf;
 			delete[] buf;
@@ -2283,14 +2283,14 @@ bool UCMachine::loadStrings(IDataSource *ids, uint32 version) {
 	return true;
 }
 
-bool UCMachine::loadLists(IDataSource *ids, uint32 version) {
-	if (!_listIDs->load(ids, version)) return false;
+bool UCMachine::loadLists(Common::ReadStream *rs, uint32 version) {
+	if (!_listIDs->load(rs, version)) return false;
 
-	uint32 listcount = ids->readUint32LE();
+	uint32 listcount = rs->readUint32LE();
 	for (unsigned int i = 0; i < listcount; ++i) {
-		uint16 lid = ids->readUint16LE();
+		uint16 lid = rs->readUint16LE();
 		UCList *l = new UCList(2); // the "2" will be ignored by load()
-		bool ret = l->load(ids, version);
+		bool ret = l->load(rs, version);
 		if (!ret) return false;
 
 		_listHeap[lid] = l;
diff --git a/engines/ultima/ultima8/usecode/uc_machine.h b/engines/ultima/ultima8/usecode/uc_machine.h
index 80a19dbf5a..5356576849 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.h
+++ b/engines/ultima/ultima8/usecode/uc_machine.h
@@ -34,8 +34,6 @@ class Debugger;
 class Process;
 class UCProcess;
 class ConvertUsecode;
-class IDataSource;
-class ODataSource;
 class BitSet;
 class UCList;
 class idMan;
@@ -80,9 +78,9 @@ public:
 	void saveStrings(Common::WriteStream *ws);
 	void saveLists(Common::WriteStream *ws);
 
-	bool loadGlobals(IDataSource *ids, uint32 version);
-	bool loadStrings(IDataSource *ids, uint32 version);
-	bool loadLists(IDataSource *ids, uint32 version);
+	bool loadGlobals(Common::ReadStream *rs, uint32 version);
+	bool loadStrings(Common::ReadStream *rs, uint32 version);
+	bool loadLists(Common::ReadStream *rs, uint32 version);
 
 	INTRINSIC(I_true);
 	INTRINSIC(I_dummyProcess);
diff --git a/engines/ultima/ultima8/usecode/uc_process.cpp b/engines/ultima/ultima8/usecode/uc_process.cpp
index ac5fefbf1f..ab20e3e13a 100644
--- a/engines/ultima/ultima8/usecode/uc_process.cpp
+++ b/engines/ultima/ultima8/usecode/uc_process.cpp
@@ -176,21 +176,21 @@ void UCProcess::saveData(Common::WriteStream *ws) {
 	_stack.save(ws);
 }
 
-bool UCProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
-
-	_bp = ids->readUint16LE();
-	_classId = ids->readUint16LE();
-	_ip = ids->readUint16LE();
-	_temp32 = ids->readUint32LE();
-	uint32 freecount = ids->readUint32LE();
+bool UCProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
+
+	_bp = rs->readUint16LE();
+	_classId = rs->readUint16LE();
+	_ip = rs->readUint16LE();
+	_temp32 = rs->readUint32LE();
+	uint32 freecount = rs->readUint32LE();
 	for (unsigned int i = 0; i < freecount; ++i) {
 		Std::pair<uint16, int> p;
-		p.first = ids->readUint16LE();
-		p.second = static_cast<int>(ids->readUint32LE());
+		p.first = rs->readUint16LE();
+		p.second = static_cast<int>(rs->readUint32LE());
 		_freeOnTerminate.push_back(p);
 	}
-	_stack.load(ids, version);
+	_stack.load(rs, version);
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/usecode/uc_process.h b/engines/ultima/ultima8/usecode/uc_process.h
index d2331b3947..16b4a24fb9 100644
--- a/engines/ultima/ultima8/usecode/uc_process.h
+++ b/engines/ultima/ultima8/usecode/uc_process.h
@@ -30,9 +30,6 @@ namespace Ultima {
 namespace Ultima8 {
 
 class Usecode;
-class IDataSource;
-class ODataSource;
-
 
 // probably won't inherit from Process directly in the future
 class UCProcess : public Process {
@@ -60,7 +57,7 @@ public:
 	//! dump some info about this process to pout
 	void dumpInfo() const override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/usecode/uc_stack.cpp b/engines/ultima/ultima8/usecode/uc_stack.cpp
index 2de9795e57..c791a6dba4 100644
--- a/engines/ultima/ultima8/usecode/uc_stack.cpp
+++ b/engines/ultima/ultima8/usecode/uc_stack.cpp
@@ -35,8 +35,8 @@ void UCStack::save(Common::WriteStream *ws) {
 	ws->write(_bufPtr, stacksize());
 }
 
-bool UCStack::load(IDataSource *ids, uint32 version) {
-	_size = ids->readUint32LE();
+bool UCStack::load(Common::ReadStream *rs, uint32 version) {
+	_size = rs->readUint32LE();
 #ifdef USE_DYNAMIC_UCSTACK
 	if (_buf) delete[] _buf;
 	_buf = new uint8[_size];
@@ -47,10 +47,10 @@ bool UCStack::load(IDataSource *ids, uint32 version) {
 	}
 	_buf = _bufArray;
 #endif
-	uint32 sp = ids->readUint32LE();
+	uint32 sp = rs->readUint32LE();
 	_bufPtr = _buf + sp;
 
-	ids->read(_bufPtr, _size - sp);
+	rs->read(_bufPtr, _size - sp);
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/usecode/uc_stack.h b/engines/ultima/ultima8/usecode/uc_stack.h
index fdb8cb6935..d8232ff306 100644
--- a/engines/ultima/ultima8/usecode/uc_stack.h
+++ b/engines/ultima/ultima8/usecode/uc_stack.h
@@ -29,9 +29,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-class ODataSource;
-
 // A little-endian stack for use with usecode
 class BaseUCStack {
 protected:
@@ -173,8 +170,8 @@ public:
 
 #ifdef USE_DYNAMIC_UCSTACK
 #define UCStack DynamicUCStack
-	void save(Common::WriteStream *ods);
-	bool load(IDataSource *ids, uint32 version);
+	void save(Common::WriteStream *ws);
+	bool load(Common::ReadStream *rs, uint32 version);
 #endif
 };
 
@@ -185,8 +182,8 @@ public:
 	UCStack() : BaseUCStack(0x1000, _bufArray) { }
 	~UCStack() override { }
 
-	void save(Common::WriteStream *ods);
-	bool load(IDataSource *ids, uint32 version);
+	void save(Common::WriteStream *ws);
+	bool load(Common::ReadStream *rs, uint32 version);
 };
 #endif
 
diff --git a/engines/ultima/ultima8/usecode/usecode_flex.h b/engines/ultima/ultima8/usecode/usecode_flex.h
index 6945294216..5ac9583570 100644
--- a/engines/ultima/ultima8/usecode/usecode_flex.h
+++ b/engines/ultima/ultima8/usecode/usecode_flex.h
@@ -32,7 +32,7 @@ namespace Ultima8 {
 // multiple inheritance. um, yes :-)
 class UsecodeFlex : public Usecode, protected RawArchive {
 public:
-	UsecodeFlex(IDataSource *ds) : RawArchive(ds) { }
+	UsecodeFlex(Common::SeekableReadStream *rs) : RawArchive(rs) { }
 	~UsecodeFlex() override { }
 
 	const uint8 *get_class(uint32 classid) override;
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 07d9b2a055..f08e629303 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -1090,22 +1090,22 @@ void Actor::saveData(Common::WriteStream *ws) {
 	ws->writeByte(_unk0C);
 }
 
-bool Actor::loadData(IDataSource *ids, uint32 version) {
-	if (!Container::loadData(ids, version)) return false;
-
-	_strength = static_cast<int16>(ids->readUint16LE());
-	_dexterity = static_cast<int16>(ids->readUint16LE());
-	_intelligence = static_cast<int16>(ids->readUint16LE());
-	_hitPoints = ids->readUint16LE();
-	_mana = static_cast<int16>(ids->readUint16LE());
-	_alignment = ids->readUint16LE();
-	_enemyAlignment = ids->readUint16LE();
-	_lastAnim = static_cast<Animation::Sequence>(ids->readUint16LE());
-	_animFrame = ids->readUint16LE();
-	_direction = ids->readUint16LE();
-	_fallStart = ids->readUint32LE();
-	_actorFlags = ids->readUint32LE();
-	_unk0C = ids->readByte();
+bool Actor::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Container::loadData(rs, version)) return false;
+
+	_strength = static_cast<int16>(rs->readUint16LE());
+	_dexterity = static_cast<int16>(rs->readUint16LE());
+	_intelligence = static_cast<int16>(rs->readUint16LE());
+	_hitPoints = rs->readUint16LE();
+	_mana = static_cast<int16>(rs->readUint16LE());
+	_alignment = rs->readUint16LE();
+	_enemyAlignment = rs->readUint16LE();
+	_lastAnim = static_cast<Animation::Sequence>(rs->readUint16LE());
+	_animFrame = rs->readUint16LE();
+	_direction = rs->readUint16LE();
+	_fallStart = rs->readUint32LE();
+	_actorFlags = rs->readUint32LE();
+	_unk0C = rs->readByte();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/actor.h b/engines/ultima/ultima8/world/actors/actor.h
index 13326dffac..cad2884277 100644
--- a/engines/ultima/ultima8/world/actors/actor.h
+++ b/engines/ultima/ultima8/world/actors/actor.h
@@ -216,7 +216,7 @@ public:
 
 	void dumpInfo() const override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	// p_dynamic_cast stuff
 	ENABLE_RUNTIME_CLASSTYPE()
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
index dcdc29aefc..36ea36ffa3 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
@@ -653,22 +653,22 @@ void ActorAnimProcess::saveData(Common::WriteStream *ws) {
 		ws->writeByte(0);
 }
 
-bool ActorAnimProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
-
-	_firstFrame = (ids->readByte() != 0);
-	_animAborted = (ids->readByte() != 0);
-	_attackedSomething = (ids->readByte() != 0);
-	_dir = ids->readByte();
-	_action = static_cast<Animation::Sequence>(ids->readUint16LE());
-	_steps = ids->readUint16LE();
-	_repeatCounter = ids->readUint16LE();
-	_currentStep = ids->readUint16LE();
+bool ActorAnimProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
+
+	_firstFrame = (rs->readByte() != 0);
+	_animAborted = (rs->readByte() != 0);
+	_attackedSomething = (rs->readByte() != 0);
+	_dir = rs->readByte();
+	_action = static_cast<Animation::Sequence>(rs->readUint16LE());
+	_steps = rs->readUint16LE();
+	_repeatCounter = rs->readUint16LE();
+	_currentStep = rs->readUint16LE();
 
 	assert(_tracker == nullptr);
-	if (ids->readByte() != 0) {
+	if (rs->readByte() != 0) {
 		_tracker = new AnimationTracker();
-		if (!_tracker->load(ids, version))
+		if (!_tracker->load(rs, version))
 			return false;
 	}
 
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.h b/engines/ultima/ultima8/world/actors/actor_anim_process.h
index 66e9d3fa54..1df3f70b2a 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.h
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.h
@@ -54,7 +54,7 @@ public:
 		return _action;
 	}
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
index ceb6fc66a0..5c23466526 100644
--- a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
@@ -80,8 +80,8 @@ void ActorBarkNotifyProcess::saveData(Common::WriteStream *ws) {
 	GumpNotifyProcess::saveData(ws);
 }
 
-bool ActorBarkNotifyProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!GumpNotifyProcess::loadData(ids, version)) return false;
+bool ActorBarkNotifyProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!GumpNotifyProcess::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.h b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.h
index 2a6c4a8b52..f8d959a1ec 100644
--- a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.h
+++ b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.h
@@ -38,7 +38,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/world/actors/ambush_process.cpp b/engines/ultima/ultima8/world/actors/ambush_process.cpp
index e8918fdfff..3674c55153 100644
--- a/engines/ultima/ultima8/world/actors/ambush_process.cpp
+++ b/engines/ultima/ultima8/world/actors/ambush_process.cpp
@@ -80,10 +80,10 @@ void AmbushProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint32LE(_delayCount);
 }
 
-bool AmbushProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool AmbushProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_delayCount = ids->readUint32LE();
+	_delayCount = rs->readUint32LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/ambush_process.h b/engines/ultima/ultima8/world/actors/ambush_process.h
index 3f6001f7f8..a9daf72893 100644
--- a/engines/ultima/ultima8/world/actors/ambush_process.h
+++ b/engines/ultima/ultima8/world/actors/ambush_process.h
@@ -40,7 +40,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/animation_tracker.cpp b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
index 855d86fa3e..d6022be73e 100644
--- a/engines/ultima/ultima8/world/actors/animation_tracker.cpp
+++ b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
@@ -606,17 +606,17 @@ void AnimationTracker::save(Common::WriteStream *ws) {
 	ws->writeUint16LE(_hitObject);
 }
 
-bool AnimationTracker::load(IDataSource *ids, uint32 version) {
-	_startFrame = ids->readUint32LE();
-	_endFrame = ids->readUint32LE();
-	_firstFrame = (ids->readByte() != 0);
-	_currentFrame = ids->readUint32LE();
+bool AnimationTracker::load(Common::ReadStream *rs, uint32 version) {
+	_startFrame = rs->readUint32LE();
+	_endFrame = rs->readUint32LE();
+	_firstFrame = (rs->readByte() != 0);
+	_currentFrame = rs->readUint32LE();
 
-	_actor = ids->readUint16LE();
-	_dir = ids->readByte();
+	_actor = rs->readUint16LE();
+	_dir = rs->readByte();
 
-	uint32 shapenum = ids->readUint32LE();
-	uint32 action = ids->readUint32LE();
+	uint32 shapenum = rs->readUint32LE();
+	uint32 action = rs->readUint32LE();
 	if (shapenum == 0) {
 		_animAction = nullptr;
 	} else {
@@ -625,20 +625,20 @@ bool AnimationTracker::load(IDataSource *ids, uint32 version) {
 		assert(_animAction);
 	}
 
-	_prevX = ids->readUint32LE();
-	_prevY = ids->readUint32LE();
-	_prevZ = ids->readUint32LE();
-	_x = ids->readUint32LE();
-	_y = ids->readUint32LE();
-	_z = ids->readUint32LE();
+	_prevX = rs->readUint32LE();
+	_prevY = rs->readUint32LE();
+	_prevZ = rs->readUint32LE();
+	_x = rs->readUint32LE();
+	_y = rs->readUint32LE();
+	_z = rs->readUint32LE();
 
-	_mode = static_cast<Mode>(ids->readUint16LE());
+	_mode = static_cast<Mode>(rs->readUint16LE());
 	if (_mode == TargetMode) {
-		_targetDx = ids->readUint32LE();
-		_targetDy = ids->readUint32LE();
+		_targetDx = rs->readUint32LE();
+		_targetDy = rs->readUint32LE();
 		if (version >= 5) {
-			_targetDz = ids->readUint32LE();
-			_targetOffGroundLeft = ids->readUint32LE();
+			_targetDz = rs->readUint32LE();
+			_targetOffGroundLeft = rs->readUint32LE();
 		} else {
 			// Versions before 5 stored the only _x,_y adjustment
 			// to be made per frame. This is less accurate and ignores _z.
@@ -659,14 +659,14 @@ bool AnimationTracker::load(IDataSource *ids, uint32 version) {
 		}
 	}
 
-	_firstStep = (ids->readByte() != 0);
-	_flipped = (ids->readByte() != 0);
-	_shapeFrame = ids->readUint32LE();
+	_firstStep = (rs->readByte() != 0);
+	_flipped = (rs->readByte() != 0);
+	_shapeFrame = rs->readUint32LE();
 
-	_done = (ids->readByte() != 0);
-	_blocked = (ids->readByte() != 0);
-	_unsupported = (ids->readByte() != 0);
-	_hitObject = ids->readUint16LE();
+	_done = (rs->readByte() != 0);
+	_blocked = (rs->readByte() != 0);
+	_unsupported = (rs->readByte() != 0);
+	_hitObject = rs->readUint16LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/animation_tracker.h b/engines/ultima/ultima8/world/actors/animation_tracker.h
index 60a652ae55..d9fdba8933 100644
--- a/engines/ultima/ultima8/world/actors/animation_tracker.h
+++ b/engines/ultima/ultima8/world/actors/animation_tracker.h
@@ -30,8 +30,6 @@ namespace Ultima {
 namespace Ultima8 {
 
 class Actor;
-class IDataSource;
-class ODataSource;
 struct AnimAction;
 struct AnimFrame;
 
@@ -107,7 +105,7 @@ public:
 		return _hitObject;
 	}
 
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 	void save(Common::WriteStream *ods);
 
 private:
diff --git a/engines/ultima/ultima8/world/actors/avatar_death_process.cpp b/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
index cfc48e6b80..e966960fd9 100644
--- a/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
@@ -85,8 +85,8 @@ void AvatarDeathProcess::saveData(Common::WriteStream *ws) {
 	Process::saveData(ws);
 }
 
-bool AvatarDeathProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool AvatarDeathProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/avatar_death_process.h b/engines/ultima/ultima8/world/actors/avatar_death_process.h
index 3aadbe535e..8103e2b7d6 100644
--- a/engines/ultima/ultima8/world/actors/avatar_death_process.h
+++ b/engines/ultima/ultima8/world/actors/avatar_death_process.h
@@ -39,7 +39,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp b/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
index 0a7d70f868..1b50b42cfd 100644
--- a/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
@@ -81,8 +81,8 @@ void AvatarGravityProcess::saveData(Common::WriteStream *ws) {
 	GravityProcess::saveData(ws);
 }
 
-bool AvatarGravityProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!GravityProcess::loadData(ids, version)) return false;
+bool AvatarGravityProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!GravityProcess::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/avatar_gravity_process.h b/engines/ultima/ultima8/world/actors/avatar_gravity_process.h
index 1694028233..db664d92bf 100644
--- a/engines/ultima/ultima8/world/actors/avatar_gravity_process.h
+++ b/engines/ultima/ultima8/world/actors/avatar_gravity_process.h
@@ -40,7 +40,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
index c36ff1da0c..77df160556 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
@@ -826,12 +826,12 @@ void AvatarMoverProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint16LE(static_cast<uint8>(_lastHeadShakeAnim));
 }
 
-bool AvatarMoverProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool AvatarMoverProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_lastAttack = ids->readUint32LE();
-	_idleTime = ids->readUint32LE();
-	_lastHeadShakeAnim = static_cast<Animation::Sequence>(ids->readUint16LE());
+	_lastAttack = rs->readUint32LE();
+	_idleTime = rs->readUint32LE();
+	_lastHeadShakeAnim = static_cast<Animation::Sequence>(rs->readUint16LE());
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.h b/engines/ultima/ultima8/world/actors/avatar_mover_process.h
index 5443ec0315..a03661fc06 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.h
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.h
@@ -47,7 +47,7 @@ public:
 		_idleTime = 0;
 	}
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp b/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
index ed2fbb5a9b..09f18b19a1 100644
--- a/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
+++ b/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
@@ -69,8 +69,8 @@ void ClearFeignDeathProcess::saveData(Common::WriteStream *ws) {
 	Process::saveData(ws);
 }
 
-bool ClearFeignDeathProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool ClearFeignDeathProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/clear_feign_death_process.h b/engines/ultima/ultima8/world/actors/clear_feign_death_process.h
index 3de9ea438f..22e8f40240 100644
--- a/engines/ultima/ultima8/world/actors/clear_feign_death_process.h
+++ b/engines/ultima/ultima8/world/actors/clear_feign_death_process.h
@@ -40,7 +40,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/world/actors/combat_process.cpp b/engines/ultima/ultima8/world/actors/combat_process.cpp
index f63886f0c9..d5786ec7b6 100644
--- a/engines/ultima/ultima8/world/actors/combat_process.cpp
+++ b/engines/ultima/ultima8/world/actors/combat_process.cpp
@@ -337,12 +337,12 @@ void CombatProcess::saveData(Common::WriteStream *ws) {
 	ws->writeByte(static_cast<uint8>(_combatMode));
 }
 
-bool CombatProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool CombatProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_target = ids->readUint16LE();
-	_fixedTarget = ids->readUint16LE();
-	_combatMode = static_cast<CombatMode>(ids->readByte());
+	_target = rs->readUint16LE();
+	_fixedTarget = rs->readUint16LE();
+	_combatMode = static_cast<CombatMode>(rs->readByte());
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/combat_process.h b/engines/ultima/ultima8/world/actors/combat_process.h
index 80beec9b59..8af11b9f9f 100644
--- a/engines/ultima/ultima8/world/actors/combat_process.h
+++ b/engines/ultima/ultima8/world/actors/combat_process.h
@@ -48,7 +48,7 @@ public:
 
 	void dumpInfo() const override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
index f7a6f33ebd..314ef0915c 100644
--- a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
+++ b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
@@ -225,10 +225,10 @@ void GrantPeaceProcess::saveData(Common::WriteStream *ws) {
 	ws->writeByte(ht);
 }
 
-bool GrantPeaceProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool GrantPeaceProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_haveTarget = (ids->readByte() != 0);
+	_haveTarget = (rs->readByte() != 0);
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/grant_peace_process.h b/engines/ultima/ultima8/world/actors/grant_peace_process.h
index 3192dc15f6..f0d27c128d 100644
--- a/engines/ultima/ultima8/world/actors/grant_peace_process.h
+++ b/engines/ultima/ultima8/world/actors/grant_peace_process.h
@@ -43,7 +43,7 @@ public:
 
 	INTRINSIC(I_castGrantPeace);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/heal_process.cpp b/engines/ultima/ultima8/world/actors/heal_process.cpp
index 854d46211f..45bc20f84a 100644
--- a/engines/ultima/ultima8/world/actors/heal_process.cpp
+++ b/engines/ultima/ultima8/world/actors/heal_process.cpp
@@ -121,11 +121,11 @@ void HealProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint16LE(_hungerCounter);
 }
 
-bool HealProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool HealProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_healCounter = ids->readUint16LE();
-	_hungerCounter = ids->readUint16LE();
+	_healCounter = rs->readUint16LE();
+	_hungerCounter = rs->readUint16LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/heal_process.h b/engines/ultima/ultima8/world/actors/heal_process.h
index 6d47446910..c26c68c41c 100644
--- a/engines/ultima/ultima8/world/actors/heal_process.h
+++ b/engines/ultima/ultima8/world/actors/heal_process.h
@@ -40,7 +40,7 @@ public:
 
 	INTRINSIC(I_feedAvatar);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/loiter_process.cpp b/engines/ultima/ultima8/world/actors/loiter_process.cpp
index d47aced53b..1b5b3d463e 100644
--- a/engines/ultima/ultima8/world/actors/loiter_process.cpp
+++ b/engines/ultima/ultima8/world/actors/loiter_process.cpp
@@ -110,11 +110,11 @@ void LoiterProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint32LE(_count);
 }
 
-bool LoiterProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool LoiterProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
 	if (version >= 3)
-		_count = ids->readUint32LE();
+		_count = rs->readUint32LE();
 	else
 		_count = 0; // default to loitering indefinitely
 
diff --git a/engines/ultima/ultima8/world/actors/loiter_process.h b/engines/ultima/ultima8/world/actors/loiter_process.h
index 43e4955fdc..9282b147c5 100644
--- a/engines/ultima/ultima8/world/actors/loiter_process.h
+++ b/engines/ultima/ultima8/world/actors/loiter_process.h
@@ -40,7 +40,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/main_actor.cpp b/engines/ultima/ultima8/world/actors/main_actor.cpp
index 47429c406b..19aafb5fcb 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.cpp
+++ b/engines/ultima/ultima8/world/actors/main_actor.cpp
@@ -407,18 +407,18 @@ void MainActor::saveData(Common::WriteStream *ws) {
 
 }
 
-bool MainActor::loadData(IDataSource *ids, uint32 version) {
-	if (!Actor::loadData(ids, version)) return false;
+bool MainActor::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Actor::loadData(rs, version)) return false;
 
-	_justTeleported = (ids->readByte() != 0);
-	_accumStr = static_cast<int32>(ids->readUint32LE());
-	_accumDex = static_cast<int32>(ids->readUint32LE());
-	_accumInt = static_cast<int32>(ids->readUint32LE());
+	_justTeleported = (rs->readByte() != 0);
+	_accumStr = static_cast<int32>(rs->readUint32LE());
+	_accumDex = static_cast<int32>(rs->readUint32LE());
+	_accumInt = static_cast<int32>(rs->readUint32LE());
 
-	uint8 namelength = ids->readByte();
+	uint8 namelength = rs->readByte();
 	_name.resize(namelength);
 	for (unsigned int i = 0; i < namelength; ++i)
-		_name[i] = ids->readByte();
+		_name[i] = rs->readByte();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/main_actor.h b/engines/ultima/ultima8/world/actors/main_actor.h
index 2746dd7d9a..5480eef8c5 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.h
+++ b/engines/ultima/ultima8/world/actors/main_actor.h
@@ -90,7 +90,7 @@ public:
 		_name = name;
 	}
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	// p_dynamic_cast stuff
 	ENABLE_RUNTIME_CLASSTYPE()
diff --git a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
index 75ce66a2e6..351ed5f6e2 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
+++ b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
@@ -262,21 +262,21 @@ void PathfinderProcess::saveData(Common::WriteStream *ws) {
 	}
 }
 
-bool PathfinderProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool PathfinderProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_targetItem = ids->readUint16LE();
-	_targetX = ids->readUint16LE();
-	_targetY = ids->readUint16LE();
-	_targetZ = ids->readUint16LE();
-	_hitMode = (ids->readByte() != 0);
-	_currentStep = ids->readUint16LE();
+	_targetItem = rs->readUint16LE();
+	_targetX = rs->readUint16LE();
+	_targetY = rs->readUint16LE();
+	_targetZ = rs->readUint16LE();
+	_hitMode = (rs->readByte() != 0);
+	_currentStep = rs->readUint16LE();
 
-	unsigned int pathsize = ids->readUint16LE();
+	unsigned int pathsize = rs->readUint16LE();
 	_path.resize(pathsize);
 	for (unsigned int i = 0; i < pathsize; ++i) {
-		_path[i]._action = static_cast<Animation::Sequence>(ids->readUint16LE());
-		_path[i]._direction = ids->readUint16LE();
+		_path[i]._action = static_cast<Animation::Sequence>(rs->readUint16LE());
+		_path[i]._direction = rs->readUint16LE();
 	}
 
 	return true;
diff --git a/engines/ultima/ultima8/world/actors/pathfinder_process.h b/engines/ultima/ultima8/world/actors/pathfinder_process.h
index 9f2fb25941..986ed66c92 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder_process.h
+++ b/engines/ultima/ultima8/world/actors/pathfinder_process.h
@@ -47,7 +47,7 @@ public:
 
 //	virtual void terminate();
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
index 1f1917bbe4..47f012104a 100644
--- a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
@@ -165,11 +165,11 @@ void QuickAvatarMoverProcess::saveData(Common::WriteStream *ws) {
 	// don't save more information. We plan to terminate upon load
 }
 
-bool QuickAvatarMoverProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool QuickAvatarMoverProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
 	// small safety precaution
-	_dir = ids->readUint32LE();
+	_dir = rs->readUint32LE();
 	if (_dir < 6)
 		_amp[_dir] = 0;
 	else
diff --git a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h
index b9b3bab22f..195221fcb8 100644
--- a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h
+++ b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.h
@@ -57,7 +57,7 @@ public:
 	static void terminateMover(int _dir);
 	static void startMover(int x, int y, int z, int _dir);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/resurrection_process.cpp b/engines/ultima/ultima8/world/actors/resurrection_process.cpp
index 622f497698..9dd70707ea 100644
--- a/engines/ultima/ultima8/world/actors/resurrection_process.cpp
+++ b/engines/ultima/ultima8/world/actors/resurrection_process.cpp
@@ -85,8 +85,8 @@ void ResurrectionProcess::saveData(Common::WriteStream *ws) {
 	Process::saveData(ws);
 }
 
-bool ResurrectionProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool ResurrectionProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/resurrection_process.h b/engines/ultima/ultima8/world/actors/resurrection_process.h
index 75ee853541..6a4920ec2d 100644
--- a/engines/ultima/ultima8/world/actors/resurrection_process.h
+++ b/engines/ultima/ultima8/world/actors/resurrection_process.h
@@ -40,7 +40,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/world/actors/scheduler_process.cpp b/engines/ultima/ultima8/world/actors/scheduler_process.cpp
index d1d5c32cf4..3290d65f59 100644
--- a/engines/ultima/ultima8/world/actors/scheduler_process.cpp
+++ b/engines/ultima/ultima8/world/actors/scheduler_process.cpp
@@ -87,11 +87,11 @@ void SchedulerProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint16LE(_nextActor);
 }
 
-bool SchedulerProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool SchedulerProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_lastRun = ids->readUint32LE();
-	_nextActor = ids->readUint16LE();
+	_lastRun = rs->readUint32LE();
+	_nextActor = rs->readUint16LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/scheduler_process.h b/engines/ultima/ultima8/world/actors/scheduler_process.h
index d56199907d..bf15df7316 100644
--- a/engines/ultima/ultima8/world/actors/scheduler_process.h
+++ b/engines/ultima/ultima8/world/actors/scheduler_process.h
@@ -38,7 +38,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp b/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
index 905693b3d5..d1b3b23a41 100644
--- a/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
@@ -62,12 +62,12 @@ void TargetedAnimProcess::saveData(Common::WriteStream *ws) {
 
 }
 
-bool TargetedAnimProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!ActorAnimProcess::loadData(ids, version)) return false;
+bool TargetedAnimProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!ActorAnimProcess::loadData(rs, version)) return false;
 
-	_x = ids->readUint32LE();
-	_y = ids->readUint32LE();
-	_z = ids->readUint32LE();
+	_x = rs->readUint32LE();
+	_y = rs->readUint32LE();
+	_z = rs->readUint32LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/actors/targeted_anim_process.h b/engines/ultima/ultima8/world/actors/targeted_anim_process.h
index 0dd8e9f39b..e46ef36ed5 100644
--- a/engines/ultima/ultima8/world/actors/targeted_anim_process.h
+++ b/engines/ultima/ultima8/world/actors/targeted_anim_process.h
@@ -40,7 +40,7 @@ public:
 	// p_dynamic_cast stuff
 	ENABLE_RUNTIME_CLASSTYPE()
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
index 3aa74ad208..0360af52d7 100644
--- a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
+++ b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
@@ -60,11 +60,11 @@ void TeleportToEggProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint32LE(static_cast<uint32>(_teleportId));
 }
 
-bool TeleportToEggProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool TeleportToEggProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_mapNum = static_cast<int>(ids->readUint32LE());
-	_teleportId = static_cast<int>(ids->readUint32LE());
+	_mapNum = static_cast<int>(rs->readUint32LE());
+	_teleportId = static_cast<int>(rs->readUint32LE());
 	return true;
 }
 
diff --git a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.h b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.h
index debe38d9ff..cb4c137e4d 100644
--- a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.h
+++ b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.h
@@ -39,7 +39,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 protected:
 	void saveData(Common::WriteStream *ws) override;
diff --git a/engines/ultima/ultima8/world/camera_process.cpp b/engines/ultima/ultima8/world/camera_process.cpp
index b0f681126a..96bf59e9e4 100644
--- a/engines/ultima/ultima8/world/camera_process.cpp
+++ b/engines/ultima/ultima8/world/camera_process.cpp
@@ -287,22 +287,22 @@ void CameraProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint32LE(static_cast<uint32>(_eqY));
 }
 
-bool CameraProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
-
-	_sx = static_cast<int32>(ids->readUint32LE());
-	_sy = static_cast<int32>(ids->readUint32LE());
-	_sz = static_cast<int32>(ids->readUint32LE());
-	_ex = static_cast<int32>(ids->readUint32LE());
-	_ey = static_cast<int32>(ids->readUint32LE());
-	_ez = static_cast<int32>(ids->readUint32LE());
-	_time = static_cast<int32>(ids->readUint32LE());
-	_elapsed = static_cast<int32>(ids->readUint32LE());
-	_itemNum = ids->readUint16LE();
-	_lastFrameNum = ids->readUint32LE();
-	_earthquake = static_cast<int32>(ids->readUint32LE()); //static
-	_eqX = static_cast<int32>(ids->readUint32LE()); //static
-	_eqY = static_cast<int32>(ids->readUint32LE()); //static
+bool CameraProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
+
+	_sx = static_cast<int32>(rs->readUint32LE());
+	_sy = static_cast<int32>(rs->readUint32LE());
+	_sz = static_cast<int32>(rs->readUint32LE());
+	_ex = static_cast<int32>(rs->readUint32LE());
+	_ey = static_cast<int32>(rs->readUint32LE());
+	_ez = static_cast<int32>(rs->readUint32LE());
+	_time = static_cast<int32>(rs->readUint32LE());
+	_elapsed = static_cast<int32>(rs->readUint32LE());
+	_itemNum = rs->readUint16LE();
+	_lastFrameNum = rs->readUint32LE();
+	_earthquake = static_cast<int32>(rs->readUint32LE()); //static
+	_eqX = static_cast<int32>(rs->readUint32LE()); //static
+	_eqY = static_cast<int32>(rs->readUint32LE()); //static
 
 	_camera = this; //static
 
diff --git a/engines/ultima/ultima8/world/camera_process.h b/engines/ultima/ultima8/world/camera_process.h
index 51a0891791..a5f8e45db4 100644
--- a/engines/ultima/ultima8/world/camera_process.h
+++ b/engines/ultima/ultima8/world/camera_process.h
@@ -83,7 +83,7 @@ public:
 
 	void terminate() override;   // Terminate NOW!
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 private:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/container.cpp b/engines/ultima/ultima8/world/container.cpp
index 85b7be4fea..43f6c3bd51 100644
--- a/engines/ultima/ultima8/world/container.cpp
+++ b/engines/ultima/ultima8/world/container.cpp
@@ -314,14 +314,14 @@ void Container::saveData(Common::WriteStream *ws) {
 	}
 }
 
-bool Container::loadData(IDataSource *ids, uint32 version) {
-	if (!Item::loadData(ids, version)) return false;
+bool Container::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Item::loadData(rs, version)) return false;
 
-	uint32 contentcount = ids->readUint32LE();
+	uint32 contentcount = rs->readUint32LE();
 
 	// read _contents
 	for (unsigned int i = 0; i < contentcount; ++i) {
-		Object *obj = ObjectManager::get_instance()->loadObject(ids, version);
+		Object *obj = ObjectManager::get_instance()->loadObject(rs, version);
 		Item *item = p_dynamic_cast<Item *>(obj);
 		if (!item) return false;
 
diff --git a/engines/ultima/ultima8/world/container.h b/engines/ultima/ultima8/world/container.h
index e8b9f8c036..3488051ec0 100644
--- a/engines/ultima/ultima8/world/container.h
+++ b/engines/ultima/ultima8/world/container.h
@@ -108,7 +108,7 @@ public:
 
 	void dumpInfo() const override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	INTRINSIC(I_removeContents);
 	INTRINSIC(I_destroyContents);
diff --git a/engines/ultima/ultima8/world/create_item_process.cpp b/engines/ultima/ultima8/world/create_item_process.cpp
index a296675a09..2a3274f357 100644
--- a/engines/ultima/ultima8/world/create_item_process.cpp
+++ b/engines/ultima/ultima8/world/create_item_process.cpp
@@ -78,19 +78,19 @@ void CreateItemProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint32LE(static_cast<uint32>(_z));
 }
 
-bool CreateItemProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
-
-	_shape = ids->readUint32LE();
-	_frame = ids->readUint32LE();
-	_quality = ids->readUint16LE();
-	_flags = ids->readUint16LE();
-	_npcNum = ids->readUint16LE();
-	_mapNum = ids->readUint16LE();
-	_extendedFlags = ids->readUint32LE();
-	_x = static_cast<int32>(ids->readUint32LE());
-	_y = static_cast<int32>(ids->readUint32LE());
-	_z = static_cast<int32>(ids->readUint32LE());
+bool CreateItemProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
+
+	_shape = rs->readUint32LE();
+	_frame = rs->readUint32LE();
+	_quality = rs->readUint16LE();
+	_flags = rs->readUint16LE();
+	_npcNum = rs->readUint16LE();
+	_mapNum = rs->readUint16LE();
+	_extendedFlags = rs->readUint32LE();
+	_x = static_cast<int32>(rs->readUint32LE());
+	_y = static_cast<int32>(rs->readUint32LE());
+	_z = static_cast<int32>(rs->readUint32LE());
 	return true;
 }
 
diff --git a/engines/ultima/ultima8/world/create_item_process.h b/engines/ultima/ultima8/world/create_item_process.h
index 6bfffb5ddb..863334e2df 100644
--- a/engines/ultima/ultima8/world/create_item_process.h
+++ b/engines/ultima/ultima8/world/create_item_process.h
@@ -42,7 +42,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/current_map.cpp b/engines/ultima/ultima8/world/current_map.cpp
index 6684cafdd7..ac5f908bef 100644
--- a/engines/ultima/ultima8/world/current_map.cpp
+++ b/engines/ultima/ultima8/world/current_map.cpp
@@ -1276,10 +1276,10 @@ void CurrentMap::save(Common::WriteStream *ws) {
 	}
 }
 
-bool CurrentMap::load(IDataSource *ids, uint32 version) {
+bool CurrentMap::load(Common::ReadStream *rs, uint32 version) {
 	for (unsigned int i = 0; i < MAP_NUM_CHUNKS; ++i) {
 		for (unsigned int j = 0; j < MAP_NUM_CHUNKS / 32; ++j) {
-			_fast[i][j] = ids->readUint32LE();
+			_fast[i][j] = rs->readUint32LE();
 		}
 	}
 
diff --git a/engines/ultima/ultima8/world/current_map.h b/engines/ultima/ultima8/world/current_map.h
index a1aff90087..bb74c60f93 100644
--- a/engines/ultima/ultima8/world/current_map.h
+++ b/engines/ultima/ultima8/world/current_map.h
@@ -34,8 +34,6 @@ class Item;
 class UCList;
 class TeleportEgg;
 class EggHatcherProcess;
-class IDataSource;
-class ODataSource;
 
 #define MAP_NUM_CHUNKS  64
 
@@ -201,7 +199,7 @@ public:
 	void setWholeMapFast();
 
 	void save(Common::WriteStream *ws);
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 
 	INTRINSIC(I_canExistAt);
 
diff --git a/engines/ultima/ultima8/world/destroy_item_process.cpp b/engines/ultima/ultima8/world/destroy_item_process.cpp
index ea315a13f5..eb7bc66335 100644
--- a/engines/ultima/ultima8/world/destroy_item_process.cpp
+++ b/engines/ultima/ultima8/world/destroy_item_process.cpp
@@ -81,8 +81,8 @@ void DestroyItemProcess::saveData(Common::WriteStream *ws) {
 	Process::saveData(ws);
 }
 
-bool DestroyItemProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool DestroyItemProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/destroy_item_process.h b/engines/ultima/ultima8/world/destroy_item_process.h
index c44890faf8..25fc8503be 100644
--- a/engines/ultima/ultima8/world/destroy_item_process.h
+++ b/engines/ultima/ultima8/world/destroy_item_process.h
@@ -44,7 +44,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/world/egg.cpp b/engines/ultima/ultima8/world/egg.cpp
index 2c9a33ed3f..38f8fcd9ff 100644
--- a/engines/ultima/ultima8/world/egg.cpp
+++ b/engines/ultima/ultima8/world/egg.cpp
@@ -66,10 +66,10 @@ void Egg::saveData(Common::WriteStream *ws) {
 	ws->writeByte(h);
 }
 
-bool Egg::loadData(IDataSource *ids, uint32 version) {
-	if (!Item::loadData(ids, version)) return false;
+bool Egg::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Item::loadData(rs, version)) return false;
 
-	_hatched = (ids->readByte() != 0);
+	_hatched = (rs->readByte() != 0);
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/egg.h b/engines/ultima/ultima8/world/egg.h
index 37face7187..fe65ee99a8 100644
--- a/engines/ultima/ultima8/world/egg.h
+++ b/engines/ultima/ultima8/world/egg.h
@@ -65,7 +65,7 @@ public:
 
 	void dumpInfo() const override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	INTRINSIC(I_getEggXRange);
 	INTRINSIC(I_getEggYRange);
diff --git a/engines/ultima/ultima8/world/egg_hatcher_process.cpp b/engines/ultima/ultima8/world/egg_hatcher_process.cpp
index 7f81d7f1f4..a1854802c0 100644
--- a/engines/ultima/ultima8/world/egg_hatcher_process.cpp
+++ b/engines/ultima/ultima8/world/egg_hatcher_process.cpp
@@ -101,8 +101,8 @@ void EggHatcherProcess::saveData(Common::WriteStream *ws) {
 }
 
 
-bool EggHatcherProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool EggHatcherProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
 	// the _eggs will be re-added to the EggHatcherProcess when they're
 	// re-added to the CurrentMap
diff --git a/engines/ultima/ultima8/world/egg_hatcher_process.h b/engines/ultima/ultima8/world/egg_hatcher_process.h
index cf40ad1f03..1841ac788d 100644
--- a/engines/ultima/ultima8/world/egg_hatcher_process.h
+++ b/engines/ultima/ultima8/world/egg_hatcher_process.h
@@ -44,7 +44,7 @@ public:
 	void addEgg(Egg *egg);
 	void addEgg(uint16 egg);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 private:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/fireball_process.cpp b/engines/ultima/ultima8/world/fireball_process.cpp
index f75f3f80a8..a218f39b82 100644
--- a/engines/ultima/ultima8/world/fireball_process.cpp
+++ b/engines/ultima/ultima8/world/fireball_process.cpp
@@ -215,16 +215,16 @@ void FireballProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint16LE(_age);
 }
 
-bool FireballProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
-
-	_xSpeed = static_cast<int>(ids->readUint32LE());
-	_ySpeed = static_cast<int>(ids->readUint32LE());
-	_target = ids->readUint16LE();
-	_tail[0] = ids->readUint16LE();
-	_tail[1] = ids->readUint16LE();
-	_tail[2] = ids->readUint16LE();
-	_age = ids->readUint16LE();
+bool FireballProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
+
+	_xSpeed = static_cast<int>(rs->readUint32LE());
+	_ySpeed = static_cast<int>(rs->readUint32LE());
+	_target = rs->readUint16LE();
+	_tail[0] = rs->readUint16LE();
+	_tail[1] = rs->readUint16LE();
+	_tail[2] = rs->readUint16LE();
+	_age = rs->readUint16LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/fireball_process.h b/engines/ultima/ultima8/world/fireball_process.h
index ec331f9d27..baf0723819 100644
--- a/engines/ultima/ultima8/world/fireball_process.h
+++ b/engines/ultima/ultima8/world/fireball_process.h
@@ -45,7 +45,7 @@ public:
 
 	INTRINSIC(I_TonysBalls);
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/glob_egg.cpp b/engines/ultima/ultima8/world/glob_egg.cpp
index 0b12aa663b..9309442f6b 100644
--- a/engines/ultima/ultima8/world/glob_egg.cpp
+++ b/engines/ultima/ultima8/world/glob_egg.cpp
@@ -83,8 +83,8 @@ void GlobEgg::saveData(Common::WriteStream *ws) {
 	Item::saveData(ws);
 }
 
-bool GlobEgg::loadData(IDataSource *ids, uint32 version) {
-	if (!Item::loadData(ids, version)) return false;
+bool GlobEgg::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Item::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/glob_egg.h b/engines/ultima/ultima8/world/glob_egg.h
index aab2d1f418..869585dc77 100644
--- a/engines/ultima/ultima8/world/glob_egg.h
+++ b/engines/ultima/ultima8/world/glob_egg.h
@@ -42,7 +42,7 @@ public:
 	//! The item has entered the fast area
 	void enterFastArea() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/world/gravity_process.cpp b/engines/ultima/ultima8/world/gravity_process.cpp
index 0c2938e6eb..9ef49fcea2 100644
--- a/engines/ultima/ultima8/world/gravity_process.cpp
+++ b/engines/ultima/ultima8/world/gravity_process.cpp
@@ -355,13 +355,13 @@ void GravityProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint32LE(static_cast<uint32>(_zSpeed));
 }
 
-bool GravityProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool GravityProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_gravity = static_cast<int>(ids->readUint32LE());
-	_xSpeed = static_cast<int>(ids->readUint32LE());
-	_ySpeed = static_cast<int>(ids->readUint32LE());
-	_zSpeed = static_cast<int>(ids->readUint32LE());
+	_gravity = static_cast<int>(rs->readUint32LE());
+	_xSpeed = static_cast<int>(rs->readUint32LE());
+	_ySpeed = static_cast<int>(rs->readUint32LE());
+	_zSpeed = static_cast<int>(rs->readUint32LE());
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/gravity_process.h b/engines/ultima/ultima8/world/gravity_process.h
index 717e9202c1..c60de80257 100644
--- a/engines/ultima/ultima8/world/gravity_process.h
+++ b/engines/ultima/ultima8/world/gravity_process.h
@@ -49,7 +49,7 @@ public:
 
 	void dumpInfo() const override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 6c008916d8..c4c4f453fc 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -1779,29 +1779,29 @@ void Item::saveData(Common::WriteStream *ws) {
 		ws->writeUint16LE(_parent);
 }
 
-bool Item::loadData(IDataSource *ids, uint32 version) {
-	if (!Object::loadData(ids, version)) return false;
-
-	_extendedFlags = ids->readUint16LE();
-	_flags = ids->readUint16LE();
-	_shape = ids->readUint16LE();
-	_frame = ids->readUint16LE();
-	_x = ids->readUint16LE();
-	_y = ids->readUint16LE();
-	_z = ids->readUint16LE();
-
-	_quality = ids->readUint16LE();
-	_npcNum = ids->readUint16LE();
-	_mapNum = ids->readUint16LE();
+bool Item::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Object::loadData(rs, version)) return false;
+
+	_extendedFlags = rs->readUint16LE();
+	_flags = rs->readUint16LE();
+	_shape = rs->readUint16LE();
+	_frame = rs->readUint16LE();
+	_x = rs->readUint16LE();
+	_y = rs->readUint16LE();
+	_z = rs->readUint16LE();
+
+	_quality = rs->readUint16LE();
+	_npcNum = rs->readUint16LE();
+	_mapNum = rs->readUint16LE();
 	if (getObjId() != 0xFFFF) {
-		_gump = ids->readUint16LE();
-		_gravityPid = ids->readUint16LE();
+		_gump = rs->readUint16LE();
+		_gravityPid = rs->readUint16LE();
 	} else {
 		_gump = _gravityPid = 0;
 	}
 
 	if ((_flags & FLG_ETHEREAL) && (_flags & (FLG_CONTAINED | FLG_EQUIPPED)))
-		_parent = ids->readUint16LE();
+		_parent = rs->readUint16LE();
 	else
 		_parent = 0;
 
diff --git a/engines/ultima/ultima8/world/item.h b/engines/ultima/ultima8/world/item.h
index e30bcfd167..8562673294 100644
--- a/engines/ultima/ultima8/world/item.h
+++ b/engines/ultima/ultima8/world/item.h
@@ -36,7 +36,6 @@ class Container;
 class ShapeInfo;
 class Shape;
 class Gump;
-class ODataSource;
 class GravityProcess;
 
 class Item : public Object {
@@ -438,7 +437,7 @@ public:
 	//! dump some info about this item to pout
 	void dumpInfo() const override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	// Intrinsics
 	INTRINSIC(I_touch);
diff --git a/engines/ultima/ultima8/world/item_factory.h b/engines/ultima/ultima8/world/item_factory.h
index 5d7cc192c8..c3ab0a8d99 100644
--- a/engines/ultima/ultima8/world/item_factory.h
+++ b/engines/ultima/ultima8/world/item_factory.h
@@ -29,7 +29,6 @@ namespace Ultima8 {
 class Item;
 class Actor;
 class Object;
-class IDataSource;
 
 class ItemFactory {
 public:
diff --git a/engines/ultima/ultima8/world/map.cpp b/engines/ultima/ultima8/world/map.cpp
index 5f6f9d0d2d..48fe1aa1a4 100644
--- a/engines/ultima/ultima8/world/map.cpp
+++ b/engines/ultima/ultima8/world/map.cpp
@@ -61,8 +61,8 @@ void Map::clear() {
 	_dynamicItems.clear();
 }
 
-void Map::loadNonFixed(IDataSource *ds) {
-	loadFixedFormatObjects(_dynamicItems, ds, 0);
+void Map::loadNonFixed(Common::SeekableReadStream *rs) {
+	loadFixedFormatObjects(_dynamicItems, rs, 0);
 }
 
 
@@ -86,8 +86,8 @@ void Map::addMapFix(uint32 shape, uint32 frame, int32 x, int32 y, int32 z) {
 }
 
 
-void Map::loadFixed(IDataSource *ds) {
-	loadFixedFormatObjects(_fixedItems, ds, Item::EXT_FIXED);
+void Map::loadFixed(Common::SeekableReadStream *rs) {
+	loadFixedFormatObjects(_fixedItems, rs, Item::EXT_FIXED);
 
 	// U8 hack for missing ground tiles on map 25. See docs/u8bugs.txt
 	if (GAME_IS_U8 && _mapNum == 25) {
@@ -198,10 +198,11 @@ void Map::unloadFixed() {
 	_fixedItems.clear();
 }
 
-void Map::loadFixedFormatObjects(Std::list<Item *> &itemlist, IDataSource *ds,
+void Map::loadFixedFormatObjects(Std::list<Item *> &itemlist,
+								 Common::SeekableReadStream *rs,
                                  uint32 extendedflags) {
-	if (!ds) return;
-	uint32 size = ds->size();
+	if (!rs) return;
+	uint32 size = rs->size();
 	if (size == 0) return;
 
 	uint32 itemcount = size / 16;
@@ -211,22 +212,22 @@ void Map::loadFixedFormatObjects(Std::list<Item *> &itemlist, IDataSource *ds,
 
 	for (uint32 i = 0; i < itemcount; ++i) {
 		// These are ALL unsigned on disk
-		int32 x = static_cast<int32>(ds->readUint16LE());
-		int32 y = static_cast<int32>(ds->readUint16LE());
-		int32 z = static_cast<int32>(ds->readByte());
+		int32 x = static_cast<int32>(rs->readUint16LE());
+		int32 y = static_cast<int32>(rs->readUint16LE());
+		int32 z = static_cast<int32>(rs->readByte());
 
 		if (GAME_IS_CRUSADER) {
 			x *= 2;
 			y *= 2;
 		}
 
-		uint32 shape = ds->readUint16LE();
-		uint32 frame = ds->readByte();
-		uint16 flags = ds->readUint16LE();
-		uint16 quality = ds->readUint16LE();
-		uint16 npcNum = static_cast<uint16>(ds->readByte());
-		uint16 mapNum = static_cast<uint16>(ds->readByte());
-		uint16 next = ds->readUint16LE(); // do we need next for anything?
+		uint32 shape = rs->readUint16LE();
+		uint32 frame = rs->readByte();
+		uint16 flags = rs->readUint16LE();
+		uint16 quality = rs->readUint16LE();
+		uint16 npcNum = static_cast<uint16>(rs->readByte());
+		uint16 mapNum = static_cast<uint16>(rs->readByte());
+		uint16 next = rs->readUint16LE(); // do we need next for anything?
 
 		// find container this item belongs to, if any.
 		// the x coordinate stores the container-depth of this item,
@@ -288,11 +289,11 @@ void Map::save(Common::WriteStream *ws) {
 }
 
 
-bool Map::load(IDataSource *ids, uint32 version) {
-	uint32 itemcount = ids->readUint32LE();
+bool Map::load(Common::ReadStream *rs, uint32 version) {
+	uint32 itemcount = rs->readUint32LE();
 
 	for (unsigned int i = 0; i < itemcount; ++i) {
-		Object *obj = ObjectManager::get_instance()->loadObject(ids, version);
+		Object *obj = ObjectManager::get_instance()->loadObject(rs, version);
 		Item *item = p_dynamic_cast<Item *>(obj);
 		if (!item) return false;
 		_dynamicItems.push_back(item);
diff --git a/engines/ultima/ultima8/world/map.h b/engines/ultima/ultima8/world/map.h
index f6661133b8..3106c90ccd 100644
--- a/engines/ultima/ultima8/world/map.h
+++ b/engines/ultima/ultima8/world/map.h
@@ -29,8 +29,6 @@ namespace Ultima {
 namespace Ultima8 {
 
 class Item;
-class IDataSource;
-class ODataSource;
 
 class Map {
 	friend class CurrentMap;
@@ -40,8 +38,8 @@ public:
 
 	void clear();
 
-	void loadNonFixed(IDataSource *ds);
-	void loadFixed(IDataSource *ds);
+	void loadNonFixed(Common::SeekableReadStream *rs);
+	void loadFixed(Common::SeekableReadStream *rs);
 	void unloadFixed();
 
 	bool isEmpty() const {
@@ -49,12 +47,13 @@ public:
 	}
 
 	void save(Common::WriteStream *ods);
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 
 private:
 
 	// load items from something formatted like 'fixed.dat'
-	void loadFixedFormatObjects(Std::list<Item *> &itemlist, IDataSource *ds,
+	void loadFixedFormatObjects(Std::list<Item *> &itemlist,
+								Common::SeekableReadStream *rs,
 	                            uint32 extendedflags);
 
 	// Add a fixed item to patch game data errors
diff --git a/engines/ultima/ultima8/world/map_glob.cpp b/engines/ultima/ultima8/world/map_glob.cpp
index ea9188929d..d38e7a2ec8 100644
--- a/engines/ultima/ultima8/world/map_glob.cpp
+++ b/engines/ultima/ultima8/world/map_glob.cpp
@@ -35,20 +35,20 @@ MapGlob::MapGlob() {
 MapGlob::~MapGlob() {
 }
 
-void MapGlob::read(IDataSource *ds) {
-	unsigned int itemcount = ds->readUint16LE();
-	assert(ds->size() >= 2 + itemcount * 6);
+void MapGlob::read(Common::SeekableReadStream *rs) {
+	unsigned int itemcount = rs->readUint16LE();
+	assert(rs->size() >= 2 + itemcount * 6);
 	_contents.clear();
 	_contents.resize(itemcount);
 
 	for (unsigned int i = 0; i < itemcount; ++i) {
 		GlobItem item;
 
-		item.x = ds->readByte();
-		item.y = ds->readByte();
-		item.z = ds->readByte();
-		item.shape = ds->readUint16LE();
-		item.frame = ds->readByte();
+		item.x = rs->readByte();
+		item.y = rs->readByte();
+		item.z = rs->readByte();
+		item.shape = rs->readUint16LE();
+		item.frame = rs->readByte();
 
 		_contents[i] = item;
 	}
diff --git a/engines/ultima/ultima8/world/map_glob.h b/engines/ultima/ultima8/world/map_glob.h
index f9e57c1dca..8a6c97d8d4 100644
--- a/engines/ultima/ultima8/world/map_glob.h
+++ b/engines/ultima/ultima8/world/map_glob.h
@@ -28,8 +28,6 @@
 namespace Ultima {
 namespace Ultima8 {
 
-class IDataSource;
-
 struct GlobItem {
 	int x;
 	int y;
@@ -45,7 +43,7 @@ public:
 	MapGlob();
 	~MapGlob();
 
-	void read(IDataSource *ds);
+	void read(Common::SeekableReadStream *rs);
 
 private:
 	Std::vector<GlobItem> _contents;
diff --git a/engines/ultima/ultima8/world/monster_egg.cpp b/engines/ultima/ultima8/world/monster_egg.cpp
index 08a93b052d..bc648d4ee3 100644
--- a/engines/ultima/ultima8/world/monster_egg.cpp
+++ b/engines/ultima/ultima8/world/monster_egg.cpp
@@ -94,8 +94,8 @@ void MonsterEgg::saveData(Common::WriteStream *ws) {
 	Item::saveData(ws);
 }
 
-bool MonsterEgg::loadData(IDataSource *ids, uint32 version) {
-	if (!Item::loadData(ids, version)) return false;
+bool MonsterEgg::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Item::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/monster_egg.h b/engines/ultima/ultima8/world/monster_egg.h
index 8c2cc0b406..2c12df33f6 100644
--- a/engines/ultima/ultima8/world/monster_egg.h
+++ b/engines/ultima/ultima8/world/monster_egg.h
@@ -49,7 +49,7 @@ public:
 
 	uint16 hatch();
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	INTRINSIC(I_monsterEggHatch);
 	INTRINSIC(I_getMonId);
diff --git a/engines/ultima/ultima8/world/split_item_process.cpp b/engines/ultima/ultima8/world/split_item_process.cpp
index 80bcb6ccb7..b2f29e362b 100644
--- a/engines/ultima/ultima8/world/split_item_process.cpp
+++ b/engines/ultima/ultima8/world/split_item_process.cpp
@@ -96,10 +96,10 @@ void SplitItemProcess::saveData(Common::WriteStream *ws) {
 	ws->writeUint16LE(_target);
 }
 
-bool SplitItemProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
+bool SplitItemProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
 
-	_target = ids->readUint16LE();
+	_target = rs->readUint16LE();
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/split_item_process.h b/engines/ultima/ultima8/world/split_item_process.h
index 30ab796b22..13493002ed 100644
--- a/engines/ultima/ultima8/world/split_item_process.h
+++ b/engines/ultima/ultima8/world/split_item_process.h
@@ -40,7 +40,7 @@ public:
 
 	void run() override;
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 
diff --git a/engines/ultima/ultima8/world/sprite_process.cpp b/engines/ultima/ultima8/world/sprite_process.cpp
index fb6412b672..6cd5ed7994 100644
--- a/engines/ultima/ultima8/world/sprite_process.cpp
+++ b/engines/ultima/ultima8/world/sprite_process.cpp
@@ -127,20 +127,20 @@ void SpriteProcess::saveData(Common::WriteStream *ws) {
 	ws->writeByte(_initialized ? 1 : 0);
 }
 
-bool SpriteProcess::loadData(IDataSource *ids, uint32 version) {
-	if (!Process::loadData(ids, version)) return false;
-
-	_shape = static_cast<int>(ids->readUint32LE());
-	_frame = static_cast<int>(ids->readUint32LE());
-	_firstFrame = static_cast<int>(ids->readUint32LE());
-	_lastFrame = static_cast<int>(ids->readUint32LE());
-	_repeats = static_cast<int>(ids->readUint32LE());
-	_delay = static_cast<int>(ids->readUint32LE());
-	_x = static_cast<int>(ids->readUint32LE());
-	_y = static_cast<int>(ids->readUint32LE());
-	_z = static_cast<int>(ids->readUint32LE());
-	_delayCounter = static_cast<int>(ids->readUint32LE());
-	_initialized = (ids->readByte() != 0);
+bool SpriteProcess::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Process::loadData(rs, version)) return false;
+
+	_shape = static_cast<int>(rs->readUint32LE());
+	_frame = static_cast<int>(rs->readUint32LE());
+	_firstFrame = static_cast<int>(rs->readUint32LE());
+	_lastFrame = static_cast<int>(rs->readUint32LE());
+	_repeats = static_cast<int>(rs->readUint32LE());
+	_delay = static_cast<int>(rs->readUint32LE());
+	_x = static_cast<int>(rs->readUint32LE());
+	_y = static_cast<int>(rs->readUint32LE());
+	_z = static_cast<int>(rs->readUint32LE());
+	_delayCounter = static_cast<int>(rs->readUint32LE());
+	_initialized = (rs->readByte() != 0);
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/sprite_process.h b/engines/ultima/ultima8/world/sprite_process.h
index d17670bd69..ee6e0e843c 100644
--- a/engines/ultima/ultima8/world/sprite_process.h
+++ b/engines/ultima/ultima8/world/sprite_process.h
@@ -73,7 +73,7 @@ protected:
 	void init();
 
 public:
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 protected:
 	void saveData(Common::WriteStream *ws) override;
 };
diff --git a/engines/ultima/ultima8/world/teleport_egg.cpp b/engines/ultima/ultima8/world/teleport_egg.cpp
index e71783b343..06ae9ec713 100644
--- a/engines/ultima/ultima8/world/teleport_egg.cpp
+++ b/engines/ultima/ultima8/world/teleport_egg.cpp
@@ -57,8 +57,8 @@ void TeleportEgg::saveData(Common::WriteStream *ws) {
 	Egg::saveData(ws);
 }
 
-bool TeleportEgg::loadData(IDataSource *ids, uint32 version) {
-	if (!Egg::loadData(ids, version)) return false;
+bool TeleportEgg::loadData(Common::ReadStream *rs, uint32 version) {
+	if (!Egg::loadData(rs, version)) return false;
 
 	return true;
 }
diff --git a/engines/ultima/ultima8/world/teleport_egg.h b/engines/ultima/ultima8/world/teleport_egg.h
index 82fa24fa9a..ae569bbf5b 100644
--- a/engines/ultima/ultima8/world/teleport_egg.h
+++ b/engines/ultima/ultima8/world/teleport_egg.h
@@ -43,7 +43,7 @@ public:
 		return (_quality & 0xFF);
 	}
 
-	bool loadData(IDataSource *ids, uint32 version);
+	bool loadData(Common::ReadStream *rs, uint32 version);
 
 	uint16 hatch() override;
 protected:
diff --git a/engines/ultima/ultima8/world/world.cpp b/engines/ultima/ultima8/world/world.cpp
index 9a6974f607..6befa4ad9d 100644
--- a/engines/ultima/ultima8/world/world.cpp
+++ b/engines/ultima/ultima8/world/world.cpp
@@ -169,7 +169,7 @@ bool World::switchMap(uint32 newmap) {
 	Kernel::get_instance()->killProcessesNotOfType(0, 1, true);
 
 	pout << "Loading Fixed items in map " << newmap << Std::endl;
-	IDataSource *items = GameData::get_instance()->getFixed()
+	Common::SeekableReadStream *items = GameData::get_instance()->getFixed()
 	                     ->get_datasource(newmap);
 	_maps[newmap]->loadFixed(items);
 	delete items;
@@ -185,8 +185,8 @@ bool World::switchMap(uint32 newmap) {
 	return true;
 }
 
-void World::loadNonFixed(IDataSource *ds) {
-	FlexFile *f = new FlexFile(ds);
+void World::loadNonFixed(Common::SeekableReadStream *rs) {
+	FlexFile *f = new FlexFile(rs);
 
 	pout << "Loading NonFixed items" << Std::endl;
 
@@ -197,7 +197,7 @@ void World::loadNonFixed(IDataSource *ds) {
 			assert(_maps.size() > i);
 			assert(_maps[i] != nullptr);
 
-			IDataSource *items = f->getDataSource(i);
+			Common::SeekableReadStream *items = f->getDataSource(i);
 
 			_maps[i]->loadNonFixed(items);
 
@@ -209,12 +209,12 @@ void World::loadNonFixed(IDataSource *ds) {
 	delete f;
 }
 
-void World::loadItemCachNPCData(IDataSource *itemcach, IDataSource *npcdata) {
+void World::loadItemCachNPCData(Common::SeekableReadStream *itemcach, Common::SeekableReadStream *npcdata) {
 	FlexFile *itemcachflex = new FlexFile(itemcach);
 	FlexFile *npcdataflex = new FlexFile(npcdata);
 
-	IDataSource *itemds = itemcachflex->getDataSource(0);
-	IDataSource *npcds = npcdataflex->getDataSource(0);
+	Common::SeekableReadStream *itemds = itemcachflex->getDataSource(0);
+	Common::SeekableReadStream *npcds = npcdataflex->getDataSource(0);
 
 	delete itemcachflex;
 	delete npcdataflex;
@@ -360,15 +360,15 @@ void World::save(Common::WriteStream *ws) {
 }
 
 // load items
-bool World::load(IDataSource *ids, uint32 version) {
-	uint16 curmapnum = ids->readUint32LE();
+bool World::load(Common::ReadStream *rs, uint32 version) {
+	uint16 curmapnum = rs->readUint32LE();
 	_currentMap->setMap(_maps[curmapnum]);
 
-	_currentMap->_eggHatcher = ids->readUint16LE();
+	_currentMap->_eggHatcher = rs->readUint16LE();
 
-	uint32 etherealcount = ids->readUint32LE();
+	uint32 etherealcount = rs->readUint32LE();
 	for (unsigned int i = 0; i < etherealcount; ++i) {
-		_ethereal.push_front(ids->readUint16LE());
+		_ethereal.push_front(rs->readUint16LE());
 	}
 
 	return true;
@@ -382,12 +382,12 @@ void World::saveMaps(Common::WriteStream *ws) {
 }
 
 
-bool World::loadMaps(IDataSource *ids, uint32 version) {
-	uint32 mapcount = ids->readUint32LE();
+bool World::loadMaps(Common::ReadStream *rs, uint32 version) {
+	uint32 mapcount = rs->readUint32LE();
 
 	// Map objects have already been created by reset()
 	for (unsigned int i = 0; i < mapcount; ++i) {
-		bool res = _maps[i]->load(ids, version);
+		bool res = _maps[i]->load(rs, version);
 		if (!res) return false;
 	}
 
diff --git a/engines/ultima/ultima8/world/world.h b/engines/ultima/ultima8/world/world.h
index 5ca0be483d..7ee446d2b9 100644
--- a/engines/ultima/ultima8/world/world.h
+++ b/engines/ultima/ultima8/world/world.h
@@ -64,8 +64,6 @@ namespace Ultima8 {
 
 class Map;
 class CurrentMap;
-class IDataSource;
-class ODataSource;
 class Actor;
 class MainActor;
 class Flex;
@@ -90,10 +88,10 @@ public:
 	void initMaps();
 
 	//! load U8's nonfixed.dat into the Maps
-	void loadNonFixed(IDataSource *ds); // delete ds afterwards
+	void loadNonFixed(Common::SeekableReadStream *rs); // delete ds afterwards
 
 	//! load U8's itemcach.dat, npcdata.dat into the world
-	void loadItemCachNPCData(IDataSource *itemcach, IDataSource *npcdata);
+	void loadItemCachNPCData(Common::SeekableReadStream *itemcach, Common::SeekableReadStream *npcdata);
 
 	//! get the CurrentMap
 	CurrentMap *getCurrentMap() const {
@@ -132,13 +130,13 @@ public:
 	void saveMaps(Common::WriteStream *ws);
 
 	//! load Maps
-	bool loadMaps(IDataSource *ids, uint32 version);
+	bool loadMaps(Common::ReadStream *rs, uint32 version);
 
 	//! save the rest of the World data (ethereal items, current map number).
 	void save(Common::WriteStream *ws);
 
 	//! load World data
-	bool load(IDataSource *ids, uint32 version);
+	bool load(Common::ReadStream *rs, uint32 version);
 
 private:
 	static World *_world;


Commit: f8c82f636852e44b8d837fc583d9318a447fc587
    https://github.com/scummvm/scummvm/commit/f8c82f636852e44b8d837fc583d9318a447fc587
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2020-04-14T20:58:10+09:00

Commit Message:
ULTIMA8: Remove unused data source includes

Changed paths:
    engines/ultima/ultima8/audio/audio_process.cpp
    engines/ultima/ultima8/audio/music_process.cpp
    engines/ultima/ultima8/games/game_info.cpp
    engines/ultima/ultima8/games/start_u8_process.cpp
    engines/ultima/ultima8/graphics/frame_id.cpp
    engines/ultima/ultima8/graphics/inverter_process.cpp
    engines/ultima/ultima8/graphics/palette_fader_process.cpp
    engines/ultima/ultima8/gumps/ask_gump.cpp
    engines/ultima/ultima8/gumps/bark_gump.cpp
    engines/ultima/ultima8/gumps/book_gump.cpp
    engines/ultima/ultima8/gumps/container_gump.cpp
    engines/ultima/ultima8/gumps/desktop_gump.cpp
    engines/ultima/ultima8/gumps/game_map_gump.cpp
    engines/ultima/ultima8/gumps/gump.cpp
    engines/ultima/ultima8/gumps/gump_notify_process.cpp
    engines/ultima/ultima8/gumps/item_relative_gump.cpp
    engines/ultima/ultima8/gumps/main_menu_process.cpp
    engines/ultima/ultima8/gumps/menu_gump.cpp
    engines/ultima/ultima8/gumps/message_box_gump.cpp
    engines/ultima/ultima8/gumps/mini_stats_gump.cpp
    engines/ultima/ultima8/gumps/modal_gump.cpp
    engines/ultima/ultima8/gumps/movie_gump.cpp
    engines/ultima/ultima8/gumps/paperdoll_gump.cpp
    engines/ultima/ultima8/gumps/quit_gump.cpp
    engines/ultima/ultima8/gumps/readable_gump.cpp
    engines/ultima/ultima8/gumps/scroll_gump.cpp
    engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
    engines/ultima/ultima8/gumps/slider_gump.cpp
    engines/ultima/ultima8/gumps/target_gump.cpp
    engines/ultima/ultima8/gumps/u8_save_gump.cpp
    engines/ultima/ultima8/gumps/widgets/button_widget.cpp
    engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
    engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
    engines/ultima/ultima8/gumps/widgets/text_widget.cpp
    engines/ultima/ultima8/kernel/delay_process.cpp
    engines/ultima/ultima8/kernel/delay_process.h
    engines/ultima/ultima8/kernel/kernel.cpp
    engines/ultima/ultima8/kernel/object.cpp
    engines/ultima/ultima8/kernel/object_manager.cpp
    engines/ultima/ultima8/kernel/process.cpp
    engines/ultima/ultima8/misc/id_man.cpp
    engines/ultima/ultima8/usecode/bit_set.cpp
    engines/ultima/ultima8/usecode/uc_list.cpp
    engines/ultima/ultima8/usecode/uc_machine.cpp
    engines/ultima/ultima8/usecode/uc_process.cpp
    engines/ultima/ultima8/usecode/uc_stack.cpp
    engines/ultima/ultima8/world/actors/actor.cpp
    engines/ultima/ultima8/world/actors/actor_anim_process.cpp
    engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
    engines/ultima/ultima8/world/actors/ambush_process.cpp
    engines/ultima/ultima8/world/actors/animation_tracker.cpp
    engines/ultima/ultima8/world/actors/avatar_death_process.cpp
    engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
    engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
    engines/ultima/ultima8/world/actors/combat_process.cpp
    engines/ultima/ultima8/world/actors/grant_peace_process.cpp
    engines/ultima/ultima8/world/actors/heal_process.cpp
    engines/ultima/ultima8/world/actors/loiter_process.cpp
    engines/ultima/ultima8/world/actors/main_actor.cpp
    engines/ultima/ultima8/world/actors/pathfinder_process.cpp
    engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/resurrection_process.cpp
    engines/ultima/ultima8/world/actors/scheduler_process.cpp
    engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
    engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
    engines/ultima/ultima8/world/camera_process.cpp
    engines/ultima/ultima8/world/container.cpp
    engines/ultima/ultima8/world/create_item_process.cpp
    engines/ultima/ultima8/world/current_map.cpp
    engines/ultima/ultima8/world/destroy_item_process.cpp
    engines/ultima/ultima8/world/egg.cpp
    engines/ultima/ultima8/world/egg_hatcher_process.cpp
    engines/ultima/ultima8/world/fireball_process.cpp
    engines/ultima/ultima8/world/glob_egg.cpp
    engines/ultima/ultima8/world/gravity_process.cpp
    engines/ultima/ultima8/world/item.cpp
    engines/ultima/ultima8/world/map.cpp
    engines/ultima/ultima8/world/monster_egg.cpp
    engines/ultima/ultima8/world/split_item_process.cpp
    engines/ultima/ultima8/world/sprite_process.cpp
    engines/ultima/ultima8/world/teleport_egg.cpp
    engines/ultima/ultima8/world/world.cpp


diff --git a/engines/ultima/ultima8/audio/audio_process.cpp b/engines/ultima/ultima8/audio/audio_process.cpp
index f56b288693..a456066b4c 100644
--- a/engines/ultima/ultima8/audio/audio_process.cpp
+++ b/engines/ultima/ultima8/audio/audio_process.cpp
@@ -33,8 +33,6 @@
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/world/item.h"
 #include "ultima/ultima8/world/camera_process.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/audio/music_process.cpp b/engines/ultima/ultima8/audio/music_process.cpp
index 45b0645e9b..2f5e265b00 100644
--- a/engines/ultima/ultima8/audio/music_process.cpp
+++ b/engines/ultima/ultima8/audio/music_process.cpp
@@ -26,8 +26,6 @@
 #include "ultima/ultima8/audio/music_flex.h"
 #include "ultima/ultima8/audio/midi_player.h"
 #include "ultima/ultima8/audio/audio_mixer.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/games/game_info.cpp b/engines/ultima/ultima8/games/game_info.cpp
index 6631d333cf..6205df2340 100644
--- a/engines/ultima/ultima8/games/game_info.cpp
+++ b/engines/ultima/ultima8/games/game_info.cpp
@@ -23,9 +23,7 @@
 #include "ultima/ultima8/misc/pent_include.h"
 
 #include "ultima/ultima8/games/game_info.h"
-
 #include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/misc/util.h"
 
 namespace Ultima {
diff --git a/engines/ultima/ultima8/games/start_u8_process.cpp b/engines/ultima/ultima8/games/start_u8_process.cpp
index 9a68ec8ebc..32d63d4466 100644
--- a/engines/ultima/ultima8/games/start_u8_process.cpp
+++ b/engines/ultima/ultima8/games/start_u8_process.cpp
@@ -36,9 +36,6 @@
 #include "ultima/ultima8/conf/setting_manager.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/graphics/frame_id.cpp b/engines/ultima/ultima8/graphics/frame_id.cpp
index 481d7c9806..422220d0ac 100644
--- a/engines/ultima/ultima8/graphics/frame_id.cpp
+++ b/engines/ultima/ultima8/graphics/frame_id.cpp
@@ -23,9 +23,6 @@
 #include "ultima/ultima8/misc/pent_include.h"
 #include "ultima/ultima8/graphics/frame_id.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/graphics/inverter_process.cpp b/engines/ultima/ultima8/graphics/inverter_process.cpp
index 6d9b3d21dc..c44ac53b17 100644
--- a/engines/ultima/ultima8/graphics/inverter_process.cpp
+++ b/engines/ultima/ultima8/graphics/inverter_process.cpp
@@ -26,8 +26,6 @@
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/ultima8.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/graphics/palette_fader_process.cpp b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
index b529e92935..6b3fa3de19 100644
--- a/engines/ultima/ultima8/graphics/palette_fader_process.cpp
+++ b/engines/ultima/ultima8/graphics/palette_fader_process.cpp
@@ -25,9 +25,6 @@
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/graphics/palette.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/gumps/ask_gump.cpp b/engines/ultima/ultima8/gumps/ask_gump.cpp
index e93fc7b699..f1588d79e9 100644
--- a/engines/ultima/ultima8/gumps/ask_gump.cpp
+++ b/engines/ultima/ultima8/gumps/ask_gump.cpp
@@ -26,8 +26,6 @@
 #include "ultima/ultima8/gumps/widgets/button_widget.h"
 #include "ultima/ultima8/usecode/uc_list.h"
 #include "ultima/ultima8/usecode/uc_machine.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/bark_gump.cpp b/engines/ultima/ultima8/gumps/bark_gump.cpp
index c6887ecbf2..ff58feda30 100644
--- a/engines/ultima/ultima8/gumps/bark_gump.cpp
+++ b/engines/ultima/ultima8/gumps/bark_gump.cpp
@@ -27,8 +27,6 @@
 #include "ultima/ultima8/audio/audio_process.h"
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/conf/setting_manager.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/book_gump.cpp b/engines/ultima/ultima8/gumps/book_gump.cpp
index 838fb8ab27..1485c0cb32 100644
--- a/engines/ultima/ultima8/gumps/book_gump.cpp
+++ b/engines/ultima/ultima8/gumps/book_gump.cpp
@@ -32,9 +32,6 @@
 #include "ultima/ultima8/world/item.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/gumps/container_gump.cpp b/engines/ultima/ultima8/gumps/container_gump.cpp
index 1970149158..82bd2e3f40 100644
--- a/engines/ultima/ultima8/gumps/container_gump.cpp
+++ b/engines/ultima/ultima8/gumps/container_gump.cpp
@@ -41,9 +41,6 @@
 #include "ultima/ultima8/world/actors/main_actor.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/gumps/desktop_gump.cpp b/engines/ultima/ultima8/gumps/desktop_gump.cpp
index de9fe1f540..ffd436c074 100644
--- a/engines/ultima/ultima8/gumps/desktop_gump.cpp
+++ b/engines/ultima/ultima8/gumps/desktop_gump.cpp
@@ -24,8 +24,6 @@
 #include "ultima/ultima8/gumps/desktop_gump.h"
 #include "ultima/ultima8/graphics/render_surface.h"
 #include "ultima/ultima8/ultima8.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/gumps/modal_gump.h"
 #include "ultima/ultima8/gumps/target_gump.h"
 
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index f9d88d36d7..83fffc9851 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -34,8 +34,6 @@
 #include "ultima/ultima8/world/camera_process.h"
 #include "ultima/ultima8/ultima8.h"
 #include "ultima/ultima8/graphics/shape_info.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/kernel/mouse.h"
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/world/actors/avatar_mover_process.h"
diff --git a/engines/ultima/ultima8/gumps/gump.cpp b/engines/ultima/ultima8/gumps/gump.cpp
index 41e3a37c25..f37e0a386f 100644
--- a/engines/ultima/ultima8/gumps/gump.cpp
+++ b/engines/ultima/ultima8/gumps/gump.cpp
@@ -29,8 +29,6 @@
 #include "ultima/ultima8/games/game_data.h"
 #include "ultima/ultima8/gumps/gump_notify_process.h"
 #include "ultima/ultima8/kernel/kernel.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/kernel/object_manager.h"
 #include "ultima/ultima8/gumps/scaler_gump.h"
 #include "ultima/ultima8/ultima8.h"
diff --git a/engines/ultima/ultima8/gumps/gump_notify_process.cpp b/engines/ultima/ultima8/gumps/gump_notify_process.cpp
index e1c7fae3c1..03c16f0851 100644
--- a/engines/ultima/ultima8/gumps/gump_notify_process.cpp
+++ b/engines/ultima/ultima8/gumps/gump_notify_process.cpp
@@ -24,8 +24,6 @@
 #include "ultima/ultima8/gumps/gump_notify_process.h"
 #include "ultima/ultima8/gumps/gump.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/item_relative_gump.cpp b/engines/ultima/ultima8/gumps/item_relative_gump.cpp
index f007873510..56a28bf784 100644
--- a/engines/ultima/ultima8/gumps/item_relative_gump.cpp
+++ b/engines/ultima/ultima8/gumps/item_relative_gump.cpp
@@ -27,8 +27,6 @@
 #include "ultima/ultima8/world/container.h"
 #include "ultima/ultima8/graphics/shape_info.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/main_menu_process.cpp b/engines/ultima/ultima8/gumps/main_menu_process.cpp
index c3a5edb0f9..393eea8135 100644
--- a/engines/ultima/ultima8/gumps/main_menu_process.cpp
+++ b/engines/ultima/ultima8/gumps/main_menu_process.cpp
@@ -28,9 +28,6 @@
 #include "ultima/ultima8/audio/music_process.h"
 #include "ultima/ultima8/world/actors/main_actor.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/gumps/menu_gump.cpp b/engines/ultima/ultima8/gumps/menu_gump.cpp
index d78e926142..f9b478c61c 100644
--- a/engines/ultima/ultima8/gumps/menu_gump.cpp
+++ b/engines/ultima/ultima8/gumps/menu_gump.cpp
@@ -43,8 +43,6 @@
 #include "ultima/ultima8/gumps/widgets/edit_widget.h"
 #include "ultima/ultima8/gumps/u8_save_gump.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/meta_engine.h"
 #include "engines/dialogs.h"
 
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.cpp b/engines/ultima/ultima8/gumps/message_box_gump.cpp
index ddbc58d717..eaa0393186 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.cpp
+++ b/engines/ultima/ultima8/gumps/message_box_gump.cpp
@@ -39,8 +39,6 @@
 #include "ultima/ultima8/graphics/fonts/font.h"
 #include "ultima/ultima8/ultima8.h"
 #include "ultima/ultima8/graphics/render_surface.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/mini_stats_gump.cpp b/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
index 10a3934345..a797691be7 100644
--- a/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
+++ b/engines/ultima/ultima8/gumps/mini_stats_gump.cpp
@@ -33,9 +33,6 @@
 #include "ultima/ultima8/gumps/paperdoll_gump.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/gumps/modal_gump.cpp b/engines/ultima/ultima8/gumps/modal_gump.cpp
index 67ca3f62cd..37041ee7c5 100644
--- a/engines/ultima/ultima8/gumps/modal_gump.cpp
+++ b/engines/ultima/ultima8/gumps/modal_gump.cpp
@@ -25,9 +25,6 @@
 
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/ultima8.h"
-
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/audio/audio_process.h"
 
 namespace Ultima {
diff --git a/engines/ultima/ultima8/gumps/movie_gump.cpp b/engines/ultima/ultima8/gumps/movie_gump.cpp
index ccc604b3d5..0ebc29fcf5 100644
--- a/engines/ultima/ultima8/gumps/movie_gump.cpp
+++ b/engines/ultima/ultima8/gumps/movie_gump.cpp
@@ -33,9 +33,6 @@
 
 #include "ultima/ultima8/filesys/file_system.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
index 0955f9ff48..90ede2eeef 100644
--- a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
@@ -37,8 +37,6 @@
 #include "ultima/ultima8/gumps/mini_stats_gump.h"
 #include "ultima/ultima8/ultima8.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/quit_gump.cpp b/engines/ultima/ultima8/gumps/quit_gump.cpp
index be85978360..0a5549d964 100644
--- a/engines/ultima/ultima8/gumps/quit_gump.cpp
+++ b/engines/ultima/ultima8/gumps/quit_gump.cpp
@@ -30,8 +30,6 @@
 #include "ultima/ultima8/gumps/desktop_gump.h"
 #include "ultima/ultima8/gumps/widgets/button_widget.h"
 #include "ultima/ultima8/gumps/widgets/text_widget.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/readable_gump.cpp b/engines/ultima/ultima8/gumps/readable_gump.cpp
index ff30766d3b..2a4bc13374 100644
--- a/engines/ultima/ultima8/gumps/readable_gump.cpp
+++ b/engines/ultima/ultima8/gumps/readable_gump.cpp
@@ -34,8 +34,6 @@
 #include "ultima/ultima8/kernel/core_app.h"
 #include "ultima/ultima8/games/game_info.h"
 #include "ultima/ultima8/misc/util.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/scroll_gump.cpp b/engines/ultima/ultima8/gumps/scroll_gump.cpp
index 729689395d..9957a65948 100644
--- a/engines/ultima/ultima8/gumps/scroll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/scroll_gump.cpp
@@ -31,8 +31,6 @@
 #include "ultima/ultima8/gumps/gump_notify_process.h"
 #include "ultima/ultima8/world/item.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
index d95f948f40..e4692c187e 100644
--- a/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
+++ b/engines/ultima/ultima8/gumps/shape_viewer_gump.cpp
@@ -44,9 +44,6 @@
 #include "ultima/ultima8/graphics/palette_manager.h"
 #include "ultima/ultima8/usecode/usecode.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/gumps/slider_gump.cpp b/engines/ultima/ultima8/gumps/slider_gump.cpp
index 95ad8e9082..45d6212918 100644
--- a/engines/ultima/ultima8/gumps/slider_gump.cpp
+++ b/engines/ultima/ultima8/gumps/slider_gump.cpp
@@ -34,8 +34,6 @@
 #include "ultima/ultima8/usecode/uc_process.h"
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/ultima8.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/target_gump.cpp b/engines/ultima/ultima8/gumps/target_gump.cpp
index ac489743b5..9b0f9d8cd3 100644
--- a/engines/ultima/ultima8/gumps/target_gump.cpp
+++ b/engines/ultima/ultima8/gumps/target_gump.cpp
@@ -28,9 +28,6 @@
 #include "ultima/ultima8/world/item.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/gumps/u8_save_gump.cpp b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
index 23f977e8f5..a630fb930e 100644
--- a/engines/ultima/ultima8/gumps/u8_save_gump.cpp
+++ b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
@@ -35,8 +35,6 @@
 #include "ultima/ultima8/gumps/paged_gump.h"
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/world/actors/main_actor.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "common/savefile.h"
 #include "common/translation.h"
 
diff --git a/engines/ultima/ultima8/gumps/widgets/button_widget.cpp b/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
index 8e887e7fdc..9f76663680 100644
--- a/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/button_widget.cpp
@@ -29,8 +29,6 @@
 #include "ultima/ultima8/graphics/shape.h"
 #include "ultima/ultima8/kernel/mouse.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp b/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
index e66f36671f..87863f70e6 100644
--- a/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/edit_widget.cpp
@@ -26,8 +26,6 @@
 #include "ultima/ultima8/graphics/fonts/rendered_text.h"
 #include "ultima/ultima8/graphics/render_surface.h"
 #include "ultima/ultima8/graphics/fonts/font_manager.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/graphics/fonts/tt_font.h"
 #include "ultima/ultima8/misc/encoding.h"
 #include "common/system.h"
diff --git a/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp b/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
index ac34e98d8f..9d471e4124 100644
--- a/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/sliding_widget.cpp
@@ -25,9 +25,6 @@
 #include "ultima/ultima8/graphics/shape_frame.h"
 #include "ultima/ultima8/graphics/shape.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
index 7b00a96e26..263a05b06d 100644
--- a/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
+++ b/engines/ultima/ultima8/gumps/widgets/text_widget.cpp
@@ -26,8 +26,6 @@
 #include "ultima/ultima8/graphics/fonts/rendered_text.h"
 #include "ultima/ultima8/graphics/render_surface.h"
 #include "ultima/ultima8/graphics/fonts/font_manager.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/graphics/fonts/tt_font.h"
 #include "ultima/ultima8/gumps/bark_gump.h"
 #include "ultima/ultima8/gumps/ask_gump.h"
diff --git a/engines/ultima/ultima8/kernel/delay_process.cpp b/engines/ultima/ultima8/kernel/delay_process.cpp
index f986799cea..434de3c355 100644
--- a/engines/ultima/ultima8/kernel/delay_process.cpp
+++ b/engines/ultima/ultima8/kernel/delay_process.cpp
@@ -22,8 +22,6 @@
 
 #include "ultima/ultima8/misc/pent_include.h"
 #include "ultima/ultima8/kernel/delay_process.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/misc/p_dynamic_cast.h"
 #include "ultima/shared/std/string.h"
 
diff --git a/engines/ultima/ultima8/kernel/delay_process.h b/engines/ultima/ultima8/kernel/delay_process.h
index 6a816cf8fa..b232846616 100644
--- a/engines/ultima/ultima8/kernel/delay_process.h
+++ b/engines/ultima/ultima8/kernel/delay_process.h
@@ -24,8 +24,6 @@
 #define ULTIMA8_KERNEL_DELAYPROCESS_H
 
 #include "ultima/ultima8/kernel/process.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/misc/p_dynamic_cast.h"
 
 namespace Ultima {
diff --git a/engines/ultima/ultima8/kernel/kernel.cpp b/engines/ultima/ultima8/kernel/kernel.cpp
index 0cc24b97cc..401080ea2a 100644
--- a/engines/ultima/ultima8/kernel/kernel.cpp
+++ b/engines/ultima/ultima8/kernel/kernel.cpp
@@ -24,8 +24,6 @@
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/kernel/process.h"
 #include "ultima/ultima8/misc/id_man.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/shared/std/containers.h"
 #include "ultima/ultima8/ultima8.h"
 
diff --git a/engines/ultima/ultima8/kernel/object.cpp b/engines/ultima/ultima8/kernel/object.cpp
index 0b9bc6189e..a7b5f7455a 100644
--- a/engines/ultima/ultima8/kernel/object.cpp
+++ b/engines/ultima/ultima8/kernel/object.cpp
@@ -28,8 +28,6 @@
 #include "ultima/ultima8/kernel/memory_manager.h"
 #include "ultima/ultima8/usecode/uc_process.h"
 #include "ultima/ultima8/usecode/uc_machine.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/kernel/object_manager.cpp b/engines/ultima/ultima8/kernel/object_manager.cpp
index b091f343a3..02a49493c8 100644
--- a/engines/ultima/ultima8/kernel/object_manager.cpp
+++ b/engines/ultima/ultima8/kernel/object_manager.cpp
@@ -28,8 +28,6 @@
 #include "ultima/ultima8/world/item.h"
 #include "ultima/ultima8/world/actors/actor.h"
 #include "ultima/ultima8/gumps/gump.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/world/item_factory.h"
 #include "ultima/ultima8/ultima8.h"
 #include "ultima/ultima8/world/actors/main_actor.h"
diff --git a/engines/ultima/ultima8/kernel/process.cpp b/engines/ultima/ultima8/kernel/process.cpp
index 0e5caacce0..c8b7d12ce8 100644
--- a/engines/ultima/ultima8/kernel/process.cpp
+++ b/engines/ultima/ultima8/kernel/process.cpp
@@ -23,8 +23,6 @@
 #include "ultima/ultima8/misc/pent_include.h"
 #include "ultima/ultima8/kernel/process.h"
 #include "ultima/ultima8/kernel/kernel.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/misc/id_man.cpp b/engines/ultima/ultima8/misc/id_man.cpp
index c45cfb57dd..58a0a11145 100644
--- a/engines/ultima/ultima8/misc/id_man.cpp
+++ b/engines/ultima/ultima8/misc/id_man.cpp
@@ -23,9 +23,6 @@
 #include "ultima/ultima8/misc/pent_include.h"
 #include "ultima/ultima8/misc/id_man.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/usecode/bit_set.cpp b/engines/ultima/ultima8/usecode/bit_set.cpp
index 2b5a9fddae..dca9ec460f 100644
--- a/engines/ultima/ultima8/usecode/bit_set.cpp
+++ b/engines/ultima/ultima8/usecode/bit_set.cpp
@@ -23,9 +23,6 @@
 #include "ultima/ultima8/misc/pent_include.h"
 #include "ultima/ultima8/usecode/bit_set.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/usecode/uc_list.cpp b/engines/ultima/ultima8/usecode/uc_list.cpp
index c4245c9980..01ab2ea89e 100644
--- a/engines/ultima/ultima8/usecode/uc_list.cpp
+++ b/engines/ultima/ultima8/usecode/uc_list.cpp
@@ -24,8 +24,6 @@
 
 #include "ultima/ultima8/usecode/uc_list.h"
 #include "ultima/ultima8/usecode/uc_machine.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/usecode/uc_machine.cpp b/engines/ultima/ultima8/usecode/uc_machine.cpp
index 63ed2802f2..e08ecb8614 100644
--- a/engines/ultima/ultima8/usecode/uc_machine.cpp
+++ b/engines/ultima/ultima8/usecode/uc_machine.cpp
@@ -28,14 +28,13 @@
 #include "ultima/ultima8/kernel/delay_process.h"
 #include "ultima/ultima8/kernel/core_app.h"
 #include "ultima/ultima8/games/game_info.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/world/current_map.h"
 #include "ultima/ultima8/world/world.h"
 #include "ultima/ultima8/usecode/bit_set.h"
 #include "ultima/ultima8/usecode/uc_list.h"
 #include "ultima/ultima8/misc/id_man.h"
 #include "ultima/ultima8/world/get_object.h"
+#include "ultima/ultima8/filesys/idata_source.h"
 
 #define INCLUDE_CONVERTUSECODEU8_WITHOUT_BRINGING_IN_FOLD
 #include "ultima/ultima8/convert/u8/convert_usecode_u8.h"
diff --git a/engines/ultima/ultima8/usecode/uc_process.cpp b/engines/ultima/ultima8/usecode/uc_process.cpp
index ab20e3e13a..1f8f5900b9 100644
--- a/engines/ultima/ultima8/usecode/uc_process.cpp
+++ b/engines/ultima/ultima8/usecode/uc_process.cpp
@@ -25,8 +25,6 @@
 #include "ultima/ultima8/usecode/uc_machine.h"
 #include "ultima/ultima8/usecode/usecode.h"
 #include "ultima/ultima8/games/game_data.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/usecode/uc_stack.cpp b/engines/ultima/ultima8/usecode/uc_stack.cpp
index c791a6dba4..04a739af57 100644
--- a/engines/ultima/ultima8/usecode/uc_stack.cpp
+++ b/engines/ultima/ultima8/usecode/uc_stack.cpp
@@ -22,8 +22,6 @@
 
 #include "ultima/ultima8/misc/pent_include.h"
 #include "ultima/ultima8/usecode/uc_stack.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index f08e629303..1cd96d184c 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -52,8 +52,6 @@
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/world/item_factory.h"
 #include "ultima/ultima8/world/loop_script.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
index 36ea36ffa3..a3de20dd23 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
@@ -47,9 +47,6 @@
 #include "ultima/ultima8/kernel/delay_process.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
index 5c23466526..0a94afb9b0 100644
--- a/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_bark_notify_process.cpp
@@ -28,8 +28,6 @@
 #include "ultima/ultima8/world/actors/animation.h"
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/ambush_process.cpp b/engines/ultima/ultima8/world/actors/ambush_process.cpp
index 3674c55153..0a32042f81 100644
--- a/engines/ultima/ultima8/world/actors/ambush_process.cpp
+++ b/engines/ultima/ultima8/world/actors/ambush_process.cpp
@@ -27,9 +27,6 @@
 #include "ultima/ultima8/world/actors/combat_process.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/actors/animation_tracker.cpp b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
index d6022be73e..d2d14f0b2c 100644
--- a/engines/ultima/ultima8/world/actors/animation_tracker.cpp
+++ b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
@@ -33,8 +33,6 @@
 #include "ultima/ultima8/usecode/uc_list.h"
 #include "ultima/ultima8/world/loop_script.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/kernel/core_app.h"
 
 namespace Ultima {
diff --git a/engines/ultima/ultima8/world/actors/avatar_death_process.cpp b/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
index e966960fd9..6e5dfbcedc 100644
--- a/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_death_process.cpp
@@ -33,9 +33,6 @@
 #include "ultima/ultima8/audio/music_process.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp b/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
index 1b50b42cfd..1ae52bb1eb 100644
--- a/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_gravity_process.cpp
@@ -29,9 +29,6 @@
 #include "ultima/ultima8/world/current_map.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
index 77df160556..7a0020e2d9 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
@@ -34,8 +34,6 @@
 #include "ultima/ultima8/conf/setting_manager.h"
 #include "ultima/ultima8/audio/music_process.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "common/system.h"
 
 namespace Ultima {
diff --git a/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp b/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
index 09f18b19a1..872670c748 100644
--- a/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
+++ b/engines/ultima/ultima8/world/actors/clear_feign_death_process.cpp
@@ -27,9 +27,6 @@
 #include "ultima/ultima8/audio/audio_process.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/actors/combat_process.cpp b/engines/ultima/ultima8/world/actors/combat_process.cpp
index d5786ec7b6..8a4a5f77dc 100644
--- a/engines/ultima/ultima8/world/actors/combat_process.cpp
+++ b/engines/ultima/ultima8/world/actors/combat_process.cpp
@@ -37,8 +37,6 @@
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/world/actors/loiter_process.h"
 #include "ultima/ultima8/world/actors/ambush_process.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
index 314ef0915c..f979f8874e 100644
--- a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
+++ b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
@@ -37,8 +37,6 @@
 #include "ultima/ultima8/world/sprite_process.h"
 #include "ultima/ultima8/audio/audio_process.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/heal_process.cpp b/engines/ultima/ultima8/world/actors/heal_process.cpp
index 45bc20f84a..8e4103f78d 100644
--- a/engines/ultima/ultima8/world/actors/heal_process.cpp
+++ b/engines/ultima/ultima8/world/actors/heal_process.cpp
@@ -25,8 +25,6 @@
 #include "ultima/ultima8/world/actors/main_actor.h"
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/loiter_process.cpp b/engines/ultima/ultima8/world/actors/loiter_process.cpp
index 1b5b3d463e..d01cf423f5 100644
--- a/engines/ultima/ultima8/world/actors/loiter_process.cpp
+++ b/engines/ultima/ultima8/world/actors/loiter_process.cpp
@@ -27,8 +27,6 @@
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/kernel/delay_process.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/main_actor.cpp b/engines/ultima/ultima8/world/actors/main_actor.cpp
index 19aafb5fcb..0639b35496 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.cpp
+++ b/engines/ultima/ultima8/world/actors/main_actor.cpp
@@ -44,8 +44,6 @@
 #include "ultima/ultima8/world/loop_script.h"
 #include "ultima/ultima8/world/actors/avatar_gravity_process.h"
 #include "ultima/ultima8/audio/music_process.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
index 351ed5f6e2..f39450d527 100644
--- a/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
+++ b/engines/ultima/ultima8/world/actors/pathfinder_process.cpp
@@ -27,9 +27,6 @@
 #include "ultima/ultima8/world/actors/pathfinder.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
index 47f012104a..63589b743e 100644
--- a/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/quick_avatar_mover_process.cpp
@@ -30,8 +30,6 @@
 #include "ultima/ultima8/graphics/shape_info.h"
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/world/actors/avatar_mover_process.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/resurrection_process.cpp b/engines/ultima/ultima8/world/actors/resurrection_process.cpp
index 9dd70707ea..d7f4e66cd5 100644
--- a/engines/ultima/ultima8/world/actors/resurrection_process.cpp
+++ b/engines/ultima/ultima8/world/actors/resurrection_process.cpp
@@ -24,8 +24,6 @@
 #include "ultima/ultima8/world/actors/resurrection_process.h"
 #include "ultima/ultima8/world/actors/actor.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/actors/scheduler_process.cpp b/engines/ultima/ultima8/world/actors/scheduler_process.cpp
index 3290d65f59..8e8761c452 100644
--- a/engines/ultima/ultima8/world/actors/scheduler_process.cpp
+++ b/engines/ultima/ultima8/world/actors/scheduler_process.cpp
@@ -27,9 +27,6 @@
 #include "ultima/ultima8/ultima8.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp b/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
index d1b3b23a41..d4f9266e2d 100644
--- a/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/targeted_anim_process.cpp
@@ -25,9 +25,6 @@
 #include "ultima/ultima8/world/actors/targeted_anim_process.h"
 #include "ultima/ultima8/world/actors/animation_tracker.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
index 0360af52d7..180cd9099f 100644
--- a/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
+++ b/engines/ultima/ultima8/world/actors/teleport_to_egg_process.cpp
@@ -26,9 +26,6 @@
 #include "ultima/ultima8/world/actors/main_actor.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/camera_process.cpp b/engines/ultima/ultima8/world/camera_process.cpp
index 96bf59e9e4..f05df4a640 100644
--- a/engines/ultima/ultima8/world/camera_process.cpp
+++ b/engines/ultima/ultima8/world/camera_process.cpp
@@ -31,8 +31,6 @@
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/kernel/core_app.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/container.cpp b/engines/ultima/ultima8/world/container.cpp
index 43f6c3bd51..b457fda6a0 100644
--- a/engines/ultima/ultima8/world/container.cpp
+++ b/engines/ultima/ultima8/world/container.cpp
@@ -27,8 +27,6 @@
 #include "ultima/ultima8/kernel/object_manager.h"
 #include "ultima/ultima8/usecode/uc_machine.h"
 #include "ultima/ultima8/usecode/uc_list.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/world/item_factory.h"
 #include "ultima/ultima8/world/actors/main_actor.h"
 #include "ultima/ultima8/world/get_object.h"
diff --git a/engines/ultima/ultima8/world/create_item_process.cpp b/engines/ultima/ultima8/world/create_item_process.cpp
index 2a3274f357..059089f219 100644
--- a/engines/ultima/ultima8/world/create_item_process.cpp
+++ b/engines/ultima/ultima8/world/create_item_process.cpp
@@ -25,9 +25,6 @@
 #include "ultima/ultima8/world/item_factory.h"
 #include "ultima/ultima8/world/item.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/current_map.cpp b/engines/ultima/ultima8/world/current_map.cpp
index ac5f908bef..48a8527a1c 100644
--- a/engines/ultima/ultima8/world/current_map.cpp
+++ b/engines/ultima/ultima8/world/current_map.cpp
@@ -42,9 +42,6 @@
 #include "ultima/ultima8/misc/direction.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/destroy_item_process.cpp b/engines/ultima/ultima8/world/destroy_item_process.cpp
index eb7bc66335..5c98326dfd 100644
--- a/engines/ultima/ultima8/world/destroy_item_process.cpp
+++ b/engines/ultima/ultima8/world/destroy_item_process.cpp
@@ -26,9 +26,6 @@
 #include "ultima/ultima8/world/item.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/egg.cpp b/engines/ultima/ultima8/world/egg.cpp
index 38f8fcd9ff..b818862ad1 100644
--- a/engines/ultima/ultima8/world/egg.cpp
+++ b/engines/ultima/ultima8/world/egg.cpp
@@ -27,9 +27,6 @@
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/usecode/uc_machine.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/egg_hatcher_process.cpp b/engines/ultima/ultima8/world/egg_hatcher_process.cpp
index a1854802c0..655cbf92b4 100644
--- a/engines/ultima/ultima8/world/egg_hatcher_process.cpp
+++ b/engines/ultima/ultima8/world/egg_hatcher_process.cpp
@@ -28,9 +28,6 @@
 #include "ultima/ultima8/world/teleport_egg.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/fireball_process.cpp b/engines/ultima/ultima8/world/fireball_process.cpp
index a218f39b82..748b61311a 100644
--- a/engines/ultima/ultima8/world/fireball_process.cpp
+++ b/engines/ultima/ultima8/world/fireball_process.cpp
@@ -31,8 +31,6 @@
 #include "ultima/ultima8/world/weapon_info.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/shared/std/misc.h"
 
 namespace Ultima {
diff --git a/engines/ultima/ultima8/world/glob_egg.cpp b/engines/ultima/ultima8/world/glob_egg.cpp
index 9309442f6b..919eede12c 100644
--- a/engines/ultima/ultima8/world/glob_egg.cpp
+++ b/engines/ultima/ultima8/world/glob_egg.cpp
@@ -28,8 +28,6 @@
 #include "ultima/ultima8/world/item_factory.h"
 #include "ultima/ultima8/world/current_map.h"
 #include "ultima/ultima8/kernel/core_app.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/gravity_process.cpp b/engines/ultima/ultima8/world/gravity_process.cpp
index 9ef49fcea2..c2b9c608d3 100644
--- a/engines/ultima/ultima8/world/gravity_process.cpp
+++ b/engines/ultima/ultima8/world/gravity_process.cpp
@@ -28,8 +28,6 @@
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/world/world.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index c4c4f453fc..dd3209c32b 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -51,8 +51,6 @@
 #include "ultima/ultima8/world/world_point.h"
 #include "ultima/ultima8/world/gravity_process.h"
 #include "ultima/ultima8/world/loop_script.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/world/camera_process.h"
 #include "ultima/ultima8/world/sprite_process.h"
 #include "ultima/ultima8/gumps/slider_gump.h"
diff --git a/engines/ultima/ultima8/world/map.cpp b/engines/ultima/ultima8/world/map.cpp
index 48fe1aa1a4..a70d2e7f60 100644
--- a/engines/ultima/ultima8/world/map.cpp
+++ b/engines/ultima/ultima8/world/map.cpp
@@ -22,8 +22,6 @@
 
 #include "ultima/ultima8/misc/pent_include.h"
 #include "ultima/ultima8/world/map.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/world/item_factory.h"
 #include "ultima/ultima8/world/item.h"
 #include "ultima/ultima8/world/container.h"
diff --git a/engines/ultima/ultima8/world/monster_egg.cpp b/engines/ultima/ultima8/world/monster_egg.cpp
index bc648d4ee3..743867eca3 100644
--- a/engines/ultima/ultima8/world/monster_egg.cpp
+++ b/engines/ultima/ultima8/world/monster_egg.cpp
@@ -32,10 +32,6 @@
 #include "ultima/ultima8/world/world.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-#include "ultima/ultima8/world/get_object.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/split_item_process.cpp b/engines/ultima/ultima8/world/split_item_process.cpp
index b2f29e362b..176e7bb115 100644
--- a/engines/ultima/ultima8/world/split_item_process.cpp
+++ b/engines/ultima/ultima8/world/split_item_process.cpp
@@ -25,8 +25,6 @@
 #include "ultima/ultima8/world/item.h"
 #include "ultima/ultima8/graphics/shape_info.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/sprite_process.cpp b/engines/ultima/ultima8/world/sprite_process.cpp
index 6cd5ed7994..ec9261bab3 100644
--- a/engines/ultima/ultima8/world/sprite_process.cpp
+++ b/engines/ultima/ultima8/world/sprite_process.cpp
@@ -27,8 +27,6 @@
 #include "ultima/ultima8/world/current_map.h"
 #include "ultima/ultima8/kernel/kernel.h"
 #include "ultima/ultima8/world/get_object.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {
diff --git a/engines/ultima/ultima8/world/teleport_egg.cpp b/engines/ultima/ultima8/world/teleport_egg.cpp
index 06ae9ec713..cb36b3cac2 100644
--- a/engines/ultima/ultima8/world/teleport_egg.cpp
+++ b/engines/ultima/ultima8/world/teleport_egg.cpp
@@ -26,9 +26,6 @@
 #include "ultima/ultima8/world/actors/main_actor.h"
 #include "ultima/ultima8/world/get_object.h"
 
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
-
 namespace Ultima {
 namespace Ultima8 {
 
diff --git a/engines/ultima/ultima8/world/world.cpp b/engines/ultima/ultima8/world/world.cpp
index 6befa4ad9d..f2aed17bae 100644
--- a/engines/ultima/ultima8/world/world.cpp
+++ b/engines/ultima/ultima8/world/world.cpp
@@ -24,8 +24,6 @@
 #include "ultima/ultima8/world/world.h"
 #include "ultima/ultima8/world/map.h"
 #include "ultima/ultima8/world/current_map.h"
-#include "ultima/ultima8/filesys/idata_source.h"
-#include "ultima/ultima8/filesys/odata_source.h"
 #include "ultima/ultima8/filesys/flex_file.h"
 #include "ultima/ultima8/filesys/raw_archive.h"
 #include "ultima/ultima8/world/item_factory.h"
@@ -42,6 +40,7 @@
 #include "ultima/ultima8/world/get_object.h"
 #include "ultima/ultima8/kernel/memory_manager.h"
 #include "ultima/ultima8/audio/audio_process.h"
+#include "ultima/ultima8/filesys/idata_source.h"
 
 namespace Ultima {
 namespace Ultima8 {




More information about the Scummvm-git-logs mailing list