diff --git a/gui/twmsg.h b/gui/twmsg.h
new file mode 100644
index 0000000..cd035d1
--- /dev/null
+++ b/gui/twmsg.h
@@ -0,0 +1,97 @@
+/*
+	Copyright 2015 _that/TeamWin
+	This file is part of TWRP/TeamWin Recovery Project.
+
+	TWRP 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 3 of the License, or
+	(at your option) any later version.
+
+	TWRP 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 TWRP.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef twmsg_h
+#define twmsg_h
+
+#include <cstdlib>
+#include <cstring>
+#include <string>
+#include <sstream>
+#include <vector>
+#include <errno.h>
+
+/*
+Abstract interface for something that can look up strings by name.
+*/
+class StringLookup
+{
+public:
+	virtual std::string operator()(const std::string& name) const = 0;
+	virtual ~StringLookup() {};
+};
+
+
+namespace msg
+{
+	// These get translated to colors in the GUI console
+	enum Kind
+	{
+		kNormal,
+		kHighlight,
+		kWarning,
+		kError
+	};
+
+
+	template<typename T> std::string to_string(const T& v)
+	{
+		std::ostringstream ss;
+		ss << v;
+		return ss.str();
+	}
+}
+
+
+/*
+Generic message formatting class.
+Designed to decouple message generation from actual resource string lookup and variable insertion,
+so that messages can be re-translated at any later time.
+*/
+class Message
+{
+	msg::Kind kind; // severity or similar message kind
+	std::string name; // the resource string name. may be of format "name=default value".
+	std::vector<std::string> variables; // collected insertion variables to replace {1}, {2}, ...
+	const StringLookup& resourceLookup; // object to resolve resource string name into a final format string
+	const StringLookup& varLookup; // object to resolve any non-numeric insertion strings
+
+	std::string GetFormatString(const std::string& name) const;
+
+public:
+	Message(msg::Kind kind, const char* name, const StringLookup& resourceLookup, const StringLookup& varLookup)
+		: kind(kind), name(name), resourceLookup(resourceLookup), varLookup(varLookup) {}
+
+	// Variable insertion.
+	template<typename T>
+	Message& operator()(const T& v) { variables.push_back(msg::to_string(v)); return *this; }
+
+	// conversion to final string
+	operator std::string() const;
+
+	// Get Message Kind
+	msg::Kind GetKind() {return kind;};
+};
+
+
+// Utility functions to create messages with standard resource and data manager lookups.
+// Short names to make usage convenient.
+Message Msg(const char* name);
+Message Msg(msg::Kind kind, const char* name);
+
+#endif
