diff --git a/src/Makefile.am b/src/Makefile.am
index 924040e615b6fd9ea984b31310a2190990d40075..a518077e25ae08c2d527ae8c20fd6d6f0a45073b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -3,11 +3,11 @@ bin_PROGRAMS = openocd
 if ECOSBOARD
 MAINFILE = ecosboard.c
 else
-MAINFILE = openocd.c
+MAINFILE = main.c
 endif
 
 
-openocd_SOURCES = $(MAINFILE) jim.c
+openocd_SOURCES = $(MAINFILE) openocd.c jim.c
 
 # set the include path found by configure
 INCLUDES = -I$(top_srcdir)/src/helper \
diff --git a/src/helper/command.c b/src/helper/command.c
index 386572ed94d7b5f989cf8d7405b02d5a717fca79..55f950bf49f9df5fb02319b901240507ee632ab1 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -305,6 +305,14 @@ int parse_line(char *line, char *words[], int max_words)
 	return nwords;
 }
 
+void command_output_text( command_context_t *context, const char *data )
+{
+	if( context && context->output_handler && data  ){
+		context->output_handler( context, data );
+	}
+}
+
+
 void command_print_n(command_context_t *context, char *format, ...)
 {
 	char *string;
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..753adcc7089034f92c97ea89924a7c45fb12f906
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,40 @@
+/***************************************************************************
+ *   Copyright (C) 2005 by Dominic Rath                                    *
+ *   Dominic.Rath@gmx.de                                                   *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+
+
+/* 
+	This is the main entry for developer PC hosted OpenOCD.
+	
+	OpenOCD can also be used as a library that is linked with
+	another application(not mainstream yet, but possible), e.g.
+	w/as an embedded application.
+	
+	Those applications will have their own main() implementation
+	and use bits and pieces from openocd.c.
+	
+*/
+
+
+extern int openocd_main(int argc, char *argv[]);
+int main(int argc, char *argv[])
+{
+	return openocd_main(argc, argv);
+}
+
diff --git a/src/openocd.c b/src/openocd.c
index 5439ece08c91f83fdf682566ea260355f8e97add..197c2e32f1359523255d1b1319b07ac850b7b9f5 100644
--- a/src/openocd.c
+++ b/src/openocd.c
@@ -625,7 +625,12 @@ void initJim(void)
 	interp->cb_fgets      = openocd_jim_fgets;
 }
 
-int main(int argc, char *argv[])
+/*
+normally this is the main() function entry, but if OpenOCD is linked
+into application, then this fn will not be invoked, but rather that
+application will have it's own implementation of main().
+*/
+int openocd_main(int argc, char *argv[])
 {
 	initJim();
 	
diff --git a/src/server/server.h b/src/server/server.h
index 811e26ecdd2b80d28c47f3d54140bedbd0ad936b..2543f22f8d013eab1c465d497889982e560b2ec1 100644
--- a/src/server/server.h
+++ b/src/server/server.h
@@ -30,6 +30,7 @@ enum connection_type
 {
 	CONNECTION_GDB,
 	CONNECTION_TELNET,
+	CONNECTION_TCL,
 };
 
 typedef struct connection_s
diff --git a/src/server/tcl_server.c b/src/server/tcl_server.c
index b0073091e2dfb6a82ab61da65b0cdb3120d90dea..cfdb8d07e25a47a6567da211355e1145075aecf5 100644
--- a/src/server/tcl_server.c
+++ b/src/server/tcl_server.c
@@ -21,6 +21,7 @@
 #include "config.h"
 #endif
 
+#include <stdarg.h>
 #include "tcl_server.h"
 
 #include "../jim.h"