diff --git a/Lib/_strptime.py b/Lib/_strptime.py
index 5eeb370..896c050 100644
--- a/Lib/_strptime.py
+++ b/Lib/_strptime.py
@@ -26,7 +26,6 @@
 from re import IGNORECASE
 from string import whitespace as whitespace_string
 
-__version__ = (2,1,6)
 __author__ = "Brett Cannon"
 __email__ = "drifty@bigfoot.com"
 
@@ -287,13 +286,19 @@
         self.__timezone = self.__pad(time.tzname, 0)
 
     def __calc_lang(self):
-        # Set self.lang by using locale.getlocale() or
-        # locale.getdefaultlocale().
+        # Set self.__lang by using locale.getlocale() or
+        # locale.getdefaultlocale().  If both turn up empty, set the attribute
+        # to ''.  This is to stop calls to this method and to make sure
+        # strptime() can produce an re object correctly.
         current_lang = locale.getlocale(locale.LC_TIME)[0]
         if current_lang:
             self.__lang = current_lang
         else:
-            self.__lang = locale.getdefaultlocale()[0]
+            current_lang = locale.getdefaultlocale()[0]
+            if current_lang:
+                self.__lang = current_lang
+            else:
+                self.__lang = ''
 
 
 class TimeRE(dict):
@@ -463,7 +468,10 @@
                 julian = int(found_dict['j'])
             elif group_key == 'Z':
                 found_zone = found_dict['Z'].lower()
-                if locale_time.timezone[0].lower() == found_zone:
+                if locale_time.timezone[0] == locale_time.timezone[1]:
+                    pass #Deals with bad locale setup where timezone info is
+                         # the same; first found on FreeBSD 4.4 -current
+                elif locale_time.timezone[0].lower() == found_zone:
                     tz = 0
                 elif locale_time.timezone[1].lower() == found_zone:
                     tz = 1
diff --git a/Lib/test/test_strptime.py b/Lib/test/test_strptime.py
index 314f29d..a66b54a 100644
--- a/Lib/test/test_strptime.py
+++ b/Lib/test/test_strptime.py
@@ -8,8 +8,6 @@
 
 import _strptime
 
-__version__ = (1,0,5)
-
 class LocaleTime_Tests(unittest.TestCase):
     """Tests for _strptime.LocaleTime."""
 
@@ -18,40 +16,51 @@
         self.time_tuple = time.localtime()
         self.LT_ins = _strptime.LocaleTime()
 
-    def compare_against_time(self, testing, directive, tuple_position, error_msg):
+    def compare_against_time(self, testing, directive, tuple_position,
+                             error_msg):
         """Helper method that tests testing against directive based on the
         tuple_position of time_tuple.  Uses error_msg as error message.
 
         """
         strftime_output = time.strftime(directive, self.time_tuple)
         comparison = testing[self.time_tuple[tuple_position]]
-        self.failUnless(strftime_output in testing, "%s: not found in tuple" % error_msg)
-        self.failUnless(comparison == strftime_output, "%s: position within tuple incorrect; %s != %s" % (error_msg, comparison, strftime_output))
+        self.failUnless(strftime_output in testing, "%s: not found in tuple" %
+                                                    error_msg)
+        self.failUnless(comparison == strftime_output,
+                        "%s: position within tuple incorrect; %s != %s" %
+                        (error_msg, comparison, strftime_output))
 
     def test_weekday(self):
         # Make sure that full and abbreviated weekday names are correct in
         # both string and position with tuple
-        self.compare_against_time(self.LT_ins.f_weekday, '%A', 6, "Testing of full weekday name failed")
-        self.compare_against_time(self.LT_ins.a_weekday, '%a', 6, "Testing of abbreviated weekday name failed")
+        self.compare_against_time(self.LT_ins.f_weekday, '%A', 6,
+                                  "Testing of full weekday name failed")
+        self.compare_against_time(self.LT_ins.a_weekday, '%a', 6,
+                                  "Testing of abbreviated weekday name failed")
 
     def test_month(self):
         # Test full and abbreviated month names; both string and position
         # within the tuple
