diff --git a/UserManual.md b/UserManual.md
index 5fa6b3f4b47e0895d8c9a87e1416b79ae278c537..aac3f3f92ec04be48af755ba3749c27540b5e69f 100644
--- a/UserManual.md
+++ b/UserManual.md
@@ -294,11 +294,49 @@ must be for a file name only, not including directory name. Example:
   so updating the config file might be necessary after executable update.
 
 # Embedding
-Embedding Mongoose is easy. Somewhere in the application code, `mg_start()`
-function must be called. That starts the web server in a separate thread.
-When it is not needed anymore, `mg_stop()` must be called.  Application code
-can pass configuration options to `mg_start()`, and also specify callback
-functions that Mongoose should call at certain events.
+Embedding Mongoose is easy. Copy
+[mongoose.c](https://github.com/valenok/mongoose/blob/master/mongoose.c) and
+[mongoose.h](https://github.com/valenok/mongoose/blob/master/mongoose.h)
+to your application's source tree and include them in the build. For
+example, your application's code lives in C++ file `my_app.cpp`, then on UNIX
+this command embeds Mongoose:
+
+    $ ls
+    my_app.cpp mongoose.c mongoose.h
+    $ g++ my_app.cc mongoose.c -o my_app
+
+Somewhere in the application code, call `mg_start()` to start the server.
+Pass configuration options and event handlers to `mg_start()`.
+Mongoose then calls handlers when certain events happen.
+For example, when new request arrives, Mongoose calls `begin_request`
+handler function to let user handle the request. In the handler, user code
+can get all information about the request -- parsed headers, etcetera.
+
+Mongoose API is logically divided in three categories: server setup/shutdown
+functions, functions to be used by user-written event handlers, and
+convenience utility functions.
+
+### Starting and stopping embedded web server
+To start the embedded web server, call `mg_start()`. To stop it, call
+`mg_stop()`.
+
+    // This structure needs to be passed to mg_start(), to let mongoose know
+    // which callbacks to invoke. For detailed description, see
+    // https://github.com/valenok/mongoose/blob/master/UserManual.md
+    struct mg_callbacks {
+      int  (*begin_request)(struct mg_connection *);
+      void (*end_request)(const struct mg_connection *, int reply_status_code);
+      int  (*log_message)(const struct mg_connection *, const char *message);
+      int  (*init_ssl)(void *ssl_context);
+      int (*websocket_connect)(const struct mg_connection *);
+      void (*websocket_ready)(struct mg_connection *);
+      int  (*websocket_data)(struct mg_connection *);
+      const char * (*open_file)(const struct mg_connection *,
+                                 const char *path, size_t *data_len);
+      void (*init_lua)(struct mg_connection *, void *lua_context);
+      void (*upload)(struct mg_connection *, const char *file_name);
+    };
+
 [hello.c](https://github.com/valenok/mongoose/blob/master/examples/hello.c)
 provides a minimalistic example.