@Chris_Oat: Vegatation is always bad for the performance.
In my shooter project I created different "vegetation zones" per level. Then I wrote a little code snippet that switched the meshes invisible that were most distanced from the camera view. But that`s not very elegant and inefficient.
For my new project I created one big mesh that is always visible. It has around 25k faces. Not the best method, too, but it works fast for smaller ares. Import is that you design your level in a way that the vegetation sprites don`t strike to be needy of polygons. For example use simple (one-sided) faces for the background vegatation (grass and sprite trees) and models of a higher quality for the gameplay area. Always look for the best compromise. Don`t use a model that is about 1000 faces instead of 400 faces and looks just a bit better. Don`t use a 512x512 texture if you go well with a 128x128 image.
Even if it`s more work: Designing your own models instead of using pre-defined ones from Dexsoft etc. and using a great editor like Blender saves a lot FPS and nerves. Plus the result will look better if you work stylistically confident.

@Superku: Very impressive. You`re a wonderful coder.