diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8cc4a7c40f31031011f014857f197be0b71ddcfc..35cf8318b452174b8c035941820699c385806f78 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -218,7 +218,12 @@ include_directories(${Boost_INCLUDE_DIRS}
                     ${TIFF_INCLUDE_DIR}
                     ${SPNAV_INCLUDE_DIR}
                     )
-
+if (UNIX)
+  SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
+  SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+  SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}")
+  SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+endif()
 
 
 add_subdirectory(modules)
diff --git a/cmake_support/OST.cmake b/cmake_support/OST.cmake
index 6d04eb292ea2121296bf810f1e3a92514e46f9b7..50e77606961a6f9701165e1b296c2fd0e25e4132 100644
--- a/cmake_support/OST.cmake
+++ b/cmake_support/OST.cmake
@@ -190,12 +190,11 @@ macro(module)
     set_target_properties(${_LIB_NAME} PROPERTIES
                           LIBRARY_OUTPUT_DIRECTORY ${LIB_STAGE_PATH}
                           ARCHIVE_OUTPUT_DIRECTORY ${LIB_STAGE_PATH}
-                          RUNTIME_OUTPUT_DIRECTORY ${LIB_STAGE_PATH}
-                          INSTALL_RPATH "."
-                          INSTALL_NAME_DIR "@rpath")
+                          RUNTIME_OUTPUT_DIRECTORY ${LIB_STAGE_PATH})
     if (APPLE)
       set_target_properties(${_LIB_NAME} PROPERTIES
-                            LINK_FLAGS "-Wl,-rpath,.")
+                            LINK_FLAGS "-Wl,-rpath,."
+                            INSTALL_NAME_DIR "@rpath")
     endif()
     if (WIN32)
       #set_target_properties(${_LIB_NAME} PROPERTIES PREFIX "../")
@@ -391,12 +390,12 @@ macro(pymod)
     target_link_libraries("_${_ARG_NAME}" ${_PARENT_LIB_NAME} 
                           ${PYTHON_LIBRARIES} ${BOOST_PYTHON_LIBRARIES})
     set_target_properties("_${_ARG_NAME}"
-                          PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PYMOD_STAGE_DIR}
-                          INSTALL_NAME_DIR "@rpath")
+                          PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PYMOD_STAGE_DIR})
     if (APPLE)
       file(RELATIVE_PATH _REL_PATH "${PYMOD_STAGE_DIR}" "${LIB_STAGE_PATH}")
       set_target_properties(_${_ARG_NAME} PROPERTIES
-                            LINK_FLAGS "-Wl,-rpath,@${_REL_PATH}")
+                            LINK_FLAGS "-Wl,-rpath,@${_REL_PATH}"
+                            INSTALL_NAME_DIR "@rpath")
     endif()                          
     if (NOT WIN32)
       set_target_properties("_${_ARG_NAME}"
diff --git a/modules/gfx/pymod/export_scene.cc b/modules/gfx/pymod/export_scene.cc
index d6b843c4a6c5a585881af022cf6c318d5f9db4e0..41f0e3db45aed86b7403d314c4dada87c95d20be 100644
--- a/modules/gfx/pymod/export_scene.cc
+++ b/modules/gfx/pymod/export_scene.cc
@@ -98,6 +98,7 @@ void export_Scene()
     .def("SetStereoInverted",&Scene::SetStereoInverted)
     .def("SetStereoView",&Scene::SetStereoView)
     .def("SetStereoEyeDist",&Scene::SetStereoEyeDist)
+    .def("SetStereoEyeOff",&Scene::SetStereoEyeOff)
     .def("SetLightDir",&Scene::SetLightDir)
     .def("SetLightProp",set_light_prop1)
     .def("SetLightProp",set_light_prop2)
diff --git a/modules/gfx/src/CMakeLists.txt b/modules/gfx/src/CMakeLists.txt
index 3c6e8b1f86fa0d4e9c81c3118505a7d836f170de..99d643e74c5727bbcf5b148772033b589fbd4641 100644
--- a/modules/gfx/src/CMakeLists.txt
+++ b/modules/gfx/src/CMakeLists.txt
@@ -223,29 +223,34 @@ target_link_libraries(ost_gfx ${OPENGL_LIBRARIES} ${PNG_LIBRARIES})
 
 if (USE_SHADER)
   set(SHADER_FILES
-    shader/basic_vs.glsl
+    shader/aaline_fs.glsl
+    shader/amboccl_fs.glsl
     shader/basic_fs.glsl
-    shader/fraglight_vs.glsl
-    shader/fraglight_fs.glsl
     shader/basic_hf_vs.glsl
-    shader/selfx_vs.glsl
-    shader/selfx_fs.glsl
-    shader/toon_vs.glsl
-    shader/toon_fs.glsl
-    shader/toon2_fs.glsl
-    shader/noop_vs.glsl
-    shader/aaline_fs.glsl
-    shader/iso_vs.glsl
-    shader/iso_fs.glsl
-    shader/fast_sphere_vs.glsl
+    shader/basic_lf_fs.glsl
+    shader/basic_lf_vs.glsl
+    shader/basic_vs.glsl
+    shader/convolute1_fs.glsl
+    shader/dumpnorm_fs.glsl
+    shader/dumpnorm_vs.glsl
     shader/fast_sphere_fs.glsl
+    shader/fast_sphere_vs.glsl
+    shader/fraglight_fs.glsl
+    shader/fraglight_lf_fs.glsl
+    shader/fraglight_lf_vs.glsl
+    shader/fraglight_vs.glsl
+    shader/iso_fs.glsl
+    shader/iso_vs.glsl
+    shader/noop_vs.glsl
     shader/outline_vs.glsl
     shader/quadpp_vs.glsl
-    shader/convolute1_fs.glsl
-    shader/scenefx_vs.glsl
     shader/scenefx_fs.glsl
-    shader/dumpnorm_vs.glsl
-    shader/dumpnorm_fs.glsl
+    shader/scenefx_vs.glsl
+    shader/selfx_fs.glsl
+    shader/selfx_vs.glsl
+    shader/toon2_fs.glsl
+    shader/toon_fs.glsl
+    shader/toon_vs.glsl
   )
   copy_if_different("./" "${SHARED_DATA_PATH}/shader" "${SHADER_FILES}" 
                     "SHADER_TARGETS" ost_gfx)  
diff --git a/modules/gfx/src/bitmap_io.cc b/modules/gfx/src/bitmap_io.cc
index 677b602c66ce81aa27527fdb5cd4335d0364f86d..7c8fdf71b2b10f9225f74d6db8e1f6c22372a00f 100644
--- a/modules/gfx/src/bitmap_io.cc
+++ b/modules/gfx/src/bitmap_io.cc
@@ -168,7 +168,7 @@ Bitmap import_png(const String& filename)
     }
   }
 
