diff --git a/doc/apps.txt b/doc/apps.txt
new file mode 100755
index 0000000000000000000000000000000000000000..c9696a1a58c4f501ab2a8f0e159cc45837c40152
--- /dev/null
+++ b/doc/apps.txt
@@ -0,0 +1,10 @@
+Asterisk applications register themselves with ast_application_register.
+They should have a short, unique name, and an exec function which takes
+as its arguments a channel and some data that might be useful for callback
+stuff.  Remember to keep track of how many and which channels are using
+your application so that should the module need to be unloaded
+(particularly force unloaded), you will be able to ast_softhangup all the
+channels.  An application should *never* call ast_hangup on the channel
+that it is running on (although it could conceivably hang up other
+channels that it allocates).  See app_playback.c as an example of a simple
+application.
diff --git a/doc/modules.txt b/doc/modules.txt
new file mode 100755
index 0000000000000000000000000000000000000000..9f8ae20b52d324de8d1df33ec5f94ddb3bb18d41
--- /dev/null
+++ b/doc/modules.txt
@@ -0,0 +1,26 @@
+All modules must have at least the following functions:
+
+int load_module():
+
+	Do what you need to do when you get started.  This function
+returns 0 on sucess and non-zero on failure (it is not considered loaded
+if it failes.
+
+int unload_module():
+	
+	The module will soon be unloaded.  If any channels are using your
+features, you should give them a softhangup in an effort to keep the
+program from crashing.  Generally, unload_module is only called when the
+usecount is 0 or less, but the user can force unloading at their
+discression, and thus a module should do its best to comply (although in
+some cases there may be no way to avoid a crash).  This function should
+return 0 on success and non-zero on failure (i.e. it cannot yet be
+unloaded).
+
+char *description():
+
+	Return a description of the module's functionality.
+
+int usecnt():
+	
+	Return the number of channels, etc that are using you.