diff --git a/Slackware/i2p-base/rc.i2p_def b/Slackware/i2p-base/rc.i2p_def
index 075e9e8472279bdde4daeef3005fba4f39233d40..c231922e5f59973d16b26fba3321329dc1debcb9 100644
--- a/Slackware/i2p-base/rc.i2p_def
+++ b/Slackware/i2p-base/rc.i2p_def
@@ -4,7 +4,7 @@
 i2p_start() {
  # Check if router is up first!
  /bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory status )" > /dev/null
- if [ ! $? -eq 0 ] ; then {
+ if [ $? -eq 0 ] ; then {
   # I2p is already running, so tell the user.
   echo "I2P is already running..."
   i2p_status
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java
index 6958b350e9b2f2ccaf2e4126758ab75137f659af..c44b34f39afd86135d88707f505f65578c5749d7 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java
@@ -50,6 +50,7 @@ public class PluginStarter implements Runnable {
     private static Map<String, ThreadGroup> pluginThreadGroups = new ConcurrentHashMap<String, ThreadGroup>();   // one thread group per plugin (map key=plugin name)
     private static Map<String, Collection<Job>> pluginJobs = new ConcurrentHashMap<String, Collection<Job>>();
     private static Map<String, ClassLoader> _clCache = new ConcurrentHashMap();
+    private static Map<String, Collection<String>> pluginWars = new ConcurrentHashMap<String, Collection<String>>();
 
     public PluginStarter(RouterContext ctx) {
         _context = ctx;
@@ -125,6 +126,8 @@ public class PluginStarter implements Runnable {
             File webappDir = new File(consoleDir, "webapps");
             String fileNames[] = webappDir.list(RouterConsoleRunner.WarFilenameFilter.instance());
             if (fileNames != null) {
+                if(!pluginWars.containsKey(appName))
+                    pluginWars.put(appName, new ConcurrentHashSet<String>());
                 for (int i = 0; i < fileNames.length; i++) {
                     try {
                         String warName = fileNames[i].substring(0, fileNames[i].lastIndexOf(".war"));
@@ -139,6 +142,7 @@ public class PluginStarter implements Runnable {
                             //log.error("Starting webapp: " + warName);
                             String path = new File(webappDir, fileNames[i]).getCanonicalPath();
                             WebAppStarter.startWebApp(ctx, server, warName, path);
+                            pluginWars.get(appName).add(warName);
                         }
                     } catch (IOException ioe) {
                         log.error("Error resolving '" + fileNames[i] + "' in '" + webappDir, ioe);
@@ -215,6 +219,7 @@ public class PluginStarter implements Runnable {
         // stop console webapps in console/webapps
         Server server = WebAppStarter.getConsoleServer();
         if (server != null) {
+        /*
             File consoleDir = new File(pluginDir, "console");
             Properties props = RouterConsoleRunner.webAppProperties(consoleDir.getAbsolutePath());
             File webappDir = new File(consoleDir, "webapps");
@@ -228,6 +233,13 @@ public class PluginStarter implements Runnable {
                     WebAppStarter.stopWebApp(server, warName);
                 }
             }
+        */
+            Iterator <String> wars = pluginWars.get(appName).iterator();
+            while (wars.hasNext()) {
+                String warName = wars.next();
+                WebAppStarter.stopWebApp(server, warName);
+            }
+            pluginWars.get(appName).clear();
         }
 
         // remove summary bar link
@@ -487,10 +499,25 @@ public class PluginStarter implements Runnable {
                     isJobRunning = true;
                     break;
                 }
+        boolean isWarRunning = false;
+        if(pluginWars.containsKey(pluginName)) {
+            Iterator <String> it = pluginWars.get(pluginName).iterator();
+            while(it.hasNext() && !isWarRunning) {
+                String warName = it.next();
+                if(WebAppStarter.isWebAppRunning(warName)) {
+                    isWarRunning = true;
+                }
+            }
+        }
 
         if (log.shouldLog(Log.DEBUG))
-            log.debug("plugin name = <" + pluginName + ">; threads running? " + isClientThreadRunning(pluginName) + "; webapp runing? " + WebAppStarter.isWebAppRunning(pluginName) + "; jobs running? " + isJobRunning);
-        return isClientThreadRunning(pluginName) || WebAppStarter.isWebAppRunning(pluginName) || isJobRunning;
+            log.debug("plugin name = <" + pluginName + ">; threads running? " + isClientThreadRunning(pluginName) + "; webapp runing? " + isWarRunning + "; jobs running? " + isJobRunning);
+        return isClientThreadRunning(pluginName) || isWarRunning || isJobRunning;
+        //
+        //if (log.shouldLog(Log.DEBUG))
+        //    log.debug("plugin name = <" + pluginName + ">; threads running? " + isClientThreadRunning(pluginName) + "; webapp runing? " + WebAppStarter.isWebAppRunning(pluginName) + "; jobs running? " + isJobRunning);
+        //return isClientThreadRunning(pluginName) || WebAppStarter.isWebAppRunning(pluginName) || isJobRunning;
+        //
     }
     
     /**
diff --git a/history.txt b/history.txt
index 398b6ca0c8fa803fc677d92605ae817e97399536..00b97e9892cf50fda35f36750b9d855bafad3a9f 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,12 @@
+2010-11-24 sponge
+    * Slackware, fix rc.i2p, bad logic.
+
+2010-11-24 sponge
+    * Plugin: ticket 104 Fix webapp isRunning to check ALL webapps.
+      The only defecency is that if one is running, that it considers the
+      entire pliugin to be running. I'm not sure if that is a good thing
+      or a bad thing, but the other code checks threads that way.
+
 2010-11-22 zzz
     * Addressbook: Fix rename error on Windows (tkt 323 - thanks RN!)
     * build.xml: Cleanup, fix distclean error in older ants.
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index f6e6df3a5c0d10fbf1efc2f7069c342c2fe16f4e..4e28a2c8d2676ff98ee569a93ae883ef407d9461 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -18,7 +18,7 @@ public class RouterVersion {
     /** deprecated */
     public final static String ID = "Monotone";
     public final static String VERSION = CoreVersion.VERSION;
-    public final static long BUILD = 4;
+    public final static long BUILD = 5;
 
     /** for example "-test" */
     public final static String EXTRA = "";