-  LOGN_VERBOSE("loaded " << width << "x" << height << ":" << channels << " bitmap");
+  LOGN_DEBUG("loaded " << width << "x" << height << ":" << channels << " bitmap");
 
   bm.channels=channels;
   bm.width=width;
diff --git a/modules/gfx/src/impl/scene_fx.cc b/modules/gfx/src/impl/scene_fx.cc
index d0ef2cb703d78e1621d0a667765982456609d212..474efaba3102e48f3a349c2b160a88d930aa3026 100644
--- a/modules/gfx/src/impl/scene_fx.cc
+++ b/modules/gfx/src/impl/scene_fx.cc
@@ -55,7 +55,7 @@ SceneFX::~SceneFX()
 
 void SceneFX::Setup()
 {
-  LOGN_VERBOSE("SceneFX: setup");
+  LOGN_DEBUG("SceneFX: setup");
 
   glGenTextures(1,&scene_tex_id_);
   glGenTextures(1,&depth_tex_id_);
diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc
index 1a4a540416dda64f63234cd66ce63057cacdba6e..e784007fc423a64fed2849b79c320840d975f715 100644
--- a/modules/gfx/src/scene.cc
+++ b/modules/gfx/src/scene.cc
@@ -125,7 +125,8 @@ Scene::Scene():
   stereo_(0),
   stereo_inverted_(false),
   stereo_eye_(0),
-  stereo_eye_dist_(10.0),
+  stereo_eye_dist_(5.0),
+  stereo_eye_off_(0.0),
   scene_left_tex_(),
   scene_right_tex_()
 {
@@ -355,7 +356,7 @@ void Scene::InitGL()
   glGetIntegerv(GL_SAMPLES, &msamples);
 
   if(mbufs>0 && msamples>0) {
-    LOGN_VERBOSE("enabling multisampling with: " << msamples << " samples");
+    LOGN_VERBOSE("Scene: enabling multisampling with: " << msamples << " samples");
     glDisable(GL_LINE_SMOOTH);
     glDisable(GL_POINT_SMOOTH);
     glDisable(GL_POLYGON_SMOOTH);
@@ -862,7 +863,6 @@ void Scene::Apply(GfxNodeVisitor& v) const
 
 void Scene::OnInput(const InputEvent& e)
 {
-  float sf=1.0;
   if(e.GetCommand()==INPUT_COMMAND_AUTOSLAB) {
     Autoslab();
   } else if(e.GetCommand()==INPUT_COMMAND_TOGGLE_FOG) {
@@ -898,7 +898,8 @@ void Scene::OnInput(const InputEvent& e)
       transform_.ApplyYAxisTranslation(e.GetDelta()*fxy[1]);
     }
   } else if(e.GetCommand()==INPUT_COMMAND_TRANSZ) {
-    float delta=e.GetDelta()*sf;
+    float currz=transform_.GetTrans()[2];
+    float delta=currz*pow(1.01,-e.GetDelta())-currz;
     transform_.ApplyZAxisTranslation(delta);
     SetNearFar(znear_-delta,zfar_-delta);
   } else if(e.GetCommand()==INPUT_COMMAND_SLABN) {
@@ -1266,6 +1267,14 @@ void Scene::SetStereoEyeDist(float d)
   }
 }
 
+void Scene::SetStereoEyeOff(float d)
+{
+  stereo_eye_off_=d;
+  if(stereo_>0) {
+    RequestRedraw();
+  }
+}
+
 void Scene::SetLightDir(const Vec3& dir)
 {
   if(Length2(dir)>0.0) {
@@ -1735,7 +1744,7 @@ void Scene::prep_glyphs()
   }
   for(int cc=128;cc<256;++cc) glyph_map_[cc]=Vec2(0.0,0.0);
 
-  LOGN_VERBOSE("done loading glyphs");
+  LOGN_DEBUG("done loading glyphs");
 
 }
 
@@ -1811,20 +1820,19 @@ void Scene::stereo_projection(unsigned int view)
   GLdouble right = top*aspect_ratio_;
   GLdouble left = -right;
   GLdouble shift=0.0;
+
+  glFrustum(left,right,bot,top,zn,zf);
+
   if(view==1 || view==2) {
-    shift = 0.5*stereo_eye_dist_*zn/zf * (view==1 ? -1.0 : 1.0);
-    left+=shift;
-    right+=shift*0.5;
+    float ff=(view==1 ? -1.0 : 1.0);
+    float dist=-transform_.GetTrans()[2];
+    geom::Mat4 skew=geom::Transpose(geom::Mat4(1.0,0.0,ff*stereo_eye_dist_/dist,ff*stereo_eye_dist_,
+                                               0.0,1.0,0.0,0.0,
+                                               0.0,0.0,1.0,0.0,
+                                               0.0,0.0,0.0,1.0));
+    glMultMatrix(skew.Data());
   }
-  glFrustum(left,right,bot,top,zn,zf);
-  GLdouble trans[16];
-  for(int i=0;i<16;++i) trans[i]=0.0;
-  trans[0]=1.0;
-  trans[5]=1.0;
-  trans[10]=1.0;
-  trans[15]=1.0;
-  trans[12]=shift;
-  glMultMatrixd(trans);
+
 }
 
 void Scene::render_stereo()
diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh
index d9eacf632e322711ab8a35afa48f27d292726d07..1027d2a0f4d9128f62b327725bbdc9f2f549a428 100644
--- a/modules/gfx/src/scene.hh
+++ b/modules/gfx/src/scene.hh
@@ -189,6 +189,7 @@ class DLLEXPORT_OST_GFX Scene {
   void SetStereoView(unsigned int);
 
   void SetStereoEyeDist(float);
+  void SetStereoEyeOff(float);
 
   /// \brief set main light direction
   void SetLightDir(const geom::Vec3& dir);
@@ -438,7 +439,7 @@ private:
   unsigned int stereo_;
   bool stereo_inverted_;
   unsigned int stereo_eye_;
-  float stereo_eye_dist_;
+  float stereo_eye_dist_,stereo_eye_off_;
   unsigned int scene_left_tex_;
   unsigned int scene_right_tex_;
 
diff --git a/modules/gui/src/gl_win.cc b/modules/gui/src/gl_win.cc
index 90bb1d9a73bdbf964bfb40717195b745a25eb757..d0ea7f00db3261b3311feda4c08a23ab0c08ad7c 100644
--- a/modules/gui/src/gl_win.cc
+++ b/modules/gui/src/gl_win.cc
@@ -90,7 +90,7 @@ gl_canvas_(NULL)
   this->SetInternalWidget(main);
   gfx::Scene::Instance().AttachObserver(this);
   QGLFormat format = gl_canvas_->format();
-  LOGN_VERBOSE("GLCanvas: rbits=" << format.redBufferSize() 
+  LOGN_DEBUG("GLCanvas: rbits=" << format.redBufferSize() 
                << " gbits=" << format.greenBufferSize() 
                << " bbits=" << format.blueBufferSize() 
                << " abits=" << format.alphaBufferSize()