diff --git a/src/rustdoc/attr_pass.rs b/src/rustdoc/attr_pass.rs
index 9ee4f8ec78c..9b13c1e7fcd 100644
--- a/src/rustdoc/attr_pass.rs
+++ b/src/rustdoc/attr_pass.rs
@@ -344,7 +344,7 @@ fn fold_res_should_extract_docs() {
     let srv = astsrv::mk_srv_from_str(source);
     let doc = extract::from_srv(srv, "");
     let fold = fold::default_seq_fold(srv);
-    let doc = fold_res(fold, doc.topmod.resources[0]);
+    let doc = fold_res(fold, doc.topmod.resources()[0]);
     assert doc.brief == some("a");
     assert doc.desc == some("b");
 }
@@ -356,7 +356,7 @@ fn fold_res_should_extract_arg_docs() {
     let srv = astsrv::mk_srv_from_str(source);
     let doc = extract::from_srv(srv, "");
     let fold = fold::default_seq_fold(srv);
-    let doc = fold_res(fold, doc.topmod.resources[0]);
+    let doc = fold_res(fold, doc.topmod.resources()[0]);
     assert doc.args[0].name == "a";
     assert doc.args[0].desc == some("b");
 }
\ No newline at end of file
diff --git a/src/rustdoc/desc_pass.rs b/src/rustdoc/desc_pass.rs
index 7168a0b4d87..23c7eb92bf1 100644
--- a/src/rustdoc/desc_pass.rs
+++ b/src/rustdoc/desc_pass.rs
@@ -136,7 +136,7 @@ fn should_execute_op_on_resource_brief() {
     let doc = extract::from_srv(srv, "");
     let doc = attr_pass::mk_pass()(srv, doc);
     let doc = mk_pass(str::trim)(srv, doc);
-    assert doc.topmod.resources[0].brief == some("a");
+    assert doc.topmod.resources()[0].brief == some("a");
 }
 
 #[test]
@@ -146,7 +146,7 @@ fn should_execute_op_on_resource_desc() {
     let doc = extract::from_srv(srv, "");
     let doc = attr_pass::mk_pass()(srv, doc);
     let doc = mk_pass(str::trim)(srv, doc);
-    assert doc.topmod.resources[0].desc == some("a");
+    assert doc.topmod.resources()[0].desc == some("a");
 }
 
 #[test]
@@ -156,5 +156,5 @@ fn should_execute_op_on_resource_args() {
     let doc = extract::from_srv(srv, "");
     let doc = attr_pass::mk_pass()(srv, doc);
     let doc = mk_pass(str::trim)(srv, doc);
-    assert doc.topmod.resources[0].args[0].desc == some("a");
+    assert doc.topmod.resources()[0].args[0].desc == some("a");
 }
