diff --git a/OpenSim/Framework/DAMap.cs b/OpenSim/Framework/DAMap.cs
index 7d7738a2a0..64cea77469 100644
--- a/OpenSim/Framework/DAMap.cs
+++ b/OpenSim/Framework/DAMap.cs
@@ -176,6 +176,10 @@ namespace OpenSim.Framework
             }
         }
 
+        /// 
+        /// Validate the key used for storing separate data stores.
+        /// 
+        /// 
         private static void ValidateKey(string key)
         {
             if (key.Length < MIN_STORE_NAME_LENGTH)
@@ -196,7 +200,8 @@ namespace OpenSim.Framework
         }    
 
         public void Add(KeyValuePair kvp) 
-        {    
+        {   
+            ValidateKey(kvp.Key);
             lock (this)
                 m_map.Add(kvp.Key, kvp.Value);
         }    
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 9b1e97d237..d9148fb7c1 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -45,6 +45,7 @@ using System.Text.RegularExpressions;
 using System.Xml;
 using System.Threading;
 using log4net;
+using log4net.Appender;
 using Nini.Config;
 using Nwc.XmlRpc;
 using OpenMetaverse;
@@ -816,9 +817,22 @@ namespace OpenSim.Framework
             return ".";
         }
 
+        public static string logFile()
+        {
+            foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
+            {
+                if (appender is FileAppender)
+                {
+                    return ((FileAppender)appender).File;
+                }
+            }
+
+            return "./OpenSim.log";
+        }
+
         public static string logDir()
         {
-            return ".";
+            return Path.GetDirectoryName(logFile());
         }
 
         // From: http://coercedcode.blogspot.com/2008/03/c-generate-unique-filenames-within.html
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs
index 306928ad33..965c3823b8 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs
@@ -220,7 +220,7 @@ public static class BSParam
             (s) => { return BSParam.NumericBool(ShouldUseHullsForPhysicalObjects); },
             (s,p,l,v) => { ShouldUseHullsForPhysicalObjects = BSParam.BoolNumeric(v); } ),
         new ParameterDefn("ShouldRemoveZeroWidthTriangles", "If true, remove degenerate triangles from meshes",
-            ConfigurationParameters.numericFalse,
+            ConfigurationParameters.numericTrue,
             (s,cf,p,v) => { ShouldRemoveZeroWidthTriangles = cf.GetBoolean(p, BSParam.BoolNumeric(v)); },
             (s) => { return BSParam.NumericBool(ShouldRemoveZeroWidthTriangles); },
             (s,p,l,v) => { ShouldRemoveZeroWidthTriangles = BSParam.BoolNumeric(v); } ),
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
index 823402ba03..ec25aa927e 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
@@ -75,6 +75,7 @@ public abstract class BSPhysObject : PhysicsActor
         PhysicsScene = parentScene;
         LocalID = localID;
         PhysObjectName = name;
+        Name = name;    // PhysicsActor also has the name of the object. Someday consolidate.
         TypeName = typeName;
 
         // We don't have any physical representation yet.
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
index fe0f984144..15747c9020 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
@@ -608,7 +608,7 @@ public sealed class BSShapeCollection : IDisposable
         // Since we're recreating new, get rid of the reference to the previous shape
         DereferenceShape(prim.PhysShape, shapeCallback);
 
-        newShape = CreatePhysicalMesh(prim.PhysObjectName, newMeshKey, prim.BaseShape, prim.Size, lod);
+        newShape = CreatePhysicalMesh(prim, newMeshKey, prim.BaseShape, prim.Size, lod);
         // Take evasive action if the mesh was not constructed.
         newShape = VerifyMeshCreated(newShape, prim);
 
@@ -619,7 +619,7 @@ public sealed class BSShapeCollection : IDisposable
         return true;        // 'true' means a new shape has been added to this prim
     }
 
