diff --git a/tools/quartus/run_term b/tools/quartus/run_term
new file mode 100755
index 0000000000000000000000000000000000000000..36fa82d85f7ffe9f3a4d2e22b0249633a1f377c5
--- /dev/null
+++ b/tools/quartus/run_term
@@ -0,0 +1,175 @@
+#!/bin/bash
+# -------------------------------------------------------------------------- #
+#
+# Copyright (C) 2010                                                        
+# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+# JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>           
+# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands                             
+#                                                                           
+# This program is free software: you can redistribute it and/or modify      
+# it under the terms of the GNU General Public License as published by      
+# the Free Software Foundation, either version 3 of the License, or         
+# (at your option) any later version.                                       
+#                                                                           
+# This program is distributed in the hope that it will be useful,           
+# but WITHOUT ANY WARRANTY; without even the implied warranty of            
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             
+# GNU General Public License for more details.                              
+#                                                                           
+# You should have received a copy of the GNU General Public License         
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.     
+#
+# -------------------------------------------------------------------------- #
+#
+# Run this tool with at least the commandline arguments:
+#   run_term toolset node_num
+# example:
+#   run_term unb1 0
+
+if [ ! $1 ]; then
+    echo "error: missing argument for toolset"
+    exit 1
+fi
+
+# read generic functions/definitions
+. ${UNB}/Firmware/software/build/generic.sh
+
+toolset=$1
+. ${RADIOHDL}/tools/quartus/set_quartus ${toolset}
+shift # shift left commandline args: $2 becomes $1 ...  ($0 is untouched)
+
+cable=
+node=
+# parse cmdline
+for arg ; do
+    case ${arg} in
+        --cable=*)           
+           cable=`echo ${arg} | sed 's/^cable=//'`
+        ;;
+    esac
+done
+
+if [ $1 ]
+then
+  node=$1
+else
+  unb_error $0 "Enter a node number [0..7] as argument"
+fi
+
+
+
+
+
+
+#Convert user passed node to actual FPGA JTAG ID
+#===============================================
+
+# ..First detect if we're using single board or multi board (rack) notation
+charcount=
+digits=
+
+# Count digits
+charcount=`echo ${node} | wc -c`
+# Assign to $digits only the first time, compare to $digits the rest of the iterations
+if [ -z "${digits}" ]; then
+  digits=${charcount}
+  if [ "${digits}" = 2 -o "${digits}" = 3 ]; then
+    # Do nothing
+    : 
+  else
+    unb_error $0 "Invalid node ID. Use [0..7] (single board) or [0..3][0..7] (multi board)"
+  fi  
+else
+  # Check if the rest of the passed nodes have the same notation    
+  if [ "${charcount}" != "${digits}" ]; then
+    unb_error $0 "Inconsistent node IDs. Use either [0..7] (single board) or [0..3][0..7] (multi board)"
+  fi
+fi  
+
+
+# Now we have a proper list of nodes. Convert it to a FPGA JTAG ID.
+fpga=
+if [ "${digits}" = 2 ]; then
+  # don't accept node id>7
+  if [ ${node} -gt 7 ]; then
+    unb_error $0 "Node ID exceeds single UniBoard range [0..7]. If desired, use a multi-board node ID [0..3][0..7]"
+  fi
+  # Append node number plus 1 to fpga list
+  fpga="$(expr ${node} + 1)"
+fi
+
+
+
+# In the UniRack, the JTAG board IDs for board 0 (JTAG ID 1..8) and board 1 (JTAG ID 9..16) are swapped.
+# This makes it use counter loops and such, so we'll just use an associative array to map 
+# the multi-board IDs to actual FPGA JTAG ID.
+match=
+if [ "${digits}" = 3 ]; then
+  declare -A node_jtag=(\
+    ["00"]="9"\
+    ["01"]="10"\
+    ["02"]="11"\
+    ["03"]="12"\
+    ["04"]="13"\
+    ["05"]="14"\
+    ["06"]="15"\
+    ["07"]="16"\
+    ["10"]="1"\
+    ["11"]="2"\
+    ["12"]="3"\
+    ["13"]="4"\
+    ["14"]="5"\
+    ["15"]="6"\
+    ["16"]="7"\
+    ["17"]="8"\
+    ["20"]="17"\
+    ["21"]="18"\
+    ["22"]="19"\
+    ["23"]="20"\
+    ["24"]="21"\
+    ["25"]="22"\
+    ["26"]="23"\
+    ["27"]="24"\
+    ["30"]="25"\
+    ["31"]="26"\
+    ["32"]="27"\
+    ["33"]="28"\
+    ["34"]="29"\
+    ["35"]="30"\
+    ["36"]="31"\
+    ["37"]="32"\
+  )
+  # uncomment the following line to print the associative array (node ID - jtag ID)
+  # for node in "${!node_jtag[@]}"; do echo "$node - ${node_jtag["$node"]}"; done
+
+  match=0
+  # Loop through our array
+  for ar_node in "${!node_jtag[@]}"; do
+    # Look for matching node ID
+    if [ ${ar_node} = ${node} ]; then
+      # Found a match! Append corresponding JTAG ID to our FPGA list.
+      fpga="${node_jtag["$node"]}"
+      match=1
+    fi
+  done    
+  # Match should be 1, otherwise user passed non-existent node ID.
+  if [ "${match}" = 0 ]; then
+    unb_error $0 "Invalid node ID. Node IDs should be passed as [0..3][0..7]"
+  fi
+
+fi
+
+if [ -z "${cable}" ]; then
+  if [ -n "${UNB_DEFAULT_CABLE+x}" ]; then
+    unb_info $0 "Opening NIOS II terminal on cable UNB_DEFAULT_CABLE"
+    unb_exec $0  nios2-terminal --device $fpga --cable=${UNB_DEFAULT_CABLE}     
+  else
+    unb_info $0 "Opening NIOS II terminal on default cable 1"
+    unb_exec $0  nios2-terminal --device $fpga --cable=1
+  fi
+else
+  unb_info $0 "Opening NIOS II terminal with argument ${cable}"
+  unb_exec $0  nios2-terminal --device $fpga ${cable}
+fi
+
+