\ No newline at end of file
diff --git a/src/rustdoc/desc_to_brief_pass.rs b/src/rustdoc/desc_to_brief_pass.rs
index 3c2cc46dad1..82c1e8b27ce 100644
--- a/src/rustdoc/desc_to_brief_pass.rs
+++ b/src/rustdoc/desc_to_brief_pass.rs
@@ -134,8 +134,8 @@ fn should_promote_resource_desc() {
     let doc = extract::from_srv(srv, "");
     let doc = attr_pass::mk_pass()(srv, doc);
     let doc = run(srv, doc);
-    assert doc.topmod.resources[0].brief == some("desc");
-    assert doc.topmod.resources[0].desc == none;
+    assert doc.topmod.resources()[0].brief == some("desc");
+    assert doc.topmod.resources()[0].desc == none;
 }
 
 fn modify(
diff --git a/src/rustdoc/doc.rs b/src/rustdoc/doc.rs
index 2620771348a..9e3698116f2 100644
--- a/src/rustdoc/doc.rs
+++ b/src/rustdoc/doc.rs
@@ -24,8 +24,7 @@ type moddoc = ~{
     mods: modlist,
     fns: fnlist,
     consts: constlist,
-    enums: enumlist,
-    resources: reslist
+    enums: enumlist
 };
 
 type constdoc = ~{
@@ -86,4 +85,14 @@ enum modlist = [moddoc];
 enum constlist = [constdoc];
 enum fnlist = [fndoc];
 enum enumlist = [enumdoc];
-enum reslist = [resdoc];
+
+impl util for moddoc {
+    fn resources() -> [resdoc] {
+        vec::filter_map(self.items) {|itemtag|
+            alt itemtag {
+              restag(resdoc) { some(resdoc) }
+              _ { none }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/rustdoc/extract.rs b/src/rustdoc/extract.rs
index 947faa42e6a..82e862da6c3 100644
--- a/src/rustdoc/extract.rs
+++ b/src/rustdoc/extract.rs
@@ -43,7 +43,18 @@ fn moddoc_from_mod(
         path: [],
         brief: none,
         desc: none,
-        items: [],
+        items: vec::filter_map(module.items) {|item|
+            alt item.node {
+              ast::item_res(decl, _, _, _, _) {
+                some(doc::restag(
+                    resdoc_from_resource(decl, item.ident, item.id)
+                ))
+              }
+              _ {
+                none
+              }
+            }
+        },
         mods: doc::modlist(
             vec::filter_map(module.items) {|item|
                 alt item.node {
@@ -88,17 +99,6 @@ fn moddoc_from_mod(
                     none
                   }
                 }
-            }),
-        resources: doc::reslist(
-            vec::filter_map(module.items) {|item|
-                alt item.node {
-                  ast::item_res(decl, _, _, _, _) {
-                    some(resdoc_from_resource(decl, item.ident, item.id))
-                  }
-                  _ {
-                    none
-                  }
-                }
             })
     }
 }
@@ -232,8 +232,8 @@ fn should_extract_resources() {
     let source = "resource r(b: bool) { }";
     let ast = parse::from_str(source);
     let doc = extract(ast, "");
-    assert doc.topmod.resources[0].id != 0;
-    assert doc.topmod.resources[0].name == "r";
+    assert doc.topmod.resources()[0].id != 0;
+    assert doc.topmod.resources()[0].name == "r";
 }
 
 #[test]
@@ -241,7 +241,7 @@ fn should_extract_resource_args() {
     let source = "resource r(b: bool) { }";
     let ast = parse::from_str(source);
     let doc = extract(ast, "");
-    assert doc.topmod.resources[0].args[0].name == "b";
+    assert doc.topmod.resources()[0].args[0].name == "b";
 }
 
 #[cfg(test)]
diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs
index 6f20870691e..1d2e992b800 100644
--- a/src/rustdoc/fold.rs
+++ b/src/rustdoc/fold.rs
@@ -26,8 +26,6 @@ type fold_constlist<T> = fn~(
     fold: fold<T>, list: doc::constlist) -> doc::constlist;
 type fold_enumlist<T> = fn~(
     fold: fold<T>, list: doc::enumlist) -> doc::enumlist;
-type fold_reslist<T> = fn~(
-    fold: fold<T>, list: doc::reslist) -> doc::reslist;
 
 type t<T> = {
     ctxt: T,
@@ -41,7 +39,6 @@ type t<T> = {
     fold_fnlist: fold_fnlist<T>,
     fold_constlist: fold_constlist<T>,
     fold_enumlist: fold_enumlist<T>,
-    fold_reslist: fold_reslist<T>
 };
 
 
@@ -58,8 +55,7 @@ fn mk_fold<T:copy>(
     fold_modlist: fold_modlist<T>,
     fold_fnlist: fold_fnlist<T>,
     fold_constlist: fold_constlist<T>,
-    fold_enumlist: fold_enumlist<T>,
-    fold_reslist: fold_reslist<T>
+    fold_enumlist: fold_enumlist<T>
 ) -> fold<T> {
     fold({
         ctxt: ctxt,
@@ -72,8 +68,7 @@ fn mk_fold<T:copy>(
         fold_modlist: fold_modlist,
         fold_fnlist: fold_fnlist,
         fold_constlist: fold_constlist,
-        fold_enumlist: fold_enumlist,
-        fold_reslist: fold_reslist
+        fold_enumlist: fold_enumlist
     })
 }
 
@@ -89,8 +84,7 @@ fn default_seq_fold<T:copy>(ctxt: T) -> fold<T> {
         {|f, d| default_seq_fold_modlist(f, d)},
         {|f, d| default_seq_fold_fnlist(f, d)},
         {|f, d| default_seq_fold_constlist(f, d)},
-        {|f, d| default_seq_fold_enumlist(f, d)},
-        {|f, d| default_seq_fold_reslist(f, d)}
+        {|f, d| default_seq_fold_enumlist(f, d)}
     )
 }
 
@@ -108,11 +102,17 @@ fn default_seq_fold_mod<T>(
     doc: doc::moddoc
 ) -> doc::moddoc {
     ~{
+        items: vec::map(doc.items) {|itemtag|
+            alt itemtag {
+              doc::restag(resdoc) {
+                doc::restag(fold.fold_res(fold, resdoc))
+              }
+            }
+        },
         mods: fold.fold_modlist(fold, doc.mods),
         fns: fold.fold_fnlist(fold, doc.fns),
         consts: fold.fold_constlist(fold, doc.consts),
-        enums: fold.fold_enumlist(fold, doc.enums),
-        resources: fold.fold_reslist(fold, doc.resources)
+        enums: fold.fold_enumlist(fold, doc.enums)
         with *doc
     }
 }
@@ -181,15 +181,6 @@ fn default_seq_fold_enumlist<T>(
     })
 }
 
-fn default_seq_fold_reslist<T>(
-    fold: fold<T>,
-    list: doc::reslist
-) -> doc::reslist {
-    doc::reslist(vec::map(*list) {|doc|
-        fold.fold_res(fold, doc)
-    })
-}
-
 #[test]
 fn default_fold_should_produce_same_doc() {
     let source = "mod a { fn b() { } mod c { fn d() { } } }";
diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs
index 4082d969b5e..2777a3ff196 100644
--- a/src/rustdoc/markdown_pass.rs
+++ b/src/rustdoc/markdown_pass.rs
@@ -93,13 +93,15 @@ fn write_mod_contents(
         write_fn(ctxt, fndoc);
     }
 
-    for resdoc in *doc.resources {
-        write_res(ctxt, resdoc);
-    }
-
     for moddoc in *doc.mods {
         write_mod(ctxt, moddoc);
     }
+
+    for itemtag in doc.items {
+        alt itemtag {
+          doc::restag(resdoc) { write_res(ctxt, resdoc) }
+        }
+    }
 }
 
 #[test]
diff --git a/src/rustdoc/prune_undoc_pass.rs b/src/rustdoc/prune_undoc_pass.rs
index 11be00eea85..a4141962986 100644
--- a/src/rustdoc/prune_undoc_pass.rs
+++ b/src/rustdoc/prune_undoc_pass.rs
@@ -26,8 +26,7 @@ fn run(
         fold_modlist: fold_modlist,
         fold_fnlist: fold_fnlist,
         fold_constlist: fold_constlist,
-        fold_enumlist: fold_enumlist,
-        fold_reslist: fold_reslist
+        fold_enumlist: fold_enumlist
         with *fold::default_seq_fold(ctxt)
     });
     fold.fold_crate(fold, doc)
@@ -37,7 +36,22 @@ fn fold_mod(
     fold: fold::fold<ctxt>,
     doc: doc::moddoc
 ) -> doc::moddoc {
-    let doc = fold::default_seq_fold_mod(fold, doc);
+    let doc = ~{
+        items: vec::filter_map(doc.items) {|itemtag|
+            alt itemtag {
+              doc::restag(resdoc) {
+                let doc = fold.fold_res(fold, resdoc);
+                if fold.ctxt.have_docs {
+                    some(doc::restag(doc))
+                } else {
+                    none
+                }
+              }
+              _ { some(itemtag) }
+            }
+        }
+        with *fold::default_seq_fold_mod(fold, doc)
+    };
     fold.ctxt.have_docs =
         doc.brief != none
         || doc.desc != none
@@ -301,27 +315,13 @@ fn fold_res(fold: fold::fold<ctxt>, doc: doc::resdoc) -> doc::resdoc {
     ret doc;
 }
 
-fn fold_reslist(
-    fold: fold::fold<ctxt>,
-    list: doc::reslist
-) -> doc::reslist {
-    doc::reslist(vec::filter_map(*list) {|doc|
-        let doc = fold.fold_res(fold, doc);
-        if fold.ctxt.have_docs {
-            some(doc)
-        } else {
-            none
-        }
-    })
-}
-
 #[test]
 fn should_elide_undocumented_resources() {
     let source = "resource r(a: bool) { }";
     let srv = astsrv::mk_srv_from_str(source);
     let doc = extract::from_srv(srv, "");
     let doc = run(srv, doc);
-    assert vec::is_empty(*doc.topmod.resources);
+    assert vec::is_empty(doc.topmod.resources());
 }
 
 #[test]
@@ -332,7 +332,7 @@ fn should_elide_undocumented_resource_args() {
     let doc = extract::from_srv(srv, "");
     let doc = attr_pass::mk_pass()(srv, doc);
     let doc = run(srv, doc);
-    assert vec::is_empty(doc.topmod.resources[0].args);
+    assert vec::is_empty(doc.topmod.resources()[0].args);
 }
 
 #[test]
@@ -343,5 +343,5 @@ fn should_not_elide_resources_with_documented_args() {
     let doc = extract::from_srv(srv, "");
     let doc = attr_pass::mk_pass()(srv, doc);
     let doc = run(srv, doc);
-    assert vec::is_not_empty(*doc.topmod.resources);
+    assert vec::is_not_empty(doc.topmod.resources());
 }
diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs
index 55cd74c3a7a..1c258858e83 100755
--- a/src/rustdoc/rustdoc.rs
+++ b/src/rustdoc/rustdoc.rs
@@ -2,6 +2,8 @@
  * Copyright 2011 Google Inc.
  */
 
+import doc::util;
+
 #[doc = "A single operation on the document model"]
 type pass = fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc;
 
@@ -53,8 +55,7 @@ fn test_run_passes() {
                 mods: doc::modlist([]),
                 fns: doc::fnlist([]),
                 consts: doc::constlist([]),
-                enums: doc::enumlist([]),
-                resources: doc::reslist([])
+                enums: doc::enumlist([])
             }
         }
     }
@@ -73,8 +74,7 @@ fn test_run_passes() {
                 mods: doc::modlist([]),
                 fns: doc::fnlist([]),
                 consts: doc::constlist([]),
-                enums: doc::enumlist([]),
-                resources: doc::reslist([])
+                enums: doc::enumlist([])
             }
         }
     }
diff --git a/src/rustdoc/tystr_pass.rs b/src/rustdoc/tystr_pass.rs
index 12a1e68b42b..e223944b9fb 100644
--- a/src/rustdoc/tystr_pass.rs
+++ b/src/rustdoc/tystr_pass.rs
@@ -254,7 +254,7 @@ fn should_add_resource_sigs() {
     let srv = astsrv::mk_srv_from_str(source);
     let doc = extract::from_srv(srv, "");
     let doc = run(srv, doc);
-    assert doc.topmod.resources[0].sig == some("resource r(b: bool)");
+    assert doc.topmod.resources()[0].sig == some("resource r(b: bool)");
 }
 
 #[test]
@@ -263,5 +263,5 @@ fn should_add_resource_arg_tys() {
     let srv = astsrv::mk_srv_from_str(source);
     let doc = extract::from_srv(srv, "");
     let doc = run(srv, doc);
-    assert doc.topmod.resources[0].args[0].ty == some("bool");
+    assert doc.topmod.resources()[0].args[0].ty == some("bool");
 }
\ No newline at end of file