diff --git a/crm/admin/cluster.py b/crm/admin/cluster.py
deleted file mode 100644
index dca1a2fe11..0000000000
--- a/crm/admin/cluster.py
+++ /dev/null
@@ -1,364 +0,0 @@
-#!/bin/env python
-#
-#	$Id: cluster.py,v 1.3 2006/08/14 15:54:05 andrew Exp $
-#
-#	pingd OCF Resource Agent
-#	Records (in the CIB) the current number of ping nodes a 
-#	   cluster node can connect to.
-#
-# Copyright (c) 2006 Andrew Beekhof
-#                    All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of version 2 of the GNU General Public License as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it would be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Further, this software is distributed without any warranty that it is
-# free of the rightful claim of any third person regarding infringement
-# or the like.  Any license provided herein, whether implied or
-# otherwise, applies only to this software file.  Patent licenses, if
-# any, provided herein do not apply to combinations of this program with
-# other software, or any other product whatsoever.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-#
-#######################################################################
-
-import os
-import sys
-import readline
-import traceback
-from popen2 import Popen3
-
-# Module copied from Mercurial
-import crm_utils as utl
-import crm_commands as crm 
-
-class ParseError(Exception):
-    """Exception raised on errors in parsing the command line."""
-class QuotingError(Exception):
-    """Exception raised on errors in parsing the command line."""
-class UnknownCommand(Exception):
-    """Exception raised if command is not in the command table."""
-class AmbiguousCommand(Exception):
-    """Exception raised if command shortcut matches more than one command."""
-
-table = {
-    "^help": (
-	crm.help, None, [('v', 'verbose', None, 'extra information')],
-	"[-v]"),
-    "^up":        (crm.up, None, [], None, "Move up a level in the heirarchy"),
-    "^crm":       (crm.cd_, ["crm"], [], None),
-    "^nodes":     (crm.cd_, ["crm"], [], None),
-    "^resources": (crm.cd_, ["crm"], [], None),
-    "^config":    (crm.cd_, ["crm"], [], None),
-    "^list": (
-	crm.do_list, ["nodes", "resources"], [('t', 'topic', "", '')],
-	None),
-    "^status": (
-	crm.do_status, ["nodes", "resources"], [],
-	"[list of objects]"),
-    "^debug": (crm.toggle_flag, None, [('f', 'flag', 'debug', '')], None, "Toggle debugging information"),
-    "^exit": (crm.exit, None, [], "exit"),
-    "^debugstate": (
-	crm.debugstate, None, [], 
-	None,
-	"Dump information about the internal state of the program"),
-    }
-
-global_opt_table = [
-    ('q', 'quiet', None, 'suppress output'),
-    ('v', 'verbose', None, 'enable additional output'),
-    ('', 'debug', None, 'enable debugging output'),
-    ('', 'devlog', None, 'enable developmental debugging output'),
-    ('', 'debugger', None, 'start debugger'),
-    ('', 'lsprof', None, 'print improved command execution profile'),
-    ('', 'traceback', None, 'print traceback on exception'),
-    ('', 'time', None, 'time how long the command takes'),
-    ('', 'profile', None, 'print command execution profile'),
-    ('', 'version', None, 'output version information and exit'),
-    ('i', 'interactive', None, 'run in interactive mode'),
-    ('h', 'help', None, 'display help and exit'),
-    ]
-
-def help_(text):
-    utl.log_dev("Looking up help text for: %s" % text)
-    if text == "short":
-	utl.log_info("cluster.py [global options] [topic [topic...]] [command]")
-	return
-    if text:
-	choice = findpossible(text, None, False)
-	for key in choice.keys():
-	    alias, e = choice[key]
-	    text = alias[0]
-	    utl.log_dev("Help text for: %s" % text)
-	    if e:
-		sub_cmd=""
-		if len(e) > 4:
-		    utl.log_info("\n"+e[4]+"\n")
-		possible = findpossible("", text).keys()
-		utl.log_dev("Possible sub-commands: "+repr(possible))
-		possible.remove("up")
-		possible.remove("help")
-		possible.remove("exit")
-		if text in possible:
-		    possible.remove(text)
-		if possible:
-			sub_cmd=' ('+'|'.join(possible)+')'
-		if e[3]:
-		    utl.log_info("Usage: %s %s%s" % (text, e[3], sub_cmd))
-		else:
-		    utl.log_info("Usage: %s%s" % (text, sub_cmd))
-	if choice:
-	    return;
-    utl.log_err("No help text available for: %s" % text)
-
-
-# Stolen from Mercurial commands.py
-
-def findpossible(cmd, topic=None, filter=True):
-    """
-    Return cmd -> (aliases, command table entry)
-    for each matching command.
-    Return debug commands (or their aliases) only if no normal command matches.
-    """
-    if not topic:
-	topic = utl.crm_topic
-	utl.log_dev("Searching in default topic: %s" % topic)
-	
-    utl.log_dev("Looking for completions of %s in %s" % (cmd, topic))
-    choice = {}
-    debugchoice = {}
-    topicchoice = {}
-    for e in table.keys():
-	t = table[e]
-	#utl.log_dev("Processing: %s / %s" % (e, repr(t)))
-	aliases = e.lstrip("^").split("|")
-	found = None
-	if "^%s"%topic == e and t[0] == crm.cd_:
-	    #utl.log_dev("Found: topic")
-	    topicchoice[topic] = (aliases, table[e])
-	if filter and t[1] and topic not in t[1]:
-	    #utl.log_dev("Skip: filter")
-	    continue
-	elif cmd in aliases:
-	    #utl.log_dev("Found: alias")
-	    found = cmd
-	else:
-	    for a in aliases:
-		if a.startswith(cmd):
-		    #utl.log_dev("Found: alias prefix")
-		    found = a
-		    break
-        if found is not None:
-            if aliases[0].startswith("debug"):
-                debugchoice[found] = (aliases, table[e])
-            else:
-                choice[found] = (aliases, table[e])
-
-    if not choice and debugchoice:
-        choice = debugchoice
-
-    if not choice and topicchoice:
-        choice = topicchoice
-
-    return choice
-
-def findcmd(cmd):
-    """Return (aliases, command table entry) for command string."""
-    choice = findpossible(cmd)
-
-    if choice.has_key(cmd):
-	#utl.log_dev("Choice has: %s" % cmd)
-        return choice[cmd]
-
-    if len(choice) > 1:
-        clist = choice.keys()
-        clist.sort()
-        raise AmbiguousCommand(cmd, clist)
-
-    if choice:
-	#utl.log_dev("Returning first: %s" % (repr(choice.values()[0])))
-        return choice.values()[0]
-
-    raise UnknownCommand(cmd)
-
-def find_completer(start, i):
-    choice = findpossible(start)
-    if not choice:
-	return None
-    elif len(choice.keys()) < i:
-	return None
-    return choice.keys()[i]
-
-def parse(args):
-    options = {}
-    cmdoptions = {}
-    
-    try:
-	args = utl.fancyopts(args, global_opt_table, options)
-    except utl.getopt.GetoptError, inst:
-	raise ParseError(None, inst)
-
-    if args:
-	cmd, args = args[0], args[1:]
-	utl.log_dev("Initial Command: %s" % cmd)
-	aliases, i = findcmd(cmd)
-	cmd = aliases[0]
-	utl.log_dev("Found Command: %s" % cmd)
-	defaults = []
-	if defaults:
-	    args = defaults.split() + args
-	c = list(i[2])
-    else:
-	cmd = None
-	c = []
-
-    # combine global options into local
-    for o in global_opt_table:
-	c.append((o[0], o[1], options[o[1]], o[3]))
-	
-    try:
-	args = utl.fancyopts(args, c, cmdoptions)
-    except utl.getopt.GetoptError, inst:
-	raise ParseError(cmd, inst)
-
-    # separate global options back out
-    for o in global_opt_table:
-	n = o[1]
-	options[n] = cmdoptions[n]
-	del cmdoptions[n]
-
-    utl.log_dev("args: %s\ncmdoptions: %s" 
-	      % (repr(args), repr(cmdoptions)))
-    return (cmd, cmd and i[0] or None, args, options, cmdoptions)
-
-def main_loop(args):
-    cmd = None
-    if not args:
-	return 0
-
-    try:
-	cmd, func, cmd_args, ignore, cmd_options = parse(args)
-
-	if func == crm.cd_:
-	    cmd_options["topic"] = cmd
-
-	utl.log_dev("Func Command: %s" % cmd)
-	utl.log_dev("Func Args: %s" % repr(cmd_args))
-	utl.log_dev("Func Opts: %s" % repr(cmd_options))
-	    
-	if not cmd:
-	    utl.log_dev(repr(args))
-	    return 0
-	d = lambda: func(*cmd_args, **cmd_options)
-	return d()
-
-    except crm.HelpRequest, inst:
-	help_(inst.args[0])
-	return 0
-
-    except crm.ReparseRequest:
-	return main_loop(cmd_args)
-
-    except ParseError, inst:
-	if inst.args[0]:
-	    utl.log_err("%s: %s\n" % (inst.args[0], inst.args[1]))
-	    help_(inst.args[0])
-	else:
-	    utl.log_err("%s\n" % inst.args[1])
-	    help_('short')
-
-    except AmbiguousCommand, inst:
-	utl.log_info("%s: command '%s' is ambiguous:\n    %s\n" 
-		 % (" ".join(utl.topic_stack), inst.args[0], " ".join(inst.args[1])))
-
-    except UnknownCommand, inst:
-	utl.log_err("%s: unknown command '%s'\n" % (" ".join(utl.topic_stack), inst.args[0]))
-	help_(utl.crm_topic)
-
-    except IOError, inst:
-	if hasattr(inst, "code"):
-	    utl.log_err("abort: %s\n" % inst)
-	elif hasattr(inst, "reason"):
-	    utl.log_err("abort: error: %s\n" % inst.reason[1])
-	elif hasattr(inst, "args"):
-	    utl.log_err("broken pipe\n")
-	elif getattr(inst, "strerror", None):
-	    if getattr(inst, "filename", None):
-		utl.log_err("abort: %s - %s\n" % (inst.strerror, inst.filename))
-	    else:
-		utl.log_err("abort: %s\n" % inst.strerror)
-	else:
-	    raise
-    except OSError, inst:
-	if hasattr(inst, "filename"):
-	    utl.log_err("abort: %s: %s\n" % (inst.strerror, inst.filename))
-	else:
-	    utl.log_err("abort: %s\n" % inst.strerror)
-	    
-    except TypeError, inst:
-	# was this an argument error?
-	tb = traceback.extract_tb(sys.exc_info()[2])
-	if len(tb) > 2: # no
-	    raise
-	utl.log_err((inst, "\n"))
-	utl.log_err(("%s: invalid arguments\n" % cmd))
-	help_(cmd)
-	raise
-    except SystemExit, inst:
-	# Exit gracefully 
-	utl.exit_(inst.code)
-
-    except:
-	utl.log_err("** unknown exception encountered, details follow\n")
-	raise
-	
-    return -1
-
-args = sys.argv[1:]
-utl.init_readline(find_completer)
-try:
-    cmd, f_ignore, a_ignore, utl.global_opts, o_ignore = parse(args)
-except:
-    pass
-
-if len(sys.argv) == 1:
-    utl.global_opts["interactive"] = 1
-elif not utl.global_opts.has_key("interactive"):
-    utl.global_opts["interactive"] = 0
-
-while True:
-    rc = 0
-    if args:
-	utl.set_topic(utl.topic_stack[-1])
-	rc = main_loop(args)
-	utl.log_debug("rc: %s" % (repr(rc)))
-
-    if not utl.global_opts["interactive"]:
-	utl.exit_(rc)
-
-    try:
-	text = raw_input(" ".join(utl.topic_stack) +" # ")
-	args = utl.create_argv(text)
-
-    except QuotingError, inst:
-        if inst.args[1]:
-            utl.log_err("%s.  Found tokens: %s\n" % (inst.args[0], inst.args[1]))
-        else:
-            utl.log_err("%s\n" % inst.args[0])
-
-    except KeyboardInterrupt:
-        pass
-
-    except EOFError:
-        utl.exit_(0)
-
-
-
diff --git a/crm/admin/crm_commands.py b/crm/admin/crm_commands.py
deleted file mode 100644
index 4190e01d43..0000000000
--- a/crm/admin/crm_commands.py
+++ /dev/null
@@ -1,133 +0,0 @@
-#
-#	$Id: crm_commands.py,v 1.2 2006/08/14 15:54:05 andrew Exp $
-#
-#	pingd OCF Resource Agent
-#	Records (in the CIB) the current number of ping nodes a 
-#	   cluster node can connect to.
-#
-# Copyright (c) 2006 Andrew Beekhof
-#                    All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of version 2 of the GNU General Public License as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it would be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Further, this software is distributed without any warranty that it is
-# free of the rightful claim of any third person regarding infringement
-# or the like.  Any license provided herein, whether implied or
-# otherwise, applies only to this software file.  Patent licenses, if
-# any, provided herein do not apply to combinations of this program with
-# other software, or any other product whatsoever.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-#
-#######################################################################
-
-import crm_utils as utl
-
-class HelpRequest(Exception):
-    """Exception raised when a help listing is required."""
-
-class ReparseRequest(Exception):
-    """Exception raised when a command changed the command-line."""
-
-def up(*args, **cmdoptions):
-    l = len(utl.topic_stack)
-    if l > 1:
-	utl.topic_stack.pop()
-	utl.set_topic(utl.topic_stack[-1])
-    else:
-	utl.log_debug("Already at the top of the stack")
-
-def toggle_flag(*args, **cmdoptions):
-    flag = cmdoptions["flag"]
-    if utl.global_opts[flag]:
-	utl.global_opts[flag] = 0
-    else:
-	utl.global_opts[flag] = 1
-
-    return utl.global_opts[flag]
-
-def cd_(*args, **cmdoptions):
-    utl.log_dev("args: %s\nopts: %s" % (repr(args), repr(cmdoptions)))
-    if not cmdoptions["topic"]:
-	utl.log_err("No topic specified")
-	return 1
-
-    if cmdoptions["topic"]:
-	utl.set_topic(cmdoptions["topic"])
-    if args:
-	raise ReparseRequest()
-    if utl.crm_topic not in utl.topic_stack:
-	utl.topic_stack.append(cmdoptions["topic"])
-    if not utl.global_opts["interactive"]:
-	help(cmdoptions["topic"])
-    return 0
-
-def exit(*args, **cmdoptions):
-    sys.exit(0)
-
-def help(*args, **cmdoptions):
-    if args:
-	raise HelpRequest(args[0])
-    raise HelpRequest(utl.crm_topic)
-
-def debugstate(*args, **cmdoptions):
-    utl.log_info("Global Options: ")
-    for opt in utl.global_opts.keys():
-	utl.log_info(" * %s:\t%s" % (opt, utl.global_opts[opt]))
-    utl.log_info("Stack: "+repr(utl.topic_stack))
-    utl.log_info("Stack Head: "+utl.crm_topic)
-    return 0
-
-def do_list(*args, **cmdoptions):
-    topic = utl.crm_topic
-    if cmdoptions.has_key("topic") and cmdoptions["topic"]:
-	topic = cmdoptions["topic"]
-
-    utl.log_debug("Complete '%s' listing" % topic)
-    if topic == "resources":
-	utl.os_system("crm_resource -l", True)
-    elif topic == "nodes":
-	lines = utl.os_system("cibadmin -Q -o nodes", False)
-	for line in lines:
-	    if line.find("node ") >= 0:
-		print line.rstrip()
-    else:
-	utl.log_err("%s: Topic %s is not (yet) supported" % ("list", topic))
-	return 1
-    return 0
-
-def do_status(*args, **cmdoptions):
-    topic = utl.crm_topic
-    if cmdoptions.has_key("topic") and cmdoptions["topic"]:
-	topic = cmdoptions["topic"]
-
-    if topic == "resources":
-	if not args:
-	    utl.os_system("crm_resource -L", True)
-	for rsc in args:
-	    utl.os_system("crm_resource -W -r %s"%rsc, True)
-
-    elif topic == "nodes":
-	lines = utl.os_system("cibadmin -Q -o status", False)
-	for line in lines:
-	    line = line.rstrip()
-	    utl.log_dev("status line: "+line)
-	    if line.find("node_state ") >= 0:
-		if not args:
-		    print line 
-		for node in args:
-		    if line.find(node) >= 0:
-			print line
-    else:
-	utl.log_err("Topic %s is not (yet) supported" % topic)
-	return 1
-
-    return 0
diff --git a/crm/admin/crm_utils.py b/crm/admin/crm_utils.py
deleted file mode 100644
index c1d6b3ed8f..0000000000
--- a/crm/admin/crm_utils.py
+++ /dev/null
@@ -1,189 +0,0 @@
-#!/bin/env python
-#
-#	$Id: crm_utils.py,v 1.1 2006/08/14 08:37:54 andrew Exp $
-#
-#	pingd OCF Resource Agent
-#	Records (in the CIB) the current number of ping nodes a 
-#	   cluster node can connect to.
-#
-# Copyright (c) 2006 Andrew Beekhof
-#                    All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of version 2 of the GNU General Public License as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it would be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Further, this software is distributed without any warranty that it is
-# free of the rightful claim of any third person regarding infringement
-# or the like.  Any license provided herein, whether implied or
-# otherwise, applies only to this software file.  Patent licenses, if
-# any, provided herein do not apply to combinations of this program with
-# other software, or any other product whatsoever.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-#
-#######################################################################
-
-import os
-import sys
-import getopt
-import readline
-import traceback
-from popen2 import Popen3
-
-crm_topic = "crm"
-topic_stack = [ crm_topic ]
-hist_file  = os.environ.get('HOME')+"/.crm_history"
-global_opts = {}
-
-def exit_(code=0):
-    if global_opts["interactive"]:
-	log_info("Exiting... ")
-    try:
-	readline.write_history_file(hist_file)
-	log_debug("Wrote history to: "+hist_file)
-    except:
-	log_debug("Couldnt write history to: "+hist_file)
-    sys.exit(code)
-
-def log_debug(log):
-    if global_opts.has_key("debug") and global_opts["debug"]:
-	print log
-
-def log_dev(log):
-    if global_opts.has_key("devlog") and global_opts["devlog"]:
-	print log
-
-def log_info(log):
-    print log
-
-def log_err(log):
-    print "ERROR: "+log
-
-def set_topic(name):
-    global crm_topic
-    if crm_topic != name:
-    	log_dev("topic: %s->%s" % (crm_topic, name))
-    crm_topic = name
-
-def os_system(cmd, print_raw=False):
-    log_debug("Performing command: "+cmd)
-    p = Popen3(cmd, None)
-    p.tochild.close()
-    result = p.fromchild.readlines()
-    p.fromchild.close()
-    p.wait()
-    if print_raw:
-	for line in result:
-	    print line.rstrip()
-    return result
-
-#
-#  Creates an argv-style array (that preserves quoting) for use in shell-mode
-#
-def create_argv(text):
-    args = []
-    word = []
-    index = 0
-    total = len(text)
-    
-    in_word = False
-    in_verbatum = False
-    
-    while index < total:
-	finish_word = False
-	append_word = False
-	#log_debug("processing: "+text[index])
-	if text[index] == '\\':
-	    index = index +1
-	    append_word = True
-	    
-	elif text[index].isspace():
-	    if in_verbatum or in_word:
-		append_word = True
-	    else:
-		finish_word = True
-		
-	elif text[index] == '"':
-	    if in_verbatum:
-		append_word = True
-	    else:
-		finish_word = True
-		if in_word:
-		    in_word = False
-		else:
-		    in_word = True
-		    
-	elif text[index] == '\'':
-	    finish_word = True
-	    if in_verbatum:
-		in_verbatum = False
-	    else:
-		in_verbatum = True
-	else:
-	    append_word = True
-
-	if finish_word:
-	    if word:
-		args.append(''.join(word))
-		word = []
-	elif append_word:
-	    word.append(text[index])
-	    #log_debug("Added %s to word: %s" % (text[index], str(word)))
-	
-	index = index +1
-
-    if in_verbatum or in_word:
-	text=""
-	if word:
-	    text=" after: '%s'"%''.join(word)
-	    raise QuotingError("Un-matched quoting%s"%text, args)
-	
-    elif word:
-	args.append(''.join(word))
-
-    return args
-	  
-def init_readline(func):
-    readline.set_completer(func)
-    readline.parse_and_bind("tab: complete")
-    readline.set_history_length(100)
-    
-    try:
-	readline.read_history_file(hist_file)
-    except:
-	pass
-	    
-def fancyopts(args, options, state):
-    long = []
-    short = ''
-    map = {}
-    dt = {}
-
-    for s, l, d, c in options:
-        pl = l.replace('-', '_')
-        map['-'+s] = map['--'+l] = pl
-        state[pl] = d
-        dt[pl] = type(d)
-        if not d is None and not callable(d):
-            if s: s += ':'
-            if l: l += '='
-        if s: short = short + s
-        if l: long.append(l)
-
-    opts, args = getopt.getopt(args, short, long)
-
-    for opt, arg in opts:
-        if dt[map[opt]] is type(fancyopts): state[map[opt]](state,map[opt],arg)
-        elif dt[map[opt]] is type(1): state[map[opt]] = int(arg)
-        elif dt[map[opt]] is type(''): state[map[opt]] = arg
-        elif dt[map[opt]] is type([]): state[map[opt]].append(arg)
-        elif dt[map[opt]] is type(None): state[map[opt]] = 1
-
-    return args