Index: trunk/nv/engine/model_manager.hh
===================================================================
--- trunk/nv/engine/model_manager.hh	(revision 515)
+++ trunk/nv/engine/model_manager.hh	(revision 516)
@@ -32,4 +32,10 @@
 		WEIGHTED,
 		PATTERN_CHECKER
+	};
+
+	enum model_node_flags
+	{
+		MNF_FORCE,
+		MNF_STATIC,
 	};
 
@@ -48,5 +54,5 @@
 		uint16                       weight    = 0;
 		float                        chance    = 1.0f;
-		bool                         force     = false;
+		flags<16,uint16>             nflags;
 		model_node_choice            choice    = model_node_choice::ALL;
 
@@ -63,5 +69,5 @@
 			target->weight    = weight;
 			target->chance    = chance;
-			target->force     = force;
+			target->nflags    = nflags;
 			target->choice    = choice;
 		}
@@ -102,5 +108,6 @@
 	};
 
-	NV_RTTI_DECLARE_NAME( model_node_choice, "random_dist" )
+	NV_RTTI_DECLARE_NAME( model_node_choice, "model_node_choice" )
+	NV_RTTI_DECLARE_NAME( model_node_flags, "model_node_flags" )
 	NV_RTTI_DECLARE_NAME( model, "model" )
 
@@ -116,7 +123,10 @@
 	enum flatten_flags
 	{
-		FF_GENERATE_CHANCE = 0x02,
-		FF_GENERATE_CHOICE = 0x04,
-		FF_GENERATE_GHOST  = 0x08,
+		FF_GENERATE_CHANCE  = 0x02,
+		FF_GENERATE_CHOICE  = 0x04,
+		FF_GENERATE_GHOST   = 0x08,
+		FF_GENERATE_NLOCAL  = 0x10,
+		FF_GENERATE_STATIC  = 0x20,
+		FF_GENERATE_NSTATIC = 0x40,
 	};
 
@@ -171,5 +181,7 @@
 						return;
 				}
-			transform tr = ptr * m->local;
+			transform tr = m->local;
+			if ( !(gen_flags & FF_GENERATE_NLOCAL) )
+				tr = ptr * tr;
 			vec3 position = rng.eval( m->position );
 			vec3 rotation = rng.eval( m->rotation );
@@ -179,5 +191,11 @@
 			if ( m == selected ) parent_flags |= FMF_FOCUS;
 
-			if ( m->mesh || m->force || !m->tag.empty() )
+			if ( gen_flags & FF_GENERATE_STATIC )
+				if ( !m->nflags[MNF_STATIC] )
+					return;
+
+			bool skip_static = ( gen_flags & FF_GENERATE_NSTATIC ) && m->nflags[MNF_STATIC];
+
+			if ( ( ( m->mesh || !m->tag.empty() ) && !skip_static ) || ( m->nflags[MNF_FORCE] ) )
 			{
 				uint32 id = result.count++;
Index: trunk/src/engine/model_manager.cc
===================================================================
--- trunk/src/engine/model_manager.cc	(revision 515)
+++ trunk/src/engine/model_manager.cc	(revision 516)
@@ -107,6 +107,6 @@
 		}
 	}
-
-	node->force     = table.get_boolean( "force", false );
+	
+	node->nflags    = table.get< flags<16,uint16> >( "flags" );
 	node->choice    = model_node_choice( table.get_unsigned( "choice", false ) );
 	node->chance    = table.get_float( "chance", 1.0f );
