diff --git a/src/VisVim/Commands.cpp b/src/VisVim/Commands.cpp
index 95d7c0e..a346dea 100644
--- a/src/VisVim/Commands.cpp
+++ b/src/VisVim/Commands.cpp
@@ -20,20 +20,21 @@
 
 static BOOL g_bEnableVim = TRUE;	// Vim enabled
 static BOOL g_bDevStudioEditor = FALSE;	// Open file in Dev Studio editor simultaneously
+static BOOL g_bNewTabs = FALSE;
 static int g_ChangeDir = CD_NONE;	// CD after file open?
 
-static void VimSetEnableState (BOOL bEnableState);
-static BOOL VimOpenFile (BSTR& FileName, long LineNr);
-static DISPID VimGetDispatchId (COleAutomationControl& VimOle, char* Method);
-static void VimErrDiag (COleAutomationControl& VimOle);
-static void VimChangeDir (COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName);
-static void DebugMsg (char* Msg, char* Arg = NULL);
+static void VimSetEnableState(BOOL bEnableState);
+static BOOL VimOpenFile(BSTR& FileName, long LineNr);
+static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method);
+static void VimErrDiag(COleAutomationControl& VimOle);
+static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName);
+static void DebugMsg(char* Msg, char* Arg = NULL);
 
 
 /////////////////////////////////////////////////////////////////////////////
 // CCommands
 
-CCommands::CCommands ()
+CCommands::CCommands()
 {
 	// m_pApplication == NULL; M$ Code generation bug!!!
 	m_pApplication = NULL;
@@ -41,17 +42,17 @@
 	m_pDebuggerEventsObj = NULL;
 }
 
-CCommands::~CCommands ()
+CCommands::~CCommands()
 {
-	ASSERT (m_pApplication != NULL);
+	ASSERT(m_pApplication != NULL);
 	if (m_pApplication)
 	{
-		m_pApplication->Release ();
+		m_pApplication->Release();
 		m_pApplication = NULL;
 	}
 }
 
