diff --git a/plugins/lotus-123/lotus-types.h b/plugins/lotus-123/lotus-types.h
index dd33bba..a5af4ae 100644
--- a/plugins/lotus-123/lotus-types.h
+++ b/plugins/lotus-123/lotus-types.h
@@ -47,6 +47,7 @@
 #define LOTUS_ERRCELL                0x14
 #define LOTUS_NACELL                 0x15
 #define LOTUS_LABEL2                 0x16
+#define LOTUS_EXTENDED_FLOAT         0x17    /* wk4...  */
 #define LOTUS_SMALLNUM               0x18    /* wk3,wk4 */
 #define LOTUS_FORMULA3               0x19    /* wk3,wk4 */
 #define LOTUS_STYLE                  0x1b
diff --git a/plugins/lotus-123/lotus.c b/plugins/lotus-123/lotus.c
index 7687a7d..cbe5011 100644
--- a/plugins/lotus-123/lotus.c
+++ b/plugins/lotus-123/lotus.c
@@ -905,6 +905,21 @@ lotus_smallnum (signed int d)
 		return value_new_int (d >> 1);
 }
 
+GnmValue *
+lotus_extfloat (guint64 mant, guint16 signexp)
+{
+	int exp, sign;
+	g_printerr ("Mant %d signexp %d.\n", (int) mant, signexp);
+	exp = signexp - (signexp & 0x8000) - 16383;
+	g_printerr ("Exp %d\n", exp);
+	sign = (signexp & 0x8000) ? -1 : 1;
+	g_printerr ("Sign %d\n", sign);
+	/* FIXME: >> 32 shouldn't be here, but it makes most of the numbers right */
+	g_printerr ("Result %f\n", (gnm_float) ((mant >> 32) / (1 << (63 - exp))));
+	/* FIXME: Special values may indicate NaN, +/- inf */
+	return lotus_value((gnm_float) sign * (mant >> 32) / (1 << (63 - exp)));
+}
+
 static GnmValue *
 lotus_treal (const record_t *r, int ofs)
 {
@@ -1961,6 +1976,16 @@ lotus_read_new (LotusState *state, record_t *r)
 			break;
 		}
 
+		case LOTUS_EXTENDED_FLOAT: CHECK_RECORD_SIZE (>= 14) {
+			int row = GSF_LE_GET_GUINT16 (r->data);
+			Sheet *sheet = lotus_get_sheet (state->wb, r->data[2]);
+			int col = r->data[3];
+			GnmValue *v = lotus_extfloat (GSF_LE_GET_GUINT64 (r->data + 4),
+										  GSF_LE_GET_GUINT16 (r->data + 12));
+			(void)insert_value (state, sheet, col, row, v);
+			break;
+		}
+
 		case LOTUS_STYLE: CHECK_RECORD_SIZE (>= 2) {
 			guint16 subtype = GSF_LE_GET_GUINT16 (r->data);
 			switch (subtype) {
diff --git a/plugins/lotus-123/lotus.h b/plugins/lotus-123/lotus.h
index 4526633..3649ad0 100644
--- a/plugins/lotus-123/lotus.h
+++ b/plugins/lotus-123/lotus.h
@@ -38,6 +38,7 @@ GnmValue *lotus_new_string (gchar const *data, int def_group);
 gboolean  lotus_read	   (LotusState *state);
 GnmValue *lotus_unpack_number (guint32 u);
 GnmValue *lotus_smallnum (signed int d);
+GnmValue *lotus_extfloat (guint64 mant, guint16 signexp);
 
 void lmbcs_init (void);
 void lmbcs_shutdown (void);
