Display lists and glLoadIdentity();

The way I’m generating maps in my v. simple space flying game is to have a parametric function trace out points and to generate toruses (tori? . Another function returns the tangent vector at any given point on the parametric curve so that I can align the tori with it.

 * Handles the generation of game
 * levels based upon any parametric
 * function.
public void genLevel()
	for(float t = 0; t <= 2*M_PI; t += (2*M_PI / 8))
		Vector2 v = cqLevelOneFunc(t);
		float x = v.getx();
		float z = v.gety();

		// Calculate the amount to rotate each torus by
		// so they are parallel to the tangent vector.
		float rotateBy = 0.0f;
		Vector3 forward = new Vector3(0,0,1);			// Vector pointing along z-axis.
		Vector3 tangVector = cqLevelOneTangent(t);		// Tangent vector at this t value.
		float dot = gameUtils.dot(forward, tangVector);	// Calculate dot product.
		// Calculate theta.
		float cos = dot / (gameUtils.length(forward) * gameUtils.length(tangVector));
		float theta = (float) Math.toDegrees(Math.acos(cos));

		Torus tor = new Torus(this,x * 20,0,-z * 20,theta,0,1,0);
		gl.glLoadIdentity(); //Where should this go?			level.add(tor);

Torus(translate_x, translate_y, translate_z, rotation_amount, rotVectorx, rotVectory, rotVectorz) returns a Torus object conatining a new display list rotated and translated by the specified amounts and about the specified vector.

Now this worked fine until I started trying to rotate each torus by the calculated theta and translating, instead of just translating. I think I need a glLoadIdentity() somwhere because it the glRotatatef() commands used by each Torus object are compounding. But it seems that no matter where I place the glLoadIdentity() things look very screwy.