diff --git a/gptpart.cc b/gptpart.cc
index 838680b..130add0 100644
--- a/gptpart.cc
+++ b/gptpart.cc
@@ -15,7 +15,7 @@
 #define __STDC_LIMIT_MACROS
 #define __STDC_CONSTANT_MACROS
 
-#ifndef _WIN32
+#ifdef USE_UTF16
 #include <unicode/ustdio.h>
 #else
 #define UnicodeString string
@@ -68,7 +68,7 @@
    return length;
 } // GPTPart::GetLengthLBA()
 
-#ifndef _WIN32
+#ifdef USE_UTF16
 // Return partition's name field, converted to a Unicode string
 UnicodeString GPTPart::GetDescription(void) {
    return (UChar*) name;
@@ -77,13 +77,13 @@
 // Return partition's name field, converted to a C++ ASCII string
 string GPTPart::GetDescription(void) {
    string theName;
-   int i;
+   int i = 0;
 
    theName = "";
-   for (i = 0; i < NAME_SIZE; i += 2) {
-      if (name[i] != '\0')
-         theName += name[i];
-   } // for
+   while ((i < NAME_SIZE) && (name[i] != '\0')) {
+      theName += name[i];
+      i+=2;
+   } // while
    return theName;
 } // GPTPart::GetDescription() (Windows version)
 #endif
@@ -103,7 +103,7 @@
    partitionType = t;
 } // GPTPart::SetType()
 
-#ifndef _WIN32
+#ifdef USE_UTF16
 // Set the name for a partition to theName, using a C++-style string as
 // input.
 void GPTPart::SetName(const string & theName) {
@@ -120,7 +120,9 @@
       theName.extractBetween(0, NAME_SIZE / 2 - 1, (UChar*) name);
    } // if/else
 } // GPTPart::SetName()
+
 #else
+
 // Set the name for a partition to theName. Note that theName is a
 // standard C++-style ASCII string, although the GUID partition definition
 // requires a UTF-16LE string. This function creates a simple-minded copy
@@ -190,7 +192,7 @@
       cout.setf(ios::uppercase);
       cout << hex << partitionType.GetHexType() << "  " << dec;
       cout.fill(' ');
-#ifndef _WIN32
+#ifdef USE_UTF16
       GetDescription().extractBetween(0, 23, description);
       cout << description << "\n";
 #else
@@ -273,13 +275,13 @@
 
    cout << "Current type is '" << GetTypeName() << "'\n";
    do {
-      cout << "Hex code or GUID (L to show codes, Enter = 0700): ";
+      cout << "Hex code or GUID (L to show codes, Enter = " << hex << DEFAULT_TYPE << dec << "): ";
       line = ReadString();
       if ((line[0] == 'L') || (line[0] == 'l')) {
          partitionType.ShowAllTypes();
       } else {
          if (line.length() == 0)
-            tempType = 0x0700;
+            tempType= DEFAULT_TYPE;
          else
             tempType = line;
       } // if/else