-void CCommands::SetApplicationObject (IApplication * pApplication)
+void CCommands::SetApplicationObject(IApplication * pApplication)
 {
 	// This function assumes pApplication has already been AddRef'd
 	// for us, which CDSAddIn did in it's QueryInterface call
@@ -61,55 +62,57 @@
 		return;
 
 	// Create Application event handlers
-	XApplicationEventsObj::CreateInstance (&m_pApplicationEventsObj);
+	XApplicationEventsObj::CreateInstance(&m_pApplicationEventsObj);
 	if (! m_pApplicationEventsObj)
 	{
-		ReportInternalError ("XApplicationEventsObj::CreateInstance");
+		ReportInternalError("XApplicationEventsObj::CreateInstance");
 		return;
 	}
-	m_pApplicationEventsObj->AddRef ();
-	m_pApplicationEventsObj->Connect (m_pApplication);
+	m_pApplicationEventsObj->AddRef();
+	m_pApplicationEventsObj->Connect(m_pApplication);
 	m_pApplicationEventsObj->m_pCommands = this;
 
 #ifdef NEVER
 	// Create Debugger event handler
 	CComPtr < IDispatch > pDebugger;
-	if (SUCCEEDED (m_pApplication->get_Debugger (&pDebugger))
+	if (SUCCEEDED(m_pApplication->get_Debugger(&pDebugger))
 	    && pDebugger != NULL)
 	{
-		XDebuggerEventsObj::CreateInstance (&m_pDebuggerEventsObj);
-		m_pDebuggerEventsObj->AddRef ();
-		m_pDebuggerEventsObj->Connect (pDebugger);
+		XDebuggerEventsObj::CreateInstance(&m_pDebuggerEventsObj);
+		m_pDebuggerEventsObj->AddRef();
+		m_pDebuggerEventsObj->Connect(pDebugger);
 		m_pDebuggerEventsObj->m_pCommands = this;
 	}
 #endif
 
 	// Get settings from registry HKEY_CURRENT_USER\Software\Vim\VisVim
-	HKEY hAppKey = GetAppKey ("Vim");
+	HKEY hAppKey = GetAppKey("Vim");
 	if (hAppKey)
 	{
-		HKEY hSectionKey = GetSectionKey (hAppKey, "VisVim");
+		HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
 		if (hSectionKey)
 		{
-			g_bEnableVim = GetRegistryInt (hSectionKey, "EnableVim",
+			g_bEnableVim = GetRegistryInt(hSectionKey, "EnableVim",
 						       g_bEnableVim);
-			g_bDevStudioEditor = GetRegistryInt(hSectionKey,"DevStudioEditor",
-							    g_bDevStudioEditor);
-			g_ChangeDir = GetRegistryInt (hSectionKey, "ChangeDir",
+			g_bDevStudioEditor = GetRegistryInt(hSectionKey,
+					"DevStudioEditor", g_bDevStudioEditor);
+			g_bNewTabs = GetRegistryInt(hSectionKey, "NewTabs",
+						    g_bNewTabs);
+			g_ChangeDir = GetRegistryInt(hSectionKey, "ChangeDir",
 						      g_ChangeDir);
-			RegCloseKey (hSectionKey);
+			RegCloseKey(hSectionKey);
 		}
-		RegCloseKey (hAppKey);
+		RegCloseKey(hAppKey);
 	}
 }
 
-void CCommands::UnadviseFromEvents ()
+void CCommands::UnadviseFromEvents()
 {
-	ASSERT (m_pApplicationEventsObj != NULL);
+	ASSERT(m_pApplicationEventsObj != NULL);
 	if (m_pApplicationEventsObj)
 	{
-		m_pApplicationEventsObj->Disconnect (m_pApplication);
-		m_pApplicationEventsObj->Release ();
+		m_pApplicationEventsObj->Disconnect(m_pApplication);
+		m_pApplicationEventsObj->Release();
 		m_pApplicationEventsObj = NULL;
 	}
 
@@ -121,10 +124,10 @@
 		// unadvise from its events (thus the VERIFY_OK below--see
 		// stdafx.h).
 		CComPtr < IDispatch > pDebugger;
-		VERIFY_OK (m_pApplication->get_Debugger (&pDebugger));
-		ASSERT (pDebugger != NULL);
-		m_pDebuggerEventsObj->Disconnect (pDebugger);
-		m_pDebuggerEventsObj->Release ();
+		VERIFY_OK(m_pApplication->get_Debugger(&pDebugger));
+		ASSERT(pDebugger != NULL);
+		m_pDebuggerEventsObj->Disconnect(pDebugger);
+		m_pDebuggerEventsObj->Release();
 		m_pDebuggerEventsObj = NULL;
 	}
 #endif
@@ -136,21 +139,21 @@
 
 // Application events
 
-HRESULT CCommands::XApplicationEvents::BeforeBuildStart ()
+HRESULT CCommands::XApplicationEvents::BeforeBuildStart()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::BuildFinish (long nNumErrors, long nNumWarnings)
+HRESULT CCommands::XApplicationEvents::BuildFinish(long nNumErrors, long nNumWarnings)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::BeforeApplicationShutDown ()
+HRESULT CCommands::XApplicationEvents::BeforeApplicationShutDown()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
@@ -158,9 +161,9 @@
 // is done.
 // Vim gets called from here.
 //
-HRESULT CCommands::XApplicationEvents::DocumentOpen (IDispatch * theDocument)
+HRESULT CCommands::XApplicationEvents::DocumentOpen(IDispatch * theDocument)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 
 	if (! g_bEnableVim)
 		// Vim not enabled or empty command line entered
@@ -169,7 +172,7 @@
 	// First get the current file name and line number
 
 	// Get the document object
-	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc (theDocument);
+	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument);
 	if (! pDoc)
 		return S_OK;
 
@@ -177,26 +180,26 @@
 	long LineNr = -1;
 
 	// Get the document name
-	if (FAILED (pDoc->get_FullName (&FileName)))
+	if (FAILED(pDoc->get_FullName(&FileName)))
 		return S_OK;
 
 	LPDISPATCH pDispSel;
 
 	// Get a selection object dispatch pointer
-	if (SUCCEEDED (pDoc->get_Selection (&pDispSel)))
+	if (SUCCEEDED(pDoc->get_Selection(&pDispSel)))
 	{
 		// Get the selection object
-		CComQIPtr < ITextSelection, &IID_ITextSelection > pSel (pDispSel);
+		CComQIPtr < ITextSelection, &IID_ITextSelection > pSel(pDispSel);
 
 		if (pSel)
 			// Get the selection line number
-			pSel->get_CurrentLine (&LineNr);
+			pSel->get_CurrentLine(&LineNr);
 
-		pDispSel->Release ();
+		pDispSel->Release();
 	}
 
 	// Open the file in Vim and position to the current line
-	if (VimOpenFile (FileName, LineNr))
+	if (VimOpenFile(FileName, LineNr))
 	{
 		if (! g_bDevStudioEditor)
 		{
@@ -204,30 +207,30 @@
 			CComVariant vSaveChanges = dsSaveChangesPrompt;
 			DsSaveStatus Saved;
 
-			pDoc->Close (vSaveChanges, &Saved);
+			pDoc->Close(vSaveChanges, &Saved);
 		}
 	}
 
 	// We're done here
-	SysFreeString (FileName);
+	SysFreeString(FileName);
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::BeforeDocumentClose (IDispatch * theDocument)
+HRESULT CCommands::XApplicationEvents::BeforeDocumentClose(IDispatch * theDocument)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::DocumentSave (IDispatch * theDocument)
+HRESULT CCommands::XApplicationEvents::DocumentSave(IDispatch * theDocument)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::NewDocument (IDispatch * theDocument)
+HRESULT CCommands::XApplicationEvents::NewDocument(IDispatch * theDocument)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 
 	if (! g_bEnableVim)
 		// Vim not enabled or empty command line entered
@@ -235,19 +238,19 @@
 
 	// First get the current file name and line number
 
-	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc (theDocument);
+	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument);
 	if (! pDoc)
 		return S_OK;
 
 	BSTR FileName;
 	HRESULT hr;
 
-	hr = pDoc->get_FullName (&FileName);
-	if (FAILED (hr))
+	hr = pDoc->get_FullName(&FileName);
+	if (FAILED(hr))
 		return S_OK;
 
 	// Open the file in Vim and position to the current line
-	if (VimOpenFile (FileName, 0))
+	if (VimOpenFile(FileName, 0))
 	{
 		if (! g_bDevStudioEditor)
 		{
@@ -255,49 +258,49 @@
 			CComVariant vSaveChanges = dsSaveChangesPrompt;
 			DsSaveStatus Saved;
 
-			pDoc->Close (vSaveChanges, &Saved);
+			pDoc->Close(vSaveChanges, &Saved);
 		}
 	}
 
-	SysFreeString (FileName);
+	SysFreeString(FileName);
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::WindowActivate (IDispatch * theWindow)
+HRESULT CCommands::XApplicationEvents::WindowActivate(IDispatch * theWindow)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::WindowDeactivate (IDispatch * theWindow)
+HRESULT CCommands::XApplicationEvents::WindowDeactivate(IDispatch * theWindow)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::WorkspaceOpen ()
+HRESULT CCommands::XApplicationEvents::WorkspaceOpen()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::WorkspaceClose ()
+HRESULT CCommands::XApplicationEvents::WorkspaceClose()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
-HRESULT CCommands::XApplicationEvents::NewWorkspace ()
+HRESULT CCommands::XApplicationEvents::NewWorkspace()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
 // Debugger event
 
-HRESULT CCommands::XDebuggerEvents::BreakpointHit (IDispatch * pBreakpoint)
+HRESULT CCommands::XDebuggerEvents::BreakpointHit(IDispatch * pBreakpoint)
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 	return S_OK;
 }
 
