diff -urN konversation-0.15/src/konversation/commit.h konvi-fixed/src/konversation/commit.h
--- konversation-0.15/src/konversation/commit.h 2004-11-28 11:04:17.000000000 +0200
+++ konvi-fixed/src/konversation/commit.h       2005-01-19 16:48:24.000000000 +0200
@@ -1 +1 @@
-#define COMMIT 2000
+#define COMMIT 2001
diff -urN konversation-0.15/src/konversation/server.cpp konvi-fixed/src/konversation/server.cpp
--- konversation-0.15/src/konversation/server.cpp       2004-11-25 04:12:36.000000000 +0200
+++ konvi-fixed/src/konversation/server.cpp     2005-01-19 09:17:38.000000000 +0200
@@ -82,8 +82,9 @@
}

Server::Server(KonversationMainWindow* mainWindow,const QString& hostName,const QString& port,
-              const QString& channel,const QString& password, QString nick)
+              const QString& channel,const QString& _nick, QString password)
{
+  QString nick( _nick );
  m_serverGroup.setName(hostName);
  m_serverGroup.setIdentityId(KonversationApplication::preferences.getIdentityByName("Default")->id());

@@ -2733,37 +2734,48 @@
  // TODO: parameter handling.
  //       since parameters are not functional yet

-  // make a copy to work with
-  QString out(toParse);
-  // define default separator and regular expression for definition
+  // store the parsed version
+  QString out;
+
+  // default separator
  QString separator(" ");
-  QRegExp separatorRegExp("%s[^%]*%");

-  // separator definition found?
-  int pos=out.find(separatorRegExp);
-  if(pos!=-1)
-  {
-    // TODO: This could be better done with .cap() and proper RegExp ...
-    // skip "%s" at the beginning
-    pos+=2;
-    // copy out all text to the next "%" as new separator
-    separator=out.mid(pos,out.find("%",pos+1)-pos);
-    // remove separator definition from string
-    out.replace(separatorRegExp, QString::null);
-  }
-
-  out.replace("%u",nickList.join(separator));
-  if(!channelName.isEmpty()) out.replace("%c",channelName);
-  out.replace("%o",sender);
-  if(!channelKey.isEmpty()) out.replace("%k",channelKey);
-  if(!m_serverGroup.serverByIndex(m_currentServerIndex).password().isEmpty()) {
-    out.replace("%K", m_serverGroup.serverByIndex(m_currentServerIndex).password());
-  }
+  int index = 0, found = 0;
+  QChar toExpand;

-  out.replace("%n","\n");
-  // finally replace all "%p" with "%"
-  out.replace("%p","%");
+  while ((found = toParse.find('%',index)) != -1) {
+    out.append(toParse.mid(index,found-index)); // append part before the %
+    index = found + 1; // skip the part before, including %
+    if (index >= toParse.length())
+      break; // % was the last char (not valid)
+    toExpand = toParse.at(index++);
+    if (toExpand == 's') {
+      found = toParse.find('%',index);
+      if (found == -1) // no other % (not valid)
+        break;
+      separator = toParse.mid(index,found-index);
+      index = found + 1; // skip separator, including %
+    } else if (toExpand == 'u') {
+      out.append(nickList.join(separator));
+    } else if (toExpand == 'c') {
+      if(!channelName.isEmpty())
+        out.append(channelName);
+    } else if (toExpand == 'o') {
+      out.append(sender);
+    } else if (toExpand == 'k') {
+      if(!channelKey.isEmpty())
+        out.append(channelKey);
+    } else if (toExpand == 'K') {
+       if(!m_serverGroup.serverByIndex(m_currentServerIndex).password().isEmpty())
+         out.append(m_serverGroup.serverByIndex(m_currentServerIndex).password());
+    } else if (toExpand == 'n') {
+      out.append("\n");
+    } else if (toExpand == 'p') {
+      out.append("%");
+   }
+  }

+  out.append(toParse.mid(index,toParse.length()-index)); // append last part
  return out;
}

