factored out AppendageNode