Index: /trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c	(revision 3317)
+++ /trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c	(revision 3318)
@@ -72,4 +72,6 @@
       TWO_OP ("S","S",SS_binary);      
       TWO_OP ("W","W",WW_binary);      
+      TWO_OP ("W","S",WW_binary);      
+      TWO_OP ("S","W",WW_binary);      
       
       /*
@@ -96,5 +98,5 @@
       */
 
-      /* string op number is not valid */
+      /* string op number is not valid 
       if (!strncasecmp (&stack[i - 2].type, "W", 1) && strncasecmp (&stack[i - 1].type, "W", 1)) {
 	free (tmp_stack.name);
@@ -104,5 +106,5 @@
 	free (tmp_stack.name);
 	return (FALSE);
-      }
+      } */
 
       if (!status) {
Index: /trunk/Ohana/src/opihi/lib.shell/isolate_elements.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/isolate_elements.c	(revision 3317)
+++ /trunk/Ohana/src/opihi/lib.shell/isolate_elements.c	(revision 3318)
@@ -89,5 +89,5 @@
       /* operators */
       if (negate || minus || posate || plus || (IsAnOp (&in[i][j]) && !SciNotation)) {
-	if (posate) goto skip3;
+	if (posate) continue;
 	EndOfString ();
 	/* copy operator to out[Nout] */
@@ -100,13 +100,30 @@
 	} 
 	EndOfString ();
+	continue;
+      }
+      /* quoted string */
+      if (in[i][j] == '"') {
+	InsertValue (in[i][j]);
+	j++;
+	while ((j < strlen(in[i])) && (in[i][j] != '"')) {
+	  InsertValue (in[i][j]);
+	  j++;
+	}
+	if (in[i][j] != '"') continue;
+	/* 
+	  fprintf (stderr, "mismatched quotes\n");
+	  return (FALSE);
+	}
+	*/
+	InsertValue (in[i][j]);
+	EndOfString ();
+	continue;
+      }
+      /* not an operator, not a quoted string */
+      if (!whitespace (in[i][j])) {
+	InsertValue (in[i][j]);
       } else {
-	if (!whitespace (in[i][j])) {
-	  InsertValue (in[i][j]);
-	} else {
-	  EndOfString ();
-	}
-      }
-    skip3:
-      continue;
+	EndOfString ();
+      }
     }
     EndOfString ();
Index: /trunk/Ohana/src/opihi/lib.shell/stack_math.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/stack_math.c	(revision 3317)
+++ /trunk/Ohana/src/opihi/lib.shell/stack_math.c	(revision 3318)
@@ -1116,4 +1116,16 @@
   char line[512];
 
+  /* evaluate stack will only call WW_binary with one numerical value,
+     and only in the case that the string did not parse to a number 
+     thus: string == number -> false */
+  if (!strncasecmp (&V1[0].type, "S", 1)) {
+    value = (op[0] == 'N');
+    goto escape;
+  }
+  if (!strncasecmp (&V2[0].type, "S", 1)) {
+    value = (op[0] == 'N');
+    goto escape;
+  }
+
   switch (op[0]) { 
   case 'E': 
@@ -1124,9 +1136,10 @@
     break; 
   default:
-    sprintf (line, "error: op %c not defined!", op[0]);
+    sprintf (line, "error: op %c not defined for string operations!", op[0]);
     push_error (line);
     return (FALSE);
   }
 
+escape:
   strcpy (OUT[0].name, "tmp");
   OUT[0].Float = value;