@@ -308,17 +311,18 @@
 class CMainDialog : public CDialog
 {
     public:
-	CMainDialog (CWnd * pParent = NULL);	// Standard constructor
+	CMainDialog(CWnd * pParent = NULL);	// Standard constructor
 
 	//{{AFX_DATA(CMainDialog)
 	enum { IDD = IDD_ADDINMAIN };
 	int	m_ChangeDir;
 	BOOL	m_bDevStudioEditor;
+	BOOL	m_bNewTabs;
 	//}}AFX_DATA
 
 	//{{AFX_VIRTUAL(CMainDialog)
     protected:
-	virtual void DoDataExchange (CDataExchange * pDX);	// DDX/DDV support
+	virtual void DoDataExchange(CDataExchange * pDX);	// DDX/DDV support
 	//}}AFX_VIRTUAL
 
     protected:
@@ -326,100 +330,106 @@
 	afx_msg void OnEnable();
 	afx_msg void OnDisable();
 	//}}AFX_MSG
-	DECLARE_MESSAGE_MAP ()
+	DECLARE_MESSAGE_MAP()
 };
 
-CMainDialog::CMainDialog (CWnd * pParent /* =NULL */ )
-	: CDialog (CMainDialog::IDD, pParent)
+CMainDialog::CMainDialog(CWnd * pParent /* =NULL */ )
+	: CDialog(CMainDialog::IDD, pParent)
 {
 	//{{AFX_DATA_INIT(CMainDialog)
 	m_ChangeDir = -1;
 	m_bDevStudioEditor = FALSE;
+	m_bNewTabs = FALSE;
 	//}}AFX_DATA_INIT
 }
 
