diff --git a/backends/log/log.cpp b/backends/log/log.cpp
new file mode 100644
index 0000000..dc7145c
--- /dev/null
+++ b/backends/log/log.cpp
@@ -0,0 +1,74 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "backends/log/log.h"
+
+#include "common/stream.h"
+#include "common/str.h"
+#include "common/system.h"
+
+#include "base/version.h"
+
+namespace Backends {
+namespace Log {
+
+Log::Log(OSystem *system) : _system(system), _stream(0) {
+	assert(system);
+}
+
+void Log::open(Common::WriteStream *stream) {
+	close();
+
+	_stream = stream;
+	print(gScummVMFullVersion);
+	print("\n", false);
+	print("--- Log opened.\n");
+}
+
+void Log::close() {
+	if (_stream) {
+		print("--- Log closed successfully.\n");
+
+		delete _stream;
+		_stream = 0;
+	}
+}
+
+void Log::print(const char *message, const bool printTime) {
+	if (!_stream)
+		return;
+
+	if (printTime) {
+		const uint32 time = _system->getMillis();
+		_stream->writeString(Common::String::format("[%10d] ", time));
+	}
+
+	_stream->write(message, strlen(message));
+	_stream->flush();
+}
+
+} // End of namespace Log
+} // End of namespace Backends
+
diff --git a/backends/log/log.h b/backends/log/log.h
new file mode 100644
index 0000000..ef9f9a2
--- /dev/null
+++ b/backends/log/log.h
@@ -0,0 +1,58 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef BACKENDS_LOG_LOG_H
+#define BACKENDS_LOG_LOG_H
+
+#include "common/scummsys.h"
+
+class OSystem;
+
+namespace Common {
+class WriteStream;
+} // End of namespace Common
+
+namespace Backends {
+namespace Log {
+
+class Log {
+public:
+	Log(OSystem *system);
+	~Log() { close(); }
+
+	void open(Common::WriteStream *stream);
+	void close();
+
+	void print(const char *message, const bool printTime = true);
+private:
+	OSystem *_system;
+	Common::WriteStream *_stream;
+};
+
+} // End of namespace Log
+} // End of namespace Backends
+
+#endif
+
diff --git a/backends/module.mk b/backends/module.mk
index db03e80..fab0751 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -15,6 +15,7 @@ MODULE_OBJS := \
 	keymapper/keymap.o \
 	keymapper/keymapper.o \
 	keymapper/remap-dialog.o \
+	log/log.o \
 	midi/alsa.o \
 	midi/camd.o \
 	midi/coreaudio.o \
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 8a139e5..589c553 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -182,6 +182,10 @@ void OSystem_SDL::initBackend() {
 		error("Could not initialize SDL: %s", SDL_GetError());
 	}
 
+	_logger = new Backends::Log::Log(this);
+	assert(_logger);
+	_logger->open(Common::FSNode("~/scummvm-log").createWriteStream());
+
 	_graphicsMutex = createMutex();
 
 	SDL_ShowCursor(SDL_DISABLE);
@@ -304,7 +308,7 @@ OSystem_SDL::OSystem_SDL()
 	memset(&_mouseCurState, 0, sizeof(_mouseCurState));
 
 	_inited = false;
-
+	_logger = 0;
 
 	#if defined(__amigaos4__)
 		_fsFactory = new AmigaOSFilesystemFactory();
@@ -545,6 +549,7 @@ void OSystem_SDL::deinit() {
 	free(_mouseData);
 
 	delete _timer;
+	delete _logger;
 
 	SDL_Quit();
 
@@ -564,6 +569,8 @@ void OSystem_SDL::quit() {
 
 void OSystem_SDL::logMessage(LogMessageType::Type type, const char *message) {
 	BaseBackend::logMessage(type, message);
+	if (_logger)
+		_logger->print(message);
 
 #if defined( USE_WINDBG )
 #if defined( _WIN32_WCE )
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 328bb03..660ad07 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -33,6 +33,7 @@
 #endif
 
 #include "backends/base-backend.h"
+#include "backends/log/log.h"
 #include "graphics/scaler.h"
 
 
@@ -243,6 +244,10 @@ public:
 
 protected:
 	bool _inited;
+
+	// Logging
+	Backends::Log::Log *_logger;
+
 	SDL_AudioSpec _obtainedRate;
 
 #ifdef USE_OSD