-        self.compare_against_time(self.LT_ins.f_month, '%B', 1, "Testing against full month name failed")
-        self.compare_against_time(self.LT_ins.a_month, '%b', 1, "Testing against abbreviated month name failed")
+        self.compare_against_time(self.LT_ins.f_month, '%B', 1,
+                                  "Testing against full month name failed")
+        self.compare_against_time(self.LT_ins.a_month, '%b', 1,
+                                  "Testing against abbreviated month name failed")
 
     def test_am_pm(self):
         # Make sure AM/PM representation done properly
         strftime_output = time.strftime("%p", self.time_tuple)
-        self.failUnless(strftime_output in self.LT_ins.am_pm, "AM/PM representation not in tuple")
+        self.failUnless(strftime_output in self.LT_ins.am_pm,
+                        "AM/PM representation not in tuple")
         if self.time_tuple[3] < 12: position = 0
         else: position = 1
-        self.failUnless(strftime_output == self.LT_ins.am_pm[position], "AM/PM representation in the wrong position within the tuple")
+        self.failUnless(strftime_output == self.LT_ins.am_pm[position],
+                        "AM/PM representation in the wrong position within the tuple")
 
     def test_timezone(self):
         # Make sure timezone is correct
         if time.strftime("%Z", self.time_tuple):
-            self.compare_against_time(self.LT_ins.timezone, '%Z', 8, "Testing against timezone failed")
+            self.compare_against_time(self.LT_ins.timezone, '%Z', 8,
+                                      "Testing against timezone failed")
 
     def test_date_time(self):
         # Check that LC_date_time, LC_date, and LC_time are correct
@@ -62,39 +71,56 @@
         #  output.
         magic_date = (1999, 3, 17, 22, 44, 55, 2, 76, 0)
         strftime_output = time.strftime("%c", magic_date)
-        self.failUnless(strftime_output == time.strftime(self.LT_ins.LC_date_time, magic_date), "LC_date_time incorrect")
+        self.failUnless(strftime_output == time.strftime(self.LT_ins.LC_date_time,
+                                                         magic_date),
+                        "LC_date_time incorrect")
         strftime_output = time.strftime("%x", magic_date)
-        self.failUnless(strftime_output == time.strftime(self.LT_ins.LC_date, magic_date), "LC_date incorrect")
+        self.failUnless(strftime_output == time.strftime(self.LT_ins.LC_date,
+                                                         magic_date),
+                        "LC_date incorrect")
         strftime_output = time.strftime("%X", magic_date)
-        self.failUnless(strftime_output == time.strftime(self.LT_ins.LC_time, magic_date), "LC_time incorrect")
+        self.failUnless(strftime_output == time.strftime(self.LT_ins.LC_time,
+                                                         magic_date),
+                        "LC_time incorrect")
         LT = _strptime.LocaleTime(am_pm=('',''))
         self.failUnless(LT.LC_time, "LocaleTime's LC directives cannot handle "
                                     "empty strings")
 
     def test_lang(self):
         # Make sure lang is set
-        self.failUnless(self.LT_ins.lang in (locale.getdefaultlocale()[0], locale.getlocale(locale.LC_TIME)), "Setting of lang failed")
+        self.failUnless(self.LT_ins.lang in (locale.getdefaultlocale()[0],
+                                             locale.getlocale(locale.LC_TIME),
+                                             ''),
+                        "Setting of lang failed")
 
     def test_by_hand_input(self):
         # Test passed-in initialization value checks
-        self.failUnless(_strptime.LocaleTime(f_weekday=range(7)), "Argument size check for f_weekday failed")
+        self.failUnless(_strptime.LocaleTime(f_weekday=range(7)),
+                        "Argument size check for f_weekday failed")
         self.assertRaises(TypeError, _strptime.LocaleTime, f_weekday=range(8))
         self.assertRaises(TypeError, _strptime.LocaleTime, f_weekday=range(6))
