diff --git a/src/VisVim/Reg.cpp b/src/VisVim/Reg.cpp
new file mode 100644
index 0000000..b4378e5
--- /dev/null
+++ b/src/VisVim/Reg.cpp
@@ -0,0 +1,56 @@
+#include "stdafx.h"
+
+// Returns key for HKEY_CURRENT_USER\"Software"\Company\AppName
+// creating it if it doesn't exist
+// responsibility of the caller to call RegCloseKey() on the returned HKEY
+//
+HKEY GetAppKey (char* AppName)
+{
+	HKEY hAppKey = NULL;
+	HKEY hSoftKey = NULL;
+	if (RegOpenKeyEx (HKEY_CURRENT_USER, "Software", 0, KEY_WRITE | KEY_READ,
+		&hSoftKey) == ERROR_SUCCESS)
+	{
+		DWORD Dummy;
+		RegCreateKeyEx (hSoftKey, AppName, 0, REG_NONE,
+			REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_READ, NULL,
+			&hAppKey, &Dummy);
+	}
+	if (hSoftKey)
+		RegCloseKey (hSoftKey);
+
+	return hAppKey;
+}
+
+// Returns key for
+// HKEY_CURRENT_USER\"Software"\RegistryKey\AppName\Section
+// creating it if it doesn't exist.
+// responsibility of the caller to call RegCloseKey () on the returned HKEY
+//
+HKEY GetSectionKey (HKEY hAppKey, LPCTSTR Section)
+{
+	HKEY hSectionKey = NULL;
+	DWORD Dummy;
+	RegCreateKeyEx (hAppKey, Section, 0, REG_NONE,
+		REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
+		&hSectionKey, &Dummy);
+	return hSectionKey;
+}
+
+int GetRegistryInt (HKEY hSectionKey, LPCTSTR Entry, int Default)
+{
+	DWORD Value;
+	DWORD Type;
+	DWORD Count = sizeof (DWORD);
+	if (RegQueryValueEx (hSectionKey, (LPTSTR) Entry, NULL, &Type,
+			     (LPBYTE) &Value, &Count) == ERROR_SUCCESS)
+		return Value;
+	return Default;
+}
+
+bool WriteRegistryInt (HKEY hSectionKey, char* Entry, int nValue)
+{
+	return RegSetValueEx (hSectionKey, Entry, NULL, REG_DWORD,
+		(LPBYTE) &nValue, sizeof (nValue)) == ERROR_SUCCESS;
+}
+
