diff --git a/NEWS b/NEWS
index 290e9b6..6512864 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+0.8.4 (3/25/2012):
+------------------
+
+- REALLY fixed Ctrl+D problems! Now gdisk terminates upon receiving a
+  Ctrl+D. In all previous versions, it could lock itself into a CPU-hogging
+  loop if launched via "sudo" from a terminal window that was then closed
+  or if Ctrl+D was pressed at certain input prompts (for a partition name
+  or sector number, for instance).
+
 0.8.3 (3/23/2012):
 ------------------
 
diff --git a/basicmbr.cc b/basicmbr.cc
index fd5f30a..7483734 100644
--- a/basicmbr.cc
+++ b/basicmbr.cc
@@ -1532,7 +1532,7 @@
       cout << prompt;
       switch (ReadString()[0]) {
          case '\0':
-            goOn = !cin.eof();
+            goOn = cin.good();
             break;
          case 'a': case 'A':
             num = GetNumber(1, MAX_MBR_PARTS, 1, "Toggle active flag for partition: ") - 1;
diff --git a/cgdisk.8 b/cgdisk.8
index 1ec7480..45c51ff 100644
--- a/cgdisk.8
+++ b/cgdisk.8
@@ -1,6 +1,6 @@
 .\" Copyright 2011, 2012 Roderick W. Smith (rodsmith@rodsbooks.com)
 .\" May be distributed under the GNU General Public License
-.TH "CGDISK" "8" "0.8.3" "Roderick W. Smith" "GPT fdisk Manual"
+.TH "CGDISK" "8" "0.8.4" "Roderick W. Smith" "GPT fdisk Manual"
 .SH "NAME"
 cgdisk \- Curses-based GUID partition table (GPT) manipulator
 .SH "SYNOPSIS"
@@ -268,7 +268,7 @@
 
 .SH "BUGS"
 
-As of March 2012 (version 0.8.3), \fBcgdisk\fR should be considered
+As of March 2012 (version 0.8.4), \fBcgdisk\fR should be considered
 beta software. Although the underlying partition manipulation code is much
 older, the \fBcgdisk\fR ncurses user interface is brand new with GPT fdisk
 version 0.8.0. Known bugs and limitations include:
diff --git a/current.spec b/current.spec
index 42af3fb..643692e 100644
--- a/current.spec
+++ b/current.spec
@@ -1,11 +1,11 @@
 Summary: GPT partitioning and MBR repair software
 Name: gptfdisk
-Version: 0.8.3
+Version: 0.8.4
 Release: 1%{?dist}
 License: GPLv2
 URL: http://www.rodsbooks.com/gdisk
 Group: Applications/System
-Source: http://www.rodsbooks.com/gdisk/gptfdisk-0.8.3.tar.gz
+Source: http://www.rodsbooks.com/gdisk/gptfdisk-0.8.4.tar.gz
 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
 %description
@@ -80,5 +80,5 @@
 
 
 %changelog
-* Fri Mar 23 2012 R Smith <rodsmith@rodsbooks.com> - 0.8.3
-- Created spec file for 0.8.3 release
+* Sun Mar 25 2012 R Smith <rodsmith@rodsbooks.com> - 0.8.4
+- Created spec file for 0.8.4 release
diff --git a/diskio.h b/diskio.h
index 3102077..5947e7d 100644
--- a/diskio.h
+++ b/diskio.h
@@ -74,6 +74,6 @@
       string GetName(void) const {return realFilename;}
 
       uint64_t DiskSize(int* err);
-}; // struct GPTPart
+}; // class DiskIO
 
 #endif
diff --git a/fixparts.8 b/fixparts.8
index 5aa5328..fc25df4 100644
--- a/fixparts.8
+++ b/fixparts.8
@@ -1,6 +1,6 @@
 .\" Copyright 2011, 2012 Roderick W. Smith (rodsmith@rodsbooks.com)
 .\" May be distributed under the GNU General Public License
-.TH "FIXPARTS" "8" "0.8.3" "Roderick W. Smith" "FixParts Manual"
+.TH "FIXPARTS" "8" "0.8.4" "Roderick W. Smith" "FixParts Manual"
 .SH "NAME"
 fixparts \- MBR partition table repair utility
 .SH "SYNOPSIS"
@@ -202,7 +202,7 @@
 .PP 
 
 .SH "BUGS"
-As of March 2012 (version 0.8.3), \fBfixparts\fR
+As of March 2012 (version 0.8.4), \fBfixparts\fR
 should be considered beta software. Known bugs and limitations include:
 
 .TP 
diff --git a/gdisk.8 b/gdisk.8
index 1447af1..140a6b3 100644
--- a/gdisk.8
+++ b/gdisk.8
@@ -1,6 +1,6 @@
 .\" Copyright 2011, 2012 Roderick W. Smith (rodsmith@rodsbooks.com)
 .\" May be distributed under the GNU General Public License