-        self.failUnless(_strptime.LocaleTime(a_weekday=range(7)), "Argument size check for a_weekday failed")
+        self.failUnless(_strptime.LocaleTime(a_weekday=range(7)),
+                        "Argument size check for a_weekday failed")
         self.assertRaises(TypeError, _strptime.LocaleTime, a_weekday=range(8))
         self.assertRaises(TypeError, _strptime.LocaleTime, a_weekday=range(6))
-        self.failUnless(_strptime.LocaleTime(f_month=range(12)), "Argument size check for f_month failed")
+        self.failUnless(_strptime.LocaleTime(f_month=range(12)),
+                        "Argument size check for f_month failed")
         self.assertRaises(TypeError, _strptime.LocaleTime, f_month=range(11))
         self.assertRaises(TypeError, _strptime.LocaleTime, f_month=range(13))
-        self.failUnless(len(_strptime.LocaleTime(f_month=range(12)).f_month) == 13, "dummy value for f_month not added")
-        self.failUnless(_strptime.LocaleTime(a_month=range(12)), "Argument size check for a_month failed")
+        self.failUnless(len(_strptime.LocaleTime(f_month=range(12)).f_month) == 13,
+                        "dummy value for f_month not added")
+        self.failUnless(_strptime.LocaleTime(a_month=range(12)),
+                        "Argument size check for a_month failed")
         self.assertRaises(TypeError, _strptime.LocaleTime, a_month=range(11))
         self.assertRaises(TypeError, _strptime.LocaleTime, a_month=range(13))
-        self.failUnless(len(_strptime.LocaleTime(a_month=range(12)).a_month) == 13, "dummy value for a_month not added")
-        self.failUnless(_strptime.LocaleTime(am_pm=range(2)), "Argument size check for am_pm failed")
+        self.failUnless(len(_strptime.LocaleTime(a_month=range(12)).a_month) == 13,
+                        "dummy value for a_month not added")
+        self.failUnless(_strptime.LocaleTime(am_pm=range(2)),
+                        "Argument size check for am_pm failed")
         self.assertRaises(TypeError, _strptime.LocaleTime, am_pm=range(1))
         self.assertRaises(TypeError, _strptime.LocaleTime, am_pm=range(3))
-        self.failUnless(_strptime.LocaleTime(timezone=range(2)), "Argument size check for timezone failed")
+        self.failUnless(_strptime.LocaleTime(timezone=range(2)),
+                        "Argument size check for timezone failed")
         self.assertRaises(TypeError, _strptime.LocaleTime, timezone=range(1))
         self.assertRaises(TypeError, _strptime.LocaleTime, timezone=range(3))
 
@@ -108,35 +134,57 @@
 
     def test_getitem(self):
         # Make sure that __getitem__ works properly
-        self.failUnless(self.time_re['m'], "Fetching 'm' directive (built-in) failed")
-        self.failUnless(self.time_re['b'], "Fetching 'b' directive (built w/ __tupleToRE) failed")
+        self.failUnless(self.time_re['m'],
+                        "Fetching 'm' directive (built-in) failed")
+        self.failUnless(self.time_re['b'],
+                        "Fetching 'b' directive (built w/ __tupleToRE) failed")
         for name in self.locale_time.a_month:
-            self.failUnless(self.time_re['b'].find(name) != -1, "Not all abbreviated month names in regex")
-        self.failUnless(self.time_re['c'], "Fetching 'c' directive (built w/ format) failed")
-        self.failUnless(self.time_re['c'].find('%') == -1, "Conversion of 'c' directive failed; '%' found")
+            self.failUnless(self.time_re['b'].find(name) != -1,
+                            "Not all abbreviated month names in regex")
+        self.failUnless(self.time_re['c'],
+                        "Fetching 'c' directive (built w/ format) failed")
+        self.failUnless(self.time_re['c'].find('%') == -1,
+                        "Conversion of 'c' directive failed; '%' found")
         self.assertRaises(KeyError, self.time_re.__getitem__, '1')
 
     def test_pattern(self):
         # Test TimeRE.pattern
         pattern_string = self.time_re.pattern(r"%a %A %d")
