diff --git a/tools/noprep.ccl b/tools/noprep.ccl
index 583ef6b75a6110a38eb9ef795f0638af3fb71b5c..ede0168ed5cdf81c5807aaa70b8f3205054f945c 100644
--- a/tools/noprep.ccl
+++ b/tools/noprep.ccl
@@ -1,28 +1,97 @@
-// generates "real" NP chunks by removing chunk-initial prepositions
-// the new chunks are added as "cut_np"
+// generates "real" NP, AdjP and AgP chunks by removing
+// chunk-initial prepositions
+// the new chunks are added as cut_np, cut_adjp and cut_agp
+// the prepositions cut from np and adjp are marked as cut_prep
 
 // to be used with wccl-rules
 
 tag_rules(
-	rule("noprep",
+	rule("noprep_np",
 		and(
 			isannbeg(0, "chunk_np"),
 			not(in({prep}, class[0])),
 			rlook(0, end, $End,
 				isannend($End, "chunk_np")
+			),
+			or(
+				rlook(0, $End, $Hd, isannhead($Hd, "chunk_np")),
+				setvar($Hd, 0)
 			)
 		),
-		mark(0, $End, "cut_np")
+		mark(0, $End, $Hd, "cut_np")
 	);
-	rule("withprep",
+	rule("withprep_np",
 		and(
 			isannbeg(0, "chunk_np"),
 			in({prep}, class[0]),
 			rlook(0, end, $End,
 				isannend($End, "chunk_np")
+			),
+			or(
+				rlook(1, $End, $Hd, isannhead($Hd, "chunk_np")),
+				setvar($Hd, 1)
 			)
 		),
-		mark(1, $End, "cut_np")
+		mark(0, 0, "cut_prep"),
+		mark(1, $End, $Hd, "cut_np")
+	);
+
+	rule("noprep_adjp",
+		and(
+			isannbeg(0, "chunk_adjp"),
+			not(in({prep}, class[0])),
+			rlook(0, end, $End,
+				isannend($End, "chunk_adjp")
+			),
+			or(
+				rlook(0, $End, $Hd, isannhead($Hd, "chunk_adjp")),
+				setvar($Hd, 0)
+			)
+		),
+		mark(0, $End, $Hd, "cut_adjp")
+	);
+	rule("withprep_adjp",
+		and(
+			isannbeg(0, "chunk_adjp"),
+			in({prep}, class[0]),
+			rlook(0, end, $End,
+				isannend($End, "chunk_adjp")
+			),
+			or(
+				rlook(1, $End, $Hd, isannhead($Hd, "chunk_adjp")),
+				setvar($Hd, 1)
+			)
+		),
+		mark(0, 0, "cut_prep"),
+		mark(1, $End, $Hd, "cut_adjp")
+	);
+
+	rule("noprep_agp",
+		and(
+			isannbeg(0, "chunk_agp"),
+			not(in({prep}, class[0])),
+			rlook(0, end, $End,
+				isannend($End, "chunk_agp")
+			),
+			or(
+				rlook(0, $End, $Hd, isannhead($Hd, "chunk_agp")),
+				setvar($Hd, 0)
+			)
+		),
+		mark(0, $End, $Hd, "cut_agp")
+	);
+	rule("withprep_agp",
+		and(
+			isannbeg(0, "chunk_agp"),
+			in({prep}, class[0]),
+			rlook(0, end, $End,
+				isannend($End, "chunk_agp")
+			),
+			or(
+				rlook(1, $End, $Hd, isannhead($Hd, "chunk_agp")),
+				setvar($Hd, 1)
+			)
+		),
+		mark(1, $End, $Hd, "cut_agp")
 	)
 )
-