diff --git a/BeDC.h b/BeDC.h
new file mode 100644
index 0000000..6f8678f
--- /dev/null
+++ b/BeDC.h
@@ -0,0 +1,195 @@
+//////////////////////////////////////////////////////////////////////////
+// BeDC.h                                                               //
+// The header file to use with BeDC                                     //
+//                                                                      //
+// Written By: Magnus Landahl                                           //
+// E-Mail: magnus.landahl@swipnet.se                                    //
+//                                                                      //
+// Copyright © Magnus Landahl - Stockholm 2000                          //
+//////////////////////////////////////////////////////////////////////////					
+
+#ifndef	_BE_DC_H_
+#define _BE_DC_H_
+
+//Messages types
+#define DC_MESSAGE		 						 0
+#define	DC_SUCCESS		 			DC_MESSAGE + 1
+#define DC_ERROR		 			DC_MESSAGE + 2
+#define DC_SEPARATOR				DC_MESSAGE + 3
+#define DC_CLEAR					DC_MESSAGE + 4
+//---------------
+
+//Color defines
+#define DEF_COLOR								 0
+#define DC_WHITE					 DEF_COLOR + 1
+#define DC_BLACK					 DEF_COLOR + 2
+#define DC_BLUE						 DEF_COLOR + 3
+#define DC_RED						 DEF_COLOR + 4
+#define DC_YELLOW					 DEF_COLOR + 5
+#define DC_GREEN					 DEF_COLOR + 6
+//---------------
+
+#define BEDC_MESSAGE						'bedc'
+
+#define BEDC_MAIN_TYPE						 	 0
+#define BEDC_BMESSAGE			BEDC_MAIN_TYPE + 1
+#define BEDC_PLAIN_MESSAGE		BEDC_MAIN_TYPE + 2
+#define BEDC_VER							 "1.0" 
+
+#include <TypeConstants.h>
+#include <SupportDefs.h>
+#include <Messenger.h>
+#include <Message.h>
+#include <String.h>
+#include <string.h>
+#include <stdio.h>
+#include <Point.h>
+#include <Rect.h>
+
+class BeDC
+{
+	////////////////////////////////////////////////
+	//               Public Procedures
+
+	public:
+		BeDC(const char *c_name = "Application", int8 color = DEF_COLOR){
+			name = strdup(c_name);
+			s_color = color;
+		}
+		
+		~BeDC(){
+			delete name;
+		}
+		
+		//Send a message
+		void SendMessage(char *text, int8 type = DC_MESSAGE){
+			BMessage message(BEDC_MESSAGE);
+			message.AddString(	"bedc_name", 	name);
+			message.AddInt8(	"bedc_type", 	type);
+			message.AddString(	"bedc_text", 	text);
+			message.AddInt8(	"bedc_color",	s_color);
+			message.AddString(	"bedc_ver",		BEDC_VER);
+			message.AddInt8(	"bedc_main_type", BEDC_PLAIN_MESSAGE);
+			SendMessageToApp(&message);
+		}
+		//---------------
+		
+		//Send a format string - parameters
+		void SendFormat(const char *text, ...){ 
+			char buffer[1024]; 
+			va_list args; 
+   
+			va_start(args, text); 
+			vsprintf(buffer, text, args); 
+			va_end(args); 
+			SendMessage(buffer, DC_MESSAGE);       
+		} 
+		
+		void SendFormatT(const char *text, int8 type, ...){ 
+			char buffer[1024]; 
+			va_list args; 
+ 
+			va_start(args, type); 
+			vsprintf(buffer, text, args); 
+			va_end(args); 
+			SendMessage(buffer, type); 
+		} 
+		//---------------
+		
+		//Dump a BMessage
+		void DumpBMessage(BMessage *Message, const char *desc = "", int8 type = DC_MESSAGE){
+			Message->AddInt32(	"bedc_what", Message->what);
+			Message->AddInt8(	"bedc_main_type", BEDC_BMESSAGE);
+			
+			Message->AddInt8(	"bedc_type", type);
+			Message->AddString(	"bedc_name", name);
+			Message->AddString(	"bedc_desc", desc);
+			Message->AddInt8(	"bedc_color",s_color);
+			Message->AddString(	"bedc_ver",	 BEDC_VER);
+			
+			Message->what = BEDC_MESSAGE;
+			SendMessageToApp(Message);	
+		}
+		//---------------				
+		
+		//Send a separator (Add a separator)
+		void AddSeparator(){
+			SendMessage("Separator", DC_SEPARATOR);
+		}
+		//---------------
+		
+		//Send a clear message (Clear the window that is online)
+		void Clear(){
+			SendMessage("Clear", DC_CLEAR);
+		}
+		//---------------
+		
+		//Send an Int32
+		void SendInt(	int32 integer, const char *desc = NULL, int8 type = DC_MESSAGE){
+			str.SetTo("");
+			if (desc != NULL) 	str <<  desc; 	else
+								str << "Integer: ";
+			str << integer;
+			SendMessage((char *)str.String(),type); 
+		}
+		//---------------
+		
+		//Send an Int64
+		void SendInt(	int64 integer, const char *desc = NULL, int8 type = DC_MESSAGE){
+			str.SetTo("");
+			if (desc != NULL) 	str <<  desc; 	else
+								str << "Integer: ";
+			str << integer;
+			SendMessage((char *)str.String(),type); 
+		}
+		//---------------
+		
+		//Send a BPoint
+		void SendPoint(	BPoint point, const char *desc = NULL, int8 type = DC_MESSAGE){
+			str.SetTo("");
+			if (desc != NULL) 	str <<  desc; 	else
+								str << "Point: ";
+			str << "X = " << point.x  << " Y = " << point.y;
+			SendMessage((char *)str.String(),type); 
+		}
+		//---------------
+		
+		//Send a BRect
+		void SendRect(	BRect rect, const char *desc = NULL, int8 type = DC_MESSAGE){
+			str.SetTo("");
+			if (desc != NULL) 	str <<  desc; 	else
+								str << "Rectangle: ";
+			str << "Left = " << rect.left  << " Top = " << rect.top
+				<< " Right = " << rect.right << " Bottom = " << rect.bottom;
+			SendMessage((char *)str.String(),type); 	
+		}
+		//---------------
+		
+		////////////////////////////////////////////
+		//               Private Data
+	private:
+		char *name;
+		int8 s_color;
+		BString str;
+		
+		void SendMessageToApp(BMessage *Msg){
+			BMessenger messenger("application/x-vnd.ml-BeDCApp");
+			if (messenger.IsValid()) messenger.SendMessage(Msg);
+		}	
+};
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Readme BeDC b/Readme BeDC
new file mode 100644
index 0000000..851d4b2
--- /dev/null
+++ b/Readme BeDC
@@ -0,0 +1,90 @@
+BeDC
+
+Written By: Magnus Landahl                                           
+Copyright © Magnus Landahl - Stockholm 2000 
+This application is FreeWare!
+
+Version 1.0
+
+
+New features in Ver 1.0
+Cut/Copy/Delete has been added. 
+Full implementation of drag and drop.
+You´re now able to dump BMessages and send format strings like printf.
+A 'windows always on top' property has been added.
+And a lot of other improvments...
+
+Installation:
+Drop the BeDC.h file in the link or copy the file to /boot/deveop/headers/
+
+How to use:
+All you have to do is to create an BeDC object and use that one to send messages. It´s that simple.
+An quick example:
+
+	BeDC dc;
+	dc.SendMessage("It just works!!!");
+
+First some defines:
+Colors:
+	White	 			= DC_WHITE	
+	Black 			= DC_BLACK			
+	Blue 				= DC_BLUE			
+	Red 				= DC_RED					
+	Yellow 			= DC_YELLOW				
+	Green 			= DC_GREEN	
+
+Message types:
+	Normal message 		= DC_MESSAGE	
+	Success message	= DC_SUCCESS	
+	Error message 		= DC_ERROR
+
+The constructor:
+
+BeDC(const char *name, int8 color);
+'name' is the display name, it could be what ever you want. Default is: "Application"
+'color' is the color of the head. If you don´t specify a color BeDC will use the defaut head color.
+
+Member functions:
+
+SendMessage(char *text, int8 type);
+Sends a normal message.
+
+SendSeparator();
+Adds a separator.
+
+SendInt(Int32 / Int64 integer, const char *description, int8 type);
+Sends an int32 or int64. If you don´t specify a description BeDC will print "Integer"
+
+SendPoint(BPoint point, const char *description, int8 type);
+Sends a BPoint. If you don´t specify a description BeDC will print "Point"
+
+SendRect(BRect rect, const char *description, int8 type);
+Sends a BRect. If you don´t specify a description BeDC will print "Rectangle"	
+
+SendFormat(const char *text, ...);
+SendFormatT(const char *text, int8 type, ...);
+Sends a format string like printf. SendFormatT is used when you want to specify the message type.
+
+DumpBMessage(BMessage *Message, const char *desc = "", int8 type = DC_MESSAGE);
+Dumps a BMessage...
+
+
+Contact:
+E-Mail : magnus.landahl@swipnet.se
+
+
+BeDC History:
+
+Ver 0.9b
+	BeDC now saves the current state on exit, including window contents.
+	You´re now able to customize the colors BeDC use including background color.
+	Save to file has been added.
+	Some minor bugs has been fixed.
+
+Ver 0.8.1b
+	A couple of small bugs fixed.
+
+Ver 0.8b
+	First public release.
+
+
diff --git a/Sample/build.sh b/Sample/build.sh
new file mode 100644
index 0000000..cd94b67
--- /dev/null
+++ b/Sample/build.sh
@@ -0,0 +1,2 @@
+#!sh
+gcc main.cpp -I .. -lbe
diff --git a/Sample/main.cpp b/Sample/main.cpp
new file mode 100644
index 0000000..86d81b7
--- /dev/null
+++ b/Sample/main.cpp
@@ -0,0 +1,44 @@
+#include "BeDC.h"
+
+int main(){
+	//Create the BeDC Object
+	BeDC dc;
+	
+	//Normal Message
+	dc.SendMessage("Welcome to BeDC!!!");
+
+	//Send a BPoint
+	BPoint point(40,120);
+	dc.SendPoint(point);   
+	
+	//Send a BRect    
+	BRect rect(80,60,130,140);
+	dc.SendRect(rect);    
+	  
+	//Create another BeDC Object - With green head
+	BeDC dc_green("Multiple Colors", DC_GREEN);
+	
+	//Send an int32 - with a specified description
+	dc_green.SendInt((int32)120, "item count");
+	
+	//Add a separator    
+	dc_green.AddSeparator();
+	
+	//Send a error text
+	dc_green.SendMessage("An error has occured!", DC_ERROR);
+	
+	//Send a success
+	dc_green.SendMessage("Finished!!!", DC_SUCCESS);
+	   
+	//Dump a BMessage
+	BMessage *Message = new BMessage((int32)1000);
+	Message->AddString("Text", "Dump Message Test...");
+	Message->AddInt32("An Int", 2000);
+	Message->AddPoint("A BPoint", BPoint(150,360));
+	dc.DumpBMessage(Message, "A Description");
+
+	return 0;
+}
+
+
+
