diff -Nur shell.orig/ev-properties.c shell/ev-properties.c
--- shell.orig/ev-properties.c	1969-12-31 16:00:00.000000000 -0800
+++ shell/ev-properties.c	2005-05-21 13:01:05.130371491 -0700
@@ -0,0 +1,154 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a gnome document viewer
+ *
+ *  Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Evince is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "ev-properties.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+GtkDialog *
+ev_properties_new (EvDocument	*document, 
+		   		   GtkWidget	*toplevel)
+{
+	const char *glade_file = DATADIR "/evince-properties.glade";
+	GladeXML *xml;
+	GtkWidget *dialog = NULL;
+	EvDocumentInfo *info;
+	GtkWidget *title, *subject, *author, *keywords, *producer, *creator;
+	GtkWidget *created, *modified, *security, *version, *pages, *optimized;
+	gchar *n_pages, **format_str, *pdf_version;
+	gchar *creation_date, *modified_date;
+	gchar *secured_document;
+	
+	/* Create a new GladeXML object from XML file glade_file */
+	xml = glade_xml_new (glade_file, NULL, NULL);
+	
+	/* If the XML file cannot be openend, throw an error */
+	if (xml == NULL) {
+		dialog = gtk_message_dialog_new (GTK_WINDOW (toplevel),
+                                                 GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                 GTK_MESSAGE_ERROR,
+                                                 GTK_BUTTONS_CLOSE,
+                                                 _("Unable to find glade file"));
+                gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+						 ("The glade file, %s, cannot be found.  Please check that your installation is complete."),
+						 glade_file);
+                gtk_dialog_run (GTK_DIALOG (dialog));
+                gtk_widget_destroy (dialog);
+                return NULL;
+	}
+
+	/* Retrieve the document structure */
+	info = ev_document_get_info (document);
+
+	/* Assign variables to labels */
+	dialog = glade_xml_get_widget (xml, "properties_dialog"); 
+	title = glade_xml_get_widget (xml, "title");
+	subject = glade_xml_get_widget (xml, "subject");
+	author = glade_xml_get_widget (xml, "author");
+	keywords = glade_xml_get_widget (xml, "keywords");
+	producer = glade_xml_get_widget (xml, "producer");
+	creator = glade_xml_get_widget (xml, "creator");
+	created = glade_xml_get_widget (xml, "created");
+	modified = glade_xml_get_widget (xml, "modified");
+	security = glade_xml_get_widget (xml, "security");
+	version = glade_xml_get_widget (xml, "version");
+	pages = glade_xml_get_widget (xml, "pages");
+	optimized = glade_xml_get_widget (xml, "optimized");
+
+	/* Number of pages */
+	n_pages = g_strdup_printf (_("%d"), ev_document_get_n_pages (document));
+
+	/* PDF version */
+	format_str = g_strsplit (info->format, "-", 2);
+	pdf_version = g_strdup_printf (_("%s"), format_str[1]);
+	
+	/* Creation and modified date */
+	creation_date = ev_properties_format_date ((GTime) info->creation_date);
+	modified_date = ev_properties_format_date ((GTime) info->modified_date);
+	
+	/* Does the document have security? */
+	if (ev_document_security_has_document_security (EV_DOCUMENT_SECURITY (document))) {
+		secured_document = "Yes";
+	} else {
+		secured_document = "No";
+	}
+					
+	/* Shorten label values to fit window size by ellipsizing */
+	gtk_label_set_ellipsize (GTK_LABEL (title), PANGO_ELLIPSIZE_END);
+	gtk_label_set_ellipsize (GTK_LABEL (keywords), PANGO_ELLIPSIZE_END);
+	
+	/* Assign values to label fields */
+	gtk_label_set_markup (GTK_LABEL (title), info->title);
+	gtk_label_set_markup (GTK_LABEL (subject), info->subject);
+	gtk_label_set_markup (GTK_LABEL (author), info->author);
+	gtk_label_set_markup (GTK_LABEL (keywords), info->keywords);
+	gtk_label_set_markup (GTK_LABEL (producer), info->producer);
+	gtk_label_set_markup (GTK_LABEL (creator), info->creator);
+	gtk_label_set_markup (GTK_LABEL (created), creation_date);
+	gtk_label_set_markup (GTK_LABEL (modified), modified_date);
+	gtk_label_set_markup (GTK_LABEL (security), secured_document);
+	gtk_label_set_markup (GTK_LABEL (version), pdf_version);
+	gtk_label_set_markup (GTK_LABEL (pages), n_pages);
+	gtk_label_set_markup (GTK_LABEL (optimized), info->linearized);
+
+	/* Clean up */
+	g_strfreev (format_str);
+	g_free (n_pages);
+	g_free (pdf_version);
+	g_free (creation_date);
+	g_free (modified_date);	
+		
+	return GTK_DIALOG (dialog); 
+}
+
+/* Returns a locale specific date and time representation */
+gchar *
+ev_properties_format_date (GTime utime)
+{
+	struct tm *time;
+	gchar *date_string;
+	
+	date_string = g_new0 (char, 101);
+	
+	time = localtime ((const time_t *) &utime);			
+	my_strftime (date_string, 100, "%c", time);		
+	
+	return date_string;
+}
+
+/* Some buggy versions of gcc complain about the use of %c: 
+ * warning: `%c' yields  only last 2 digits of year in some locales.
+ * 
+ * This is a relatively clean one is to add an intermediate
+ * function thanks to the strftime(3) manpage
+ */
+size_t  
+my_strftime (char  *s, size_t max, 
+			 const char *fmt, 
+			 const struct tm *tm) 
+{
+	return strftime (s, max, fmt, tm);
+}
diff -Nur shell.orig/ev-properties.h shell/ev-properties.h
--- shell.orig/ev-properties.h	1969-12-31 16:00:00.000000000 -0800
+++ shell/ev-properties.h	2005-05-21 13:01:05.130371491 -0700
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a gnome document viewer
+ *
+ *  Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Evince is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EV_PROPERTIES_H__
+#define __EV_PROPERTIES_H__
+
+#include "ev-document.h"
+#include "ev-document-security.h"
+#include "ev-window.h"
+
+#include <time.h>
+#include <sys/time.h>
+#include <gtk/gtkdialog.h>
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkwindow.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvProperties	    EvProperties;
+
+struct _EvProperties {
+	GtkDialog		parent;
+};
+
+GtkDialog *ev_properties_new	    (EvDocument *document,
+									 GtkWidget	*toplevel);
+		
+gchar *ev_properties_format_date 	(GTime utime);
+
+size_t my_strftime 					(char  *s, size_t max, 
+			 						 const char *fmt, 
+									 const struct tm *tm);
+
+G_END_DECLS
+
+#endif /* __EV_PROPERTIES_H__ */
diff -Nur shell.orig/ev-window.c shell/ev-window.c
--- shell.orig/ev-window.c	2005-05-19 22:08:11.000000000 -0700
+++ shell/ev-window.c	2005-05-21 13:01:05.134370513 -0700
@@ -37,6 +37,7 @@
 #include "ev-password.h"
 #include "ev-password-view.h"
 #include "ev-print-job.h"