-    private BulletShape CreatePhysicalMesh(string objName, System.UInt64 newMeshKey, PrimitiveBaseShape pbs, OMV.Vector3 size, float lod)
+    private BulletShape CreatePhysicalMesh(BSPhysObject prim, System.UInt64 newMeshKey, PrimitiveBaseShape pbs, OMV.Vector3 size, float lod)
     {
         BulletShape newShape = new BulletShape();
 
@@ -631,7 +631,7 @@ public sealed class BSShapeCollection : IDisposable
         }
         else
         {
-            IMesh meshData = PhysicsScene.mesher.CreateMesh(objName, pbs, size, lod, 
+            IMesh meshData = PhysicsScene.mesher.CreateMesh(prim.PhysObjectName, pbs, size, lod, 
                                         false,  // say it is not physical so a bounding box is not built
                                         false   // do not cache the mesh and do not use previously built versions
                                         );
@@ -651,18 +651,20 @@ public sealed class BSShapeCollection : IDisposable
                     realIndicesIndex = 0;
                     for (int tri = 0; tri < indices.Length; tri += 3)
                     {
+                        // Compute displacements into vertex array for each vertex of the triangle
                         int v1 = indices[tri + 0] * 3;
                         int v2 = indices[tri + 1] * 3;
                         int v3 = indices[tri + 2] * 3;
-                        if (!((verticesAsFloats[v1 + 0] == verticesAsFloats[v2 + 0]
+                        // Check to see if any two of the vertices are the same
+                        if (!( (  verticesAsFloats[v1 + 0] == verticesAsFloats[v2 + 0]
                                && verticesAsFloats[v1 + 1] == verticesAsFloats[v2 + 1]
                                && verticesAsFloats[v1 + 2] == verticesAsFloats[v2 + 2])
-                            || (verticesAsFloats[v2 + 0] == verticesAsFloats[v3 + 0]
+                            || (  verticesAsFloats[v2 + 0] == verticesAsFloats[v3 + 0]
                                && verticesAsFloats[v2 + 1] == verticesAsFloats[v3 + 1]
                                && verticesAsFloats[v2 + 2] == verticesAsFloats[v3 + 2])
-                            || (verticesAsFloats[v1 + 0] == verticesAsFloats[v3 + 0]
+                            || (  verticesAsFloats[v1 + 0] == verticesAsFloats[v3 + 0]
                                && verticesAsFloats[v1 + 1] == verticesAsFloats[v3 + 1]
-                               && verticesAsFloats[v1 + 2] == verticesAsFloats[v3 + 2]))
+                               && verticesAsFloats[v1 + 2] == verticesAsFloats[v3 + 2]) )
                         )
                         {
                             // None of the vertices of the triangles are the same. This is a good triangle;
@@ -676,8 +678,16 @@ public sealed class BSShapeCollection : IDisposable
                 DetailLog("{0},BSShapeCollection.CreatePhysicalMesh,origTri={1},realTri={2},numVerts={3}",
                             BSScene.DetailLogZero, indices.Length / 3, realIndicesIndex / 3, verticesAsFloats.Length / 3);
 
-                newShape = PhysicsScene.PE.CreateMeshShape(PhysicsScene.World,
-                                    realIndicesIndex, indices, verticesAsFloats.Length/3, verticesAsFloats);
+                if (realIndicesIndex != 0)
+                {
+                    newShape = PhysicsScene.PE.CreateMeshShape(PhysicsScene.World,
+                                        realIndicesIndex, indices, verticesAsFloats.Length / 3, verticesAsFloats);
+                }
+                else
+                {
+                    PhysicsScene.Logger.ErrorFormat("{0} All mesh triangles degenerate. Prim {1} at {2} in {3}",
+                                        LogHeader, prim.PhysObjectName, prim.RawPosition, PhysicsScene.Name);
+                }
             }
         }
         newShape.shapeKey = newMeshKey;
diff --git a/OpenSim/Region/UserStatistics/WebStatsModule.cs b/OpenSim/Region/UserStatistics/WebStatsModule.cs
index 438ef485ab..b98b762764 100644
--- a/OpenSim/Region/UserStatistics/WebStatsModule.cs
+++ b/OpenSim/Region/UserStatistics/WebStatsModule.cs
@@ -420,7 +420,7 @@ namespace OpenSim.Region.UserStatistics
             Encoding encoding = Encoding.ASCII;
             int sizeOfChar = encoding.GetByteCount("\n");
             byte[] buffer = encoding.GetBytes("\n");
-            string logfile = Util.logDir() + "/" + "OpenSim.log"; 
+            string logfile = Util.logFile();
             FileStream fs = new FileStream(logfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
             Int64 tokenCount = 0;
             Int64 endPosition = fs.Length / sizeOfChar;