-void CMainDialog::DoDataExchange (CDataExchange * pDX)
+void CMainDialog::DoDataExchange(CDataExchange * pDX)
 {
-	CDialog::DoDataExchange (pDX);
+	CDialog::DoDataExchange(pDX);
 	//{{AFX_DATA_MAP(CMainDialog)
 	DDX_Radio(pDX, IDC_CD_SOURCE_PATH, m_ChangeDir);
-	DDX_Check (pDX, IDC_DEVSTUDIO_EDITOR, m_bDevStudioEditor);
+	DDX_Check(pDX, IDC_DEVSTUDIO_EDITOR, m_bDevStudioEditor);
+	DDX_Check(pDX, IDC_NEW_TABS, m_bNewTabs);
 	//}}AFX_DATA_MAP
 }
 
-BEGIN_MESSAGE_MAP (CMainDialog, CDialog)
+BEGIN_MESSAGE_MAP(CMainDialog, CDialog)
 	//{{AFX_MSG_MAP(CMainDialog)
 	//}}AFX_MSG_MAP
-END_MESSAGE_MAP ()
+END_MESSAGE_MAP()
 
 
 /////////////////////////////////////////////////////////////////////////////
 // CCommands methods
 
-STDMETHODIMP CCommands::VisVimDialog ()
+STDMETHODIMP CCommands::VisVimDialog()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 
 	// Use m_pApplication to access the Developer Studio Application
 	// object,
 	// and VERIFY_OK to see error strings in DEBUG builds of your add-in
 	// (see stdafx.h)
 
-	VERIFY_OK (m_pApplication->EnableModeless (VARIANT_FALSE));
+	VERIFY_OK(m_pApplication->EnableModeless(VARIANT_FALSE));
 
 	CMainDialog Dlg;
 
 	Dlg.m_bDevStudioEditor = g_bDevStudioEditor;
+	Dlg.m_bNewTabs = g_bNewTabs;
 	Dlg.m_ChangeDir = g_ChangeDir;
-	if (Dlg.DoModal () == IDOK)
+	if (Dlg.DoModal() == IDOK)
 	{
 		g_bDevStudioEditor = Dlg.m_bDevStudioEditor;
+		g_bNewTabs = Dlg.m_bNewTabs;
 		g_ChangeDir = Dlg.m_ChangeDir;
 
 		// Save settings to registry HKEY_CURRENT_USER\Software\Vim\VisVim
-		HKEY hAppKey = GetAppKey ("Vim");
+		HKEY hAppKey = GetAppKey("Vim");
 		if (hAppKey)
 		{
-			HKEY hSectionKey = GetSectionKey (hAppKey, "VisVim");
+			HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
 			if (hSectionKey)
 			{
-				WriteRegistryInt (hSectionKey, "DevStudioEditor",
+				WriteRegistryInt(hSectionKey, "DevStudioEditor",
 						  g_bDevStudioEditor);
-				WriteRegistryInt (hSectionKey, "ChangeDir", g_ChangeDir);
-				RegCloseKey (hSectionKey);
+				WriteRegistryInt(hSectionKey, "NewTabs",
+						  g_bNewTabs);
+				WriteRegistryInt(hSectionKey, "ChangeDir", g_ChangeDir);
+				RegCloseKey(hSectionKey);
 			}
-			RegCloseKey (hAppKey);
+			RegCloseKey(hAppKey);
 		}
 	}
 
-	VERIFY_OK (m_pApplication->EnableModeless (VARIANT_TRUE));
+	VERIFY_OK(m_pApplication->EnableModeless(VARIANT_TRUE));
 	return S_OK;
 }
 