diff -urN konversation-0.15/src/konversation/server.h konvi-fixed/src/konversation/server.h
--- konversation-0.15/src/konversation/server.h 2004-11-22 22:55:07.000000000 +0200
+++ konvi-fixed/src/konversation/server.h       2005-01-19 16:07:49.000000000 +0200
@@ -67,7 +67,7 @@
     *  The details are passed in.  Used for example when the user does "/server irc.somewhere.net"
     */
    Server::Server(KonversationMainWindow* mainWindow,const QString& hostName,const QString& port,
-                  const QString& channel,const QString& password, QString nick);
+                  const QString& channel,const QString& nick, QString password);
    ~Server();

    QString getServerName() const;
diff -urN konversation-0.15/src/konversation/version.h konvi-fixed/src/konversation/version.h
--- konversation-0.15/src/konversation/version.h        2004-08-11 01:52:27.000000000 +0300
+++ konvi-fixed/src/konversation/version.h      2005-01-19 15:54:14.000000000 +0200
@@ -1,3 +1,3 @@
#ifndef VERSION
-#define VERSION "0.15"
+#define VERSION "0.15.1"
#endif
diff -urN konversation-0.15/src/scripts/cmd konvi-fixed/src/scripts/cmd
--- konversation-0.15/src/scripts/cmd   2004-10-15 11:25:39.000000000 +0300
+++ konvi-fixed/src/scripts/cmd 2005-01-19 09:10:19.000000000 +0200
@@ -6,17 +6,21 @@
$SERVER= shift;
$TARGET= shift;

+my $i;
+
+if( $ARGV[0] eq "yes" ){
+    exec 'dcop', $PORT, 'Konversation', 'error', 'Requested command is not executed!';
+}
+
$ARG_MESSAGE = `@ARGV`;

foreach $entry (split(/\n/, $ARG_MESSAGE)) {
    chomp $entry;
-    unless($i) {
-       system("dcop $PORT Konversation say $SERVER \"$TARGET\" \"Output Of Command : %B @ARGV %B\" ");
-       $i=1;
-    }
-    system ("dcop $PORT Konversation say $SERVER \"$TARGET\" \"$entry\" ");
+    $i=1;
+    $entry =~ s/^\//\/\//;
+    system 'dcop', $PORT, 'Konversation', 'say', $SERVER, $TARGET, $entry;
}

unless($i) {
-    exec("dcop $PORT Konversation error \"Command @ARGV doesn't exist\!\"");
+    exec 'dcop', $PORT, 'Konversation', 'error', 'Command @ARGV doesn\'t exist!';
}
diff -urN konversation-0.15/src/scripts/colorizer konvi-fixed/src/scripts/colorizer
--- konversation-0.15/src/scripts/colorizer     2004-10-15 11:25:39.000000000 +0300
+++ konvi-fixed/src/scripts/colorizer   2005-01-19 09:10:39.000000000 +0200
@@ -1,5 +1,5 @@
#!/usr/bin/env perl
-# Copyright (C) 2004 by İsmail Dönmez
+# Copyright (C) 2004 by İsmail Dönmez, Wouter Coekaerts
# Licensed under GPL v2 or later at your option

use warnings;
@@ -9,30 +9,22 @@
my $SERVER= shift;
my $TARGET= shift;

-my $message;
-my $random;
-my $input;
-my @chars;
my $i = 0;

if(!@ARGV){
-    exec ("dcop $PORT Konversation error \"Colorizer script needs a message argument!\" ");
+    exec 'dcop', $PORT, 'Konversation', 'error', 'Colorizer script needs a message argument!';
}

-$input = join " ", @ARGV;
+my $input = join " ", @ARGV;

if( utf8::valid($input) ) {
    utf8::decode($input);
}

-@chars = split //, $input;
+my ($command, $arguments) = ($input =~ /^(\/\S*\s|)(.*)/);
+my @chars = split //, $arguments;
+@chars = map { "%C" . ((($i++)%15)+1) . $_ } @chars;
+$arguments = join "", @chars;

-srand(time());
-
-foreach (@chars) {
-  $random = int(rand(15))+1;
-  $message = $message."%C".$random.$_;
-}
-
-system ("dcop $PORT Konversation say $SERVER \"$TARGET\" \"$message\" ");
+system 'dcop', $PORT, 'Konversation', 'say', $SERVER, $TARGET, $command . $arguments;

