3D Picking problem....

I am using the following code:

int
picking(void (*f)(), float x, float y)
{
GLint viewport[4];
glGetIntegerv (GL_VIEWPORT, viewport);

// designate buffer for hits
GLuint nameBuffer[BUFSIZE];
glSelectBuffer(BUFSIZE, nameBuffer);
glRenderMode(GL_SELECT);

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();

glGetIntegerv(GL_VIEWPORT,viewport);
gluPickMatrix(x,viewport[3]-y,5,5,viewport);
gluPerspective (45., 1., 1., 200.);
glMatrixMode(GL_MODELVIEW);

// draw what we will be picking
(*f)();

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();

// restoring the original projection matrix
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glFlush();

// returning to normal rendering mode
unsigned int hits = glRenderMode(GL_RENDER);

cout << hits << endl;

// if there are hits process them
if (hits != 0)
{
	GLuint names, *ptr, minZ,*ptrNames, numberOfNames;

	ptr = (GLuint *) nameBuffer;
	minZ = 0xffffffff;
	for (unsigned int i = 0; i < hits; i++) 
	{	
		names = *ptr;
		ptr++;
		if (*ptr < minZ) 
		{
			numberOfNames = names;
			minZ = *ptr;
			ptrNames = ptr+2;
		}
		ptr += names+2;
	}
	
	return *ptrNames;
}
return -1;

}

and pass it this function:

static void
drawPickable()
{
if (objectCount > 0)
{
// clear the name stack
glInitNames();

	for (int i = 0; i < objectCount; i++)
	{
		if (dWasher->placed(i))
		{
			glPushName(dWasher->placedGetId(i));
			dWasher->displayOn(i);
			glPopName();
		}

		// it may have been deleted, so check 
		else if (p[i] != NULL)
		{
			glPushName(i);
			p[i]->display();
			glPopName();
		}
	}
}

}

I use the drawPickable() function in my display routine as well, and all objects show up like they are supposed to. The problem however, is when I try to pick objects, I only can pick objects if they are in the ‘else if’ case using p[i]->display which displays all the objects defined in a vector in my main file. The amusing thing is that the call dWasher->displayOn(i) calls the p[i]->display on another vector (defined in exactly the same way) in the scope of my header file. My question is, why is it that if I can see it, I cannot pick it?