--- a/libopkg/opkg_install.c
+++ b/libopkg/opkg_install.c
@@ -1405,9 +1405,11 @@ opkg_install_pkg(pkg_t *pkg, int from_up
 	  opkg_state_changed++;
 	  pkg->state_flag |= SF_FILELIST_CHANGED;
 
-	  if (old_pkg)
+	  if (old_pkg) {
                pkg_remove_orphan_dependent(pkg, old_pkg);
-
+	       old_pkg->is_upgrade = 1;
+	       pkg->is_upgrade = 1;
+	  }
 	  /* XXX: BUG: we really should treat replacement more like an upgrade
 	   *      Instead, we're going to remove the replacees
 	   */
@@ -1466,7 +1468,7 @@ opkg_install_pkg(pkg_t *pkg, int from_up
 	  }
 
 
-	  opkg_msg(INFO, "Installing maintainer scripts.\n");
+	  opkg_msg(INFO, "%s maintainer scripts.\n", (pkg->is_upgrade) ? ("Upgrading") : ("Installing"));
 	  if (install_maintainer_scripts(pkg, old_pkg)) {
 		opkg_msg(ERROR, "Failed to extract maintainer scripts for %s."
 			       " Package debris may remain!\n",
--- a/libopkg/pkg.c
+++ b/libopkg/pkg.c
@@ -1285,6 +1285,12 @@ pkg_run_script(pkg_t *pkg, const char *s
      setenv("PKG_ROOT",
 	    pkg->dest ? pkg->dest->root_dir : conf->default_dest->root_dir, 1);
 
+	if (pkg->is_upgrade)
+		setenv("PKG_UPGRADE", "1", 1);
+	else
+		setenv("PKG_UPGRADE", "0", 1);
+
+
      if (! file_exists(path)) {
 	  free(path);
 	  return 0;
--- a/libopkg/pkg.h
+++ b/libopkg/pkg.h
@@ -184,6 +184,7 @@ struct pkg
      /* this flag specifies whether the package was installed to satisfy another
       * package's dependancies */
      int auto_installed;
+     int is_upgrade;
 };
 
 pkg_t *pkg_new(void);