-        self.failUnless(pattern_string.find(self.locale_time.a_weekday[2]) != -1, "did not find abbreviated weekday in pattern string '%s'" % pattern_string)
-        self.failUnless(pattern_string.find(self.locale_time.f_weekday[4]) != -1, "did not find full weekday in pattern string '%s'" % pattern_string)
-        self.failUnless(pattern_string.find(self.time_re['d']) != -1, "did not find 'd' directive pattern string '%s'" % pattern_string)
+        self.failUnless(pattern_string.find(self.locale_time.a_weekday[2]) != -1,
+                        "did not find abbreviated weekday in pattern string '%s'" %
+                         pattern_string)
+        self.failUnless(pattern_string.find(self.locale_time.f_weekday[4]) != -1,
+                        "did not find full weekday in pattern string '%s'" %
+                         pattern_string)
+        self.failUnless(pattern_string.find(self.time_re['d']) != -1,
+                        "did not find 'd' directive pattern string '%s'" %
+                         pattern_string)
 
     def test_compile(self):
         # Check that compiled regex is correct
         found = self.time_re.compile(r"%A").match(self.locale_time.f_weekday[6])
-        self.failUnless(found and found.group('A') == self.locale_time.f_weekday[6], "re object for '%A' failed")
+        self.failUnless(found and found.group('A') == self.locale_time.f_weekday[6],
+                        "re object for '%A' failed")
         compiled = self.time_re.compile(r"%a %b")
-        found = compiled.match("%s %s" % (self.locale_time.a_weekday[4], self.locale_time.a_month[4]))
+        found = compiled.match("%s %s" % (self.locale_time.a_weekday[4],
+                               self.locale_time.a_month[4]))
         self.failUnless(found,
-            "Match failed with '%s' regex and '%s' string" % (compiled.pattern, "%s %s" % (self.locale_time.a_weekday[4], self.locale_time.a_month[4])))
-        self.failUnless(found.group('a') == self.locale_time.a_weekday[4] and found.group('b') == self.locale_time.a_month[4],
-            "re object couldn't find the abbreviated weekday month in '%s' using '%s'; group 'a' = '%s', group 'b' = %s'" % (found.string, found.re.pattern, found.group('a'), found.group('b')))
-        for directive in ('a','A','b','B','c','d','H','I','j','m','M','p','S','U','w','W','x','X','y','Y','Z','%'):
+            "Match failed with '%s' regex and '%s' string" %
+             (compiled.pattern, "%s %s" % (self.locale_time.a_weekday[4],
+                                           self.locale_time.a_month[4])))
+        self.failUnless(found.group('a') == self.locale_time.a_weekday[4] and
+                         found.group('b') == self.locale_time.a_month[4],
+                        "re object couldn't find the abbreviated weekday month in "
+                         "'%s' using '%s'; group 'a' = '%s', group 'b' = %s'" %
+                         (found.string, found.re.pattern, found.group('a'),
+                          found.group('b')))
+        for directive in ('a','A','b','B','c','d','H','I','j','m','M','p','S',
+                          'U','w','W','x','X','y','Y','Z','%'):
             compiled = self.time_re.compile("%%%s"% directive)
             found = compiled.match(time.strftime("%%%s" % directive))
-            self.failUnless(found, "Matching failed on '%s' using '%s' regex" % (time.strftime("%%%s" % directive), compiled.pattern))
+            self.failUnless(found, "Matching failed on '%s' using '%s' regex" %
+                                    (time.strftime("%%%s" % directive),
+                                     compiled.pattern))
 
 class StrptimeTests(unittest.TestCase):
     """Tests for _strptime.strptime."""
@@ -147,21 +195,28 @@
 
     def test_TypeError(self):
         # Make sure ValueError is raised when match fails
-        self.assertRaises(ValueError,_strptime.strptime, data_string="%d", format="%A")
+        self.assertRaises(ValueError, _strptime.strptime, data_string="%d",
+                          format="%A")
 
     def test_returning_RE(self):
         # Make sure that an re can be returned
         strp_output = _strptime.strptime(False, "%Y")
