diff --git a/attachments.scad b/attachments.scad
index 49e1da2..6e39915 100644
--- a/attachments.scad
+++ b/attachments.scad
@@ -1629,6 +1629,20 @@ module show(tags="")
 //               rounding_mask_z(l=p.z, r=25);
 //       }
 //   }
+// Example: Working with Non-Attachables Like rotate_extrude()
+//   back_half()
+//     diff("remove")
+//       cuboid(40) {
+//         attach(TOP)
+//           recolor("lightgreen")
+//             cyl(l=10,d=30);
+//         position(TOP+RIGHT)
+//           tags("remove")
+//             xrot(90)
+//               rotate_extrude()
+//                 right(20)
+//                   circle(5);
+//       }
 module diff(neg, pos, keep)
 {
     // Don't perform the operation if the current tags are hidden
@@ -1680,6 +1694,19 @@ module diff(neg, pos, keep)
 //       attach(CENTER) cube([40,100,100], anchor=CENTER, $tags="mask");
 //       attach(CENTER) xcyl(d=40, l=100, $tags="axle");
 //   }
+// Example: Working with Non-Attachables
+//   intersect("A", "B")
+//   cuboid(50, $tags="A") {
+//       tags("B")
+//         hull() {
+//           down(25)
+//             linear_extrude(height=0.01)
+//               square(55,center=true);
+//           up(25)
+//             linear_extrude(height=0.01)
+//               circle(d=45);
+//         }
+//   }
 module intersect(a, b=undef, keep=undef)
 {
     // Don't perform the operation if the current tags are hidden
diff --git a/tutorials/Attachments.md b/tutorials/Attachments.md
index dc94bbd..b09b680 100644
--- a/tutorials/Attachments.md
+++ b/tutorials/Attachments.md
@@ -387,6 +387,25 @@ cube([20,11,45], center=true, $tags="hole")
     cube([40,10,90], center=true, $tags="body");
 ```
 
+Tags (and therefore tag-based operations like `diff()`) only work correctly with attachable children.
+However, a number of built-in modules for making shapes are *not* attachable.  Some notable
+non-attachable modules are `circle()`, `square()`, `text()`, `linear_extrude()`, `rotate_extrude()`,
+`polygon()`, `polyhedron()`, `import()`, `surface()`, `union()`, `difference()`, `intersection()`,
+`offset()`, `hull()`, and `minkowski()`.
+
+To allow you to use tags-based operations with non-attachable shapes, you can wrap them with the
+`tags()` module to specify their tags.  For example:
+
+```openscad
+diff("hole")
+cuboid(50)
+  attach(TOP)
+    tags("hole")
+      rotate_extrude()
+        right(15)
+          square(10,center=true);
+```
+
 ### `intersect(a, <b>, <keep>)`
 
 To perform an intersection of attachables, you can use the `intersect()` module.  If given one
@@ -481,9 +500,9 @@ rounding a corner:
 ```openscad
 module round_corner(r) difference() {
     translate(-[1,1,1])
-    	cube(r+1);
+        cube(r+1);
     translate([r,r,r])
-    	sphere(r=r, style="aligned", $fn=quantup(segs(r),4));
+        sphere(r=r, style="aligned", $fn=quantup(segs(r),4));
 }
 round_corner(r=10);
 ```
@@ -493,9 +512,9 @@ You can use that mask to round various corners of a cube:
 ```openscad
 module round_corner(r) difference() {
     translate(-[1,1,1])
-    	cube(r+1);
+        cube(r+1);
     translate([r,r,r])
-    	sphere(r=r, style="aligned", $fn=quantup(segs(r),4));
+        sphere(r=r, style="aligned", $fn=quantup(segs(r),4));
 }
 diff("mask")
 cube([50,60,70],center=true)
@@ -509,9 +528,9 @@ You can use `edge_mask()` and `corner_mask()` together as well:
 ```openscad
 module round_corner(r) difference() {
     translate(-[1,1,1])
-    	cube(r+1);
+        cube(r+1);
     translate([r,r,r])
-    	sphere(r=r, style="aligned", $fn=quantup(segs(r),4));
+        sphere(r=r, style="aligned", $fn=quantup(segs(r),4));
 }
 module round_edge(l,r) difference() {
     translate([-1,-1,-l/2])