+#include "ev-properties.h"
 #include "ev-document-thumbnails.h"
 #include "ev-document-links.h"
 #include "ev-document-types.h"
@@ -205,6 +206,7 @@
 	/* "FileOpen": always sensitive */
 	set_action_sensitive (ev_window, "FileSaveAs", has_document);
 	set_action_sensitive (ev_window, "FilePrint", has_pages);
+	set_action_sensitive (ev_window, "FileProperties", has_document);		
 	/* "FileCloseWindow": always sensitive */
 
         /* Edit menu */
@@ -1169,6 +1171,16 @@
 }
 
 static void
+ev_window_cmd_file_properties (GtkAction *action, EvWindow *ev_window)
+{
+            GtkDialog *dialog;
+
+            dialog = ev_properties_new (ev_window->priv->document, GTK_WIDGET (ev_window));
+            gtk_dialog_run (dialog);
+            gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+					
+static void
 ev_window_cmd_file_close_window (GtkAction *action, EvWindow *ev_window)
 {
 	g_return_if_fail (EV_IS_WINDOW (ev_window));
@@ -2335,6 +2347,9 @@
 	{ "FilePrint", GTK_STOCK_PRINT, N_("Print..."), "<control>P",
 	  N_("Print this document"),
 	  G_CALLBACK (ev_window_cmd_file_print) },
+	{ "FileProperties", GTK_STOCK_PROPERTIES, N_("Properties"), "<alt>Return",
+	  N_("View the properties of this document"),
+	  G_CALLBACK (ev_window_cmd_file_properties) },			      
 	{ "FileCloseWindow", GTK_STOCK_CLOSE, NULL, "<control>W",
 	  N_("Close this window"),
 	  G_CALLBACK (ev_window_cmd_file_close_window) },
diff -Nur shell.orig/Makefile.am shell/Makefile.am
--- shell.orig/Makefile.am	2005-05-09 05:03:36.000000000 -0700
+++ shell/Makefile.am	2005-05-21 13:01:05.134370513 -0700
@@ -63,6 +63,8 @@
 	ev-pixbuf-cache.h		\
 	ev-print-job.c			\
 	ev-print-job.h			\
+	ev-properties.c			\
+	ev-properties.h			\
 	ev-utils.c			\
 	ev-utils.h			\
 	ev-view.c			\
