diff -Naur old/src/functions.c new2/src/functions.c
--- old/src/functions.c	2009-07-20 19:50:34.000000000 +0000
+++ new2/src/functions.c	2009-07-20 19:51:14.000000000 +0000
@@ -33,7 +33,7 @@
 
 extern guint refresh_interval;
 
-static system_status *sys_stat =NULL;
+system_status *sys_stat =NULL;
 
 gboolean refresh_task_list(void)
 {
diff -Naur old/src/interface.c new2/src/interface.c
--- old/src/interface.c	2009-07-20 19:50:34.000000000 +0000
+++ new2/src/interface.c	2009-07-20 19:50:45.000000000 +0000
@@ -23,6 +23,8 @@
 #include <config.h>
 #endif
 
+#include <stdio.h>
+#include <regex.h>
 #include <glib/gi18n.h>
 #include "interface.h"
 
@@ -34,8 +36,11 @@
   g_object_set_data (G_OBJECT (component), name, widget)
 
 void show_preferences(void);
+void show_sysinfo(void);
+
 extern guint refresh_interval;
 extern guint rID;
+extern system_status *sys_stat;
 GtkWidget *refresh_spin;
 
 GtkWidget* create_main_window (void)
@@ -301,6 +306,7 @@
     GtkWidget *mainmenu;
     GtkWidget *info1;
     GtkWidget *trennlinie1;
+    GtkWidget *sysinfo1;
     GtkWidget *preferences1;
     GtkWidget *show_user_tasks1;
     GtkWidget *show_root_tasks1;
@@ -333,6 +339,11 @@
     gtk_widget_show (show_cached_as_free1);
     gtk_menu_shell_append(GTK_MENU_SHELL(mainmenu), show_cached_as_free1);
 
+    sysinfo1 = gtk_menu_item_new_with_label(_("Show system information"));
+    g_signal_connect(G_OBJECT (sysinfo1), "activate", G_CALLBACK (show_sysinfo), NULL);
+    gtk_widget_show(sysinfo1);
+    gtk_menu_shell_append(GTK_MENU_SHELL(mainmenu), sysinfo1);
+
     separator1 = gtk_separator_menu_item_new();
     gtk_widget_show(separator1);
     gtk_menu_shell_append(GTK_MENU_SHELL(mainmenu), separator1);
@@ -590,3 +601,78 @@
       apply_prefs();
     gtk_widget_destroy(dlg);
 }
+
+
+void show_sysinfo()
+{
+    GtkWidget *dlg = gtk_dialog_new_with_buttons(_("System information"), NULL, 0, GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
+    GtkWidget *c_area = gtk_dialog_get_content_area(GTK_DIALOG (dlg));
+    regex_t r;
+
+    regcomp(&r, "model name*:*", 0);
+    FILE *fr1 = fopen("/proc/cpuinfo","r");
+    if (!fr1)
+    {
+      gtk_widget_destroy(dlg);
+      return;
+    }
+    char *cpu_free, *cpu1;
+    cpu_free = cpu1 = malloc(sizeof(char) * 64);
+    if (!cpu1)
+    {
+      gtk_widget_destroy(dlg);
+      fclose(fr1);
+      return;
+    }
+    fgets(cpu1,64,fr1);
+    while (regexec(&r,cpu1,0,NULL,0))
+    {
+      if (!fgets(cpu1,64,fr1))
+      {
+        sprintf(cpu1,"");
+	break;
+      }
+    }
+    fclose(fr1);
+
+    if (strchr(cpu1,':'))
+      cpu1 = strchr(cpu1,':') + 2 * sizeof(char);
+
+    fr1 = fopen("/proc/sys/kernel/ostype","r");
+    if (!fr1)
+    {
+      free(cpu_free);
+      gtk_widget_destroy(dlg);
+      return;
+    }
+    char os1[32];
+    fgets(os1,sizeof(os1),fr1);
+    fclose(fr1);
+
+    fr1 = fopen("/proc/sys/kernel/osrelease","r");
+    if (!fr1)
+    {
+      free(cpu_free);
+      gtk_widget_destroy(dlg);
+      return;
+    }
+    char kernel1[32];
+    fgets(kernel1,sizeof(kernel1),fr1);
+    fclose(fr1);
+
+    if (os1[strlen(os1) - 1]=='\n')
+      os1[strlen(os1) - 1] = '\0';
+    if (cpu1[strlen(cpu1) - 1]=='\n')
+      cpu1[strlen(cpu1) - 1] = '\0';
+    if (kernel1[strlen(kernel1) - 1]=='\n')
+      kernel1[strlen(kernel1) - 1] = '\0';
+    GtkWidget *info = gtk_label_new(NULL);
+    gtk_label_set_markup(GTK_LABEL (info), g_strdup_printf("  <b>%s</b>  \n\n  <span style=\"italic\">%s:</span> %s  \n  <span style=\"italic\">%s:</span> %d MB  \n  <span style=\"italic\">%s:</span> %s  \n  <span style=\"italic\">%s:</span> %s  ", _("System Information"), _("Operating System"), os1, _("Memory"), sys_stat->mem_total / 1024, _("CPU"), cpu1, _("Kernel"), kernel1));
+    free(cpu_free);
+
+    gtk_widget_show(info);
+    gtk_box_pack_start_defaults(GTK_BOX (c_area), info);
+
+    gtk_dialog_run(GTK_DIALOG (dlg));
+    gtk_widget_destroy(dlg);
+}