-        self.failUnless(isinstance(strp_output, type(re.compile(''))), "re object not returned correctly")
-        self.failUnless(_strptime.strptime("1999", strp_output), "Use or re object failed")
+        self.failUnless(isinstance(strp_output, type(re.compile(''))),
+                        "re object not returned correctly")
+        self.failUnless(_strptime.strptime("1999", strp_output),
+                        "Use of re object failed")
         bad_locale_time = _strptime.LocaleTime(lang="gibberish")
-        self.assertRaises(TypeError, _strptime.strptime, data_string='1999', format=strp_output, locale_time=bad_locale_time)
+        self.assertRaises(TypeError, _strptime.strptime, data_string='1999',
+                          format=strp_output, locale_time=bad_locale_time)
 
     def helper(self, directive, position):
         """Helper fxn in testing."""
         strf_output = time.strftime("%%%s" % directive, self.time_tuple)
         strp_output = _strptime.strptime(strf_output, "%%%s" % directive)
-        self.failUnless(strp_output[position] == self.time_tuple[position], "testing of '%s' directive failed; '%s' -> %s != %s" % (directive, strf_output, strp_output[position], self.time_tuple[position]))
+        self.failUnless(strp_output[position] == self.time_tuple[position],
+                        "testing of '%s' directive failed; '%s' -> %s != %s" %
+                         (directive, strf_output, strp_output[position],
+                          self.time_tuple[position]))
 
     def test_year(self):
         # Test that the year is handled properly
@@ -182,7 +237,9 @@
         self.helper('H', 3)
         strf_output = time.strftime("%I %p", self.time_tuple)
         strp_output = _strptime.strptime(strf_output, "%I %p")
-        self.failUnless(strp_output[3] == self.time_tuple[3], "testing of '%%I %%p' directive failed; '%s' -> %s != %s" % (strf_output, strp_output[3], self.time_tuple[3]))
+        self.failUnless(strp_output[3] == self.time_tuple[3],
+                        "testing of '%%I %%p' directive failed; '%s' -> %s != %s" %
+                         (strf_output, strp_output[3], self.time_tuple[3]))
 
     def test_minute(self):
         # Test minute directives
@@ -204,10 +261,20 @@
     def test_timezone(self):
         # Test timezone directives.
         # When gmtime() is used with %Z, entire result of strftime() is empty.
+        # Check for equal timezone names deals with bad locale info when this
+        # occurs; first found in FreeBSD 4.4 -current
         time_tuple = time.localtime()
         strf_output = time.strftime("%Z")  #UTC does not have a timezone
         strp_output = _strptime.strptime(strf_output, "%Z")
-        self.failUnless(strp_output[8] == time_tuple[8], "timezone check failed; '%s' -> %s != %s" % (strf_output, strp_output[8], time_tuple[8]))
+        locale_time = _strptime.LocaleTime()
+        if locale_time.timezone[0] != locale_time.timezone[1]:
+            self.failUnless(strp_output[8] == time_tuple[8],
+                            "timezone check failed; '%s' -> %s != %s" %
+                             (strf_output, strp_output[8], time_tuple[8]))
+        else:
+            self.failUnless(strp_output[8] == -1,
+                            "LocaleTime().timezone has duplicate values but "
+                             "timzone value not set to -1")
 
     def test_date_time(self):
         # Test %c directive
@@ -228,7 +295,9 @@
         # Make sure % signs are handled properly
         strf_output = time.strftime("%m %% %Y", self.time_tuple)
         strp_output = _strptime.strptime(strf_output, "%m %% %Y")
-        self.failUnless(strp_output[0] == self.time_tuple[0] and strp_output[1] == self.time_tuple[1], "handling of percent sign failed")
+        self.failUnless(strp_output[0] == self.time_tuple[0] and
+                         strp_output[1] == self.time_tuple[1],
+                        "handling of percent sign failed")
 
     def test_caseinsensitive(self):
         # Should handle names case-insensitively.
