diff --git a/VirtualRobot/EndEffector/EndEffectorActor.cpp b/VirtualRobot/EndEffector/EndEffectorActor.cpp
index 242d7c372e02db4bb407259cb36733588e2d7cfc..c12c09b6f44910297cc5a25456caa9f5ca1645d5 100644
--- a/VirtualRobot/EndEffector/EndEffectorActor.cpp
+++ b/VirtualRobot/EndEffector/EndEffectorActor.cpp
@@ -182,6 +182,7 @@ bool EndEffectorActor::isColliding(EndEffectorPtr eef, SceneObjectSetPtr obstacl
 			
 			if( (n->colMode & checkColMode) && 
 				((*o)->getCollisionModel()) &&
+				n->robotNode->getCollisionModel() &&
 				colChecker->checkCollision(n->robotNode->getCollisionModel(), (*o)->getCollisionModel()))
 			{
 
@@ -211,7 +212,7 @@ bool EndEffectorActor::isColliding(SceneObjectSetPtr obstacles,  CollisionMode c
 {
 	for(std::vector<ActorDefinition>::iterator n = actors.begin(); n != actors.end(); n++)
 	{
-		if( (n->colMode & checkColMode) && colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacles))
+		if( (n->colMode & checkColMode) && n->robotNode->getCollisionModel() && colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacles))
 			return true;
 	}
 	return false;
@@ -219,12 +220,12 @@ bool EndEffectorActor::isColliding(SceneObjectSetPtr obstacles,  CollisionMode c
 
 bool EndEffectorActor::isColliding(SceneObjectPtr obstacle, CollisionMode checkColMode)
 {
-	if(!obstacle)
+	if(!obstacle || !obstacle->getCollisionModel())
 		return false;
 
 	for(std::vector<ActorDefinition>::iterator n = actors.begin(); n != actors.end(); n++)
 	{
-		if( (n->colMode & checkColMode) && colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacle->getCollisionModel()))
+		if( (n->colMode & checkColMode) && n->robotNode->getCollisionModel() && colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacle->getCollisionModel()))
 			return true;
 	}
 	return false;
@@ -312,6 +313,7 @@ bool EndEffectorActor::isColliding( EndEffectorPtr eef, SceneObjectPtr obstacle,
 	{
 
 		if( (n->colMode & checkColMode) && 
+			n->robotNode->getCollisionModel() &&
 			colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacle->getCollisionModel()))
 		{
 			col = true;
diff --git a/VirtualRobot/Nodes/RobotNode.h b/VirtualRobot/Nodes/RobotNode.h
index b002818502f5ca1d7bd95aad690ac57f3972e14f..fb1b332f99358b352911c4b8723d1e46a520b6fc 100644
--- a/VirtualRobot/Nodes/RobotNode.h
+++ b/VirtualRobot/Nodes/RobotNode.h
@@ -62,6 +62,7 @@ class VIRTUAL_ROBOT_IMPORT_EXPORT RobotNode : public SceneObject
 {
 public:
 	friend class Robot;
+	friend class RobotIO;
 	friend class RobotNodeSet;
 	friend class RobotConfig;
 	friend class RobotFactory;
diff --git a/VirtualRobot/XML/RobotIO.cpp b/VirtualRobot/XML/RobotIO.cpp
index 16a7409bcc417846ff1c6319863c60e9c74c5df9..2ba17caa2cb7c96f3fb165e39e12a77cccd734e9 100644
--- a/VirtualRobot/XML/RobotIO.cpp
+++ b/VirtualRobot/XML/RobotIO.cpp
@@ -356,6 +356,15 @@ RobotNodePtr RobotIO::processJointNode(rapidxml::xml_node<char> *jointXMLNode, c
 	robotNode->setMaxVelocity(maxVelocity);
 	robotNode->setMaxAcceleration(maxAcceleration);
 	robotNode->setMaxTorque(maxTorque);
+
+	if (robotNode->isRotationalJoint() || robotNode->isTranslationalJoint()) 
+	{
+		if (robotNode->jointValue < robotNode->jointLimitLo)
+			robotNode->jointValue = robotNode->jointLimitLo;
+		else if (robotNode->jointValue > robotNode->jointLimitHi)
+			robotNode->jointValue =robotNode->jointLimitHi;
+	}
+
 	return robotNode;
 }
 
diff --git a/VirtualRobot/examples/RobotViewer/showRobotWindow.cpp b/VirtualRobot/examples/RobotViewer/showRobotWindow.cpp
index 26be1ecf8342e49d9ada2c3d8308da63694942e1..19845afb522368e62bd574f3551b518bb944820b 100644
--- a/VirtualRobot/examples/RobotViewer/showRobotWindow.cpp
+++ b/VirtualRobot/examples/RobotViewer/showRobotWindow.cpp
@@ -480,7 +480,7 @@ void showRobotWindow::closeHand()
 
 void showRobotWindow::openHand()
 {
-#if 1
+#if 0
     if (robot)
     {
         float randMult = (float)(1.0/(double)(RAND_MAX));