-STDMETHODIMP CCommands::VisVimEnable ()
+STDMETHODIMP CCommands::VisVimEnable()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-	VimSetEnableState (true);
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
+	VimSetEnableState(true);
 	return S_OK;
 }
 
-STDMETHODIMP CCommands::VisVimDisable ()
+STDMETHODIMP CCommands::VisVimDisable()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-	VimSetEnableState (false);
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
+	VimSetEnableState(false);
 	return S_OK;
 }
 
-STDMETHODIMP CCommands::VisVimToggle ()
+STDMETHODIMP CCommands::VisVimToggle()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
-	VimSetEnableState (! g_bEnableVim);
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
+	VimSetEnableState(! g_bEnableVim);
 	return S_OK;
 }
 
-STDMETHODIMP CCommands::VisVimLoad ()
+STDMETHODIMP CCommands::VisVimLoad()
 {
-	AFX_MANAGE_STATE (AfxGetStaticModuleState ());
+	AFX_MANAGE_STATE(AfxGetStaticModuleState());
 
 	// Use m_pApplication to access the Developer Studio Application object,
 	// and VERIFY_OK to see error strings in DEBUG builds of your add-in
@@ -430,7 +440,7 @@
 	CComPtr < IDispatch > pDispDoc, pDispSel;
 
 	// Get a document object dispatch pointer
-	VERIFY_OK (m_pApplication->get_ActiveDocument (&pDispDoc));
+	VERIFY_OK(m_pApplication->get_ActiveDocument(&pDispDoc));
 	if (! pDispDoc)
 		return S_OK;
 
@@ -438,30 +448,30 @@
 	long LineNr = -1;
 
 	// Get the document object
-	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc (pDispDoc);
+	CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(pDispDoc);
 
 	if (! pDoc)
 		return S_OK;
 
 	// Get the document name
-	if (FAILED (pDoc->get_FullName (&FileName)))
+	if (FAILED(pDoc->get_FullName(&FileName)))
 		return S_OK;
 
 	// Get a selection object dispatch pointer
-	if (SUCCEEDED (pDoc->get_Selection (&pDispSel)))
+	if (SUCCEEDED(pDoc->get_Selection(&pDispSel)))
 	{
 		// Get the selection object
-		CComQIPtr < ITextSelection, &IID_ITextSelection > pSel (pDispSel);
+		CComQIPtr < ITextSelection, &IID_ITextSelection > pSel(pDispSel);
 
 		if (pSel)
 			// Get the selection line number
-			pSel->get_CurrentLine (&LineNr);
+			pSel->get_CurrentLine(&LineNr);
 	}
 
 	// Open the file in Vim
-	VimOpenFile (FileName, LineNr);
+	VimOpenFile(FileName, LineNr);
 
-	SysFreeString (FileName);
+	SysFreeString(FileName);
 	return S_OK;
 }
 
@@ -472,16 +482,16 @@
 
 // Set the enable state and save to registry
 //
-static void VimSetEnableState (BOOL bEnableState)
+static void VimSetEnableState(BOOL bEnableState)
 {
 	g_bEnableVim = bEnableState;
-	HKEY hAppKey = GetAppKey ("Vim");
+	HKEY hAppKey = GetAppKey("Vim");
 	if (hAppKey)
 	{
-		HKEY hSectionKey = GetSectionKey (hAppKey, "VisVim");
+		HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim");
 		if (hSectionKey)
-			WriteRegistryInt (hSectionKey, "EnableVim", g_bEnableVim);
-		RegCloseKey (hAppKey);
+			WriteRegistryInt(hSectionKey, "EnableVim", g_bEnableVim);
+		RegCloseKey(hAppKey);
 	}
 }
 
@@ -490,7 +500,7 @@
 // letter.
 // 'LineNr' must contain a valid line number or 0, e. g. for a new file
 //
