diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..378844d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+.*.sw?
+*/a.out
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..504154b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,85 @@
+Dev Console
+===========
+
+Written by Adrien Destugues
+Based on BeDC by Magnus Landahl
+
+This program is distributed under the terms of the MIT license.
+
+What is it
+==========
+
+This application receives messages from other application and display them in a nicely formatted
+view. This is useful in several cases:
+
+- If your application does not normally run from a Terminal (for example, it is a system service),
+making it unpractical to access its standard output
+- If your application uses the terminal for other things than debug logs
+- If you have multiple applications that talk to each other and all of them need to emit logs
+
+There is room for improvements, such as providing easy copypaste of data, search and filtering
+functions, etc.
+
+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...
+
diff --git a/Readme BeDC b/Readme BeDC
deleted file mode 100644
index 851d4b2..0000000
--- a/Readme BeDC
+++ /dev/null
@@ -1,90 +0,0 @@
-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.
-
-
