Index: lyx-devel/src/callback.cpp
===================================================================
--- lyx-devel/src/callback.cpp	(revision 18315)
+++ lyx-devel/src/callback.cpp	(working copy)
@@ -60,6 +60,7 @@
 
 namespace lyx {
 
+using support::addName;
 using support::bformat;
 using support::FileFilterList;
 using support::FileName;
@@ -134,8 +135,11 @@
 		FileDialog fileDlg(_("Choose a filename to save document as"),
 			LFUN_BUFFER_WRITE_AS,
 			make_pair(_("Documents|#o#O"), from_utf8(lyxrc.document_path)),
-			make_pair(_("Templates|#T#t"), from_utf8(lyxrc.template_path)));
+			make_pair(_("System templates|#S#s"), from_utf8(lyxrc.template_path)));
 
+		fileDlg.SetThirdButton(
+			make_pair(_("User templates|#U#u"),from_utf8(addName(package().user_support().absFilename(), "templates"))) );
+
 		if (!isLyXFilename(fname))
 			fname += ".lyx";
 
Index: lyx-devel/src/frontends/qt4/LyXFileDialog.h
===================================================================
--- lyx-devel/src/frontends/qt4/LyXFileDialog.h	(revision 18315)
+++ lyx-devel/src/frontends/qt4/LyXFileDialog.h	(working copy)
@@ -31,6 +31,9 @@
 		      support::FileFilterList const & filters,
 		      FileDialog::Button const & b1,
 		      FileDialog::Button const & b2);
+			  
+	void SetThirdButton(FileDialog::Button const & b3);
+	
 public Q_SLOTS:
 	void buttonClicked();
 private:
@@ -39,6 +42,9 @@
 
 	QToolButton * b2_;
 	docstring b2_dir_;
+
+	QToolButton * b3_;
+	docstring b3_dir_;
 };
 
 } // namespace lyx
Index: lyx-devel/src/frontends/qt4/LyXFileDialog.cpp
===================================================================
--- lyx-devel/src/frontends/qt4/LyXFileDialog.cpp	(revision 18315)
+++ lyx-devel/src/frontends/qt4/LyXFileDialog.cpp	(working copy)
@@ -71,15 +71,29 @@
 		b2_->setText(toqstr(getLabel(b2.first)));
 		layout.at(0)->addWidget(b2_);
 	}
+
+	b3_ = NULL;
 }
 
+void LyXFileDialog::SetThirdButton(FileDialog::Button const & b3)
+{
+	QList<QHBoxLayout *> layout = findChildren<QHBoxLayout *>();
 
+	b3_dir_ = b3.second;
+	b3_ = new QToolButton(this);
+	connect(b3_, SIGNAL(clicked()), this, SLOT(buttonClicked()));
+	b3_->setText(toqstr(getLabel(b3.first)));
+	layout.at(0)->addWidget(b3_);
+}
+
 void LyXFileDialog::buttonClicked()
 {
 	if (sender() == b1_)
 		setDirectory(toqstr(b1_dir_));
 	else if (sender() == b2_)
 		setDirectory(toqstr(b2_dir_));
+	else if (sender() == b3_)
+		setDirectory(toqstr(b3_dir_));
 }
 
 } // namespace lyx
Index: lyx-devel/src/frontends/qt4/FileDialog.cpp
===================================================================
--- lyx-devel/src/frontends/qt4/FileDialog.cpp	(revision 18315)
+++ lyx-devel/src/frontends/qt4/FileDialog.cpp	(working copy)
@@ -53,6 +53,7 @@
 public:
 	Button b1;
 	Button b2;
+	Button b3;
 };
 
 
@@ -64,7 +65,12 @@
 	private_->b2 = b2;
 }
 
+void FileDialog::SetThirdButton(Button b3)
+{
+	private_->b3 = b3;
+}
 
+
 FileDialog::~FileDialog()
 {
 	delete private_;
@@ -89,6 +95,10 @@
 		toqstr(title_), toqstr(startsWith), toqstr(filters.as_string()) ))));
 #else
 	LyXFileDialog dlg(title_, path, filters, private_->b1, private_->b2);
+	
+	if(!(private_->b3.first.empty()))
+		dlg.SetThirdButton(private_->b3);
+	
 #if QT_VERSION != 0x040203
 	dlg.setFileMode(QFileDialog::AnyFile);
 #endif
@@ -129,6 +139,9 @@
 #else
 	LyXFileDialog dlg(title_, path, filters, private_->b1, private_->b2);
 
+	if(!(private_->b3.first.empty()))
+		dlg.SetThirdButton(private_->b3);
+	
 	if (!suggested.empty())
 		dlg.selectFile(toqstr(suggested));
 
@@ -163,6 +176,9 @@
 
 	LyXFileDialog dlg(title_, path, filter, private_->b1, private_->b2);
 
+	if(!(private_->b3.first.empty()))
+		dlg.SetThirdButton(private_->b3);
+	
 	dlg.setFileMode(QFileDialog::DirectoryOnly);
 
 	if (!suggested.empty())
Index: lyx-devel/src/frontends/FileDialog.h
===================================================================
--- lyx-devel/src/frontends/FileDialog.h	(revision 18315)
+++ lyx-devel/src/frontends/FileDialog.h	(working copy)
@@ -59,6 +59,8 @@
 		   kb_action a = LFUN_SELECT_FILE_SYNC,
 		   Button b1 = Button(docstring(), docstring()),
 		   Button b2 = Button(docstring(), docstring()));
+		   
+	void SetThirdButton(Button b3);
 
 
 	~FileDialog();
Index: lyx-devel/src/LyXFunc.cpp
===================================================================
--- lyx-devel/src/LyXFunc.cpp	(revision 18315)
+++ lyx-devel/src/LyXFunc.cpp	(working copy)
@@ -1875,8 +1875,8 @@
 	if (fromTemplate) {
 		FileDialog fileDlg(_("Select template file"),
 			LFUN_SELECT_FILE_SYNC,
-			make_pair(_("Documents|#o#O"), from_utf8(lyxrc.document_path)),
-			make_pair(_("Templates|#T#t"), from_utf8(lyxrc.template_path)));
+			make_pair(_("System templates|#S#s"), from_utf8(lyxrc.template_path)),
+			make_pair(_("User templates|#U#u"),from_utf8(addName(package().user_support().absFilename(), "templates"))));
 
 		FileDialog::Result result =
 			fileDlg.open(from_utf8(lyxrc.template_path),