-static BOOL VimOpenFile (BSTR& FileName, long LineNr)
+static BOOL VimOpenFile(BSTR& FileName, long LineNr)
 {
 
 	// OLE automation object for com. with Vim
@@ -507,7 +517,7 @@
 	// Get a dispatch id for the SendKeys method of Vim;
 	// enables connection to Vim if necessary
 	DISPID DispatchId;
-	DispatchId = VimGetDispatchId (VimOle, "SendKeys");
+	DispatchId = VimGetDispatchId(VimOle, "SendKeys");
 	if (! DispatchId)
 		// OLE error, can't obtain dispatch id
 		goto OleError;
@@ -525,20 +535,28 @@
 #ifdef SINGLE_WINDOW
 	// Update the current file in Vim if it has been modified.
 	// Disabled, because it could write the file when you don't want to.
-	sprintf (VimCmd + 2, ":up\n");
+	sprintf(VimCmd + 2, ":up\n");
 #endif
-	if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+	if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
 		goto OleError;
 
 	// Change Vim working directory to where the file is if desired
 	if (g_ChangeDir != CD_NONE)
-		VimChangeDir (VimOle, DispatchId, FileName);
+		VimChangeDir(VimOle, DispatchId, FileName);
 
 	// Make Vim open the file.
 	// In the filename convert all \ to /, put a \ before a space.
-	sprintf(VimCmd, ":drop ");
+	if (g_bNewTabs)
+	{
+		sprintf(VimCmd, ":tab drop ");
+		s = VimCmd + 11;
+	}
+	else
+	{
+		sprintf(VimCmd, ":drop ");
+		s = VimCmd + 6;
+	}
 	sprintf(FileNameTmp, "%S", (char *)FileName);
-	s = VimCmd + 6;
 	for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4;
 									  ++p)
 		if (*p == '\\')
@@ -552,20 +570,20 @@
 	*s++ = '\n';
 	*s = '\0';
 
-	if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+	if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
 		goto OleError;
 
 	if (LineNr > 0)
 	{
 		// Goto line
-		sprintf (VimCmd, ":%d\n", LineNr);
-		if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)))
+		sprintf(VimCmd, ":%d\n", LineNr);
+		if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)))
 			goto OleError;
 	}
 
 	// Make Vim come to the foreground
-	if (! VimOle.Method ("SetForeground"))
-		VimOle.ErrDiag ();
+	if (! VimOle.Method("SetForeground"))
+		VimOle.ErrDiag();
 
 	// We're done
 	return true;
@@ -573,7 +591,7 @@
     OleError:
 	// There was an OLE error
 	// Check if it's the "unknown class string" error
-	VimErrDiag (VimOle);
+	VimErrDiag(VimOle);
 	return false;
 }
 
@@ -581,18 +599,18 @@
 // Create the Vim OLE object if necessary
 // Returns a valid dispatch id or null on error
 //