@@ -241,7 +310,8 @@
                         "strptime does not handle capword names properly")
 
 class FxnTests(unittest.TestCase):
-    """Test functions that fill in info by validating result and are triggered properly."""
+    """Test functions that fill in info by validating result and are triggered
+    properly."""
 
     def setUp(self):
         """Create an initial time tuple."""
@@ -249,38 +319,53 @@
 
     def test_julianday_result(self):
         # Test julianday
-        result = _strptime.julianday(self.time_tuple[0], self.time_tuple[1], self.time_tuple[2])
-        self.failUnless(result == self.time_tuple[7], "julianday failed; %s != %s" % (result, self.time_tuple[7]))
+        result = _strptime.julianday(self.time_tuple[0], self.time_tuple[1],
+                                     self.time_tuple[2])
+        self.failUnless(result == self.time_tuple[7],
+                        "julianday failed; %s != %s" %
+                         (result, self.time_tuple[7]))
 
     def test_julianday_trigger(self):
         # Make sure julianday is called
         strf_output = time.strftime("%Y-%m-%d", self.time_tuple)
         strp_output = _strptime.strptime(strf_output, "%Y-%m-%d")
-        self.failUnless(strp_output[7] == self.time_tuple[7], "strptime did not trigger julianday(); %s != %s" % (strp_output[7], self.time_tuple[7]))
+        self.failUnless(strp_output[7] == self.time_tuple[7],
+                        "strptime did not trigger julianday(); %s != %s" %
+                         (strp_output[7], self.time_tuple[7]))
 
     def test_gregorian_result(self):
         # Test gregorian
         result = _strptime.gregorian(self.time_tuple[7], self.time_tuple[0])
         comparison = [self.time_tuple[0], self.time_tuple[1], self.time_tuple[2]]
-        self.failUnless(result == comparison, "gregorian() failed; %s != %s" % (result, comparison))
+        self.failUnless(result == comparison,
+                        "gregorian() failed; %s != %s" % (result, comparison))
 
     def test_gregorian_trigger(self):
         # Test that gregorian() is triggered
         strf_output = time.strftime("%j %Y", self.time_tuple)
         strp_output = _strptime.strptime(strf_output, "%j %Y")
-        self.failUnless(strp_output[1] == self.time_tuple[1] and strp_output[2] == self.time_tuple[2], "gregorian() not triggered; month -- %s != %s, day -- %s != %s" % (strp_output[1], self.time_tuple[1], strp_output[2], self.time_tuple[2]))
+        self.failUnless(strp_output[1] == self.time_tuple[1] and
+                        strp_output[2] == self.time_tuple[2],
+                        "gregorian() not triggered; month -- %s != %s, "
+                         "day -- %s != %s" %
+                          (strp_output[1], self.time_tuple[1], strp_output[2],
+                           self.time_tuple[2]))
 
     def test_dayofweek_result(self):
         # Test dayofweek
-        result = _strptime.dayofweek(self.time_tuple[0], self.time_tuple[1], self.time_tuple[2])
+        result = _strptime.dayofweek(self.time_tuple[0], self.time_tuple[1],
+                                     self.time_tuple[2])
         comparison = self.time_tuple[6]
-        self.failUnless(result == comparison, "dayofweek() failed; %s != %s" % (result, comparison))
+        self.failUnless(result == comparison,
+                        "dayofweek() failed; %s != %s" % (result, comparison))
 
     def test_dayofweek_trigger(self):
         # Make sure dayofweek() gets triggered
         strf_output = time.strftime("%Y-%m-%d", self.time_tuple)
         strp_output = _strptime.strptime(strf_output, "%Y-%m-%d")
-        self.failUnless(strp_output[6] == self.time_tuple[6], "triggering of dayofweek() failed; %s != %s" % (strp_output[6], self.time_tuple[6]))
+        self.failUnless(strp_output[6] == self.time_tuple[6],
+                        "triggering of dayofweek() failed; %s != %s" %
+                         (strp_output[6], self.time_tuple[6]))
 
 
 class Strptime12AMPMTests(unittest.TestCase):
