diff --git a/src/lib/salad/rope.c b/src/lib/salad/rope.c
index e5d720e3855a380a1decee68afeb200b0f28898f..deb553ff442f5b722d95014764660c5c46c27db9 100644
--- a/src/lib/salad/rope.c
+++ b/src/lib/salad/rope.c
@@ -71,7 +71,7 @@ rope_relink(struct rope_node *node)
 }
 
 static inline struct rope_node *
-rope_node_new(struct rope *rope, void *data, rsize_t size)
+rope_node_new(struct rope *rope, void *data, rope_size_t size)
 {
 	struct rope_node *node =
 		(struct rope_node *) rope->alloc(rope->alloc_ctx,
@@ -112,9 +112,9 @@ rope_clear(struct rope *rope)
 }
 
 static struct rope_node *
-rope_node_split(struct rope *rope, struct rope_node *node, rsize_t offset)
+rope_node_split(struct rope *rope, struct rope_node *node, rope_size_t offset)
 {
-	rsize_t old_size = node->leaf_size;
+	rope_size_t old_size = node->leaf_size;
 	node->leaf_size = offset;
 
 	void *data = rope->split(rope->split_ctx, node->data, old_size, offset);
@@ -260,16 +260,16 @@ avl_rebalance_after_delete(struct rope_node ***path,
  * @return the end of the route.
  */
 static inline struct rope_node ***
-avl_route_to_offset(struct rope_node ***path, rsize_t *p_offset,
+avl_route_to_offset(struct rope_node ***path, rope_size_t *p_offset,
 		    ssize_t adjust_size)
 {
-	rsize_t offset = *p_offset;
+	rope_size_t offset = *p_offset;
 	while (**path) {
 		struct rope_node *node = **path;
 
 		node->tree_size += adjust_size;
 
-		rsize_t left_size = rope_node_size(node->link[0]);
+		rope_size_t left_size = rope_node_size(node->link[0]);
 
 		if (offset < left_size) {
 			/* The offset lays in  the left subtree. */
@@ -301,7 +301,7 @@ avl_route_to_offset(struct rope_node ***path, rsize_t *p_offset,
  * (previous node) or leftmost leaf of the right child.
  */
 static inline struct rope_node ***
-avl_route_to_next(struct rope_node ***path, int dir, rssize_t adjust_size)
+avl_route_to_next(struct rope_node ***path, int dir, rope_ssize_t adjust_size)
 {
 	struct rope_node *node = **path;
 	*++path = &node->link[dir];
@@ -334,7 +334,7 @@ avl_route_to_next(struct rope_node ***path, int dir, rssize_t adjust_size)
  * heights and sizes of all modified nodes.
  */
 int
-rope_insert(struct rope *rope, rsize_t offset, void *data, rsize_t size)
+rope_insert(struct rope *rope, rope_size_t offset, void *data, rope_size_t size)
 {
 	if (offset > rope_size(rope))
 		offset = rope_size(rope);
@@ -380,7 +380,7 @@ rope_insert(struct rope *rope, rsize_t offset, void *data, rsize_t size)
 
 /** Make sure there is a rope node at the given offset. */
 struct rope_node *
-rope_extract_node(struct rope *rope, rsize_t offset)
+rope_extract_node(struct rope *rope, rope_size_t offset)
 {
 	assert(offset < rope_size(rope));
 
@@ -419,7 +419,7 @@ rope_extract_node(struct rope *rope, rsize_t offset)
  * from rope_insert().
  */
 int
-rope_erase(struct rope *rope, rsize_t offset)
+rope_erase(struct rope *rope, rope_size_t offset)
 {
 	assert(offset < rope_size(rope));
 
@@ -439,7 +439,7 @@ rope_erase(struct rope *rope, rsize_t offset)
 			node->leaf_size -= 1;
 			return 0;
 		}
-		rsize_t size = node->leaf_size;
+		rope_size_t size = node->leaf_size;
 		/* Cut the tail */
 		void *next = rope->split(rope->split_ctx, node->data,
 					 node->leaf_size, offset);
@@ -622,7 +622,7 @@ rope_node_print(struct rope_node *node,
 
 	const char *padding[] = { "│   ", "   " };
 
-	rsize_t child_prefix_len = strlen(prefix) + strlen(padding[0]) + 1;
+	rope_size_t child_prefix_len = strlen(prefix) + strlen(padding[0]) + 1;
 	char *child_prefix = malloc(child_prefix_len);
 
 	if (node && (node->link[0] || node->link[1])) {
diff --git a/src/lib/salad/rope.h b/src/lib/salad/rope.h
index d4418c588edcf50dc22b31134e290b195caaf4db..8908d074d8c8d5e0ad992ca31984484630b9d592 100644
--- a/src/lib/salad/rope.h
+++ b/src/lib/salad/rope.h
@@ -28,6 +28,7 @@
  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
+#include <stdint.h>
 #include <stddef.h>
 #include <stdbool.h>
 
@@ -35,8 +36,8 @@
 extern "C" {
 #endif /* defined(__cplusplus) */
 
-typedef unsigned int rsize_t;
-typedef int rssize_t;
+typedef uint32_t rope_size_t;
+typedef int32_t rope_ssize_t;
 typedef void *(*rope_split_func)(void *, void *, size_t, size_t);
 typedef void *(*rope_alloc_func)(void *, size_t);
 typedef void (*rope_free_func)(void *, void *);
@@ -48,9 +49,9 @@ struct rope_node {
 	/** Node height, see rope_node_height(), used for AVL balance. */
 	int height;
 	/** Subtree size. */
-	rsize_t tree_size;
+	rope_size_t tree_size;
 	/* Substring size. */
-	rsize_t leaf_size;
+	rope_size_t leaf_size;
 	/* Substring. */
 	void *data;
 	/* Left (0) and right (1) links */
@@ -81,13 +82,13 @@ struct rope_iter {
 	struct rope_node *path[ROPE_HEIGHT_MAX];
 };
 
-static inline rsize_t
+static inline rope_size_t
 rope_node_size(struct rope_node *node)
 {
 	return node ? node->tree_size : 0;
 }
 
-static inline rsize_t
+static inline rope_size_t
 rope_leaf_size(struct rope_node *node)
 {
 	return node->leaf_size;
@@ -99,7 +100,7 @@ rope_leaf_data(struct rope_node *node)
 	return node->data;
 }
 
-static inline rsize_t
+static inline rope_size_t
 rope_size(struct rope *rope)
 {
 	return rope_node_size(rope->root);
@@ -171,8 +172,8 @@ rope_delete(struct rope *rope)
  *             tree node
  */
 int
-rope_insert(struct rope *rope, rsize_t offset, void *data,
-	    rsize_t size);
+rope_insert(struct rope *rope, rope_size_t offset, void *data,
+	    rope_size_t size);
 
 /** Append a substring at rope tail. */
 static inline int
@@ -189,10 +190,10 @@ rope_append(struct rope *rope, void *data, size_t size)
  *              tree node
  */
 struct rope_node *
-rope_extract_node(struct rope *rope, rsize_t offset);
+rope_extract_node(struct rope *rope, rope_size_t offset);
 
 static inline void *
-rope_extract(struct rope *rope, rsize_t offset)
+rope_extract(struct rope *rope, rope_size_t offset)
 {
 	return rope_leaf_data(rope_extract_node(rope, offset));
 }
@@ -204,7 +205,7 @@ rope_extract(struct rope *rope, rsize_t offset)
  * @pre offset < rope_size(rope)
  */
 int
-rope_erase(struct rope *rope, rsize_t offset);
+rope_erase(struct rope *rope, rope_size_t offset);
 
 /** Initialize an iterator. */
 static inline void
diff --git a/test/unit/rope.c b/test/unit/rope.c
index 029aedc863571b6c378166ccb9ee103de9f9b871..e19dcaa1097b4c5fd792c601d6777050eeb5842d 100644
--- a/test/unit/rope.c
+++ b/test/unit/rope.c
@@ -3,7 +3,7 @@
 #include "rope_common.h"
 
 static void
-test_rope_extract(struct rope *rope, rsize_t pos)
+test_rope_extract(struct rope *rope, rope_size_t pos)
 {
 	printf("extract pos = %zu: ", (size_t) pos);
 	struct rope_node *node = rope_extract_node(rope, pos);
@@ -13,7 +13,7 @@ test_rope_extract(struct rope *rope, rsize_t pos)
 }
 
 static inline void
-test_rope_cut(struct rope *rope, rsize_t offset, rsize_t size)
+test_rope_cut(struct rope *rope, rope_size_t offset, rope_size_t size)
 {
 	printf("erase offset = %zu, size = %zu \n", (size_t) offset, (size_t) size);
 	while (size-- > 0)
diff --git a/test/unit/rope_common.h b/test/unit/rope_common.h
index 7a2fd751cb7e09f3264ffcba05671cda8d02327d..6c52153b2e3a406bdd6fcfde32c0f88d38ac66b2 100644
--- a/test/unit/rope_common.h
+++ b/test/unit/rope_common.h
@@ -37,7 +37,7 @@ test_rope_new()
 }
 
 static inline void
-test_rope_insert(struct rope *rope, rsize_t offset, char *str)
+test_rope_insert(struct rope *rope, rope_size_t offset, char *str)
 {
 	printf("insert offset = %zu, str = '%s'\n", (size_t) offset, str);
 	rope_insert(rope, offset, str, strlen(str));
@@ -46,7 +46,7 @@ test_rope_insert(struct rope *rope, rsize_t offset, char *str)
 }
 
 static inline void
-test_rope_erase(struct rope *rope, rsize_t offset)
+test_rope_erase(struct rope *rope, rope_size_t offset)
 {
 	printf("erase offset = %zu\n", (size_t) offset);
 	rope_erase(rope, offset);
diff --git a/test/unit/rope_stress.c b/test/unit/rope_stress.c
index 35c43a7a7cb15e65af36ec4cdb9db1ad484a40b5..dc3f2817e21a24ce28edfe4b75dd53ce4ab97897 100644
--- a/test/unit/rope_stress.c
+++ b/test/unit/rope_stress.c
@@ -14,15 +14,15 @@ test_rope_stress_small()
 	const int iterations = 500;
 	int i = 0;
 	for (i = 0; i < iterations; ++i) {
-		char *d = data[((rsize_t) rand())%5];
+		char *d = data[((rope_size_t) rand())%5];
 		int len = strlen(d);
-		rsize_t size = rope_size(rope);
-		rsize_t offset = ((rsize_t) rand()) % (size + 1);
+		rope_size_t size = rope_size(rope);
+		rope_size_t offset = ((rope_size_t) rand()) % (size + 1);
 		rope_insert(rope, offset, d, len);
 		fail_unless(size + len == rope_size(rope));
 		rope_check(rope);
 		size = rope_size(rope);
-		offset = ((rsize_t) rand()) % size;
+		offset = ((rope_size_t) rand()) % size;
 		if (offset == size)
 			offset--;
 		rope_erase(rope, offset);
@@ -43,14 +43,14 @@ test_rope_stress_large()
 	const int iterations = 50000;
 	int i = 0;
 	for (i = 0; i < iterations; ++i) {
-		char *d = data[((rsize_t) rand())%5];
+		char *d = data[((rope_size_t) rand())%5];
 		int len = strlen(d);
-		rsize_t size = rope_size(rope);
-		rsize_t offset = ((rsize_t) rand()) % (size + 1);
+		rope_size_t size = rope_size(rope);
+		rope_size_t offset = ((rope_size_t) rand()) % (size + 1);
 		rope_insert(rope, offset, d, len);
 		fail_unless(size + len == rope_size(rope));
 		size = rope_size(rope);
-		offset = ((rsize_t) rand()) % size;
+		offset = ((rope_size_t) rand()) % size;
 		if (offset == size)
 			offset--;
 		rope_erase(rope, offset);