-static DISPID VimGetDispatchId (COleAutomationControl& VimOle, char* Method)
+static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method)
 {
 	// Initialize Vim OLE connection if not already done
-	if (! VimOle.IsCreated ())
+	if (! VimOle.IsCreated())
 	{
-		if (! VimOle.CreateObject ("Vim.Application"))
+		if (! VimOle.CreateObject("Vim.Application"))
 			return NULL;
 	}
 
 	// Get the dispatch id for the SendKeys method.
 	// By doing this, we are checking if Vim is still there...
-	DISPID DispatchId = VimOle.GetDispatchId ("SendKeys");
+	DISPID DispatchId = VimOle.GetDispatchId("SendKeys");
 	if (! DispatchId)
 	{
 		// We can't get a dispatch id.
@@ -604,12 +622,12 @@
 		// should not be kept long enough to allow the user to terminate Vim
 		// to avoid memory corruption (why the heck is there no system garbage
 		// collection for those damned OLE memory chunks???).
-		VimOle.DeleteObject ();
-		if (! VimOle.CreateObject ("Vim.Application"))
+		VimOle.DeleteObject();
+		if (! VimOle.CreateObject("Vim.Application"))
 			// If this create fails, it's time for an error msg
 			return NULL;
 
-		if (! (DispatchId = VimOle.GetDispatchId ("SendKeys")))
+		if (! (DispatchId = VimOle.GetDispatchId("SendKeys")))
 			// There is something wrong...
 			return NULL;
 	}
@@ -620,20 +638,20 @@
 // Output an error message for an OLE error
 // Check on the classstring error, which probably means Vim wasn't registered.
 //
-static void VimErrDiag (COleAutomationControl& VimOle)
+static void VimErrDiag(COleAutomationControl& VimOle)
 {
-	SCODE sc = GetScode (VimOle.GetResult ());
+	SCODE sc = GetScode(VimOle.GetResult());
 	if (sc == CO_E_CLASSSTRING)
 	{
 		char Buf[256];
-		sprintf (Buf, "There is no registered OLE automation server named "
+		sprintf(Buf, "There is no registered OLE automation server named "
 			 "\"Vim.Application\".\n"
 			 "Use the OLE-enabled version of Vim with VisVim and "
 			 "make sure to register Vim by running \"vim -register\".");
-		MessageBox (NULL, Buf, "OLE Error", MB_OK);
+		MessageBox(NULL, Buf, "OLE Error", MB_OK);
 	}
 	else
-		VimOle.ErrDiag ();
+		VimOle.ErrDiag();
 }
 
 // Change directory to the directory the file 'FileName' is in or it's parent
@@ -644,7 +662,7 @@
 //	CD_SOURCE_PATH
 //	CD_SOURCE_PARENT
 //
-static void VimChangeDir (COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName)
+static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName)
 {
 	// Do a :cd first
 
@@ -655,7 +673,7 @@
 	char DirUnix[_MAX_DIR * 2];
 	char *s, *t;
 
-	_splitpath (StrFileName, Drive, Dir, NULL, NULL);
+	_splitpath(StrFileName, Drive, Dir, NULL, NULL);
 
 	// Convert to Unix path name format, escape spaces.
 	t = DirUnix;
@@ -676,19 +694,18 @@
 	OLECHAR Buf[MAX_OLE_STR];
 	char VimCmd[MAX_OLE_STR];
 
-	sprintf (VimCmd, ":cd %s%s%s\n", Drive, DirUnix,
+	sprintf(VimCmd, ":cd %s%s%s\n", Drive, DirUnix,
 		 g_ChangeDir == CD_SOURCE_PARENT && DirUnix[1] ? ".." : "");
-	VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf));
+	VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf));
 }
 
 #ifdef _DEBUG
 // Print out a debug message
 //
-static void DebugMsg (char* Msg, char* Arg)
+static void DebugMsg(char* Msg, char* Arg)
 {
 	char Buf[400];
-	sprintf (Buf, Msg, Arg);
-	AfxMessageBox (Buf);
+	sprintf(Buf, Msg, Arg);
+	AfxMessageBox(Buf);
 }
 #endif
-
diff --git a/src/VisVim/Resource.h b/src/VisVim/Resource.h
index e098b38..1070091 100644
--- a/src/VisVim/Resource.h
+++ b/src/VisVim/Resource.h
@@ -16,6 +16,7 @@
 #define IDC_CD_SOURCE_PATH		1001
 #define IDC_CD_SOURCE_PARENT		1002
 #define IDC_CD_NONE			1003
+#define IDC_NEW_TABS			1004
 
 // Next default values for new objects
 //
diff --git a/src/VisVim/VisVim.rc b/src/VisVim/VisVim.rc
index f227e53..cf74b29 100644
--- a/src/VisVim/VisVim.rc
+++ b/src/VisVim/VisVim.rc
@@ -122,6 +122,9 @@
     CONTROL         "&Open file in DevStudio editor simultaneously",
                     IDC_DEVSTUDIO_EDITOR,"Button",BS_AUTOCHECKBOX | WS_GROUP | 
                     WS_TABSTOP,7,7,153,10
+    CONTROL         "Open files in new tabs",
+                    IDC_NEW_TABS,"Button",BS_AUTOCHECKBOX | WS_GROUP | 
+                    WS_TABSTOP,7,21,153,10
     GROUPBOX        "Current directory",IDC_STATIC,7,35,164,58,WS_GROUP
     CONTROL         "Set to &source file path",IDC_CD_SOURCE_PATH,"Button",
                     BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,17,49,85,10
diff --git a/src/version.c b/src/version.c
index 5dfbacf..e296364 100644
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    150,
+/**/
     149,
 /**/
     148,
