Index: libs/gtkmm2ext/barcontroller.cc
===================================================================
--- libs/gtkmm2ext/barcontroller.cc	(Revision 5508)
+++ libs/gtkmm2ext/barcontroller.cc	(Arbeitskopie)
@@ -109,6 +109,7 @@
 	// extract a double from the string and take its log
 	Entry *entry = dynamic_cast<Entry *>(&spinner);
 	stringstream stream(entry->get_text());
+	stream.imbue(std::locale(""));
 
 	double value;
 	stream >> value;
@@ -134,12 +135,33 @@
 	}
 
 	// generate the exponential and turn it into a string
+	// convert to correct locale. 
+	
 	stringstream stream;
+	string str;
+	size_t found;
+
+	// Gtk.Entry does not like the thousands separator, so we have to  
+	// remove it after conversion from float to string.
+
+	stream.imbue(std::locale(""));
 	stream.precision(spinner.get_digits());
+
 	stream << fixed << exp(spinner.get_adjustment()->get_value());
 	
+	str=stream.str();
+
+	// find thousands separators, remove them
+	found = str.find(use_facet<numpunct<char> >(std::locale("")).thousands_sep());
+	while(found != str.npos) {
+		str.erase(found,1);
+
+		//find next
+		found = str.find(use_facet<numpunct<char> >(std::locale("")).thousands_sep());
+	}
+
 	Entry *entry = dynamic_cast<Entry *>(&spinner);
-	entry->set_text(stream.str());
+	entry->set_text(str);
 	
 	return true;
 }
Index: libs/ardour/ladspa_plugin.cc
===================================================================
--- libs/ardour/ladspa_plugin.cc	(Revision 5509)
+++ libs/ardour/ladspa_plugin.cc	(Arbeitskopie)
@@ -182,34 +182,44 @@
 			ret = prh[port].LowerBound;
 			bounds_given = true;
 			sr_scaling = true;
-			earlier_hint = true;
 		}
 		
 		/* FIXME: add support for logarithmic defaults */
 		
 		else if (LADSPA_IS_HINT_DEFAULT_LOW(prh[port].HintDescriptor)) {
-			ret = prh[port].LowerBound * 0.75f + prh[port].UpperBound * 0.25f;
+			if (LADSPA_IS_HINT_LOGARITHMIC(prh[port].HintDescriptor)) {
+				ret = exp(log(prh[port].LowerBound) * 0.75f + log(prh[port].UpperBound) * 0.25f);
+			}
+			else {
+				ret = prh[port].LowerBound * 0.75f + prh[port].UpperBound * 0.25f;
+			}
 			bounds_given = true;
 			sr_scaling = true;
-			earlier_hint = true;
 		}
 		else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(prh[port].HintDescriptor)) {
-			ret = prh[port].LowerBound * 0.50f + prh[port].UpperBound * 0.50f;
+			if (LADSPA_IS_HINT_LOGARITHMIC(prh[port].HintDescriptor)) {
+				ret = exp(log(prh[port].LowerBound) * 0.5f + log(prh[port].UpperBound) * 0.5f);
+			}
+			else {
+				ret = prh[port].LowerBound * 0.5f + prh[port].UpperBound * 0.5f;
+			}
 			bounds_given = true;
 			sr_scaling = true;
-			earlier_hint = true;
 		}
 		else if (LADSPA_IS_HINT_DEFAULT_HIGH(prh[port].HintDescriptor)) {
-			ret = prh[port].LowerBound * 0.25f + prh[port].UpperBound * 0.75f;
+			if (LADSPA_IS_HINT_LOGARITHMIC(prh[port].HintDescriptor)) {
+				ret = exp(log(prh[port].LowerBound) * 0.25f + log(prh[port].UpperBound) * 0.75f);
+			}
+			else {
+				ret = prh[port].LowerBound * 0.25f + prh[port].UpperBound * 0.75f;
+			}
 			bounds_given = true;
 			sr_scaling = true;
-			earlier_hint = true;
 		}
 		else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(prh[port].HintDescriptor)) {
 			ret = prh[port].UpperBound;
 			bounds_given = true;
 			sr_scaling = true;
-			earlier_hint = true;
 		}
 		else if (LADSPA_IS_HINT_DEFAULT_0(prh[port].HintDescriptor)) {
 			ret = 0.0f;
