diff --git a/ISSUES b/ISSUES
deleted file mode 100644
--- a/ISSUES
+++ /dev/null
@@ -1,403 +0,0 @@
-ISSUES
-======
-
-Issues for sifflet and sifflet-lib
-
-This is the ISSUES file for both sifflet and sifflet-lib.
-If you are editing it, be sure you are editing the original
-and not the copies in the app and lib subdirectories.
-
-O = date opened
-R = reporter
-P = priority
-C = closed
-
-OPEN ISSUES
------------
-
-41  next issue bug number
-
-40  Duplicate arguments in "Edit Arguments"
-
-    Adding a duplicate argument in the "Edit Arguments" dialog
-    is possible (for example, two arguments named "f").
-    It should not be.
-    O: 2012 July 2
-    R: gdw
-    P: medium
-
-39  No lambda tool
-
-    There is no lambda tool, and since partial application doesn't work
-    (issue 32), this means there is no way to have a function return a function.
-    O: 2012 jul 2
-    R: gdw
-    P: medium
-
-38  Working directory
-
-    Sifflet should have some sense of its working directory, 
-    for convenience of opening and saving files
-    O: 2012 july 2
-    R: gdw
-    P: medium
-
-37  Changing helper function definition does not affect displayed function call
-
-    See f2 and testF2 in ../examples/map.sfl
-    When testF2 is called on the workspace, and you edit and chagne f2,
-    apply the new definition, the displayed call is not re-evaluated
-    using the new definition.  In fact if you use the displayed
-    testF2 frame to call again, it still uses the old definition --
-    it seems permanently bound to it.  To use the new definition
-    of f2, you have to place a new copy of testF2 on the workspace.
-
-    O: 2012 Jun 27
-    R: gdw
-    P: low
-
-36 Cascade effect of changing kind of arguments to a function.
-
-   When we change the number of type (kind) of the arguments of
-   a function, we also change the function's type (or kind); and if
-   it's used in the definitions of other functions, then they may
-   become invalid in turn -- what should be done in this case?
-   O: 2012 Jun 27
-   R: gdw
-   P: medium
-
-33  testMapSumFromZero (see ../examples/map.sfl)
-    In testMapSumFromZero n, with n = [1,2],
-    opening the sumFromZero node displays bogus error messages
-    as though it is a call to sumFromZero with n = [1,2].
-    In fact, the node has no input, so there is no call 
-    to sumFromZero until we get into map.
-    The problem doesn't occur with recursive functions.
-    It must be because the node has an inlet that expects n,
-    and finds n in the enclosing environment although it is not called.
-    O: 2012 June 22
-    R: gdw
-    P: low
-
-32  Partial application does not work
-    (e.g., calling the + function with one argument)
-    Comment: See also #39.
-    O: 2012 Jun 21
-    R: gdw
-    P: medium
-
-31  Edit function inputs: when an argument tool is selected,
-    and you change the arity of that argument, the next click
-    of the tool puts the argument down on the canvas with its
-    *old* arity; should be the new arity.
-    Comment: A work-around is to reselect the tool to get the right arity.
-    O: 2012 Jun 21
-    R: gdw
-    P: medium
-
-26 EditArgsPanel: TAB fails to move the cursor to the next field.
-   O: 2011 Jun 23
-   R: gdw
-   P: medium-high
-
-25 Nodes lose unused inlets when applying a function definition.
-   -   Suppose the f node has two inlets, but none of them are
-   used by any f nodes in the definition.  Then when you apply the
-   definition, all the f nodes lose both of their inlets.
-   On the other hand, if one f node uses none of its two inlets
-   and another uses both, then when you apply the definition,
-   both of them keep both of their inlets.
-   O: 2011 Jun 23
-   R: gdw
-   P: lowest.
-   Comment:
-      This seems not really to be a problem.  If NONE of the f nodes
-      use their inlets, then why do they have inlets, anyway?
-      Besides, it should become irrelevant when a new UI is
-      developed without the circular inlets, as in issue 24.
-   Comment: The inlets will reappear if you reopen the "inputs"
-     dialog and then click "OK".
-
-24 Arguments are shifted when applying a function definition.
-   -   If a node has 3 inlets and connections on inlets 1 and 2,
-   but not on 0, then when "apply" is clicked the connections are
-   shifted to inlets 0 and 1, leaving 2 open.
-   O: 2011 Jun 23
-   R: gdw
-   P: lowest.
-      This should become irrelevant when and if I develop a new
-      UI that does away with the circular inlets.  Why not just
-      let the user make as many connections as they please?  And
-      that would get rid of the need for a dialog that lets you
-      change the number of inlets too.
-
-23 typeToXml fails for (TypeCons Function)
-   O: 2011 Jun 23
-   R: gdw
-   P: medium
-
-22 When you connect an input to the second (or generally not first)
-   input port of a node, and leave the first "open", then click on
-   apply, the input is reconnected to the first port instead of the
-   second.
-   -- Is this actually a bug?  
-   O: 2011 Jun 2
-   R: gdw
-   P: ???
-
-14  If two frames overlap, then clicks on the top frame
-    sometimes are interpreted as clicks on the lower (hidden) frame.
-    O: 2010 aug 16
-    P: low
-
-13  If you change any of the *example* functions and quit or open,
-    Sifflet prompts you to save changes, but it does not save
-    these particular changes, since they are not in "My Functions".
-    Probably need to re-design the whole organization of examples
-    and my functions, introduce modules associated with files,
-    and show each in its own panel.
-    Opened 2010 May 27.
-    Priority: low
-
-11  When function f, which calls function g, is on the workspace,
-    and you edit g, the changes do not propagate back to f, so that
-    calling f results in calling the *old* g.
-    Example: open test-champ.siff, place two-lovely on the workspace,
-    call it with any argument, edit lovely, apply, call two-lovely
-    again.
-    Opened 2010 May 20.  
-    Priority: medium
-
-* * *
-
-CLOSED ISSUES
--------------
-
-
-1  After using the literal tool, etc., the program stops responding
-   to key presses in the workspace.
-   Opened ??
-   Closed 2009 Oct 5.
-
-2  Fix resize frame
-   Opened ??
-   Closed 2009 Oct 13.
-
-3  Quitting (q and File/quit) should actually quit!
-   Opened ??
-   Closed 2009 Oct 13.
-
-4  vpTypeOf fails for [].
-   Opened ??
-   Closed 2009 Oct 30.
-
-5  Deleting a node leaves its children orphans.
-   Opened ??
-   Closed 2009 Nov 4.
-
-6  After closing "My functions" window and re-opening it,
-   it should "remembers" the function tools that it had when closed,
-   instead of showing up as a blank window.
-   Opened ??
-   Closed 2009 Nov 11
-
-7  If function pad window is closed, then creating a 
-   new function results in a "key not found" error.
-   Opened ??
-   Closed 2010 March 1
-
-8  Opening a file twice put duplicate tools in
-   "My Functions" window (and toolkit, presumably).
-   Opened ??
-   Closed 2010 May 13
-
-9  After the dialog suggesting save changes before quitting or
-   opening a new file, the program crashes due to a bug in
-   Gtk2hs 0.10.0 and 0.10.1 (but fixed in gtk2hs darcs).
-   Opened ??
-   Closed 2010 May 20.
-
-10  Evaluating a call frame with zero arguments
-    opens an unnecessary dialog (there are not arguments,
-    so no values needed); moreover, it does not evaluate
-    the function call.
-
-15  In the test function list_of_2, evaluating [] results in
-    "error: unbound variable: []".  Ditto repeat_a_b.
-    O: 2010 aug 16
-    P: high
-    C: 2010 aug 16 -- fixed.
-
-16  Editing a function, if you enter the literal ["a", "b"],
-    the program crashes with this message:
-    sifflet-new-expr: makeFixedLiteralTool: 
-    non-empty list expression EList [EString "a",EString "b"]
-    O: 2010 aug 16
-    P: high
-    C: 2010 aug 16 -- fixed.
-
-
-17  There is an error in reading a non-empty list element from
-    a SiffML file, e.g., 
-          <literal>
-            <list>
-              <string>a</string>
-              <string>b</string>
-            </list>
-          </literal>
-    due to the fact that the children of the <list> element
-    directly represent values, not expressions, so they are
-    not read correctly (not read at all?) by xmlToExpr.
-    I think I need to use xmlToValue here, but how to connect
-    the two is not easy.
-    In the long run, it is desirable to change the XML doctype,
-    dropping the <literal> element so that strings would be
-    e.g. just <string>a</string>
-    and lists would be just e.g. 
-            <list>
-              <string>a</string>
-              <string>b</string>
-            </list>
-    O: 2010 aug 17
-    P: highest
-    C: 2010 aug 17 -- fixed.
-
-19  Closing all program windows leaves executable still running
-    but no way to kill it (Ctrl+C is a no-op).*
-    O: 2010 nov 3
-    R: Andrew Coppin andrewcoppin@btinternet.com
-    P: HIGH
-    C: 2010 dec 9 (actually fixed dec 3): closing the workspace window
-       now "safely" quits from the application.
-
-20  Amend documentation/home page to note that installation on
-    Windows without curl is now definitely feasible
-    O: 2010 nov 3
-    R: Andrew Coppin andrewcoppin@btinternet.com
-    P: medium
-    C: 2010 dec 9 (actually fixed dec 3)
-
-21  Define adds list =
-      if null list
-      then 0
-      else if head list
-           then + list 1
-           else tail (head list)
-    Call the function with list = [1]
-    Sifflet crashes with this error message:
-        evalTreeWithLimit (if): unexpected test result
-    O: 2010 dec 9
-    R: Charles Turner III (turnchan@iue.edu)
-    P: high
-    C: 2010 dec 9
-
-29  typedValue (in Parser.hs) has two conditions that result in
-    run-time errors.  For testing higher-order functions, it would
-    be good to be able to type in the name of a function in the global
-    environment, but we don't have access to the environment here,
-    do we?  Also in case of failure, it should fail with an error
-    message but not crash sifflet.
-    O: 2012 Jun 15
-    R: gdw
-    P: high
-       Crashes program.
-    C: 2012 June 21 -- fixed.
-
-30  typeToXml: program crashes when saving the map function definition,
-    with message:
-    sifflet-devel: typeToXml: TypeCons Function cannot be converted to XML.
-    Notes: 
-    1.  typeToXml is fixed, but now I also need to fix the corresponding
-        part of xmlToType so the file can be read back in.
-    2.  Maybe better still:
-        Why do we need the types in the XML file anyway, now that
-        we have type inference?
-    3.  Also revise schema/DTD for SiffML files.
-    O: 2012 Jun 21
-    R: gdw
-    P: highest - program crash
-    C: 2012 June 22, fixed.
-
-28 EditArgsPanel should change inlets for existing nodes when the arg's
-   kind is changed.
-   -   Suppose you change the number of parameters for argument f.
-       Then any existing f nodes on the drawing should have their
-       number of inlets changed correspondingly.
-       Currently this works if the number is increased, but
-       fails if it is decreased and there are now too many
-       connected children in the graph --> error in graphRenderTree.
-       Unfortunately, this is not the place where that can be fixed:
-       even if I reduce nto or nfrom in this context,
-       there are still the contexts in the connected children to
-       consider.
-  -   Also, when extra inputs are disconnected (as they should be)
-      they are sometimes also deleted from the canvas (shouldn't be).
-   O: 2011 Jun 23
-   R: gdw
-   P: highest.  Crashes program.
-   C: 2012 Jun 27, fixed.
-
-
-18  Sifflet crashes when applying a function if some connections
-    are missing.
-
-    "PS. I presume you know that you can crash the whole of Sifflet by
-    something as trivial as hitting the "apply" button when some
-    connections are missing, and that closing all of the program windows
-    leaves the executable still running but with no way to kill it. (I'm
-    not sure why Ctrl+C is no-op...)"
-    -- email from Andrew Coppin, 2010 Nov 01.
-
-    O: 2010 nov 3
-    R: Andrew Coppin andrewcoppin@btinternet.com
-    P: HIGH
-    C: 2012 Jun 27 -- unable to duplicate either part of this at this time;
-       must have been fixed earlier.  Though it might be that the
-       "no way to kill it" issue persists on MS Windows.
-
-35  vcCloseFrame does not remove the frame's subgraph from the canvas graph.
-
-    vcCloseFrame removes only the WFrame node, not the WSimple nodes
-    displayed in the frame.  It should remove all of them, otherwise
-    clutter builds up every time a function definition is applied,
-    since the apply command calls vcCloseFrame and then vcAddFrame.
-    O: 2012 Jun 27
-    R: gdw
-    P: high
-    C: 2012 Jun 27 fixed.
-
-12  Four tests fail in testall -u.
-    These seem to all involve issues of text node size
-    and are pretty minor, so maybe the tests need to be 
-    fine-tuned to allow for variations in what Cairo says
-    is the text's dimensions.
-    Opened 2010 May 24
-    Priority: medium
-    C: 2012 Jul 2, previously fixed but not closed; all unit tests now pass.
-
-34  In edit function / edit arguments: the edit window sometimes
-    does not sufficiently increase in size, 
-    so the edit arguments buttons (OK, cancel) 
-    are hidden by the edit function buttons (args, apply, inputs, close).
-    Comment: see darcs change:
-        Tue Jun  7 12:40:24 EDT 2011  gdweber@iue.edu
-          * Crude window resizing to fit as the EditArgsPanel grows
-          -   crude because it does not take into account the button bar
-              below the panel
-    Comment: duplicate of #27
-    O: 2012 June 26
-    R: gdw
-    P: top
-    C: 2012 jul 2, fixed
-
-27 EditArgsPanel: window resizing is bad.
-   -   Sometimes the window does not expand enough to show the 
-       panel's buttons.
-   -   Sometimes it shrinks back too much after the panel is closed.
-   -   Comment: lib/Graphics/UI/Sifflet/EditArgsPanel.hs
-                                        Workspace.hs : 138
-                                        
-   O: 2011 Jun 23
-   R: gdw
-   P: top
-    C: 2012 jul 2, fixed
diff --git a/sifflet.cabal b/sifflet.cabal
--- a/sifflet.cabal
+++ b/sifflet.cabal
@@ -1,5 +1,5 @@
 name: sifflet
-version: 2.0.0.0
+version: 2.1.0
 cabal-version: >= 1.8
 build-type: Simple
 license: BSD3
@@ -27,7 +27,7 @@
 -- data-dir: directory
 -- extra-tmp-files: filename list
 
-extra-source-files: README ISSUES RELEASE-NOTES
+extra-source-files: README RELEASE-NOTES
 
 flag no-link
   description: Inhibit linking; just compile.
@@ -37,18 +37,22 @@
   main-is: sifflet.hs
   other-modules: Options
   build-depends: 
-    base >= 4.0 && < 4.6,
-    -- begin GTK stuff, no longer needing exactly the same version numbers
+    base >= 4.0 && < 4.8,
+    -- begin GTK stuff, these no longer need to have the same version
+    -- numbers
     cairo >= 0.11 && < 0.13,
     glib >= 0.11 && < 0.13,
     gtk >= 0.11 && < 0.13,
     -- end
-    containers >= 0.2 && < 0.5,
+    containers >= 0.2 && < 0.7,
+    directory >= 1.0 && < 1.4,
+    filepath >= 1.1 && < 1.4,
     fgl >= 5.4 && < 5.5,
-    hxt >= 9 && < 10.0,
+    hxt >= 9.0 && < 10.0,
     mtl >= 1.1 && < 2.2,
+    parsec >= 2.1.0.1 && < 3.2, 
     process >= 1.0 && < 1.2,
-    sifflet-lib >= 2.0 && < 2.1
+    sifflet-lib >= 2.1 && < 2.2
 
   if !os(windows)
     build-depends: unix >= 2.3 && < 2.6
