diff --git a/build.xml b/build.xml
index df30347dd..f81bdb6fb 100644
--- a/build.xml
+++ b/build.xml
@@ -277,16 +277,6 @@
-
-
-
-
-
-
-
-
-
-
@@ -303,17 +293,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -849,4 +828,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/installer/resources/portable/configs/addressbook/config.txt b/installer/resources/portable/configs/addressbook/config.txt
new file mode 100644
index 000000000..cb267cbac
--- /dev/null
+++ b/installer/resources/portable/configs/addressbook/config.txt
@@ -0,0 +1,11 @@
+should_publish=false
+proxy_host=127.0.0.1
+proxy_port=4444
+update_delay=1
+log=../log/addrbook_log.txt
+last_modified=../log/addrbook_last_modified.txt
+etags=../log/addrbook_etags.txt
+subscriptions=subscriptions.txt
+master_addressbook=userhosts.txt
+router_addressbook=../hosts.txt
+published_addressbook=../eepsite/hosts.txt
diff --git a/installer/resources/portable/configs/clients.config b/installer/resources/portable/configs/clients.config
new file mode 100644
index 000000000..196d6253a
--- /dev/null
+++ b/installer/resources/portable/configs/clients.config
@@ -0,0 +1,15 @@
+clientApp.0.main=net.i2p.router.web.RouterConsoleRunner
+clientApp.0.name=I2P Router Console
+clientApp.0.args=7657 127.0.0.1 ./webapps/
+clientApp.0.delay=0
+clientApp.0.startOnLoad=true
+clientApp.1.main=net.i2p.i2ptunnel.TunnelControllerGroup
+clientApp.1.name=Application tunnels
+clientApp.1.args=i2ptunnel.config
+clientApp.1.delay=120
+clientApp.1.startOnLoad=true
+clientApp.2.main=net.i2p.apps.systray.UrlLauncher
+clientApp.2.name=Open Router Console in web browser at startup
+clientApp.2.args=http://127.0.0.1:7657/index.jsp
+clientApp.2.delay=15
+clientApp.2.startOnLoad=true
\ No newline at end of file
diff --git a/installer/resources/portable/configs/i2ptunnel.config b/installer/resources/portable/configs/i2ptunnel.config
new file mode 100644
index 000000000..53a4a16cd
--- /dev/null
+++ b/installer/resources/portable/configs/i2ptunnel.config
@@ -0,0 +1,119 @@
+tunnel.0.description=HTTP proxy for browsing eepsites and the web
+tunnel.0.i2cpHost=127.0.0.1
+tunnel.0.i2cpPort=7654
+tunnel.0.interface=127.0.0.1
+tunnel.0.listenPort=4444
+tunnel.0.name=I2P HTTP Proxy
+tunnel.0.option.i2cp.closeIdleTime=1800000
+tunnel.0.option.i2cp.closeOnIdle=false
+tunnel.0.option.i2cp.delayOpen=false
+tunnel.0.option.i2cp.newDestOnResume=false
+tunnel.0.option.i2cp.reduceIdleTime=900000
+tunnel.0.option.i2cp.reduceOnIdle=false
+tunnel.0.option.i2cp.reduceQuantity=1
+tunnel.0.option.i2p.streaming.connectDelay=1000
+tunnel.0.option.inbound.backupQuantity=1
+tunnel.0.option.inbound.length=2
+tunnel.0.option.inbound.lengthVariance=0
+tunnel.0.option.inbound.nickname=shared clients
+tunnel.0.option.inbound.quantity=2
+tunnel.0.option.outbound.backupQuantity=1
+tunnel.0.option.outbound.length=2
+tunnel.0.option.outbound.lengthVariance=0
+tunnel.0.option.outbound.nickname=shared clients
+tunnel.0.option.outbound.quantity=2
+tunnel.0.option.persistentClientKey=false
+tunnel.0.proxyList=false.i2p
+tunnel.0.sharedClient=true
+tunnel.0.startOnLoad=true
+tunnel.0.type=httpclient
+tunnel.1.description=IRC proxy to access the anonymous IRC network
+tunnel.1.i2cpHost=127.0.0.1
+tunnel.1.i2cpPort=7654
+tunnel.1.interface=127.0.0.1
+tunnel.1.listenPort=6668
+tunnel.1.name=IRC Proxy
+tunnel.1.option.i2cp.closeIdleTime=1200000
+tunnel.1.option.i2cp.closeOnIdle=false
+tunnel.1.option.i2cp.delayOpen=true
+tunnel.1.option.i2cp.newDestOnResume=false
+tunnel.1.option.i2cp.reduceIdleTime=600000
+tunnel.1.option.i2cp.reduceOnIdle=true
+tunnel.1.option.i2cp.reduceQuantity=1
+tunnel.1.option.i2p.streaming.connectDelay=1000
+tunnel.1.option.inbound.backupQuantity=0
+tunnel.1.option.inbound.length=2
+tunnel.1.option.inbound.lengthVariance=0
+tunnel.1.option.inbound.nickname=IRC Proxy
+tunnel.1.option.inbound.quantity=2
+tunnel.1.option.outbound.backupQuantity=0
+tunnel.1.option.outbound.length=2
+tunnel.1.option.outbound.lengthVariance=0
+tunnel.1.option.outbound.nickname=IRC Proxy
+tunnel.1.option.outbound.quantity=2
+tunnel.1.option.persistentClientKey=false
+tunnel.1.privKeyFile=i2ptunnel1-privKeys.dat
+tunnel.1.sharedClient=false
+tunnel.1.startOnLoad=true
+tunnel.1.targetDestination=irc.postman.i2p,irc.freshcoffee.i2p
+tunnel.1.type=ircclient
+tunnel.2.description=smtp server
+tunnel.2.i2cpHost=127.0.0.1
+tunnel.2.i2cpPort=7654
+tunnel.2.interface=127.0.0.1
+tunnel.2.listenPort=7659
+tunnel.2.name=smtp.postman.i2p
+tunnel.2.option.i2cp.closeIdleTime=1800000
+tunnel.2.option.i2cp.closeOnIdle=false
+tunnel.2.option.i2cp.delayOpen=true
+tunnel.2.option.i2cp.newDestOnResume=false
+tunnel.2.option.i2cp.reduceIdleTime=900000
+tunnel.2.option.i2cp.reduceOnIdle=true
+tunnel.2.option.i2cp.reduceQuantity=1
+tunnel.2.option.i2p.streaming.connectDelay=1000
+tunnel.2.option.inbound.backupQuantity=1
+tunnel.2.option.inbound.length=2
+tunnel.2.option.inbound.lengthVariance=0
+tunnel.2.option.inbound.nickname=shared clients
+tunnel.2.option.inbound.quantity=2
+tunnel.2.option.outbound.backupQuantity=1
+tunnel.2.option.outbound.length=2
+tunnel.2.option.outbound.lengthVariance=0
+tunnel.2.option.outbound.nickname=shared clients
+tunnel.2.option.outbound.quantity=2
+tunnel.2.option.persistentClientKey=false
+tunnel.2.privKeyFile=i2ptunnel4-privKeys.dat
+tunnel.2.sharedClient=true
+tunnel.2.startOnLoad=true
+tunnel.2.targetDestination=smtp.postman.i2p
+tunnel.2.type=client
+tunnel.3.description=pop3 server
+tunnel.3.i2cpHost=127.0.0.1
+tunnel.3.i2cpPort=7654
+tunnel.3.interface=127.0.0.1
+tunnel.3.listenPort=7660
+tunnel.3.name=pop3.postman.i2p
+tunnel.3.option.i2cp.closeIdleTime=1800000
+tunnel.3.option.i2cp.closeOnIdle=false
+tunnel.3.option.i2cp.delayOpen=false
+tunnel.3.option.i2cp.newDestOnResume=false
+tunnel.3.option.i2cp.reduceIdleTime=900000
+tunnel.3.option.i2cp.reduceOnIdle=true
+tunnel.3.option.i2cp.reduceQuantity=1
+tunnel.3.option.i2p.streaming.connectDelay=1000
+tunnel.3.option.inbound.backupQuantity=1
+tunnel.3.option.inbound.length=2
+tunnel.3.option.inbound.lengthVariance=0
+tunnel.3.option.inbound.nickname=shared clients
+tunnel.3.option.inbound.quantity=2
+tunnel.3.option.outbound.backupQuantity=1
+tunnel.3.option.outbound.length=2
+tunnel.3.option.outbound.lengthVariance=0
+tunnel.3.option.outbound.nickname=shared clients
+tunnel.3.option.outbound.quantity=2
+tunnel.3.option.persistentClientKey=false
+tunnel.3.privKeyFile=i2ptunnel5-privKeys.dat
+tunnel.3.sharedClient=true
+tunnel.3.startOnLoad=true
+tunnel.3.targetDestination=pop.postman.i2p
+tunnel.3.type=client
diff --git a/installer/resources/portable/configs/logger.config b/installer/resources/portable/configs/logger.config
new file mode 100644
index 000000000..6f73c8e79
--- /dev/null
+++ b/installer/resources/portable/configs/logger.config
@@ -0,0 +1,10 @@
+logger.format=d p [t] c: m
+logger.dateFormat=HH:mm:ss.SSS
+logger.displayOnScreen=TRUE
+logger.logFileName=logs/log-#.txt
+logger.logFileSize=10m
+logger.logRotationLimit=2
+logger.defaultLevel=WARN
+logger.minimumOnScreenLevel=CRIT
+logger.consoleBufferSize=20
+# log limit overrides:
diff --git a/installer/resources/portable/configs/router.config b/installer/resources/portable/configs/router.config
new file mode 100644
index 000000000..18cd9687e
--- /dev/null
+++ b/installer/resources/portable/configs/router.config
@@ -0,0 +1,27 @@
+# NOTE: This I2P config file must use UTF-8 encoding
+i2np.bandwidth.inboundBurstKBytes=22520
+i2np.bandwidth.inboundBurstKBytesPerSecond=128
+i2np.bandwidth.inboundKBytesPerSecond=128
+i2np.bandwidth.outboundBurstKBytes=22520
+i2np.bandwidth.outboundBurstKBytesPerSecond=128
+i2np.bandwidth.outboundKBytesPerSecond=128
+i2np.laptopMode=false
+i2np.ntcp.autoip=true
+i2np.ntcp.enable=true
+i2np.udp.addressSources=local,upnp,ssu
+i2np.upnp.enable=true
+i2p.dir.config=.
+prng.buffers=16
+router.dynamicKeys=false
+router.maxParticipatingTunnels=150
+router.newsRefreshFrequency=86400000
+router.sharePercentage=80
+router.updatePolicy=notify
+router.updateProxyHost=127.0.0.1
+router.updateProxyPort=4444
+router.updateThroughProxy=true
+router.updateURL=http://echelon.i2p/i2p/i2pupdate.sud,http://stats.i2p/i2p/i2pupdate.sud,http://www.i2p2.i2p/_static/i2pupdate.sud,http://update.postman.i2p/i2pupdate.sud
+router.updateUnsigned=false
+routerconsole.lang=en
+routerconsole.summaryRefresh=30
+time.disabled=false
diff --git a/installer/resources/portable/configs/systray.config b/installer/resources/portable/configs/systray.config
new file mode 100644
index 000000000..062e3e3b2
--- /dev/null
+++ b/installer/resources/portable/configs/systray.config
@@ -0,0 +1,14 @@
+# NOTE: The system tray control currently only works on Windows and KDE.
+
+# The filename (with full path if needed) of the browser to be used by the
+# system tray control to launch the router console. You may also append command
+# line parameters like so:
+#
+# browser=/usr/bin/opera -newpage
+#
+# If you set this value to 'default', systray will attempt to identify and use
+# your system's default browser.
+browser=default
+
+# The port the router console listens on.
+port=7657
diff --git a/installer/resources/portable/configs/webapps.config b/installer/resources/portable/configs/webapps.config
new file mode 100644
index 000000000..ea965011a
--- /dev/null
+++ b/installer/resources/portable/configs/webapps.config
@@ -0,0 +1,4 @@
+# NOTE: This I2P config file must use UTF-8 encoding
+webapps.addressbook.startOnLoad=true
+webapps.i2ptunnel.startOnLoad=true
+webapps.routerconsole.startOnLoad=true
diff --git a/installer/resources/portable/configs/wrapper.config b/installer/resources/portable/configs/wrapper.config
new file mode 100644
index 000000000..db04ae951
--- /dev/null
+++ b/installer/resources/portable/configs/wrapper.config
@@ -0,0 +1,142 @@
+wrapper.java.command=java
+wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
+
+# Java Classpath (include wrapper.jar) Add class path elements as
+# needed starting from 1
+wrapper.java.classpath.1=lib/*.jar
+# uncomment this to use the system classpath as well (e.g. to get tools.jar)
+#wrapper.java.classpath.2=%CLASSPATH%
+
+# Java Library Path (location of Wrapper.DLL or libwrapper.so)
+wrapper.java.library.path.1=lib
+
+# Java Additional Parameters
+# Numbers must be consecutive (except for stripquotes)
+wrapper.java.additional.1=-DloggerFilenameOverride=logs/log-router-@.txt
+wrapper.java.additional.2=-Dorg.mortbay.http.Version.paranoid=true
+wrapper.java.additional.3=-Dorg.mortbay.util.FileResource.checkAliases=false
+wrapper.java.additional.4=-Dorg.mortbay.xml.XmlParser.NotValidating=true
+wrapper.java.additional.5=-Di2p.dir.base=.
+wrapper.java.additional.5.stripquotes=TRUE
+# PORTABLE installation:
+# uncomment the following
+wrapper.java.additional.6=-Di2p.dir.pid=logs
+wrapper.java.additional.6.stripquotes=TRUE
+wrapper.java.additional.7=-Di2p.dir.temp=tmp
+wrapper.java.additional.7.stripquotes=TRUE
+wrapper.java.additional.8=-Di2p.dir.config=.
+wrapper.java.additional.8.stripquotes=TRUE
+
+# Uncomment this for better performance.
+# If it doesn't work, server mode is not available in your JVM.
+# This may not be required if your machine is already "server-class".
+# See http://java.sun.com/j2se/1.5.0/docs/guide/vm/server-class.html
+#wrapper.java.additional.6=-server
+
+# Initial Java Heap Size (in MB)
+#wrapper.java.initmemory=4
+
+# Maximum Java Heap Size (in MB)
+# The JVM's default is 64MB, and I2P can work fine in that, but to handle
+# lots of I2PSnark activity in the same JVM, increasing the default max heap
+# size should help. Feel free to reduce this if not using I2PSnark in the jvm
+# High-bandwidth routers may need to increase to 256 or more.
+#
+# WARNING - for any changes to take effect, you must completely
+# stop the router and the wrapper. Clicking 'Restart' on your
+# router console will NOT reread this file! You must
+# click "Shutdown", wait 11 minutes, then start i2p.
+#
+wrapper.java.maxmemory=64
+
+# Application parameters. Add parameters as needed starting from 1
+wrapper.app.parameter.1=net.i2p.router.Router
+
+#********************************************************************
+# Wrapper Logging Properties
+#********************************************************************
+# Format of output for the console. (See docs for formats)
+wrapper.console.format=PM
+
+# Log Level for console output. (See docs for log levels)
+wrapper.console.loglevel=INFO
+
+# Log file to use for wrapper output logging.
+# You may wish to change this on linux so the log is
+# preserved across OS restarts.
+# If you do change it, add the following line above to
+# tell the router where to find the wrapper log
+# (change X to the next available number)
+wrapper.logfile=logs\wrapper.log
+
+# Format of output for the log file.
+# The format consists of the tokens 'L' for log level, 'P' for prefix, 'D' for thread,
+# 'T' for time, 'Z' for millisecond time, and 'M' for message
+# Unfortunately the log timezone cannot be changed, see
+# http://www.nabble.com/Log-message-timezone-td23651317.html
+wrapper.logfile.format=TM
+
+# Log Level for log file output. (See docs for log levels)
+wrapper.logfile.loglevel=NOTICE
+
+# Maximum size that the log file will be allowed to grow to before
+# the log is rolled. Size is specified in bytes. The default value
+# of 0, disables log rolling. May abbreviate with the 'k' (kb) or
+# 'm' (mb) suffix. For example: 10m = 10 megabytes.
+wrapper.logfile.maxsize=1m
+
+# Maximum number of rolled log files which will be allowed before old
+# files are deleted. The default value of 0 implies no limit.
+wrapper.logfile.maxfiles=2
+
+# Log Level for sys/event log output. (See docs for log levels)
+wrapper.syslog.loglevel=NONE
+
+# choose what to do if the JVM kills itself based on the exit code
+wrapper.on_exit.default=SHUTDOWN
+wrapper.on_exit.0=SHUTDOWN
+wrapper.on_exit.1=SHUTDOWN
+# OOM
+wrapper.on_exit.10=RESTART
+# graceful shutdown
+wrapper.on_exit.2=SHUTDOWN
+# hard shutdown
+wrapper.on_exit.3=SHUTDOWN
+# hard restart
+wrapper.on_exit.4=RESTART
+# hard restart
+wrapper.on_exit.5=RESTART
+
+# the router may take a few seconds to save state, etc
+wrapper.jvm_exit.timeout=30
+
+# give the OS 60s to clear all the old sockets / etc before restarting
+# Let's change the default from 60 to 15 seconds and see if anyone moans..
+wrapper.restart.delay=5
+
+wrapper.ping.interval=300
+# The ping timeout must be at least 5 seconds longer than the value of wrapper.ping.interval.
+# Extend this if you are getting 'JVM appears hung' shutdowns.
+wrapper.ping.timeout=320
+
+# use the wrapper's internal timer thread. otherwise this would
+# force a restart of the router during daylight savings time as well
+# as any time that the OS clock changes
+wrapper.use_system_time=false
+
+# pid file for the JVM
+# If you plan to have multiple wrappers running on the same machine,
+# you should copy this file, change the location or file name,
+# and edit the i2prouter script to change the WRAPPER_CONF setting
+# to point to the new wrapper.config location.
+wrapper.java.pidfile=logs\routerjvm.pid
+# This means i2prouter looks for './i2p.pid'.
+# See comments above for wrapper.java.pidfile
+# PORTABLE installation:
+# Use the following instead.
+wrapper.pidfile=logs/i2p.pid
+
+#********************************************************************
+# Wrapper NT Service Properties
+#********************************************************************
+# Not useful for portable version - BOOM
\ No newline at end of file
diff --git a/installer/resources/portable/win32/ClickMe2Unpack.bat b/installer/resources/portable/win32/ClickMe2Unpack.bat
new file mode 100644
index 000000000..a23574666
--- /dev/null
+++ b/installer/resources/portable/win32/ClickMe2Unpack.bat
@@ -0,0 +1,8 @@
+@echo off
+path %path%;c:\program Files\Java\jre6\bin;
+echo ========== Unpacking .jar libs, plz wait ... ============
+for %%i in (lib\*.pack) do unpack200 -r %%i lib\%%~ni.jar
+ren batch1.na StartI2P.bat
+ren batch2.na EepGet.bat
+ren i2psvc.ex_ i2psvc.exe
+del ClickMe2UnPack.bat
diff --git a/installer/resources/portable/win32/batch1.na b/installer/resources/portable/win32/batch1.na
new file mode 100644
index 000000000..1bd7f4e4c
--- /dev/null
+++ b/installer/resources/portable/win32/batch1.na
@@ -0,0 +1,6 @@
+@echo off
+if not exist logs md logs
+if not exist tmp md tmp
+i2psvc -c wrapper.config
+if exist logs rd logs /s /q
+if exist tmp rd tmp /s /q
\ No newline at end of file
diff --git a/installer/resources/portable/win32/batch2.na b/installer/resources/portable/win32/batch2.na
new file mode 100644
index 000000000..be85e76e3
--- /dev/null
+++ b/installer/resources/portable/win32/batch2.na
@@ -0,0 +1,16 @@
+@echo off
+IF NOT "%1" == "%2" GOTO EEPGET
+ECHO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ECHO ~ EepGet provide resumable download from EepSite n' auto retry ~
+ECHO ~ Syntax: Eepget URL -o PathOfDownloadedFile ~
+ECHO ~ e.g.: Eepget http://www.i2p2.i2p/index.html -o e:\index.html ~
+ECHO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ECHO Please input URL and target Path
+SET /P eepURL=URL to download:
+SET /P eepLOC=Target Path for the downlaoded file:
+java -cp lib/i2p.jar net.i2p.util.EepGet %eepURL% -o %eepLOC%
+GOTO END
+:EEPGET
+java -cp lib/i2p.jar net.i2p.util.EepGet %1 %2 %3 %4 %5
+:END
+pause
\ No newline at end of file