Index: request.c
===================================================================
--- request.c	(revision 534583)
+++ request.c	(working copy)
@@ -266,6 +266,16 @@
     {NULL, NULL}
 };
 
+
+static const struct luaL_Reg connection_methods[] = {
+    {NULL, NULL}
+};
+
+
+static const struct luaL_Reg server_methods[] = {
+    {NULL, NULL}
+};
+
 void apw_push_apr_table(lua_State* L, const char *name, apr_table_t *t) {
     lua_boxpointer(L, t);    
     luaL_getmetatable(L, "Apr.Table");
@@ -282,9 +292,53 @@
     luaL_register(L, NULL, request_methods); // [metatable]
 
     lua_pop(L, 2);
+
+    luaL_newmetatable(L, "Apache2.Connection"); // [metatable]
+    lua_pushvalue(L, -1); 
+
+    lua_setfield(L, -2, "__index"); 
+    luaL_register(L, NULL, connection_methods); // [metatable]
+
+    lua_pop(L, 2);
+
+    luaL_newmetatable(L, "Apache2.Server"); // [metatable]
+    lua_pushvalue(L, -1); 
+
+    lua_setfield(L, -2, "__index"); 
+    luaL_register(L, NULL, server_methods); // [metatable]
+
+    lua_pop(L, 2);
+
 }
 
-void apw_request_init(lua_State* L, request_rec* r) {  
+void apw_connection_push(lua_State* L, conn_rec* c) {  
+    lua_boxpointer(L, c);
+    luaL_getmetatable(L, "Apache2.Connection");
+    lua_setmetatable(L, -2);
+    luaL_getmetatable(L, "Apache2.Connection");
+
+    apw_push_apr_table(L, "notes", c->notes);
+
+    lua_pushstring(L, c->remote_ip);
+    lua_setfield(L, -2, "remote_ip");    
+
+    lua_pop(L, 1);
+}
+
+
+void apw_server_push(lua_State* L, server_rec* s) {  
+    lua_boxpointer(L, s);
+    luaL_getmetatable(L, "Apache2.Server");
+    lua_setmetatable(L, -2);
+    luaL_getmetatable(L, "Apache2.Server");
+
+    lua_pushstring(L, s->server_hostname);
+    lua_setfield(L, -2, "server_hostname");    
+
+    lua_pop(L, 1);
+}
+
+void apw_request_push(lua_State* L, request_rec* r) {  
     lua_boxpointer(L, r);
     luaL_getmetatable(L, "Apache2.Request");
     lua_setmetatable(L, -2);
@@ -343,7 +397,14 @@
 
     apw_push_apr_table(L, "headers_out", r->headers_out);
     apw_push_apr_table(L, "headers_in", r->headers_in);
+    apw_push_apr_table(L, "notes", r->notes);
 
+    apw_connection_push(L, r->connection);
+    lua_setfield(L, -2, "connection");
+
+    apw_server_push(L, r->server);
+    lua_setfield(L, -2, "server");
+
     lua_pushlightuserdata(L, r);
     lua_pushcclosure(L, &req_newindex, 1);
     lua_setfield(L, -2, "__newindex");
Index: mod_wombat.c
===================================================================
--- mod_wombat.c	(revision 534583)
+++ mod_wombat.c	(working copy)
@@ -471,7 +471,7 @@
 }
 
 static int wombat_request_hook(lua_State *L, request_rec *r) {
-    apw_request_init(L, r);
+    apw_request_push(L, r);
     return OK;
 }
 
