Index: src/uk/me/parabola/mkgmap/osmstyle/RuleFileReader.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/RuleFileReader.java	(revision 3839)
+++ src/uk/me/parabola/mkgmap/osmstyle/RuleFileReader.java	(working copy)
@@ -128,19 +128,35 @@
 				break;
 
 			Op expr = expressionReader.readConditions(ifStack);
-			ActionList actionList = actionReader.readActions();
+			List<GType> types = new ArrayList<>();
+			List<ActionList> actionLists = new ArrayList<>();
 			
-			checkIfStack(actionList);
+			do {
+				ActionList actionList = actionReader.readActions();
+				actionLists.add(actionList);
 
-			// If there is an action list, then we don't need a type
-			GType type = null;
-			if (scanner.checkToken("["))
-				type = typeReader.readType(scanner, performChecks, overlays);
-			else if (actionList == null)
-				throw new SyntaxException(scanner, "No type definition given");
-
-			saveRule(scanner, expr, actionList, type);
-			scanner.skipSpace();
+				// If there is an action list, then we don't need a type
+				GType type = null;
+				if (scanner.checkToken("["))
+					type = typeReader.readType(scanner, performChecks, overlays);
+				else if (actionList == null || actionList.isEmpty())
+					throw new SyntaxException(scanner, "No type definition given");
+				types.add(type);
+				scanner.skipSpace();
+			} while (scanner.checkToken("[") || scanner.checkToken("{"));
+			
+			for (int i = 0; i < actionLists.size(); i++) {
+				ActionList actionList = actionLists.get(i);
+				checkIfStack(actionList);
+				GType type = types.get(i);
+				if (type != null && i+1 < actionLists.size()) { 
+					type.setContinueSearch(true);
+					if (actionList != null && !actionList.isEmpty())
+						type.propagateActions(true);
+				}
+				// No need to create a deep copy of expr
+				saveRule(scanner, expr, actionList, type);
+			}
 		}
 
 		rules.addUsedTags(expressionReader.getUsedTags());
Index: test/resources/rules/one-type-two-actions.test
===================================================================
--- test/resources/rules/one-type-two-actions.test	(nonexistent)
+++ test/resources/rules/one-type-two-actions.test	(working copy)
@@ -0,0 +1,22 @@
+
+#
+# Test for a rule with one expression and one type followed by an action  
+#
+
+WAY 1
+A=1
+B=1
+
+<<<lines>>>
+
+A=1 & B=1 {name 'base'} [0x1 resolution 24] {set C=2}
+C=2 [0x2 resolution 24]
+
+# first rule is short form for
+# A=1 & B=1 {name 'base'} [0x1 resolution 24 continue with_actions]
+# A=1 & B=1 {set C=2} 
+
+<<<results>>>
+NO-STRICT
+WAY 1: Line 0x1, labels=[base, null, null, null], res=24-24 (1/1),(2/2),
+WAY 1: Line 0x2, labels=[base, null, null, null], res=24-24 (1/1),(2/2),
Index: test/resources/rules/two-types-two-actions.test
===================================================================
--- test/resources/rules/two-types-two-actions.test	(nonexistent)
+++ test/resources/rules/two-types-two-actions.test	(working copy)
@@ -0,0 +1,20 @@
+
+#
+# Test for a rule with one expression and two types 
+#
+
+WAY 1
+A=1
+B=1
+
+<<<lines>>>
+
+A=1 & B=1 {name 'base'} [0x1 resolution 24] {addlabel 'overlay'} [0x10801 resolution 18]
+# short form for
+# A=1 & B=1 {name 'base'} [0x1 resolution 24 continue with_actions]
+# A=1 & B=1 {addlabel 'overlay'} [0x10801 resolution 18]
+ 
+<<<results>>>
+NO-STRICT
+WAY 1: Line 0x1, labels=[base, null, null, null], res=24-24 (1/1),(2/2),
+WAY 1: Line 0x10801, labels=[base, overlay, null, null], res=18-24 (1/1),(2/2),
Index: test/resources/rules/two-types1.test
===================================================================
--- test/resources/rules/two-types1.test	(nonexistent)
+++ test/resources/rules/two-types1.test	(working copy)
@@ -0,0 +1,20 @@
+
+#
+# Test for a rule with one expression and two types 
+#
+
+WAY 1
+A=1
+B=1
+
+<<<lines>>>
+
+A=1 & B=1 [0x1 resolution 24][0x10801 resolution 18]
+# short form for
+# A=1 & B=1 [0x1 resolution 24 continue]
+# A=1 & B=1 [0x10801 resolution 18]
+ 
+<<<results>>>
+NO-STRICT
+WAY 1: Line 0x1, labels=[null, null, null, null], res=24-24 (1/1),(2/2),
+WAY 1: Line 0x10801, labels=[null, null, null, null], res=18-24 (1/1),(2/2),
Index: test/resources/rules/two-types2.test
===================================================================
--- test/resources/rules/two-types2.test	(nonexistent)
+++ test/resources/rules/two-types2.test	(working copy)
@@ -0,0 +1,20 @@
+
+#
+# Test for a rule with one expression and two types 
+#
+
+WAY 1
+A=1
+B=1
+
+<<<lines>>>
+
+A=1 & B=1 [0x1 resolution 24] {name 'overlay'} [0x10801 resolution 18]
+# short form for
+# A=1 & B=1 [0x1 resolution 24 continue]
+# A=1 & B=1 {name 'overlay'} [0x10801 resolution 18]
+ 
+<<<results>>>
+NO-STRICT
+WAY 1: Line 0x1, labels=[null, null, null, null], res=24-24 (1/1),(2/2),
+WAY 1: Line 0x10801, labels=[overlay, null, null, null], res=18-24 (1/1),(2/2),