diff -urN konversation-0.15/src/scripts/fortune konvi-fixed/src/scripts/fortune
--- konversation-0.15/src/scripts/fortune       2004-10-15 11:25:39.000000000 +0300
+++ konvi-fixed/src/scripts/fortune     2005-01-19 09:10:47.000000000 +0200
@@ -51,4 +51,4 @@
    }
}
close(FORTUNES);
-exec ("dcop $PORT Konversation say $SERVER \"$TARGET\" \"$MESSAGE\" ");
+exec 'dcop', $PORT, 'Konversation', 'say', $SERVER, $TARGET, $MESSAGE;
diff -urN konversation-0.15/src/scripts/uptime konvi-fixed/src/scripts/uptime
--- konversation-0.15/src/scripts/uptime        2004-10-12 20:54:33.000000000 +0300
+++ konvi-fixed/src/scripts/uptime      2005-01-19 09:11:15.000000000 +0200
@@ -21,7 +21,7 @@
} else {
       $UPTIME = `cat /proc/uptime`;
       if (not $UPTIME) {
-               exec ("dcop $PORT Konversation info \"Could not read uptime. Check that /proc/uptime exists.\"");
+               exec 'dcop', $PORT, 'Konversation', 'info', 'Could not read uptime. Check that /proc/uptime exists.';
       }
       @uparray = split(/\./, $UPTIME);
    $seconds = $uparray[0];
@@ -42,15 +42,15 @@
       $minutes = int($seconds/60);
}
if( $days && $hours ) {
-       exec ("dcop $PORT Konversation say $SERVER \"$TARGET\" \"Uptime: $days days, $hours hours and $minutes minutes\"");
+       exec 'dcop', $PORT, 'Konversation', 'say', $SERVER, $TARGET, "Uptime: $days days, $hours hours and $minutes minutes";
}
elsif( !$days && $hours ) {
-       exec ("dcop $PORT Konversation say $SERVER \"$TARGET\" \"Uptime: $hours hours and $minutes minutes\"");
+       exec 'dcop', $PORT, 'Konversation', 'say', $SERVER, $TARGET, "Uptime: $hours hours and $minutes minutes";
}
elsif( $days && !$hours ) {
-       exec ("dcop $PORT Konversation say $SERVER \"$TARGET\" \"Uptime: $days days and $minutes minutes\"");
+       exec 'dcop', $PORT, 'Konversation', 'say', $SERVER, $TARGET, "Uptime: $days days and $minutes minutes";
}
elsif( !$days && !$hours ) {
-       exec ("dcop $PORT Konversation say $SERVER \"$TARGET\" \"Uptime: $minutes minutes\"");
+       exec 'dcop', $PORT, 'Konversation', 'say', $SERVER, $TARGET, "Uptime: $minutes minutes";
}

diff -urN konversation-0.15/src/scripts/weather konvi-fixed/src/scripts/weather
--- konversation-0.15/src/scripts/weather       2004-10-15 11:25:39.000000000 +0300
+++ konvi-fixed/src/scripts/weather     2005-01-19 09:11:19.000000000 +0200
@@ -10,7 +10,7 @@
@stations = `dcop KWeatherService WeatherService listStations`;

if( ! @stations ) {
-  exec ("dcop $PORT Konversation error \"KWeather is not installed or not running!\" ");
+  exec 'dcop', $PORT, 'Konversation', 'error', 'KWeather is not installed or not running!';
}

if( $OPTION && $stations[$OPTION-1] ) {
@@ -58,6 +58,6 @@
  $MESSAGE = "Current Weather for %B$city%B : Temperature: %B$temperature%B, Pressure: %B$pressure%B, Wind: %B$wind%B";
  }

-  system ("dcop $PORT Konversation say $SERVER \"$TARGET\" \"$MESSAGE\" ");
+  system 'dcop', $PORT, 'Konversation', 'say', $SERVER, $TARGET, $MESSAGE;

}