-.TH "GDISK" "8" "0.8.3" "Roderick W. Smith" "GPT fdisk Manual"
+.TH "GDISK" "8" "0.8.4" "Roderick W. Smith" "GPT fdisk Manual"
 .SH "NAME"
 gdisk \- Interactive GUID partition table (GPT) manipulator
 .SH "SYNOPSIS"
@@ -561,7 +561,7 @@
 usually bypasses the prompt entirely.
 
 .SH "BUGS"
-As of March 2012 (version 0.8.3), \fBgdisk\fR
+As of March 2012 (version 0.8.4), \fBgdisk\fR
 should be considered beta software. Known bugs and limitations include:
 
 .TP 
diff --git a/gpttext.cc b/gpttext.cc
index 2f30356..506c0f1 100644
--- a/gpttext.cc
+++ b/gpttext.cc
@@ -25,6 +25,7 @@
 #include <stdint.h>
 #include <limits.h>
 #include <iostream>
+#include <fstream>
 #include <sstream>
 #include <cstdio>
 #include "attributes.h"
@@ -509,12 +510,12 @@
    int goOn = 1;
    PartType typeHelper;
    uint32_t temp1, temp2;
-   
+
    do {
       cout << "\nCommand (? for help): ";
       switch (ReadString()[0]) {
          case '\0':
-            goOn = !cin.eof();
+            goOn = cin.good();
             break;
          case 'b': case 'B':
             cout << "Enter backup filename to save: ";
@@ -610,7 +611,7 @@
       cout << "\nRecovery/transformation command (? for help): ";
       switch (ReadString()[0]) {
          case '\0':
-            goOn = !cin.eof();
+            goOn = cin.good();
             break;
          case 'b': case 'B':
             RebuildMainHeader();
@@ -736,6 +737,7 @@
       cout << "\nExpert command (? for help): ";
       switch (ReadString()[0]) {
          case '\0':
+            goOn = cin.good();
             break;
          case 'a': case 'A':
             if (GetPartRange(&temp1, &temp2) > 0)
diff --git a/sgdisk.8 b/sgdisk.8
index ac2879f..d9ae7e8 100644
--- a/sgdisk.8
+++ b/sgdisk.8
@@ -1,6 +1,6 @@
 .\" Copyright 2011, 2012 Roderick W. Smith (rodsmith@rodsbooks.com)
 .\" May be distributed under the GNU General Public License
-.TH "SGDISK" "8" "0.8.3" "Roderick W. Smith" "GPT fdisk Manual"
+.TH "SGDISK" "8" "0.8.4" "Roderick W. Smith" "GPT fdisk Manual"
 .SH "NAME"
 sgdisk \- Command\-line GUID partition table (GPT) manipulator for Linux and Unix
 .SH "SYNOPSIS"
@@ -481,11 +481,16 @@
 An error prevented saving changes
 
 .TP
+.B 5
+An error occurred while reading standard input (should never occur with
+sgdisk, but may with gdisk)
+
+.TP
 .B 8
 Disk replication operation (-R) failed
 
 .SH "BUGS"
-As of March 2012 (version 0.8.3), \fBsgdisk\fR
+As of March 2012 (version 0.8.4), \fBsgdisk\fR
 should be considered beta software. Known bugs and limitations include:
 
 .TP 
diff --git a/support.cc b/support.cc
index 0a311a6..9e1c799 100644
--- a/support.cc
+++ b/support.cc
@@ -38,8 +38,8 @@
    string inString;
 
    getline(cin, inString);
-   if (!cin)
-      cin.clear();
+   if (!cin.good())
+      exit(5);
    return inString;
 } // ReadString()
 
@@ -56,6 +56,8 @@
       do {
          cout << prompt;
          cin.getline(line, 255);
+         if (!cin.good())
+            exit(5);
          num = sscanf(line, "%d", &response);
          if (num == 1) { // user provided a response
             if ((response < low) || (response > high))
@@ -100,6 +102,8 @@
    do {
       cout << prompt;
       cin.getline(line, 255);
+      if (!cin.good())
+         exit(5);
       response = IeeeToInt(line, sSize, low, high, def);
    } while ((response < low) || (response > high));
    return response;
diff --git a/support.h b/support.h
index 934908c..cbf8c32 100644
--- a/support.h
+++ b/support.h
@@ -8,7 +8,7 @@
 #ifndef __GPTSUPPORT
 #define __GPTSUPPORT
 
-#define GPTFDISK_VERSION "0.8.3"
+#define GPTFDISK_VERSION "0.8.4"
 
 #if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__)
 // Darwin (Mac OS) & FreeBSD: disk IOCTLs are different, and there is no lseek64
