Index: trunk/Ohana/src/opihi/cmd.data/push.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/push.c	(revision 4689)
+++ trunk/Ohana/src/opihi/cmd.data/push.c	(revision 4697)
@@ -3,8 +3,28 @@
 int push (int argc, char **argv) {
   
+  int N, Unique, Replace, Key;
   Queue *queue;
 
+  Unique = FALSE;
+  if ((N = get_argument (argc, argv, "-uniq"))) {
+    remove_argument (N, &argc, argv);
+    Unique = TRUE;
+  }
+
+  Replace = FALSE;
+  if ((N = get_argument (argc, argv, "-replace"))) {
+    remove_argument (N, &argc, argv);
+    Replace = TRUE;
+  }
+
+  Key = -1;
+  if ((N = get_argument (argc, argv, "-key"))) {
+    remove_argument (N, &argc, argv);
+    Key = atoi (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
   if (argc != 3) {
-    fprintf (stderr, "USAGE: push (queue) (value)\n");
+    fprintf (stderr, "USAGE: push (queue) (value) [-key N] [-uniq] [-replace]\n");
     return (FALSE);
   }
@@ -12,5 +32,14 @@
   /* will create a queue if none exists */
   queue = CreateQueue (argv[1]);
-  PushQueue (queue, argv[2]);
+
+  if (Unique) {
+    PushQueueUnique (queue, argv[2], Key);
+  }
+  if (Replace) {
+    PushQueueReplace (queue, argv[2], Key);
+  }
+  if (!Unique && !Replace) {
+    PushQueue (queue, argv[2]);
+  }
   return (TRUE);
 }
