--- MainWindow.cc.orig	2007-09-25 05:07:26.000000000 +0400
+++ MainWindow.cc	2008-09-20 17:28:28.794041766 +0400
@@ -18,7 +18,7 @@
 	m_menu_bar.signal_jump_to().connect(sigc::mem_fun(this, &MainWindow::onJumpTo));
 	m_menu_bar.signal_open_file().connect(sigc::mem_fun(this, &MainWindow::onOpenFile));
 	m_menu_bar.signal_save().connect(sigc::mem_fun(this, &MainWindow::onSaveFile));
-	m_menu_bar.signal_save_as().connect(sigc::mem_fun(this, &MainWindow::onSaveFile));
+	m_menu_bar.signal_save_as().connect(sigc::mem_fun(this, &MainWindow::onSaveFileAs));
 	m_menu_bar.signal_header_edit().connect(sigc::mem_fun(this, &MainWindow::onHeaderEdit));
 	m_menu_bar.signal_switch_fuzzy().connect(sigc::mem_fun(this, &MainWindow::onSwitchFuzzy));
 	m_menu_bar.signal_prev_msg().connect(sigc::mem_fun(this, &MainWindow::onPreviousMessage));
@@ -225,6 +225,19 @@
 	char buf[BUFSIZ];
 	strftime(buf, BUFSIZ, "%Y-%m-%d %H:%M%z", tmp);
 	m_po_reader->setHeader("PO-Revision-Date", buf);
+
+	m_po_reader->saveToFile(m_po_reader->getFilePath());
+}
+
+void MainWindow::onSaveFileAs() {
+	this->fromGui2Po();
+	m_po_reader->setHeader("X-Generator", PROGRAM_NAME" "PROGRAM_VERSION);
+	time_t t = time(NULL);
+	struct tm *tmp;
+	tmp = localtime(&t);
+	char buf[BUFSIZ];
+	strftime(buf, BUFSIZ, "%Y-%m-%d %H:%M%z", tmp);
+	m_po_reader->setHeader("PO-Revision-Date", buf);
 	Gtk::FileChooserDialog save_dialog(*this, _("Save file"), Gtk::FILE_CHOOSER_ACTION_SAVE);
 	save_dialog.add_button(Gtk::Stock::CANCEL, 0);
 	Gtk::Button *save_btn = save_dialog.add_button(Gtk::Stock::SAVE, 1);
--- MainWindow.h.orig	2007-09-25 05:07:26.000000000 +0400
+++ MainWindow.h	2008-09-20 17:28:45.439041521 +0400
@@ -42,6 +42,7 @@
 		void onJumpTo();
 		void onOpenFile();
 		void onSaveFile();
+		void onSaveFileAs();
 		void onHeaderEdit();
 		void onCopyMsgid();
 		void onSwitchFuzzy();
--- PoReader.cc.orig	2007-09-25 05:07:26.000000000 +0400
+++ PoReader.cc	2008-09-20 17:29:18.978042298 +0400
@@ -9,6 +9,9 @@
 	struct po_xerror_handler error_handler;
 	error_handler.xerror = xerror_handler;
 	error_handler.xerror2 = xerror2_handler;
+
+	m_filepath = file_path;
+
 	debug("Opening file %s\n", file_path.c_str());
 	m_pofile = po_file_read(file_path.c_str(), &error_handler);
 
@@ -18,6 +21,10 @@
 	po_next_message(m_miter); //we skip header which is msgid
 }
 
+Glib::ustring PoReader::getFilePath() {
+	return m_filepath;
+}
+
 Glib::ustring PoReader::getEncoding() {
 	Glib::ustring content_type = this->getHeader("Content-Type");
 	
--- PoReader.h.orig	2007-09-25 05:07:26.000000000 +0400
+++ PoReader.h	2008-09-20 17:29:09.269041934 +0400
@@ -12,6 +12,7 @@
 		PoReader(const Glib::ustring &file_path);
 		Glib::ustring getHeader(const Glib::ustring &header_name);
 		void setHeader(const Glib::ustring &name, const Glib::ustring &value);
+		Glib::ustring getFilePath();
 		Glib::ustring getEncoding();
 
 		Glib::ustring getMsgid();
@@ -47,6 +48,7 @@
 		~PoReader();
 	private:
 		po_file_t             m_pofile;
+		Glib::ustring         m_filepath;
 		Glib::ustring         m_file_encoding;
 		po_message_iterator_t m_miter;
 		po_message_t          m_current_msg;
