diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp
index b61abcd9..31874ebe 100644
--- a/core/sourcemod.cpp
+++ b/core/sourcemod.cpp
@@ -670,6 +670,26 @@ void SourceModBase::ProcessGameFrameHooks(bool simulating)
 	}
 }
 
+size_t SourceModBase::Format(char *buffer, size_t maxlength, const char *fmt, ...)
+{
+	size_t len;
+	va_list ap;
+
+	va_start(ap, fmt);
+	len = FormatArgs(buffer, maxlength, fmt, ap);
+	va_end(ap);
+
+	return len;
+}
+
+size_t SourceModBase::FormatArgs(char *buffer,
+								 size_t maxlength,
+								 const char *fmt,
+								 va_list ap)
+{
+	return UTIL_FormatArgs(buffer, maxlength, fmt, ap);
+}
+
 SMGlobalClass *SMGlobalClass::head = NULL;
 
 SMGlobalClass::SMGlobalClass()
diff --git a/core/sourcemod.h b/core/sourcemod.h
index ac826be6..2dcc292f 100644
--- a/core/sourcemod.h
+++ b/core/sourcemod.h
@@ -129,6 +129,8 @@ public: // ISourceMod
 	void AddGameFrameHook(GAME_FRAME_HOOK hook);
 	void RemoveGameFrameHook(GAME_FRAME_HOOK hook);
 	void ProcessGameFrameHooks(bool simulating);
+	size_t Format(char *buffer, size_t maxlength, const char *fmt, ...);
+	size_t FormatArgs(char *buffer, size_t maxlength, const char *fmt, va_list ap);
 private:
 	CStack<CDataPack *> m_freepacks;
 	char m_SMBaseDir[PLATFORM_MAX_PATH];
diff --git a/public/ISourceMod.h b/public/ISourceMod.h
index e9ec4ac9..4daf7745 100644
--- a/public/ISourceMod.h
+++ b/public/ISourceMod.h
@@ -43,7 +43,7 @@
 #include <time.h>
 
 #define SMINTERFACE_SOURCEMOD_NAME		"ISourceMod"
-#define SMINTERFACE_SOURCEMOD_VERSION	7
+#define SMINTERFACE_SOURCEMOD_VERSION	8
 
 /**
 * @brief Forward declaration of the KeyValues class.
@@ -248,6 +248,28 @@ namespace SourceMod
 		 * @param hook		Hook function.
 		 */
 		virtual void RemoveGameFrameHook(GAME_FRAME_HOOK hook) =0;
+
+		/**
+		 * @brief Platform-safe wrapper around snprintf().
+		 *
+		 * @param buffer	String buffer.
+		 * @param maxlength	Maximum length of buffer.
+		 * @param fmt		Format specifier string.
+		 * @param ...		Format arguments.
+		 * @return			Number of bytes (not including null terminator) written.
+		 */
+		virtual size_t Format(char *buffer, size_t maxlength, const char *fmt, ...) = 0;
+
+		/**
+		 * @brief Platform-safe wrapper around vsnprintf().
+		 *
+		 * @param buffer	String buffer.
+		 * @param maxlength	Maximum length of buffer.
+		 * @param fmt		Format specifier string.
+		 * @param ap		Format arguments.
+		 * @return			Number of bytes (not including null terminator) written.
+		 */
+		virtual size_t FormatArgs(char *buffer, size_t maxlength, const char *fmt, va_list ap) = 0;
 	};
 }